Added SILC Thread Queue API
[silc.git] / lib / silcssh / silcssh.c
index 0e4f606b05e04a17457701e840a6d2f2a5911c45..89c5d1a36c4d5ef182c95ed55ebbff85d8b4f10a 100644 (file)
@@ -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;
 }
 
@@ -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;