updates.
[silc.git] / lib / silccrypt / silcpkcs.c
index 80ff59baa52c94921dc329846e1f2f6b023e7fab..866662b3e911256f58047c8d363a992c2be503f7 100644 (file)
@@ -194,10 +194,9 @@ char *silc_pkcs_get_supported(void)
       memcpy(list + len, ",", 1);
       len++;
     }
+    list[len - 1] = 0;
   }
 
-  list[len - 1] = 0;
-
   return list;
 }
 
@@ -722,6 +721,25 @@ int silc_pkcs_public_key_decode(unsigned char *data, uint32 data_len,
   return FALSE;
 }
 
+/* Compares two public keys and returns TRUE if they are same key, and
+   FALSE if they are not same. */
+
+bool silc_pkcs_public_key_compare(SilcPublicKey key1, SilcPublicKey key2)
+{
+  if (key1 == key2)
+    return TRUE;
+
+  if (key1->len == key2->len &&
+      key1->name && key2->name && key1->identifier && key2->identifier &&
+      !strcmp(key1->name, key2->name) &&
+      !strcmp(key1->identifier, key2->identifier) &&
+      !memcmp(key1->pk, key2->pk, key1->pk_len) &&
+      key1->pk_len == key2->pk_len)
+    return TRUE;
+
+  return FALSE;
+}
+
 /* Encodes SILC private key from SilcPrivateKey. Returns the encoded data. */
 
 unsigned char *
@@ -883,7 +901,7 @@ static int silc_pkcs_save_public_key_internal(char *filename,
                     SILC_STR_END);
 
   /* Save into file */
-  if (silc_file_write(filename, buf->data, buf->len)) {
+  if (silc_file_writefile(filename, buf->data, buf->len)) {
     silc_buffer_free(buf);
     return FALSE;
   }
@@ -946,7 +964,7 @@ static int silc_pkcs_save_private_key_internal(char *filename,
                     SILC_STR_END);
 
   /* Save into a file */
-  if (silc_file_write_mode(filename, buf->data, buf->len, 0600)) {
+  if (silc_file_writefile_mode(filename, buf->data, buf->len, 0600)) {
     silc_buffer_free(buf);
     return FALSE;
   }
@@ -991,7 +1009,7 @@ int silc_pkcs_load_public_key(char *filename, SilcPublicKey *public_key,
   unsigned char *cp, *old, *data, byte;
   uint32 i, data_len, len;
 
-  old = data = silc_file_read(filename, &data_len);
+  old = data = silc_file_readfile(filename, &data_len);
   if (!data)
     return FALSE;
 
@@ -1044,7 +1062,7 @@ int silc_pkcs_load_private_key(char *filename, SilcPrivateKey *private_key,
   unsigned char *cp, *old, *data, byte;
   uint32 i, data_len, len;
 
-  old = data = silc_file_read(filename, &data_len);
+  old = data = silc_file_readfile(filename, &data_len);
   if (!data)
     return FALSE;