diff options
| -rw-r--r-- | keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java | 27 | ||||
| -rw-r--r-- | keystore/java/android/security/keystore2/AndroidKeyStoreProvider.java | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java index 31dd10a8ed53..e7961c94928c 100644 --- a/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java +++ b/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java @@ -108,6 +108,16 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato } } + /** + * XDH represents Curve 25519 providers. + */ + public static class XDH extends AndroidKeyStoreKeyPairGeneratorSpi { + // XDH is treated as EC. + public XDH() { + super(KeymasterDefs.KM_ALGORITHM_EC); + } + } + /* * These must be kept in sync with system/security/keystore/defaults.h */ @@ -242,6 +252,23 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato } catch (NullPointerException | IllegalArgumentException e) { throw new InvalidAlgorithmParameterException(e); } + } else if (params instanceof NamedParameterSpec) { + NamedParameterSpec namedSpec = (NamedParameterSpec) params; + // Android Keystore cannot support initialization from a NamedParameterSpec + // because an alias for the key is needed (a KeyGenParameterSpec cannot be + // constructed). + if (namedSpec.getName().equalsIgnoreCase(NamedParameterSpec.X25519.getName()) + || namedSpec.getName().equalsIgnoreCase( + NamedParameterSpec.ED25519.getName())) { + throw new IllegalArgumentException( + "This KeyPairGenerator cannot be initialized using NamedParameterSpec." + + " use " + KeyGenParameterSpec.class.getName() + " or " + + KeyPairGeneratorSpec.class.getName()); + } else { + throw new InvalidAlgorithmParameterException( + "Unsupported algorithm specified via NamedParameterSpec: " + + namedSpec.getName()); + } } else { throw new InvalidAlgorithmParameterException( "Unsupported params class: " + params.getClass().getName() diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore2/AndroidKeyStoreProvider.java index e5d127609b2e..d31499e8b36d 100644 --- a/keystore/java/android/security/keystore2/AndroidKeyStoreProvider.java +++ b/keystore/java/android/security/keystore2/AndroidKeyStoreProvider.java @@ -83,10 +83,12 @@ public class AndroidKeyStoreProvider extends Provider { // java.security.KeyPairGenerator put("KeyPairGenerator.EC", PACKAGE_NAME + ".AndroidKeyStoreKeyPairGeneratorSpi$EC"); put("KeyPairGenerator.RSA", PACKAGE_NAME + ".AndroidKeyStoreKeyPairGeneratorSpi$RSA"); + put("KeyPairGenerator.XDH", PACKAGE_NAME + ".AndroidKeyStoreKeyPairGeneratorSpi$XDH"); // java.security.KeyFactory putKeyFactoryImpl("EC"); putKeyFactoryImpl("RSA"); + putKeyFactoryImpl("XDH"); // javax.crypto.KeyGenerator put("KeyGenerator.AES", PACKAGE_NAME + ".AndroidKeyStoreKeyGeneratorSpi$AES"); |