From 7d4fb45c07b67b027b549f46c3689e44e81b3586 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Wed, 13 Feb 2008 17:21:13 +0200 Subject: [PATCH] Added SSH public key support to SKR --- lib/silcskr/silcskr.c | 321 ++++++++++++++++++++++++++++++++++------ lib/silcskr/silcskr.h | 166 +++++++++------------ lib/silcskr/silcskr_i.h | 10 +- 3 files changed, 350 insertions(+), 147 deletions(-) diff --git a/lib/silcskr/silcskr.c b/lib/silcskr/silcskr.c index 1923da25..f720d345 100644 --- a/lib/silcskr/silcskr.c +++ b/lib/silcskr/silcskr.c @@ -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; diff --git a/lib/silcskr/silcskr.h b/lib/silcskr/silcskr.h index be1521bb..ba36bc3c 100644 --- a/lib/silcskr/silcskr.h +++ b/lib/silcskr/silcskr.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - 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 @@ -17,13 +17,13 @@ */ -/****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 * diff --git a/lib/silcskr/silcskr_i.h b/lib/silcskr/silcskr_i.h index ef6ec712..f8e8e92a 100644 --- a/lib/silcskr/silcskr_i.h +++ b/lib/silcskr/silcskr_i.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - 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 */ -- 2.24.0