From: Pekka Riikonen Date: Tue, 8 Jan 2008 15:14:17 +0000 (+0000) Subject: Moved SILC protocol ID utility functions to SILC core library. X-Git-Tag: 1.2.beta1~30 X-Git-Url: http://git.silcnet.org/gitweb/?p=crypto.git;a=commitdiff_plain;h=e0fee2ed75e024dc18f60e6404489db3d6eadad4 Moved SILC protocol ID utility functions to SILC core library. --- diff --git a/CHANGES.RUNTIME b/CHANGES.RUNTIME index 9ce124dd..f6aa9276 100644 --- a/CHANGES.RUNTIME +++ b/CHANGES.RUNTIME @@ -1,3 +1,9 @@ +Tue Jan 8 17:08:28 EET 2008 Pekka Riikonen + + * Moved SILC protocol ID specific utility functions to SILC + core library from utility library. Affected files are + lib/silcutil/silcutil.[ch]. + Tue Jan 8 09:41:57 EET 2008 Pekka Riikonen * Fixed printable fingerprint bufferoverlfow, RedHat bug 372021. diff --git a/lib/silcutil/silcutil.c b/lib/silcutil/silcutil.c index 07688e36..75e85f93 100644 --- a/lib/silcutil/silcutil.c +++ b/lib/silcutil/silcutil.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2007 Pekka Riikonen + Copyright (C) 1997 - 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 @@ -224,110 +224,13 @@ char *silc_format(char *fmt, ...) va_list args; char buf[8192]; - memset(buf, 0, sizeof(buf)); va_start(args, fmt); - silc_vsnprintf(buf, sizeof(buf) - 1, fmt, args); + silc_vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); return silc_strdup(buf); } -/* Hash a ID. The `user_context' is the ID type. */ - -SilcUInt32 silc_hash_id(void *key, void *user_context) -{ - SilcIdType id_type = (SilcIdType)SILC_PTR_TO_32(user_context); - SilcUInt32 h = 0; - int i; - - switch (id_type) { - case SILC_ID_CLIENT: - { - SilcClientID *id = (SilcClientID *)key; - - /* The client ID is hashed by hashing the hash of the ID - (which is a truncated MD5 hash of the nickname) so that we - can access the entry from the cache with both Client ID but - with just a hash from the ID as well. */ - return silc_hash_client_id_hash(id->hash, NULL); - } - break; - case SILC_ID_SERVER: - { - SilcServerID *id = (SilcServerID *)key; - - h = id->port * id->rnd; - for (i = 0; i < id->ip.data_len; i++) - h ^= id->ip.data[i]; - - return h; - } - break; - case SILC_ID_CHANNEL: - { - SilcChannelID *id = (SilcChannelID *)key; - - h = id->port * id->rnd; - for (i = 0; i < id->ip.data_len; i++) - h ^= id->ip.data[i]; - - return h; - } - break; - default: - break; - } - - return h; -} - -/* Hash Client ID's hash. */ - -SilcUInt32 silc_hash_client_id_hash(void *key, void *user_context) -{ - int i; - unsigned char *hash = key; - SilcUInt32 h = 0, g; - - for (i = 0; i < CLIENTID_HASH_LEN; i++) { - h = (h << 4) + hash[i]; - if ((g = h & 0xf0000000)) { - h = h ^ (g >> 24); - h = h ^ g; - } - } - - return h; -} - -/* Compares two ID's. May be used as SilcHashTable comparison function. - The Client ID's compares only the hash of the Client ID not any other - part of the Client ID. Other ID's are fully compared. */ - -SilcBool silc_hash_id_compare(void *key1, void *key2, void *user_context) -{ - SilcIdType id_type = (SilcIdType)SILC_PTR_TO_32(user_context); - return (id_type == SILC_ID_CLIENT ? - SILC_ID_COMPARE_HASH((SilcClientID *)key1, (SilcClientID *)key2) : - SILC_ID_COMPARE_TYPE(key1, key2, id_type)); -} - -/* Compares two ID's. Compares full IDs. */ - -SilcBool silc_hash_id_compare_full(void *key1, void *key2, void *user_context) -{ - SilcIdType id_type = (SilcIdType)SILC_PTR_TO_32(user_context); - return SILC_ID_COMPARE_TYPE(key1, key2, id_type); -} - -/* Compare two Client ID's entirely and not just the hash from the ID. */ - -SilcBool silc_hash_client_id_compare(void *key1, void *key2, - void *user_context) -{ - return SILC_ID_COMPARE_TYPE(key1, key2, SILC_ID_CLIENT); -} - /* Creates fingerprint from data, usually used with SHA1 digests */ char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len) @@ -569,8 +472,6 @@ SilcBool silc_hex2data(const char *hex, unsigned char *data, if (ret_data_len) *ret_data_len = i; - SILC_LOG_HEXDUMP(("len %d", i), data, i); - return TRUE; } @@ -599,7 +500,5 @@ SilcBool silc_data2hex(const unsigned char *data, SilcUInt32 data_len, *cp++ = l + (l > 9 ? 'A' - 10 : '0'); } - SILC_LOG_DEBUG(("HEX string: '%s'", hex)); - return TRUE; } diff --git a/lib/silcutil/silcutil.h b/lib/silcutil/silcutil.h index 4524a80b..726c67f4 100644 --- a/lib/silcutil/silcutil.h +++ b/lib/silcutil/silcutil.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2007 Pekka Riikonen + Copyright (C) 1997 - 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 @@ -131,79 +131,6 @@ void silc_parse_command_line(unsigned char *buffer, ***/ char *silc_format(char *fmt, ...); -/****f* silcutil/SilcUtilAPI/silc_hash_id - * - * SYNOPSIS - * - * SilcUInt32 silc_hash_id(void *key, void *user_context); - * - * DESCRIPTION - * - * Hash a ID. The `user_context' is the ID type. - * - ***/ -SilcUInt32 silc_hash_id(void *key, void *user_context); - -/****f* silcutil/SilcUtilAPI/silc_hash_client_id_hash - * - * SYNOPSIS - * - * SilcUInt32 silc_hash_client_id_hash(void *key, void *user_context) - * - * DESCRIPTION - * - * Hash Client ID's hash. - * - ***/ -SilcUInt32 silc_hash_client_id_hash(void *key, void *user_context); - -/****f* silcutil/SilcUtilAPI/silc_hash_id_compare - * - * SYNOPSIS - * - * SilcBool silc_hash_id_compare(void *key1, void *key2, - * void *user_context); - * - * DESCRIPTION - * - * Compares two ID's. May be used as SilcHashTable comparison function. - * The Client ID's compares only the hash of the Client ID not any other - * part of the Client ID. Other ID's are fully compared. - * - ***/ -SilcBool silc_hash_id_compare(void *key1, void *key2, void *user_context); - -/****f* silcutil/SilcUtilAPI/silc_hash_id_compare_full - * - * SYNOPSIS - * - * SilcBool silc_hash_id_compare_full(void *key1, void *key2, - * void *user_context) - * - * DESCRIPTION - * - * Compares two ID's. May be used as SilcHashTable comparison function. - * To compare full ID's instead of only partial, like the - * silc_hash_id_compare does, use this function. - * - ***/ -SilcBool silc_hash_id_compare_full(void *key1, void *key2, void *user_context); - -/****f* silcutil/SilcUtilAPI/silc_hash_client_id_compare - * - * SYNOPSIS - * - * SilcBool silc_hash_client_id_compare(void *key1, void *key2, - * void *user_context); - * - * DESCRIPTION - * - * Compare two Client ID's entirely and not just the hash from the ID. - * - ***/ -SilcBool silc_hash_client_id_compare(void *key1, void *key2, - void *user_context); - /****f* silcutil/SilcUtilAPI/silc_fingerprint * * SYNOPSIS