added rsa_public_key_create(mpz_t n, mpz_t e)
This commit is contained in:
@@ -110,8 +110,6 @@ struct private_rsa_public_key_t {
|
|||||||
chunk_t (*rsavp1) (const private_rsa_public_key_t *this, chunk_t data);
|
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
|
* 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);
|
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.
|
* 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;
|
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.
|
* Implementation of rsa_public_key_t.clone.
|
||||||
*/
|
*/
|
||||||
@@ -377,6 +395,20 @@ private_rsa_public_key_t *rsa_public_key_create_empty(void)
|
|||||||
return this;
|
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
|
* See header
|
||||||
*/
|
*/
|
||||||
@@ -413,18 +445,8 @@ rsa_public_key_t *rsa_public_key_create_from_chunk(chunk_t blob)
|
|||||||
objectID++;
|
objectID++;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->k = (mpz_sizeinbase(this->n, 2) + 7) / 8;
|
this->k = (mpz_sizeinbase(this->n, 2) + 7) / BITS_PER_BYTE;
|
||||||
|
this->keyid = rsa_public_key_id_create(this->n, this->e);
|
||||||
/* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,20 +40,29 @@ typedef struct rsa_public_key_t rsa_public_key_t;
|
|||||||
* the EMSA encoding (see PKCS1)
|
* the EMSA encoding (see PKCS1)
|
||||||
*
|
*
|
||||||
* @b Constructors:
|
* @b Constructors:
|
||||||
|
* - rsa_public_key_create()
|
||||||
* - rsa_public_key_create_from_chunk()
|
* - rsa_public_key_create_from_chunk()
|
||||||
* - rsa_public_key_create_from_file()
|
* - 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
|
* @ingroup rsa
|
||||||
*/
|
*/
|
||||||
struct rsa_public_key_t {
|
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,
|
* Processes the supplied signature with the RSAVP1 function,
|
||||||
* selects the hash algorithm form the resultign ASN1-OID and
|
* 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);
|
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.
|
* @brief Load an RSA public key from a chunk.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user