summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Drysdale <drysdale@google.com>2021-11-16 10:19:19 +0000
committerDavid Drysdale <drysdale@google.com>2021-12-15 18:07:37 +0000
commit378d991702248f57f5b7dbeaa0e1d920e39d0e18 (patch)
tree796d89e5be382a36f8904810f1f305017a12ff0e
parentb9ae2f418b7e91938b081d4340ed5c4021ad399f (diff)
downloadkeymaster-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.h1
-rw-r--r--include/keymaster/km_openssl/asymmetric_key.h2
-rw-r--r--include/keymaster/km_openssl/ec_key.h2
-rw-r--r--include/keymaster/km_openssl/ec_key_factory.h1
-rw-r--r--include/keymaster/km_openssl/rsa_key.h2
-rw-r--r--include/keymaster/km_openssl/rsa_key_factory.h1
-rw-r--r--km_openssl/asymmetric_key_factory.cpp2
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);