Header documentation changes and other small fixes
[crypto.git] / lib / silcssh / silcssh.c
index 0e4f606b05e04a17457701e840a6d2f2a5911c45..927489c3ce2b1a08fe62a518adf1c5d98b24dc3c 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2007 Pekka Riikonen
+  Copyright (C) 2007 - 2008 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
 
 */
 
-#include "silc.h"
+#include "silccrypto.h"
 
 /************************* Static utility functions *************************/
 
@@ -71,8 +71,8 @@ SilcBool silc_ssh_parse_line(SilcBuffer key, SilcBuffer line,
 
 SilcHashTable silc_ssh_allocate_fields(void)
 {
-  return silc_hash_table_alloc(NULL, 0, silc_hash_string, NULL,
-                              silc_hash_string_compare, NULL,
+  return silc_hash_table_alloc(NULL, 0, silc_hash_string_case, NULL,
+                              silc_hash_string_case_compare, NULL,
                               silc_ssh_field_dest, NULL, TRUE);
 }
 
@@ -174,6 +174,7 @@ SilcHashTable silc_ssh_parse_headers(SilcBuffer key)
 
 SilcBool silc_ssh_generate_key(const char *algorithm,
                               int bits_len, SilcRng rng,
+                              const char *subject,
                               SilcPublicKey *ret_public_key,
                               SilcPrivateKey *ret_private_key)
 {
@@ -249,6 +250,9 @@ SilcBool silc_ssh_generate_key(const char *algorithm,
     return FALSE;
   }
 
+  if (subject)
+    silc_ssh_public_key_add_field(pubkey, "Subject", subject);
+
   return TRUE;
 }
 
@@ -280,7 +284,7 @@ int silc_ssh_public_key_decode(unsigned char *key, SilcUInt32 key_len,
                           SILC_STR_ADVANCE,
                           SILC_STR_UI32_STRING_ALLOC(&type),
                           SILC_STR_END) < 0) {
-    SILC_LOG_ERROR(("Malformed SSH2 public key"));
+    SILC_LOG_DEBUG(("Malformed SSH2 public key"));
     goto err;
   }
 
@@ -379,6 +383,8 @@ void silc_ssh_public_key_free(SilcSshPublicKey public_key)
 {
   if (public_key->fields)
     silc_hash_table_free(public_key->fields);
+  public_key->pkcs->public_key_free(public_key->pkcs,
+                                   public_key->public_key);
   silc_free(public_key);
 }
 
@@ -410,8 +416,8 @@ SilcBool silc_ssh_public_key_add_field(SilcSshPublicKey public_key,
 
   if (!public_key->fields) {
     public_key->fields =
-      silc_hash_table_alloc(NULL, 0, silc_hash_string, NULL,
-                           silc_hash_string_compare, NULL,
+      silc_hash_table_alloc(NULL, 0, silc_hash_string_case, NULL,
+                           silc_hash_string_case_compare, NULL,
                            silc_ssh_field_dest, NULL, TRUE);
     if (!public_key->fields)
       return FALSE;