Added SSH public key support to SKR
authorPekka Riikonen <priikone@silcnet.org>
Wed, 13 Feb 2008 15:21:13 +0000 (17:21 +0200)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 13 Feb 2008 15:21:13 +0000 (17:21 +0200)
lib/silcskr/silcskr.c
lib/silcskr/silcskr.h
lib/silcskr/silcskr_i.h

index 1923da2508a1b11bfe7d8cca034d5ca8d0b7ac3e..f720d34584d7b7157f7c6d8f876311f5a05ee25b 100644 (file)
@@ -112,10 +112,10 @@ static void silc_skr_find_destructor(void *key, void *context,
     break;
 
   default:
-    /* In SILC Public key all entries are referenced from the public key
+    /* In SILC and SSH2 keys all entries are referenced from the public key
        so don't free them.  This test is valid only when removing key
        from the repository. */
-    if (pkcs_type == SILC_PKCS_SILC)
+    if (pkcs_type == SILC_PKCS_SILC || pkcs_type == SILC_PKCS_SSH2)
       break;
 
     silc_free(context);
@@ -226,7 +226,7 @@ static void silc_skr_find_foreach(void *key, void *context,
 /* Finds entry from repository by search constraint type and data */
 
 static SilcBool silc_skr_find_entry(SilcSKR skr,
-                                   SilcSKRStatus *status,
+                                   SilcResult *status,
                                    SilcSKRFindType type,
                                    void *type_data,
                                    SilcDList *results,
@@ -307,7 +307,7 @@ static SilcBool silc_skr_del_entry(SilcSKR skr, SilcSKRFindType type,
 /* This performs AND operation.  Any entry already in `results' that is not
    in `list' will be removed from `results'. */
 
-static SilcBool silc_skr_results_and(SilcDList list, SilcSKRStatus *status,
+static SilcBool silc_skr_results_and(SilcDList list, SilcResult *status,
                                     SilcDList *results)
 {
   SilcSKRKeyInternal entry, r;
@@ -360,14 +360,14 @@ static SilcBool silc_skr_results_and(SilcDList list, SilcSKRStatus *status,
 
 /* Add SILC style public key to repository */
 
-static SilcSKRStatus silc_skr_add_silc(SilcSKR skr,
-                                      SilcPublicKey public_key,
-                                      SilcSKRKeyUsage usage,
-                                      void *key_context,
-                                      SilcSKRKey *return_key)
+static SilcResult silc_skr_add_silc(SilcSKR skr,
+                                   SilcPublicKey public_key,
+                                   SilcSKRKeyUsage usage,
+                                   void *key_context,
+                                   SilcSKRKey *return_key)
 {
   SilcSKRKeyInternal key;
-  SilcSKRStatus status = SILC_SKR_ERROR;
+  SilcResult status = SILC_ERR;
   SilcPublicKeyIdentifier ident;
   SilcSILCPublicKey silc_pubkey;
 #if defined(SILC_DEBUG)
@@ -388,14 +388,14 @@ static SilcSKRStatus silc_skr_add_silc(SilcSKR skr,
                          public_key, NULL, key_context, 0)) {
     silc_mutex_unlock(skr->lock);
     SILC_LOG_DEBUG(("Key already added"));
-    return status | SILC_SKR_ALREADY_EXIST;
+    return SILC_ERR_ALREADY_EXISTS;
   }
 
   /* Allocate key entry */
   key = silc_calloc(1, sizeof(*key));
   if (!key) {
     silc_mutex_unlock(skr->lock);
-    return status | SILC_SKR_NO_MEMORY;
+    return silc_errno;
   }
 
   key->key.usage = usage;
@@ -474,7 +474,7 @@ static SilcSKRStatus silc_skr_add_silc(SilcSKR skr,
   if (return_key)
     *return_key = (SilcSKRKey)key;
 
-  return SILC_SKR_OK;
+  return SILC_OK;
 
  err:
   silc_mutex_unlock(skr->lock);
@@ -484,14 +484,14 @@ static SilcSKRStatus silc_skr_add_silc(SilcSKR skr,
 /* Add SILC style public key to repository, and only the public key, not
    other details from the key. */
 
-static SilcSKRStatus silc_skr_add_silc_simple(SilcSKR skr,
-                                             SilcPublicKey public_key,
-                                             SilcSKRKeyUsage usage,
-                                             void *key_context,
-                                             SilcSKRKey *return_key)
+static SilcResult silc_skr_add_silc_simple(SilcSKR skr,
+                                          SilcPublicKey public_key,
+                                          SilcSKRKeyUsage usage,
+                                          void *key_context,
+                                          SilcSKRKey *return_key)
 {
   SilcSKRKeyInternal key;
-  SilcSKRStatus status = SILC_SKR_ERROR;
+  SilcResult status = SILC_ERR;
 #if defined(SILC_DEBUG)
   char tmp[256];
 #endif /* SILC_DEBUG */
@@ -505,14 +505,14 @@ static SilcSKRStatus silc_skr_add_silc_simple(SilcSKR skr,
                          public_key, NULL, key_context, 0)) {
     silc_mutex_unlock(skr->lock);
     SILC_LOG_DEBUG(("Key already added"));
-    return status | SILC_SKR_ALREADY_EXIST;
+    return SILC_ERR_ALREADY_EXISTS;
   }
 
   /* Allocate key entry */
   key = silc_calloc(1, sizeof(*key));
   if (!key) {
     silc_mutex_unlock(skr->lock);
-    return status | SILC_SKR_NO_MEMORY;
+    return silc_errno;
   }
 
   key->key.usage = usage;
@@ -544,7 +544,7 @@ static SilcSKRStatus silc_skr_add_silc_simple(SilcSKR skr,
   if (return_key)
     *return_key = (SilcSKRKey)key;
 
-  return SILC_SKR_OK;
+  return SILC_OK;
 
  err:
   silc_mutex_unlock(skr->lock);
@@ -553,11 +553,11 @@ static SilcSKRStatus silc_skr_add_silc_simple(SilcSKR skr,
 
 /* Deletes SILC public key from repository */
 
-static SilcSKRStatus silc_skr_del_silc_public_key(SilcSKR skr,
-                                                 SilcPublicKey public_key,
-                                                 void *key_context)
+static SilcResult silc_skr_del_silc_public_key(SilcSKR skr,
+                                              SilcPublicKey public_key,
+                                              void *key_context)
 {
-  SilcSKRStatus status = SILC_SKR_ERROR;
+  SilcResult status = SILC_ERR;
   SilcPublicKeyIdentifier ident;
   SilcSILCPublicKey silc_pubkey;
   SilcSKRKeyInternal key;
@@ -576,7 +576,7 @@ static SilcSKRStatus silc_skr_del_silc_public_key(SilcSKR skr,
                           public_key, &entry, key_context, 0)) {
     silc_mutex_unlock(skr->lock);
     SILC_LOG_DEBUG(("Key does not exist"));
-    return status | SILC_SKR_NOT_FOUND;
+    return SILC_ERR_NOT_FOUND;
   }
 
   silc_dlist_start(entry);
@@ -596,7 +596,221 @@ static SilcSKRStatus silc_skr_del_silc_public_key(SilcSKR skr,
 
   silc_mutex_unlock(skr->lock);
 
-  return SILC_SKR_OK;
+  return SILC_OK;
+}
+
+
+/***************************** SSH2 Public Key ******************************/
+
+/* Add SSH2 style public key to repository */
+
+static SilcResult silc_skr_add_ssh(SilcSKR skr,
+                                  SilcPublicKey public_key,
+                                  SilcSKRKeyUsage usage,
+                                  void *key_context,
+                                  SilcSKRKey *return_key)
+{
+  SilcSKRKeyInternal key;
+  SilcResult status = SILC_ERR;
+  SilcSshPublicKey ssh_pubkey;
+  const char *subject;
+#if defined(SILC_DEBUG)
+  char tmp[256];
+#endif /* SILC_DEBUG */
+
+  /* Get the SSH public key */
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+
+  /* Get subject */
+  subject = silc_ssh_public_key_get_field(ssh_pubkey, "Subject");
+
+  SILC_LOG_DEBUG(("Adding SSH public key %p [%s], context %p", public_key,
+                 subject ? subject : "none", key_context));
+
+  silc_mutex_lock(skr->lock);
+
+  /* Check that this key hasn't been added already */
+  if (silc_skr_find_entry(skr, &status, SILC_SKR_FIND_PUBLIC_KEY,
+                         public_key, NULL, key_context, 0)) {
+    silc_mutex_unlock(skr->lock);
+    SILC_LOG_DEBUG(("Key already added"));
+    return SILC_ERR_ALREADY_EXISTS;
+  }
+
+  /* Allocate key entry */
+  key = silc_calloc(1, sizeof(*key));
+  if (!key) {
+    silc_mutex_unlock(skr->lock);
+    return silc_errno;
+  }
+
+  key->key.usage = usage;
+  key->key.key = public_key;
+  key->key.key_context = key_context;
+
+#if defined(SILC_DEBUG)
+  silc_skr_type_string(SILC_SKR_FIND_USAGE, SILC_32_TO_PTR(usage),
+                      tmp, sizeof(tmp) - 1);
+  SILC_LOG_DEBUG((" Search constraint %s", tmp));
+#endif /* SILC_DEBUG */
+
+  /* Add key specifics */
+
+  if (!silc_skr_add_entry(skr, SILC_SKR_FIND_PUBLIC_KEY,
+                         public_key, key))
+    goto err;
+  key->refcnt++;
+
+  if (!silc_skr_add_entry(skr, SILC_SKR_FIND_PKCS_TYPE,
+                         SILC_32_TO_PTR(SILC_PKCS_SSH2), key))
+    goto err;
+  key->refcnt++;
+
+  if (subject) {
+    if (!silc_skr_add_entry(skr, SILC_SKR_FIND_USERNAME,
+                           (void *)subject, key))
+      goto err;
+    key->refcnt++;
+  }
+
+  if (key_context) {
+    if (!silc_skr_add_entry(skr, SILC_SKR_FIND_CONTEXT,
+                           key_context, key))
+      goto err;
+    key->refcnt++;
+  }
+
+  silc_mutex_unlock(skr->lock);
+
+  if (return_key)
+    *return_key = (SilcSKRKey)key;
+
+  return SILC_OK;
+
+ err:
+  silc_mutex_unlock(skr->lock);
+  return status;
+}
+
+/* Add SSH2 style public key to repository.  Only the public key is added,
+   not other information from the key. */
+
+static SilcResult silc_skr_add_ssh_simple(SilcSKR skr,
+                                         SilcPublicKey public_key,
+                                         SilcSKRKeyUsage usage,
+                                         void *key_context,
+                                         SilcSKRKey *return_key)
+{
+  SilcSKRKeyInternal key;
+  SilcResult status = SILC_ERR;
+  SilcSshPublicKey ssh_pubkey;
+#if defined(SILC_DEBUG)
+  char tmp[256];
+#endif /* SILC_DEBUG */
+
+  /* Get the SSH public key */
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+
+  SILC_LOG_DEBUG(("Adding SSH public key %p, context %p", public_key,
+                 key_context));
+
+  silc_mutex_lock(skr->lock);
+
+  /* Check that this key hasn't been added already */
+  if (silc_skr_find_entry(skr, &status, SILC_SKR_FIND_PUBLIC_KEY,
+                         public_key, NULL, key_context, 0)) {
+    silc_mutex_unlock(skr->lock);
+    SILC_LOG_DEBUG(("Key already added"));
+    return SILC_ERR_ALREADY_EXISTS;
+  }
+
+  /* Allocate key entry */
+  key = silc_calloc(1, sizeof(*key));
+  if (!key) {
+    silc_mutex_unlock(skr->lock);
+    return silc_errno;
+  }
+
+  key->key.usage = usage;
+  key->key.key = public_key;
+  key->key.key_context = key_context;
+
+#if defined(SILC_DEBUG)
+  silc_skr_type_string(SILC_SKR_FIND_USAGE, SILC_32_TO_PTR(usage),
+                      tmp, sizeof(tmp) - 1);
+  SILC_LOG_DEBUG((" Search constraint %s", tmp));
+#endif /* SILC_DEBUG */
+
+  /* Add key specifics */
+
+  if (!silc_skr_add_entry(skr, SILC_SKR_FIND_PUBLIC_KEY,
+                         public_key, key))
+    goto err;
+  key->refcnt++;
+
+  if (key_context) {
+    if (!silc_skr_add_entry(skr, SILC_SKR_FIND_CONTEXT,
+                           key_context, key))
+      goto err;
+    key->refcnt++;
+  }
+
+  silc_mutex_unlock(skr->lock);
+
+  if (return_key)
+    *return_key = (SilcSKRKey)key;
+
+  return SILC_OK;
+
+ err:
+  silc_mutex_unlock(skr->lock);
+  return status;
+}
+
+/* Deletes SSH public key from repository */
+
+static SilcResult silc_skr_del_ssh_public_key(SilcSKR skr,
+                                             SilcPublicKey public_key,
+                                             void *key_context)
+{
+  SilcResult status = SILC_ERR;
+  SilcSshPublicKey ssh_pubkey;
+  SilcSKRKeyInternal key;
+  SilcDList entry;
+  const char *subject;
+
+  /* Get the SSH public key */
+  ssh_pubkey = silc_pkcs_public_key_get_pkcs(SILC_PKCS_SSH2, public_key);
+
+  /* Get subject */
+  subject = silc_ssh_public_key_get_field(ssh_pubkey, "Subject");
+
+  SILC_LOG_DEBUG(("Deleting SSH public key %p [%s]", public_key,
+                 subject ? subject : "none"));
+
+  silc_mutex_lock(skr->lock);
+
+  /* Check that this key exists */
+  if (!silc_skr_find_entry(skr, &status, SILC_SKR_FIND_PUBLIC_KEY,
+                          public_key, &entry, key_context, 0)) {
+    silc_mutex_unlock(skr->lock);
+    SILC_LOG_DEBUG(("Key does not exist"));
+    return SILC_ERR_NOT_FOUND;
+  }
+
+  silc_dlist_start(entry);
+  key = silc_dlist_get(entry);
+  silc_dlist_uninit(entry);
+
+  silc_skr_del_entry(skr, SILC_SKR_FIND_PUBLIC_KEY, public_key, key);
+  silc_skr_del_entry(skr, SILC_SKR_FIND_PKCS_TYPE,
+                    SILC_32_TO_PTR(SILC_PKCS_SSH2), key);
+  silc_skr_del_entry(skr, SILC_SKR_FIND_USERNAME, (void *)subject, key);
+  silc_skr_del_entry(skr, SILC_SKR_FIND_CONTEXT, key_context, key);
+
+  silc_mutex_unlock(skr->lock);
+
+  return SILC_OK;
 }
 
 
@@ -655,16 +869,16 @@ void silc_skr_uninit(SilcSKR skr)
 
 /* Adds public key to key repository */
 
-SilcSKRStatus silc_skr_add_public_key(SilcSKR skr,
-                                     SilcPublicKey public_key,
-                                     SilcSKRKeyUsage usage,
-                                     void *key_context,
-                                     SilcSKRKey *return_key)
+SilcResult silc_skr_add_public_key(SilcSKR skr,
+                                  SilcPublicKey public_key,
+                                  SilcSKRKeyUsage usage,
+                                  void *key_context,
+                                  SilcSKRKey *return_key)
 {
   SilcPKCSType type;
 
   if (!public_key)
-    return SILC_SKR_ERROR;
+    return SILC_ERR_INVALID_ARGUMENT;
 
   type = silc_pkcs_get_type(public_key);
 
@@ -676,25 +890,29 @@ SilcSKRStatus silc_skr_add_public_key(SilcSKR skr,
     return silc_skr_add_silc(skr, public_key, usage, key_context, return_key);
     break;
 
+  case SILC_PKCS_SSH2:
+    return silc_skr_add_ssh(skr, public_key, usage, key_context, return_key);
+    break;
+
   default:
     break;
   }
 
-  return SILC_SKR_ERROR;
+  return SILC_ERR_NOT_SUPPORTED;
 }
 
 /* Adds public key to repository. */
 
-SilcSKRStatus silc_skr_add_public_key_simple(SilcSKR skr,
-                                            SilcPublicKey public_key,
-                                            SilcSKRKeyUsage usage,
-                                            void *key_context,
-                                            SilcSKRKey *return_key)
+SilcResult silc_skr_add_public_key_simple(SilcSKR skr,
+                                         SilcPublicKey public_key,
+                                         SilcSKRKeyUsage usage,
+                                         void *key_context,
+                                         SilcSKRKey *return_key)
 {
   SilcPKCSType type;
 
   if (!public_key)
-    return SILC_SKR_ERROR;
+    return SILC_ERR_INVALID_ARGUMENT;
 
   type = silc_pkcs_get_type(public_key);
 
@@ -707,23 +925,28 @@ SilcSKRStatus silc_skr_add_public_key_simple(SilcSKR skr,
                                    return_key);
     break;
 
+  case SILC_PKCS_SSH2:
+    return silc_skr_add_ssh_simple(skr, public_key, usage, key_context,
+                                  return_key);
+    break;
+
   default:
     break;
   }
 
-  return SILC_SKR_ERROR;
+  return SILC_ERR_NOT_SUPPORTED;
 }
 
 /* Remove key from repository */
 
-SilcSKRStatus silc_skr_del_public_key(SilcSKR skr,
+SilcResult silc_skr_del_public_key(SilcSKR skr,
                                      SilcPublicKey public_key,
                                      void *key_context)
 {
   SilcPKCSType type;
 
   if (!public_key)
-    return SILC_SKR_ERROR;
+    return SILC_ERR_INVALID_ARGUMENT;
 
   type = silc_pkcs_get_type(public_key);
 
@@ -735,11 +958,15 @@ SilcSKRStatus silc_skr_del_public_key(SilcSKR skr,
     return silc_skr_del_silc_public_key(skr, public_key, key_context);
     break;
 
+  case SILC_PKCS_SSH2:
+    return silc_skr_del_ssh_public_key(skr, public_key, key_context);
+    break;
+
   default:
     break;
   }
 
-  return SILC_SKR_ERROR;
+  return SILC_ERR_NOT_SUPPORTED;
 }
 
 /* Reference key */
@@ -907,7 +1134,7 @@ SilcAsyncOperation silc_skr_find(SilcSKR skr, SilcSchedule schedule,
                                 SilcSKRFindCallback callback,
                                 void *callback_context)
 {
-  SilcSKRStatus status = SILC_SKR_ERROR;
+  SilcResult status = SILC_ERR;
   SilcHashTableList htl;
   SilcDList list, results = NULL;
   void *type, *ctx, *usage = NULL;
@@ -983,7 +1210,7 @@ SilcAsyncOperation silc_skr_find(SilcSKR skr, SilcSchedule schedule,
     callback(skr, find, status, NULL, callback_context);
   } else {
     silc_dlist_start(results);
-    callback(skr, find, SILC_SKR_OK, results, callback_context);
+    callback(skr, find, SILC_OK, results, callback_context);
   }
 
   return NULL;
index be1521bbc7529411523a81c354f0b13125205bd1..ba36bc3c3de9b70445be6a38e71598d0fea58b5c 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2005 - 2007 Pekka Riikonen
+  Copyright (C) 2005 - 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
 
 */
 
-/****h* silcskr/SILC Key Repository
+/****h* silcskr/Key Manager and Repository
  *
  * DESCRIPTION
  *
- * SILC Key repository is a generic public key and certificate repository
- * which allows fast and versatile ways to retrieve public keys from the
- * the repository.
+ * SILC Key manager and repository is a generic public key and certificate
+ * manager which allows fast and versatile ways to store, retrieve and
+ * validate public keys and certificates.
  *
  * SILC Key Repository is thread safe.  Same key repository context can be
  * safely used in multi threaded environment.
@@ -33,7 +33,7 @@
 #ifndef SILCSKR_H
 #define SILCSKR_H
 
-/****s* silcskr/SilcSKRAPI/SilcSKR
+/****s* silcskr/SilcSKR
  *
  * NAME
  *
@@ -49,7 +49,7 @@
  ***/
 typedef struct SilcSKRObject *SilcSKR, SilcSKRStruct;
 
-/****s* silcskr/SilcSKRAPI/SilcSKRFind
+/****s* silcskr/SilcSKRFind
  *
  * NAME
  *
@@ -65,7 +65,7 @@ typedef struct SilcSKRObject *SilcSKR, SilcSKRStruct;
  ***/
 typedef struct SilcSKRFindStruct *SilcSKRFind;
 
-/****d* silcskr/SilcSKRAPI/SilcSKRKeyUsage
+/****d* silcskr/SilcSKRKeyUsage
  *
  * NAME
  *
@@ -96,7 +96,7 @@ typedef enum {
 } SilcSKRKeyUsage;
 /***/
 
-/****s* silcskr/SilcSKRAPI/SilcSKRKey
+/****s* silcskr/SilcSKRKey
  *
  * NAME
  *
@@ -118,45 +118,13 @@ typedef struct SilcSKRKeyStruct {
 } *SilcSKRKey;
 /***/
 
-/****d* silcskr/SilcSKRAPI/SilcSKRStatus
- *
- * NAME
- *
- *    typedef enum { ... } SilcSKRStatus;
- *
- * DESCRIPTION
- *
- *    Indicates the status of the key repository procedures.  This is
- *    returned to SilcSKRFindCallback function to indicate the status
- *    of the finding.  This is a bitmask, and more than one status may
- *    be set at one time.
- *
- *    If there are no errors only SILC_SKR_OK is set.  If error occurred
- *    then at least SILC_SKR_ERROR is set, and possibly other error
- *    status also.
- *
- *    If the SILC_SKR_UNSUPPORTED_TYPE is returned the repository does not
- *    support the public key type and it cannot be added to the repository.
- *
- * SOURCE
- */
-typedef enum {
-  SILC_SKR_OK                 = 0x00000001, /* All is Ok */
-  SILC_SKR_ERROR              = 0x00000002, /* Generic error status */
-  SILC_SKR_ALREADY_EXIST      = 0x00000004, /* Key already exist */
-  SILC_SKR_NOT_FOUND          = 0x00000008, /* No keys were found */
-  SILC_SKR_NO_MEMORY          = 0x00000010, /* System out of memory */
-  SILC_SKR_UNSUPPORTED_TYPE   = 0x00000020, /* Unsupported PKCS type */
-} SilcSKRStatus;
-/***/
-
-/****f* silcskr/SilcSKRAPI/SilcSKRFindCallback
+/****f* silcskr/SilcSKRFindCallback
  *
  * SYNOPSIS
  *
  *    typedef void (*SilcSKRFindCallback)(SilcSKR skr, SilcSKRFind find,
- *                                        SilcSKRStatus status,
- *                                        SilcDList keys, void *context);
+ *                                        SilcResult status, SilcDList keys,
+ *                                        void *context);
  *
  * DESCRIPTION
  *
@@ -170,10 +138,10 @@ typedef enum {
  *
  ***/
 typedef void (*SilcSKRFindCallback)(SilcSKR skr, SilcSKRFind find,
-                                   SilcSKRStatus status,
-                                   SilcDList keys, void *context);
+                                   SilcResult status, SilcDList keys,
+                                   void *context);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_alloc
+/****f* silcskr/silc_skr_alloc
  *
  * SYNOPSIS
  *
@@ -186,7 +154,7 @@ typedef void (*SilcSKRFindCallback)(SilcSKR skr, SilcSKRFind find,
  ***/
 SilcSKR silc_skr_alloc(void);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_free
+/****f* silcskr/silc_skr_free
  *
  * SYNOPSIS
  *
@@ -199,7 +167,7 @@ SilcSKR silc_skr_alloc(void);
  ***/
 void silc_skr_free(SilcSKR skr);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_init
+/****f* silcskr/silc_skr_init
  *
  * SYNOPSIS
  *
@@ -214,7 +182,7 @@ void silc_skr_free(SilcSKR skr);
  ***/
 SilcBool silc_skr_init(SilcSKR skr);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_uninit
+/****f* silcskr/silc_skr_uninit
  *
  * SYNOPSIS
  *
@@ -228,15 +196,15 @@ SilcBool silc_skr_init(SilcSKR skr);
  ***/
 void silc_skr_uninit(SilcSKR skr);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_add_public_key
+/****f* silcskr/silc_skr_add_public_key
  *
  * SYNOPSIS
  *
- *    SilcSKRStatus silc_skr_add_public_key(SilcSKR skr,
- *                                          SilcPublicKey public_key,
- *                                          SilcSKRKeyUsage usage,
- *                                          void *key_context,
- *                                          SilcSKRKey *return_key);
+ *    SilcResult silc_skr_add_public_key(SilcSKR skr,
+ *                                       SilcPublicKey public_key,
+ *                                       SilcSKRKeyUsage usage,
+ *                                       void *key_context,
+ *                                       SilcSKRKey *return_key);
  *
  * DESCRIPTION
  *
@@ -253,32 +221,32 @@ void silc_skr_uninit(SilcSKR skr);
  *    reference may be taken with silc_skr_ref_public_key to assure the
  *    entry remains valid.
  *
- *    Returns SILC_SKR_OK if the key was added successfully, and error
+ *    Returns SILC_OK if the key was added successfully, and error
  *    status if key could not be added, or has been added already.
  *
  * EXAMPLE
  *
  *    // Add a key to repository
  *    if (silc_skr_add_public_key(repository, pubkey, SILC_SKR_USAGE_ANY,
- *                                NULL, NULL) != SILC_SKR_OK)
+ *                                NULL, NULL) != SILC_OK)
  *      goto error;
  *
  ***/
-SilcSKRStatus silc_skr_add_public_key(SilcSKR skr,
-                                     SilcPublicKey public_key,
-                                     SilcSKRKeyUsage usage,
-                                     void *key_context,
-                                     SilcSKRKey *return_key);
+SilcResult silc_skr_add_public_key(SilcSKR skr,
+                                  SilcPublicKey public_key,
+                                  SilcSKRKeyUsage usage,
+                                  void *key_context,
+                                  SilcSKRKey *return_key);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_add_public_key_simple
+/****f* silcskr/silc_skr_add_public_key_simple
  *
  * SYNOPSIS
  *
- *    SilcSKRStatus silc_skr_add_public_key_simple(SilcSKR skr,
- *                                                 SilcPublicKey public_key,
- *                                                 SilcSKRKeyUsage usage,
- *                                                 void *key_context,
- *                                                 SilcSKRKey *return_key);
+ *    SilcResult silc_skr_add_public_key_simple(SilcSKR skr,
+ *                                              SilcPublicKey public_key,
+ *                                              SilcSKRKeyUsage usage,
+ *                                              void *key_context,
+ *                                              SilcSKRKey *return_key);
  *
  * DESCRIPTION
  *
@@ -295,38 +263,38 @@ SilcSKRStatus silc_skr_add_public_key(SilcSKR skr,
  *    reference may be taken with silc_skr_ref_public_key to assure the
  *    entry remains valid.
  *
- *    Returns SILC_SKR_OK if the key was added successfully, and error
+ *    Returns SILC_OK if the key was added successfully, and error
  *    status if key could not be added, or has been added already.
  *
  ***/
-SilcSKRStatus silc_skr_add_public_key_simple(SilcSKR skr,
-                                            SilcPublicKey public_key,
-                                            SilcSKRKeyUsage usage,
-                                            void *key_context,
-                                            SilcSKRKey *return_key);
+SilcResult silc_skr_add_public_key_simple(SilcSKR skr,
+                                         SilcPublicKey public_key,
+                                         SilcSKRKeyUsage usage,
+                                         void *key_context,
+                                         SilcSKRKey *return_key);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_del_public_key
+/****f* silcskr/silc_skr_del_public_key
  *
  * SYNOPSIS
  *
- *    SilcSKRStatus silc_skr_del_public_key(SilcSKR skr,
- *                                          SilcPublicKey public_key,
- *                                          void *key_context);
+ *    SilcResult silc_skr_del_public_key(SilcSKR skr,
+ *                                       SilcPublicKey public_key,
+ *                                       void *key_context);
  *
  * DESCRIPTION
  *
  *    Removes and destroyes the public key from the repository.  The
  *    public_key will become invalid after this call returns.
  *
- *    Returns SILC_SKR_OK if the key was added successfully, and error
- *    status if key could not be added, or has been added already.
+ *    Returns SILC_OK if the key was deleted successfully, and error
+ *    status if key could not be deleted, or has been deleted already.
  *
  ***/
-SilcSKRStatus silc_skr_del_public_key(SilcSKR skr,
-                                     SilcPublicKey public_key,
-                                     void *key_context);
+SilcResult silc_skr_del_public_key(SilcSKR skr,
+                                  SilcPublicKey public_key,
+                                  void *key_context);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_ref_public_key
+/****f* silcskr/silc_skr_ref_public_key
  *
  * SYNOPSIS
  *
@@ -341,7 +309,7 @@ SilcSKRStatus silc_skr_del_public_key(SilcSKR skr,
  ***/
 void silc_skr_ref_public_key(SilcSKR skr, SilcSKRKey key);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_unref_public_key
+/****f* silcskr/silc_skr_unref_public_key
  *
  * SYNOPSIS
  *
@@ -356,7 +324,7 @@ void silc_skr_ref_public_key(SilcSKR skr, SilcSKRKey key);
  ***/
 void silc_skr_unref_public_key(SilcSKR skr, SilcSKRKey key);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_alloc
+/****f* silcskr/silc_skr_find_alloc
  *
  * SYNOPSIS
  *
@@ -371,7 +339,7 @@ void silc_skr_unref_public_key(SilcSKR skr, SilcSKRKey key);
  ***/
 SilcSKRFind silc_skr_find_alloc(void);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_free
+/****f* silcskr/silc_skr_find_free
  *
  * SYNOPSIS
  *
@@ -384,7 +352,7 @@ SilcSKRFind silc_skr_find_alloc(void);
  ***/
 void silc_skr_find_free(SilcSKRFind find);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_add_pkcs_type
+/****f* silcskr/silc_skr_find_add_pkcs_type
  *
  * SYNOPSIS
  *
@@ -399,7 +367,7 @@ void silc_skr_find_free(SilcSKRFind find);
  ***/
 SilcBool silc_skr_find_set_pkcs_type(SilcSKRFind find, SilcPKCSType type);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_username
+/****f* silcskr/silc_skr_find_set_username
  *
  * SYNOPSIS
  *
@@ -416,7 +384,7 @@ SilcBool silc_skr_find_set_pkcs_type(SilcSKRFind find, SilcPKCSType type);
  ***/
 SilcBool silc_skr_find_set_username(SilcSKRFind find, const char *username);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_host
+/****f* silcskr/silc_skr_find_set_host
  *
  * SYNOPSIS
  *
@@ -433,7 +401,7 @@ SilcBool silc_skr_find_set_username(SilcSKRFind find, const char *username);
  ***/
 SilcBool silc_skr_find_set_host(SilcSKRFind find, const char *host);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_realname
+/****f* silcskr/silc_skr_find_set_realname
  *
  * SYNOPSIS
  *
@@ -450,7 +418,7 @@ SilcBool silc_skr_find_set_host(SilcSKRFind find, const char *host);
  ***/
 SilcBool silc_skr_find_set_realname(SilcSKRFind find, const char *realname);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_email
+/****f* silcskr/silc_skr_find_set_email
  *
  * SYNOPSIS
  *
@@ -467,7 +435,7 @@ SilcBool silc_skr_find_set_realname(SilcSKRFind find, const char *realname);
  ***/
 SilcBool silc_skr_find_set_email(SilcSKRFind find, const char *email);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_org
+/****f* silcskr/silc_skr_find_set_org
  *
  * SYNOPSIS
  *
@@ -484,7 +452,7 @@ SilcBool silc_skr_find_set_email(SilcSKRFind find, const char *email);
  ***/
 SilcBool silc_skr_find_set_org(SilcSKRFind find, const char *org);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_country
+/****f* silcskr/silc_skr_find_set_country
  *
  * SYNOPSIS
  *
@@ -501,7 +469,7 @@ SilcBool silc_skr_find_set_org(SilcSKRFind find, const char *org);
  ***/
 SilcBool silc_skr_find_set_country(SilcSKRFind find, const char *country);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_public_key
+/****f* silcskr/silc_skr_find_set_public_key
  *
  * SYNOPSIS
  *
@@ -517,7 +485,7 @@ SilcBool silc_skr_find_set_country(SilcSKRFind find, const char *country);
 SilcBool silc_skr_find_set_public_key(SilcSKRFind find,
                                      SilcPublicKey public_key);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_context
+/****f* silcskr/silc_skr_find_set_context
  *
  * SYNOPSIS
  *
@@ -532,7 +500,7 @@ SilcBool silc_skr_find_set_public_key(SilcSKRFind find,
  ***/
 SilcBool silc_skr_find_set_context(SilcSKRFind find, void *context);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find_set_usage
+/****f* silcskr/silc_skr_find_set_usage
  *
  * SYNOPSIS
  *
@@ -549,7 +517,7 @@ SilcBool silc_skr_find_set_context(SilcSKRFind find, void *context);
  ***/
 SilcBool silc_skr_find_set_usage(SilcSKRFind find, SilcSKRKeyUsage usage);
 
-/****f* silcskr/SilcSKRAPI/silc_skr_find
+/****f* silcskr/silc_skr_find
  *
  * SYNOPSIS
  *
index ef6ec7128a7b24632cd6d52a0f44303fea715344..f8e8e92aa2b4b5c4354f2ff4c1c2641c2e3eaf72 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2005 Pekka Riikonen
+  Copyright (C) 2005 - 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
@@ -42,4 +42,12 @@ struct SilcSKRFindStruct {
   SilcHashTable constr;                           /* Search constraints */
 };
 
+/* Backwards support */
+#define SILC_SKR_OK SILC_OK
+#define SILC_SKR_ERROR SILC_ERR
+#define SILC_SKR_ALREADY_EXIST SILC_ERR_ALREADY_EXISTS
+#define SILC_SKR_NOT_FOUND SILC_ERR_NOT_FOUND
+#define SILC_SKR_NO_MEMORY SILC_ERR_OUT_OF_MEMORY
+#define SILC_SKR_UNSUPPORTED_TYPE SILC_ERR_NOT_SUPPORTED
+
 #endif /* SILCSKR_I_H */