Merge "Keystore: Wire up Ed25519 signing" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e41f27bfc8
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user