summaryrefslogtreecommitdiffstats
path: root/asymmetric_key.h
diff options
context:
space:
mode:
Diffstat (limited to 'asymmetric_key.h')
-rw-r--r--asymmetric_key.h49
1 files changed, 23 insertions, 26 deletions
diff --git a/asymmetric_key.h b/asymmetric_key.h
index 04dac15..c638dc6 100644
--- a/asymmetric_key.h
+++ b/asymmetric_key.h
@@ -20,29 +20,14 @@
#include <openssl/evp.h>
#include "key.h"
-#include "openssl_utils.h"
namespace keymaster {
-class AsymmetricKey;
-
class AsymmetricKeyFactory : public KeyFactory {
- public:
- AsymmetricKeyFactory(const KeymasterContext* context) : KeyFactory(context) {}
-
- keymaster_error_t KeyMaterialToEvpKey(keymaster_key_format_t key_format,
- const KeymasterKeyBlob& key_material,
- UniquePtr<EVP_PKEY, EVP_PKEY_Delete>* evp_pkey);
- keymaster_error_t EvpKeyToKeyMaterial(const EVP_PKEY* evp_pkey, KeymasterKeyBlob* key_blob);
-
- keymaster_error_t LoadKey(const KeymasterKeyBlob& key_material,
- const AuthorizationSet& hw_enforced,
- const AuthorizationSet& sw_enforced, UniquePtr<Key>* key) override;
-
- virtual keymaster_error_t CreateEmptyKey(const AuthorizationSet& hw_enforced,
- const AuthorizationSet& sw_enforced,
- UniquePtr<AsymmetricKey>* key) = 0;
- virtual int evp_key_type() = 0;
+ protected:
+ EVP_PKEY* ExtractEvpKey(keymaster_key_format_t key_format,
+ keymaster_algorithm_t expected_algorithm, const uint8_t* key_data,
+ size_t key_data_length, keymaster_error_t* error);
virtual const keymaster_key_format_t* SupportedImportFormats(size_t* format_count);
virtual const keymaster_key_format_t* SupportedExportFormats(size_t* format_count);
@@ -50,15 +35,27 @@ class AsymmetricKeyFactory : public KeyFactory {
class AsymmetricKey : public Key {
public:
- AsymmetricKey(const AuthorizationSet& hw_enforced, const AuthorizationSet& sw_enforced,
- keymaster_error_t* error)
- : Key(hw_enforced, sw_enforced, error) {}
+ protected:
+ AsymmetricKey(const KeyBlob& blob) : Key(blob) {}
+ keymaster_error_t LoadKey(const UnencryptedKeyBlob& blob);
+
+ /**
+ * Return a copy of raw key material, in the key's preferred binary format.
+ */
+ virtual keymaster_error_t key_material(UniquePtr<uint8_t[]>* material, size_t* size) const;
- keymaster_error_t key_material(UniquePtr<uint8_t[]>* material, size_t* size) const override;
- keymaster_error_t formatted_key_material(keymaster_key_format_t format,
- UniquePtr<uint8_t[]>* material,
- size_t* size) const override;
+ /**
+ * Return a copy of raw key material, in the specified format.
+ */
+ virtual keymaster_error_t formatted_key_material(keymaster_key_format_t format,
+ UniquePtr<uint8_t[]>* material,
+ size_t* size) const;
+ protected:
+ AsymmetricKey(const AuthorizationSet& auths) : Key(auths) {}
+
+ private:
+ virtual int evp_key_type() = 0;
virtual bool InternalToEvp(EVP_PKEY* pkey) const = 0;
virtual bool EvpToInternal(const EVP_PKEY* pkey) = 0;
};