Merge "Curve 25519: Support use via Android Keystore provider (part 1)" am: bab26cc607

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2015496

Change-Id: Ib525665355fd00c56461f8f513cecb9ab41d0552
This commit is contained in:
Treehugger Robot
2022-03-09 22:15:49 +00:00
committed by Automerger Merge Worker
2 changed files with 29 additions and 0 deletions

View File

@@ -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()

View File

@@ -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");