Finish key import implementation.

This is the last bit of GoogleKeymaster that remained incomplete (for
the v0.3 functionality).

Change-Id: I27be52ae032883c004b2df21f0c7b229af512922
diff --git a/asymmetric_key.h b/asymmetric_key.h
index 17201e6..6279ff4 100644
--- a/asymmetric_key.h
+++ b/asymmetric_key.h
@@ -87,12 +87,16 @@
   public:
     static DsaKey* GenerateKey(const AuthorizationSet& key_description, const Logger& logger,
                                keymaster_error_t* error);
+    static DsaKey* ImportKey(const AuthorizationSet& key_description, EVP_PKEY* pkey,
+                             const Logger& logger, keymaster_error_t* error);
     DsaKey(const KeyBlob& blob, const Logger& logger, keymaster_error_t* error);
 
     virtual Operation* CreateOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
                                        keymaster_padding_t padding, keymaster_error_t* error);
+    static size_t key_size_bits(DSA* dsa_key);
 
   private:
+
     DsaKey(DSA* dsa_key, const AuthorizationSet auths, const Logger& logger)
         : AsymmetricKey(auths, logger), dsa_key_(dsa_key) {}
 
@@ -111,6 +115,8 @@
   public:
     static EcdsaKey* GenerateKey(const AuthorizationSet& key_description, const Logger& logger,
                                  keymaster_error_t* error);
+    static EcdsaKey* ImportKey(const AuthorizationSet& key_description, EVP_PKEY* pkey,
+                             const Logger& logger, keymaster_error_t* error);
     EcdsaKey(const KeyBlob& blob, const Logger& logger, keymaster_error_t* error);
 
     virtual Operation* CreateOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
@@ -121,6 +127,7 @@
         : AsymmetricKey(auths, logger), ecdsa_key_(ecdsa_key) {}
 
     static EC_GROUP* choose_group(size_t key_size_bits);
+    static keymaster_error_t get_group_size(const EC_GROUP& group, size_t* key_size_bits);
 
     virtual int evp_key_type() { return EVP_PKEY_EC; }
     virtual bool InternalToEvp(EVP_PKEY* pkey) const;