]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add function for building RSA public key from n and e parameters
authorJouni Malinen <j@w1.fi>
Mon, 19 May 2014 20:19:08 +0000 (23:19 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 19 May 2014 20:27:30 +0000 (23:27 +0300)
This is similar to the existing functionality that parsed ASN.1-encoded
RSA public key by generating a similar public key instance from already
parsed n and e parameters.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/crypto/crypto.h
src/crypto/crypto_internal-rsa.c
src/tls/rsa.c
src/tls/rsa.h

index 4caa277deede5d393700d81a07af1624f8b439a0..f2d5662ff01e2f3baf8cf98d96d6a60045f08bea 100644 (file)
@@ -271,6 +271,10 @@ struct crypto_private_key;
  */
 struct crypto_public_key * crypto_public_key_import(const u8 *key, size_t len);
 
+struct crypto_public_key *
+crypto_public_key_import_parts(const u8 *n, size_t n_len,
+                              const u8 *e, size_t e_len);
+
 /**
  * crypto_private_key_import - Import an RSA private key
  * @key: Key buffer (DER encoded RSA private key)
index 54209fad3c01e2d27f08da08c37aa891132f9a9d..dc7f350af057aa6630c76d0a1d82f1a15190e192 100644 (file)
@@ -26,6 +26,15 @@ struct crypto_public_key * crypto_public_key_import(const u8 *key, size_t len)
 }
 
 
+struct crypto_public_key *
+crypto_public_key_import_parts(const u8 *n, size_t n_len,
+                              const u8 *e, size_t e_len)
+{
+       return (struct crypto_public_key *)
+               crypto_rsa_import_public_key_parts(n, n_len, e, e_len);
+}
+
+
 struct crypto_private_key * crypto_private_key_import(const u8 *key,
                                                      size_t len,
                                                      const char *passwd)
index 125c4205b705c3f01bb755dba025d3c7956ab398..0b7b530bc37c2900d3d1a7f47a9607b472eb2a28 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * RSA
- * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2006-2014, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -116,6 +116,29 @@ error:
 }
 
 
+struct crypto_rsa_key *
+crypto_rsa_import_public_key_parts(const u8 *n, size_t n_len,
+                                  const u8 *e, size_t e_len)
+{
+       struct crypto_rsa_key *key;
+
+       key = os_zalloc(sizeof(*key));
+       if (key == NULL)
+               return NULL;
+
+       key->n = bignum_init();
+       key->e = bignum_init();
+       if (key->n == NULL || key->e == NULL ||
+           bignum_set_unsigned_bin(key->n, n, n_len) < 0 ||
+           bignum_set_unsigned_bin(key->e, e, e_len) < 0) {
+               crypto_rsa_free(key);
+               return NULL;
+       }
+
+       return key;
+}
+
+
 /**
  * crypto_rsa_import_private_key - Import an RSA private key
  * @buf: Key buffer (DER encoded RSA private key)
index c236a9df44498bc127b073b051b43103b0c20549..b65818ee1546a4f94002ccceff61351c1fba971a 100644 (file)
@@ -14,6 +14,9 @@ struct crypto_rsa_key;
 struct crypto_rsa_key *
 crypto_rsa_import_public_key(const u8 *buf, size_t len);
 struct crypto_rsa_key *
+crypto_rsa_import_public_key_parts(const u8 *n, size_t n_len,
+                                  const u8 *e, size_t e_len);
+struct crypto_rsa_key *
 crypto_rsa_import_private_key(const u8 *buf, size_t len);
 size_t crypto_rsa_get_modulus_len(struct crypto_rsa_key *key);
 int crypto_rsa_exptmod(const u8 *in, size_t inlen, u8 *out, size_t *outlen,