implemented pkcs1_write() method

This commit is contained in:
Andreas Steffen
2007-10-12 15:23:29 +00:00
parent dba89b1bb7
commit 3edea3497f
2 changed files with 32 additions and 21 deletions
+23 -8
View File
@@ -405,19 +405,34 @@ static status_t build_emsa_pkcs1_signature(private_rsa_private_key_t *this,
} }
/** /**
* Implementation of rsa_private_key.save_key. * Implementation of rsa_private_key_t.write.
*/ */
static status_t save_key(private_rsa_private_key_t *this, char *file) static bool pkcs1_write(private_rsa_private_key_t *this, const char *filename, bool force)
{ {
return NOT_SUPPORTED; bool status;
chunk_t pkcs1 = asn1_wrap(ASN1_SEQUENCE, "cmmmmmmmm",
ASN1_INTEGER_0,
asn1_integer_from_mpz(this->n),
asn1_integer_from_mpz(this->e),
asn1_integer_from_mpz(this->d),
asn1_integer_from_mpz(this->p),
asn1_integer_from_mpz(this->q),
asn1_integer_from_mpz(this->exp1),
asn1_integer_from_mpz(this->exp2),
asn1_integer_from_mpz(this->coeff));
status = chunk_write(pkcs1, filename, "pkcs1", 0066, force);
chunk_free_randomized(&pkcs1);
return status;
} }
/** /**
* Implementation of rsa_public_key.get_keysize. * Implementation of rsa_private_key_t.get_public_key.
*/ */
static size_t get_keysize(const private_rsa_private_key_t *this) rsa_public_key_t *get_public_key(private_rsa_private_key_t *this)
{ {
return this->k; return NULL;
} }
/** /**
@@ -549,8 +564,8 @@ static private_rsa_private_key_t *rsa_private_key_create_empty(void)
/* public functions */ /* public functions */
this->public.pkcs1_decrypt = (status_t (*) (rsa_private_key_t*,chunk_t,chunk_t*))pkcs1_decrypt; this->public.pkcs1_decrypt = (status_t (*) (rsa_private_key_t*,chunk_t,chunk_t*))pkcs1_decrypt;
this->public.build_emsa_pkcs1_signature = (status_t (*) (rsa_private_key_t*,hash_algorithm_t,chunk_t,chunk_t*))build_emsa_pkcs1_signature; this->public.build_emsa_pkcs1_signature = (status_t (*) (rsa_private_key_t*,hash_algorithm_t,chunk_t,chunk_t*))build_emsa_pkcs1_signature;
this->public.save_key = (status_t (*) (rsa_private_key_t*,char*))save_key; this->public.pkcs1_write = (bool (*) (rsa_private_key_t*,const char*,bool))pkcs1_write;
this->public.get_keysize = (size_t (*) (const rsa_private_key_t*))get_keysize; this->public.get_public_key = (rsa_public_key_t* (*) (rsa_private_key_t*))get_public_key;
this->public.belongs_to = (bool (*) (rsa_private_key_t*,rsa_public_key_t*))belongs_to; this->public.belongs_to = (bool (*) (rsa_private_key_t*,rsa_public_key_t*))belongs_to;
this->public.destroy = (void (*) (rsa_private_key_t*))destroy; this->public.destroy = (void (*) (rsa_private_key_t*))destroy;
+8 -12
View File
@@ -44,8 +44,6 @@ typedef struct rsa_private_key_t rsa_private_key_t;
* *
* @see rsa_public_key_t * @see rsa_public_key_t
* *
* @todo Implement get_key(), save_key(), get_public_key()
*
* @ingroup rsa * @ingroup rsa
*/ */
struct rsa_private_key_t { struct rsa_private_key_t {
@@ -82,24 +80,22 @@ struct rsa_private_key_t {
status_t (*build_emsa_pkcs1_signature) (rsa_private_key_t *this, hash_algorithm_t hash_algorithm, chunk_t data, chunk_t *signature); status_t (*build_emsa_pkcs1_signature) (rsa_private_key_t *this, hash_algorithm_t hash_algorithm, chunk_t data, chunk_t *signature);
/** /**
* @brief Saves a key to a file. * @brief Writes an RSA private key to a file in PKCS#1 format.
*
* Not implemented!
* *
* @param this calling object * @param this calling object
* @param file file to which the key should be written. * @param filename file to which the key should be written.
* @return NOT_SUPPORTED * @param force if TRUE overwrite existing file
* @return TRUE if successful - FALSE otherwise
*/ */
status_t (*save_key) (rsa_private_key_t *this, char *file); bool (*pkcs1_write) (rsa_private_key_t *this, const char *filename, bool force);
/** /**
* @brief Get the size of the modulus in bytes. * @brief Create a rsa_public_key_t with the public part of the key.
* *
* @param this calling object * @param this calling object
* @return size of the modulus (n) in bytes * @return public_key
*/ */
size_t (*get_keysize) (const rsa_private_key_t *this); rsa_public_key_t *(*get_public_key) (rsa_private_key_t *this);
/** /**
* @brief Check if a private key belongs to a public key. * @brief Check if a private key belongs to a public key.