creating public key from RSA private key

RSA key generation and signature test
This commit is contained in:
Martin Willi
2008-03-18 12:13:51 +00:00
parent 8d49b51f8b
commit d7c529f5a6
4 changed files with 27 additions and 5 deletions
+2 -1
View File
@@ -12,6 +12,7 @@ libcharon_unit_tester_la_SOURCES = unit_tester.c unit_tester.h \
tests/test_curl.c \
tests/test_mysql.c \
tests/test_sqlite.c \
tests/test_mutex.c
tests/test_mutex.c \
tests/test_rsa_gen.c
libcharon_unit_tester_la_LDFLAGS = -module
+2 -1
View File
@@ -29,5 +29,6 @@ DEFINE_TEST("FIPS PRF", fips_prf_test, FALSE)
DEFINE_TEST("CURL get", test_curl_get, FALSE)
DEFINE_TEST("MySQL operations", test_mysql, FALSE)
DEFINE_TEST("SQLite operations", test_sqlite, FALSE)
DEFINE_TEST("mutex primitive", test_mutex, TRUE)
DEFINE_TEST("mutex primitive", test_mutex, FALSE)
DEFINE_TEST("RSA key generation", test_rsa_gen, TRUE)
@@ -144,10 +144,11 @@ static const asn1Object_t privkey_objects[] = {
#define PRIV_KEY_ROOF 16
/**
* defined in rsa_public_key.c
* shared functions, implemented in gmp_rsa_public_key.c
*/
bool gmp_rsa_public_key_build_id(mpz_t n, mpz_t e, identification_t **keyid,
identification_t **keyid_info);
gmp_rsa_public_key_t *gmp_rsa_public_key_create_from_n_e(mpz_t n, mpz_t e);
/**
* Auxiliary function overwriting private key material with
@@ -381,8 +382,7 @@ static identification_t* get_id(private_gmp_rsa_private_key_t *this,
*/
static gmp_rsa_public_key_t* get_public_key(private_gmp_rsa_private_key_t *this)
{
DBG1("creating RSA public key from private key not implemented");
return NULL;
return gmp_rsa_public_key_create_from_n_e(this->n, this->e);
}
/**
@@ -454,6 +454,26 @@ bool gmp_rsa_public_key_build_id(mpz_t n, mpz_t e, identification_t **keyid,
return TRUE;
}
/**
* Create a public key from mpz values, used in gmp_rsa_private_key
*/
gmp_rsa_public_key_t *gmp_rsa_public_key_create_from_n_e(mpz_t n, mpz_t e)
{
private_gmp_rsa_public_key_t *this = gmp_rsa_public_key_create_empty();
mpz_init_set(this->n, n);
mpz_init_set(this->e, e);
this->k = (mpz_sizeinbase(this->n, 2) + 7) / 8;
if (!gmp_rsa_public_key_build_id(this->n, this->e,
&this->keyid, &this->keyid_info))
{
destroy(this);
return NULL;
}
return &this->public;
}
/**
* Load a public key from an ASN1 encoded blob
*/