Add function for building RSA public key from n and e parameters

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>
This commit is contained in:
Jouni Malinen 2014-05-19 23:19:08 +03:00
parent 6c5be116dd
commit ab6d047405
4 changed files with 40 additions and 1 deletions

View 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(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 * crypto_private_key_import - Import an RSA private key
* @key: Key buffer (DER encoded RSA private key) * @key: Key buffer (DER encoded RSA private key)

View 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, struct crypto_private_key * crypto_private_key_import(const u8 *key,
size_t len, size_t len,
const char *passwd) const char *passwd)

View file

@ -1,6 +1,6 @@
/* /*
* RSA * 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. * This software may be distributed under the terms of the BSD license.
* See README for more details. * 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 * crypto_rsa_import_private_key - Import an RSA private key
* @buf: Key buffer (DER encoded RSA private key) * @buf: Key buffer (DER encoded RSA private key)

View file

@ -14,6 +14,9 @@ struct crypto_rsa_key;
struct crypto_rsa_key * struct crypto_rsa_key *
crypto_rsa_import_public_key(const u8 *buf, size_t len); crypto_rsa_import_public_key(const u8 *buf, size_t len);
struct crypto_rsa_key * 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); crypto_rsa_import_private_key(const u8 *buf, size_t len);
size_t crypto_rsa_get_modulus_len(struct crypto_rsa_key *key); 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, int crypto_rsa_exptmod(const u8 *in, size_t inlen, u8 *out, size_t *outlen,