Merge "Keystore: Wire up Ed25519 signing" into tm-dev am: e41f27bfc8

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

Change-Id: I1b78e053e9b79a6c012d492465add928eefd2993
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-05-12 12:19:27 +00:00
committed by Automerger Merge Worker
2 changed files with 24 additions and 2 deletions

View File

@@ -206,6 +206,8 @@ class AndroidKeyStoreBCWorkaroundProvider extends Provider {
putSignatureImpl("NONEwithECDSA", putSignatureImpl("NONEwithECDSA",
PACKAGE_NAME + ".AndroidKeyStoreECDSASignatureSpi$NONE"); PACKAGE_NAME + ".AndroidKeyStoreECDSASignatureSpi$NONE");
putSignatureImpl("Ed25519",
PACKAGE_NAME + ".AndroidKeyStoreECDSASignatureSpi$Ed25519");
putSignatureImpl("SHA1withECDSA", PACKAGE_NAME + ".AndroidKeyStoreECDSASignatureSpi$SHA1"); putSignatureImpl("SHA1withECDSA", PACKAGE_NAME + ".AndroidKeyStoreECDSASignatureSpi$SHA1");
put("Alg.Alias.Signature.ECDSA", "SHA1withECDSA"); put("Alg.Alias.Signature.ECDSA", "SHA1withECDSA");

View File

@@ -29,7 +29,10 @@ import libcore.util.EmptyArray;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.SignatureSpi; import java.security.SignatureSpi;
import java.security.spec.NamedParameterSpec;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* Base class for {@link SignatureSpi} providing Android KeyStore backed ECDSA signatures. * Base class for {@link SignatureSpi} providing Android KeyStore backed ECDSA signatures.
@@ -37,6 +40,10 @@ import java.util.List;
* @hide * @hide
*/ */
abstract class AndroidKeyStoreECDSASignatureSpi extends AndroidKeyStoreSignatureSpiBase { abstract class AndroidKeyStoreECDSASignatureSpi extends AndroidKeyStoreSignatureSpiBase {
private static final Set<String> ACCEPTED_SIGNING_SCHEMES = Set.of(
KeyProperties.KEY_ALGORITHM_EC.toLowerCase(),
NamedParameterSpec.ED25519.getName().toLowerCase(),
"eddsa");
public final static class NONE extends AndroidKeyStoreECDSASignatureSpi { public final static class NONE extends AndroidKeyStoreECDSASignatureSpi {
public NONE() { public NONE() {
@@ -114,6 +121,18 @@ abstract class AndroidKeyStoreECDSASignatureSpi extends AndroidKeyStoreSignature
} }
} }
public static final class Ed25519 extends AndroidKeyStoreECDSASignatureSpi {
public Ed25519() {
// Ed25519 uses an internal digest system.
super(KeymasterDefs.KM_DIGEST_NONE);
}
@Override
protected String getAlgorithm() {
return NamedParameterSpec.ED25519.getName();
}
}
public final static class SHA1 extends AndroidKeyStoreECDSASignatureSpi { public final static class SHA1 extends AndroidKeyStoreECDSASignatureSpi {
public SHA1() { public SHA1() {
super(KeymasterDefs.KM_DIGEST_SHA1); super(KeymasterDefs.KM_DIGEST_SHA1);
@@ -174,9 +193,10 @@ abstract class AndroidKeyStoreECDSASignatureSpi extends AndroidKeyStoreSignature
@Override @Override
protected final void initKey(AndroidKeyStoreKey key) throws InvalidKeyException { protected final void initKey(AndroidKeyStoreKey key) throws InvalidKeyException {
if (!KeyProperties.KEY_ALGORITHM_EC.equalsIgnoreCase(key.getAlgorithm())) { if (!ACCEPTED_SIGNING_SCHEMES.contains(key.getAlgorithm().toLowerCase())) {
throw new InvalidKeyException("Unsupported key algorithm: " + key.getAlgorithm() throw new InvalidKeyException("Unsupported key algorithm: " + key.getAlgorithm()
+ ". Only" + KeyProperties.KEY_ALGORITHM_EC + " supported"); + ". Only" + Arrays.toString(ACCEPTED_SIGNING_SCHEMES.stream().toArray())
+ " supported");
} }
long keySizeBits = -1; long keySizeBits = -1;