Save the key length also when only private key is set to SilcPKCS.
authorPekka Riikonen <priikone@silcnet.org>
Fri, 11 Oct 2002 20:26:46 +0000 (20:26 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Fri, 11 Oct 2002 20:26:46 +0000 (20:26 +0000)
lib/silccrypt/rsa.c
lib/silccrypt/silcpkcs.c
lib/silccrypt/silcpkcs.h

index 4b7db8ff3c0df3c4c741861a82e0f10ed59ca165..fec389fefacdb2b8420426fedc622fe64ea85098 100644 (file)
@@ -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)
index e079e40aa4be939b0bc7fe0cdd5dd41b4703425e..2e8ca92e9c492461ba4600f670771b645d3534ba 100644 (file)
@@ -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 */
index 5dfebffe0e0f48a18c911a63da9ab9472eb71d75..13f0bde74e127cc9abc9a7d8c1df9865b7854075 100644 (file)
@@ -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,