added rsa_public_key_create(mpz_t n, mpz_t e)
This commit is contained in:
parent
d349a3d11a
commit
b5d8c9779a
|
@ -110,8 +110,6 @@ struct private_rsa_public_key_t {
|
|||
chunk_t (*rsavp1) (const private_rsa_public_key_t *this, chunk_t data);
|
||||
};
|
||||
|
||||
private_rsa_public_key_t *rsa_public_key_create_empty(void);
|
||||
|
||||
/**
|
||||
* Implementation of private_rsa_public_key_t.rsaep and private_rsa_public_key_t.rsavp1
|
||||
*/
|
||||
|
@ -312,6 +310,23 @@ chunk_t rsa_public_key_info_to_asn1(const mpz_t n, const mpz_t e)
|
|||
publicKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Form the RSA keyid as a SHA-1 hash of a publicKeyInfo object
|
||||
* Also used in rsa_private_key.c.
|
||||
*/
|
||||
chunk_t rsa_public_key_id_create(mpz_t n, mpz_t e)
|
||||
{
|
||||
chunk_t keyid;
|
||||
chunk_t publicKeyInfo = rsa_public_key_info_to_asn1(n, e);
|
||||
hasher_t *hasher = hasher_create(HASH_SHA1);
|
||||
|
||||
hasher->allocate_hash(hasher, publicKeyInfo, &keyid);
|
||||
hasher->destroy(hasher);
|
||||
free(publicKeyInfo.ptr);
|
||||
|
||||
return keyid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of rsa_public_key_t.get_publicKeyInfo.
|
||||
*/
|
||||
|
@ -328,6 +343,9 @@ static chunk_t get_keyid(const private_rsa_public_key_t *this)
|
|||
return this->keyid;
|
||||
}
|
||||
|
||||
/* forward declaration used by rsa_public_key_t.clone */
|
||||
private_rsa_public_key_t *rsa_public_key_create_empty(void);
|
||||
|
||||
/**
|
||||
* Implementation of rsa_public_key_t.clone.
|
||||
*/
|
||||
|
@ -377,6 +395,20 @@ private_rsa_public_key_t *rsa_public_key_create_empty(void)
|
|||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* See header
|
||||
*/
|
||||
rsa_public_key_t *rsa_public_key_create(mpz_t n, mpz_t e)
|
||||
{
|
||||
private_rsa_public_key_t *this = rsa_public_key_create_empty();
|
||||
|
||||
mpz_init_set(this->n, n);
|
||||
mpz_init_set(this->e, e);
|
||||
|
||||
this->k = (mpz_sizeinbase(n, 2) + 7) / BITS_PER_BYTE;
|
||||
this->keyid = rsa_public_key_id_create(n, e);
|
||||
return &this->public;
|
||||
}
|
||||
/*
|
||||
* See header
|
||||
*/
|
||||
|
@ -412,19 +444,9 @@ rsa_public_key_t *rsa_public_key_create_from_chunk(chunk_t blob)
|
|||
}
|
||||
objectID++;
|
||||
}
|
||||
|
||||
this->k = (mpz_sizeinbase(this->n, 2) + 7) / 8;
|
||||
|
||||
/* form the keyid as a SHA-1 hash of a publicKeyInfo object */
|
||||
{
|
||||
chunk_t publicKeyInfo = rsa_public_key_info_to_asn1(this->n, this->e);
|
||||
hasher_t *hasher = hasher_create(HASH_SHA1);
|
||||
|
||||
hasher->allocate_hash(hasher, publicKeyInfo, &this->keyid);
|
||||
hasher->destroy(hasher);
|
||||
free(publicKeyInfo.ptr);
|
||||
}
|
||||
|
||||
this->k = (mpz_sizeinbase(this->n, 2) + 7) / BITS_PER_BYTE;
|
||||
this->keyid = rsa_public_key_id_create(this->n, this->e);
|
||||
return &this->public;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,20 +40,29 @@ typedef struct rsa_public_key_t rsa_public_key_t;
|
|||
* the EMSA encoding (see PKCS1)
|
||||
*
|
||||
* @b Constructors:
|
||||
* - rsa_public_key_create()
|
||||
* - rsa_public_key_create_from_chunk()
|
||||
* - rsa_public_key_create_from_file()
|
||||
* - rsa_private_key_t.get_public_key()
|
||||
*
|
||||
* @see rsa_private_key_t
|
||||
*
|
||||
* @todo Implement getkey() and savekey()
|
||||
*
|
||||
*
|
||||
* @ingroup rsa
|
||||
*/
|
||||
struct rsa_public_key_t {
|
||||
|
||||
/**
|
||||
* @brief Verify a EMSA-PKCS1 encodined signature.
|
||||
* @brief Encrypt a data block using EME-PKCS1 encoding.
|
||||
*
|
||||
*
|
||||
* @param this calling object
|
||||
* @param data plaintext input data
|
||||
* @param out encrypted output data
|
||||
* @return
|
||||
* - SUCCESS
|
||||
* - FAILED if data block is too large
|
||||
*/
|
||||
status_t (*pkcs1_encrypt) (rsa_public_key_t *this, chunk_t in, chunk_t *out);
|
||||
|
||||
/**
|
||||
* @brief Verify an EMSA-PKCS1 encoded signature.
|
||||
*
|
||||
* Processes the supplied signature with the RSAVP1 function,
|
||||
* selects the hash algorithm form the resultign ASN1-OID and
|
||||
|
@ -122,6 +131,17 @@ struct rsa_public_key_t {
|
|||
void (*destroy) (rsa_public_key_t *this);
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Create a RSA public key from modulus and public exponent.
|
||||
*
|
||||
* @param n modulus
|
||||
* @param e public exponent
|
||||
* @return created rsa_public_key_t
|
||||
*
|
||||
* @ingroup rsa
|
||||
*/
|
||||
rsa_public_key_t *rsa_public_key_create(mpz_t n, mpz_t e);
|
||||
|
||||
/**
|
||||
* @brief Load an RSA public key from a chunk.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue