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:
parent
6c5be116dd
commit
ab6d047405
4 changed files with 40 additions and 1 deletions
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue