Add support for DSA and ECDSA key types
(cherry picked from commit 6e1683f5d508a4c1ff761a9a3508619ac5ac6ed7)
Bug: 10600582
Change-Id: I8e5b66baa70b37031198260853bb5355df75e23d
diff --git a/include/hardware/keymaster.h b/include/hardware/keymaster.h
index e0014c8..968beb9 100644
--- a/include/hardware/keymaster.h
+++ b/include/hardware/keymaster.h
@@ -37,7 +37,7 @@
* module to recognize which API level of the client it is dealing with in
* the case of pre-compiled binary clients.
*/
-#define KEYMASTER_API_VERSION 1
+#define KEYMASTER_API_VERSION 2
/**
* Flags for keymaster_device::flags
@@ -62,6 +62,8 @@
*/
typedef enum {
TYPE_RSA = 1,
+ TYPE_DSA = 2,
+ TYPE_EC = 3,
} keymaster_keypair_t;
/**
@@ -73,11 +75,42 @@
} keymaster_rsa_keygen_params_t;
/**
- * Digest type used for RSA operations.
+ * Parameters needed to generate a DSA key.
+ */
+typedef struct {
+ uint32_t key_size;
+ uint32_t generator_len;
+ uint32_t prime_p_len;
+ uint32_t prime_q_len;
+ const uint8_t* generator;
+ const uint8_t* prime_p;
+ const uint8_t* prime_q;
+} keymaster_dsa_keygen_params_t;
+
+/**
+ * Parameters needed to generate an EC key.
+ *
+ * Field size is the only parameter in version 2. The sizes correspond to these required curves:
+ *
+ * 192 = NIST P-192
+ * 224 = NIST P-224
+ * 256 = NIST P-256
+ * 384 = NIST P-384
+ * 521 = NIST P-521
+ *
+ * The parameters for these curves are available at: http://www.nsa.gov/ia/_files/nist-routines.pdf
+ * in Chapter 4.
+ */
+typedef struct {
+ uint32_t field_size;
+} keymaster_ec_keygen_params_t;
+
+/**
+ * Digest type.
*/
typedef enum {
DIGEST_NONE,
-} keymaster_rsa_digest_t;
+} keymaster_digest_t;
/**
* Type of padding used for RSA operations.
@@ -86,8 +119,17 @@
PADDING_NONE,
} keymaster_rsa_padding_t;
+
typedef struct {
- keymaster_rsa_digest_t digest_type;
+ keymaster_digest_t digest_type;
+} keymaster_dsa_sign_params_t;
+
+typedef struct {
+ keymaster_digest_t digest_type;
+} keymaster_ec_sign_params_t;
+
+typedef struct {
+ keymaster_digest_t digest_type;
keymaster_rsa_padding_t padding_type;
} keymaster_rsa_sign_params_t;