projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Integer type name change.
[silc.git]
/
lib
/
silccrypt
/
silchash.c
diff --git
a/lib/silccrypt/silchash.c
b/lib/silccrypt/silchash.c
index 4d0d27062d1f0485f4d5f81f5b0b677f2e2b2459..4bb91087de51a278d8478aefd2cbc773f54a221c 100644
(file)
--- a/
lib/silccrypt/silchash.c
+++ b/
lib/silccrypt/silchash.c
@@
-47,6
+47,16
@@
bool silc_hash_register(SilcHashObject *hash)
SILC_LOG_DEBUG(("Registering new hash function `%s'", hash->name));
SILC_LOG_DEBUG(("Registering new hash function `%s'", hash->name));
+ /* Check for existing */
+ if (silc_hash_list) {
+ SilcHashObject *entry;
+ silc_dlist_start(silc_hash_list);
+ while ((entry = silc_dlist_get(silc_hash_list)) != SILC_LIST_END) {
+ if (!strcmp(entry->name, hash->name))
+ return FALSE;
+ }
+ }
+
new = silc_calloc(1, sizeof(*new));
new->name = strdup(hash->name);
new->hash_len = hash->hash_len;
new = silc_calloc(1, sizeof(*new));
new->name = strdup(hash->name);
new->hash_len = hash->hash_len;
@@
-144,7
+154,7
@@
void silc_hash_free(SilcHash hash)
/* Returns the length of the hash digest. */
/* Returns the length of the hash digest. */
-
ui
nt32 silc_hash_len(SilcHash hash)
+
SilcUI
nt32 silc_hash_len(SilcHash hash)
{
return hash->hash->hash_len;
}
{
return hash->hash->hash_len;
}
@@
-195,7
+205,7
@@
char *silc_hash_get_supported(void)
/* Creates the hash value and returns it to the return_hash argument. */
void silc_hash_make(SilcHash hash, const unsigned char *data,
/* Creates the hash value and returns it to the return_hash argument. */
void silc_hash_make(SilcHash hash, const unsigned char *data,
-
ui
nt32 len, unsigned char *return_hash)
+
SilcUI
nt32 len, unsigned char *return_hash)
{
hash->hash->init(hash->context);
hash->hash->update(hash->context, (unsigned char *)data, len);
{
hash->hash->init(hash->context);
hash->hash->update(hash->context, (unsigned char *)data, len);
@@
-207,36
+217,23
@@
void silc_hash_make(SilcHash hash, const unsigned char *data,
caller. */
char *silc_hash_fingerprint(SilcHash hash, const unsigned char *data,
caller. */
char *silc_hash_fingerprint(SilcHash hash, const unsigned char *data,
-
ui
nt32 data_len)
+
SilcUI
nt32 data_len)
{
{
-
char fingerprint[64], *cp
;
+
SilcHash new_hash = NULL
;
unsigned char h[32];
unsigned char h[32];
-
int i
;
+
char *ret
;
- if (!hash)
- silc_hash_alloc("sha1", &hash);
+ if (!hash) {
+ silc_hash_alloc("sha1", &new_hash);
+ hash = new_hash;
+ }
silc_hash_make(hash, data, data_len, h);
silc_hash_make(hash, data, data_len, h);
-
- memset(fingerprint, 0, sizeof(fingerprint));
- cp = fingerprint;
- for (i = 0; i < hash->hash->hash_len; i++) {
- snprintf(cp, sizeof(fingerprint), "%02X", h[i]);
- cp += 2;
-
- if ((i + 1) % 2 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
+ ret = silc_fingerprint(h, hash->hash->hash_len);
- if ((i + 1) % 10 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
- }
- i--;
- if ((i + 1) % 2 == 0)
- cp[-2] = 0;
- if ((i + 1) % 10 == 0)
- cp[-1] = 0;
-
- return strdup(fingerprint);
+ if (new_hash != NULL)
+ silc_hash_free(new_hash);
+ return ret;
}
static const char vo[]= "aeiouy";
}
static const char vo[]= "aeiouy";
@@
-248,15
+245,18
@@
static const char co[]= "bcdfghklmnprstvzx";
fingerprint to the babbleprint. */
char *silc_hash_babbleprint(SilcHash hash, const unsigned char *data,
fingerprint to the babbleprint. */
char *silc_hash_babbleprint(SilcHash hash, const unsigned char *data,
-
ui
nt32 data_len)
+
SilcUI
nt32 data_len)
{
{
+ SilcHash new_hash = NULL;
char *babbleprint;
unsigned char hval[32];
unsigned int a, b, c, d, e, check;
int i, k, out_len;
char *babbleprint;
unsigned char hval[32];
unsigned int a, b, c, d, e, check;
int i, k, out_len;
- if (!hash)
- silc_hash_alloc("sha1", &hash);
+ if (!hash) {
+ silc_hash_alloc("sha1", &new_hash);
+ hash = new_hash;
+ }
/* Take fingerprint */
silc_hash_make(hash, data, data_len, hval);
/* Take fingerprint */
silc_hash_make(hash, data, data_len, hval);
@@
-301,5
+301,7
@@
char *silc_hash_babbleprint(SilcHash hash, const unsigned char *data,
}
babbleprint[k + 3] = co[16];
}
babbleprint[k + 3] = co[16];
+ if (new_hash != NULL)
+ silc_hash_free(new_hash);
return babbleprint;
}
return babbleprint;
}