diff options
author | David Drysdale <drysdale@google.com> | 2021-11-16 10:19:19 +0000 |
---|---|---|
committer | David Drysdale <drysdale@google.com> | 2021-12-15 18:07:37 +0000 |
commit | 378d991702248f57f5b7dbeaa0e1d920e39d0e18 (patch) | |
tree | 796d89e5be382a36f8904810f1f305017a12ff0e | |
parent | b9ae2f418b7e91938b081d4340ed5c4021ad399f (diff) | |
download | keymaster-378d991702248f57f5b7dbeaa0e1d920e39d0e18.tar.gz |
Move evp_key_type() from KeyFactory to AsymmetricKey
This means that a KeyFactory can emit keys of differing EVP_PKEY_types.
Bug: 194358913
Test: VtsAidlKeyMintTargetTest
Change-Id: I3b690b90b5aaac7cbb20b5809e465a55989f8009
-rw-r--r-- | include/keymaster/asymmetric_key_factory.h | 1 | ||||
-rw-r--r-- | include/keymaster/km_openssl/asymmetric_key.h | 2 | ||||
-rw-r--r-- | include/keymaster/km_openssl/ec_key.h | 2 | ||||
-rw-r--r-- | include/keymaster/km_openssl/ec_key_factory.h | 1 | ||||
-rw-r--r-- | include/keymaster/km_openssl/rsa_key.h | 2 | ||||
-rw-r--r-- | include/keymaster/km_openssl/rsa_key_factory.h | 1 | ||||
-rw-r--r-- | km_openssl/asymmetric_key_factory.cpp | 2 |
7 files changed, 7 insertions, 4 deletions
diff --git a/include/keymaster/asymmetric_key_factory.h b/include/keymaster/asymmetric_key_factory.h index dab7916..681fd8d 100644 --- a/include/keymaster/asymmetric_key_factory.h +++ b/include/keymaster/asymmetric_key_factory.h @@ -40,7 +40,6 @@ class AsymmetricKeyFactory : public KeyFactory { UniquePtr<AsymmetricKey>* key) const = 0; virtual keymaster_algorithm_t keymaster_key_type() const = 0; - virtual int evp_key_type() const = 0; virtual const keymaster_key_format_t* SupportedImportFormats(size_t* format_count) const override; diff --git a/include/keymaster/km_openssl/asymmetric_key.h b/include/keymaster/km_openssl/asymmetric_key.h index 9fbb323..b523116 100644 --- a/include/keymaster/km_openssl/asymmetric_key.h +++ b/include/keymaster/km_openssl/asymmetric_key.h @@ -31,6 +31,8 @@ class AsymmetricKey : public Key { : Key(move(hw_enforced), move(sw_enforced), key_factory) {} virtual ~AsymmetricKey() {} + virtual int evp_key_type() const = 0; + keymaster_error_t formatted_key_material(keymaster_key_format_t format, UniquePtr<uint8_t[]>* material, size_t* size) const override; diff --git a/include/keymaster/km_openssl/ec_key.h b/include/keymaster/km_openssl/ec_key.h index 37603f8..9ad5c70 100644 --- a/include/keymaster/km_openssl/ec_key.h +++ b/include/keymaster/km_openssl/ec_key.h @@ -33,6 +33,8 @@ class EcKey : public AsymmetricKey { EC_KEY_Ptr ec_key) : AsymmetricKey(move(hw_enforced), move(sw_enforced), factory), ec_key_(move(ec_key)) {} + int evp_key_type() const override { return EVP_PKEY_EC; } + EVP_PKEY_Ptr InternalToEvp() const override; bool EvpToInternal(const EVP_PKEY* pkey) override; diff --git a/include/keymaster/km_openssl/ec_key_factory.h b/include/keymaster/km_openssl/ec_key_factory.h index ca37d86..8d3501f 100644 --- a/include/keymaster/km_openssl/ec_key_factory.h +++ b/include/keymaster/km_openssl/ec_key_factory.h @@ -30,7 +30,6 @@ class EcKeyFactory : public AsymmetricKeyFactory, public SoftKeyFactoryMixin { : AsymmetricKeyFactory(context), SoftKeyFactoryMixin(blob_maker) {} keymaster_algorithm_t keymaster_key_type() const override { return KM_ALGORITHM_EC; } - int evp_key_type() const override { return EVP_PKEY_EC; } keymaster_error_t GenerateKey(const AuthorizationSet& key_description, UniquePtr<Key> attest_key, // diff --git a/include/keymaster/km_openssl/rsa_key.h b/include/keymaster/km_openssl/rsa_key.h index 9398cd0..3cd7c3a 100644 --- a/include/keymaster/km_openssl/rsa_key.h +++ b/include/keymaster/km_openssl/rsa_key.h @@ -33,6 +33,8 @@ class RsaKey : public AsymmetricKey { RSA_Ptr rsa_key) : AsymmetricKey(move(hw_enforced), move(sw_enforced), factory), rsa_key_(move(rsa_key)) {} + int evp_key_type() const override { return EVP_PKEY_RSA; } + EVP_PKEY_Ptr InternalToEvp() const override; bool EvpToInternal(const EVP_PKEY* pkey) override; diff --git a/include/keymaster/km_openssl/rsa_key_factory.h b/include/keymaster/km_openssl/rsa_key_factory.h index 3aacadc..3350d54 100644 --- a/include/keymaster/km_openssl/rsa_key_factory.h +++ b/include/keymaster/km_openssl/rsa_key_factory.h @@ -52,7 +52,6 @@ class RsaKeyFactory : public AsymmetricKeyFactory, public SoftKeyFactoryMixin { OperationFactory* GetOperationFactory(keymaster_purpose_t purpose) const override; keymaster_algorithm_t keymaster_key_type() const override { return KM_ALGORITHM_RSA; } - int evp_key_type() const override { return EVP_PKEY_RSA; } protected: keymaster_error_t UpdateImportKeyDescription(const AuthorizationSet& key_description, diff --git a/km_openssl/asymmetric_key_factory.cpp b/km_openssl/asymmetric_key_factory.cpp index cf68c68..963694c 100644 --- a/km_openssl/asymmetric_key_factory.cpp +++ b/km_openssl/asymmetric_key_factory.cpp @@ -50,7 +50,7 @@ keymaster_error_t AsymmetricKeyFactory::LoadKey(KeymasterKeyBlob&& key_material, const uint8_t* tmp = key_material.key_material; asym_key->key_material() = move(key_material); - EVP_PKEY* pkey = d2i_PrivateKey(evp_key_type(), nullptr /* pkey */, &tmp, + EVP_PKEY* pkey = d2i_PrivateKey(asym_key->evp_key_type(), nullptr /* pkey */, &tmp, asym_key->key_material().key_material_size); if (!pkey) return TranslateLastOpenSslError(); UniquePtr<EVP_PKEY, EVP_PKEY_Delete> pkey_deleter(pkey); |