From: Pekka Riikonen Date: Fri, 11 Oct 2002 20:26:46 +0000 (+0000) Subject: Save the key length also when only private key is set to SilcPKCS. X-Git-Tag: 1.2.beta1~1100 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=5eb4dac23ec09c93ba9e90e0498ef0fa8cc02ee6;p=crypto.git Save the key length also when only private key is set to SilcPKCS. --- diff --git a/lib/silccrypt/rsa.c b/lib/silccrypt/rsa.c index 4b7db8ff..fec389fe 100644 --- a/lib/silccrypt/rsa.c +++ b/lib/silccrypt/rsa.c @@ -327,7 +327,7 @@ SILC_PKCS_API_SET_PRIVATE_KEY(rsa) key->prv_set = TRUE; key->pub_set = TRUE; - return TRUE; + return key->bits; } SILC_PKCS_API_CONTEXT_LEN(rsa) diff --git a/lib/silccrypt/silcpkcs.c b/lib/silccrypt/silcpkcs.c index e079e40a..2e8ca92e 100644 --- a/lib/silccrypt/silcpkcs.c +++ b/lib/silccrypt/silcpkcs.c @@ -342,18 +342,26 @@ SilcUInt32 silc_pkcs_public_key_data_set(SilcPKCS pkcs, unsigned char *pk, /* Sets private key from SilcPrivateKey. */ -int silc_pkcs_private_key_set(SilcPKCS pkcs, SilcPrivateKey private_key) +SilcUInt32 silc_pkcs_private_key_set(SilcPKCS pkcs, SilcPrivateKey private_key) { - return pkcs->pkcs->set_private_key(pkcs->context, private_key->prv, - private_key->prv_len); + SilcUInt32 key_len; + key_len = pkcs->pkcs->set_private_key(pkcs->context, private_key->prv, + private_key->prv_len); + if (!pkcs->key_len) + pkcs->key_len = key_len; + return pkcs->key_len; } /* Sets private key from data. */ -int silc_pkcs_private_key_data_set(SilcPKCS pkcs, unsigned char *prv, - SilcUInt32 prv_len) +SilcUInt32 silc_pkcs_private_key_data_set(SilcPKCS pkcs, unsigned char *prv, + SilcUInt32 prv_len) { - return pkcs->pkcs->set_private_key(pkcs->context, prv, prv_len); + SilcUInt32 key_len; + key_len = pkcs->pkcs->set_private_key(pkcs->context, prv, prv_len); + if (!pkcs->key_len) + pkcs->key_len = key_len; + return pkcs->key_len; } /* Encrypts */ diff --git a/lib/silccrypt/silcpkcs.h b/lib/silccrypt/silcpkcs.h index 5dfebffe..13f0bde7 100644 --- a/lib/silccrypt/silcpkcs.h +++ b/lib/silccrypt/silcpkcs.h @@ -62,7 +62,7 @@ typedef struct SilcPKCSObjectStruct { unsigned char *(*get_public_key)(void *, SilcUInt32 *); unsigned char *(*get_private_key)(void *, SilcUInt32 *); SilcUInt32 (*set_public_key)(void *, unsigned char *, SilcUInt32); - int (*set_private_key)(void *, unsigned char *, SilcUInt32); + SilcUInt32 (*set_private_key)(void *, unsigned char *, SilcUInt32); SilcUInt32 (*context_len)(); int (*encrypt)(void *, unsigned char *, SilcUInt32, unsigned char *, SilcUInt32 *); @@ -204,10 +204,10 @@ unsigned char *silc_##pkcs##_get_private_key(void *context, \ SilcUInt32 *ret_len) #define SILC_PKCS_API_SET_PUBLIC_KEY(pkcs) \ SilcUInt32 silc_##pkcs##_set_public_key(void *context, unsigned char *key_data, \ - SilcUInt32 key_len) + SilcUInt32 key_len) #define SILC_PKCS_API_SET_PRIVATE_KEY(pkcs) \ -int silc_##pkcs##_set_private_key(void *context, unsigned char *key_data, \ - SilcUInt32 key_len) +SilcUInt32 silc_##pkcs##_set_private_key(void *context, unsigned char *key_data, \ + SilcUInt32 key_len) #define SILC_PKCS_API_CONTEXT_LEN(pkcs) \ SilcUInt32 silc_##pkcs##_context_len() #define SILC_PKCS_API_ENCRYPT(pkcs) \ @@ -272,9 +272,9 @@ unsigned char *silc_pkcs_get_private_key(SilcPKCS pkcs, SilcUInt32 *len); SilcUInt32 silc_pkcs_public_key_set(SilcPKCS pkcs, SilcPublicKey public_key); SilcUInt32 silc_pkcs_public_key_data_set(SilcPKCS pkcs, unsigned char *pk, SilcUInt32 pk_len); -int silc_pkcs_private_key_set(SilcPKCS pkcs, SilcPrivateKey private_key); -int silc_pkcs_private_key_data_set(SilcPKCS pkcs, unsigned char *prv, - SilcUInt32 prv_len); +SilcUInt32 silc_pkcs_private_key_set(SilcPKCS pkcs, SilcPrivateKey private_key); +SilcUInt32 silc_pkcs_private_key_data_set(SilcPKCS pkcs, unsigned char *prv, + SilcUInt32 prv_len); int silc_pkcs_encrypt(SilcPKCS pkcs, unsigned char *src, SilcUInt32 src_len, unsigned char *dst, SilcUInt32 *dst_len); int silc_pkcs_decrypt(SilcPKCS pkcs, unsigned char *src, SilcUInt32 src_len,