From 1aa42a97fb4310dd72a31aad114b6ebe26aebd8a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 Sep 2012 10:10:04 +0000 Subject: -core review --- src/gns/plugin_block_gns.c | 57 +++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) (limited to 'src/gns/plugin_block_gns.c') diff --git a/src/gns/plugin_block_gns.c b/src/gns/plugin_block_gns.c index 637467a5c..a2faecf2d 100644 --- a/src/gns/plugin_block_gns.c +++ b/src/gns/plugin_block_gns.c @@ -29,6 +29,7 @@ #include "gnunet_namestore_service.h" #include "block_gns.h" #include "gnunet_signatures.h" +#include "gns_common.h" /** * Number of bits we set per entry in the bloomfilter. @@ -62,15 +63,14 @@ block_plugin_gns_evaluate (void *cls, enum GNUNET_BLOCK_Type type, size_t xquery_size, const void *reply_block, size_t reply_block_size) { - char* name; - struct GNUNET_HashCode pkey_hash_double; + const char* name; struct GNUNET_HashCode query_key; - struct GNUNET_HashCode name_hash_double; struct GNUNET_HashCode mhash; struct GNUNET_HashCode chash; struct GNUNET_CRYPTO_ShortHashCode pkey_hash; - struct GNUNET_CRYPTO_ShortHashCode name_hash; struct GNSNameRecordBlock *nrb; + struct GNUNET_CRYPTO_HashAsciiEncoded xor_exp; + struct GNUNET_CRYPTO_HashAsciiEncoded xor_got; uint32_t rd_count; char* rd_data = NULL; int rd_len; @@ -98,20 +98,13 @@ block_plugin_gns_evaluate (void *cls, enum GNUNET_BLOCK_Type type, /* this is a reply */ nrb = (struct GNSNameRecordBlock *)reply_block; - name = (char*)&nrb[1]; - GNUNET_CRYPTO_short_hash(&nrb->public_key, - sizeof(nrb->public_key), - &pkey_hash); - - GNUNET_CRYPTO_short_hash(name, strlen(name), &name_hash); + name = (const char*)&nrb[1]; - GNUNET_CRYPTO_short_hash_double(&name_hash, &name_hash_double); - GNUNET_CRYPTO_short_hash_double(&pkey_hash, &pkey_hash_double); - - GNUNET_CRYPTO_hash_xor(&pkey_hash_double, &name_hash_double, &query_key); + GNUNET_CRYPTO_short_hash (&nrb->public_key, + sizeof(nrb->public_key), + &pkey_hash); + GNUNET_GNS_get_key_for_record (name, &pkey_hash, &query_key); - struct GNUNET_CRYPTO_HashAsciiEncoded xor_exp; - struct GNUNET_CRYPTO_HashAsciiEncoded xor_got; GNUNET_CRYPTO_hash_to_enc (&query_key, &xor_exp); GNUNET_CRYPTO_hash_to_enc (query, &xor_got); @@ -220,25 +213,23 @@ block_plugin_gns_get_key (void *cls, enum GNUNET_BLOCK_Type type, const void *block, size_t block_size, struct GNUNET_HashCode * key) { - if (type != GNUNET_BLOCK_TYPE_GNS_NAMERECORD) - return GNUNET_SYSERR; - struct GNUNET_CRYPTO_ShortHashCode name_hash; struct GNUNET_CRYPTO_ShortHashCode pkey_hash; - struct GNUNET_HashCode name_hash_double; - struct GNUNET_HashCode pkey_hash_double; - - struct GNSNameRecordBlock *nrb = (struct GNSNameRecordBlock *)block; + const struct GNSNameRecordBlock *nrb = (const struct GNSNameRecordBlock *)block; + const char *name; - GNUNET_CRYPTO_short_hash(&nrb[1], strlen((char*)&nrb[1]), &name_hash); - GNUNET_CRYPTO_short_hash(&nrb->public_key, - sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), - &pkey_hash); - - GNUNET_CRYPTO_short_hash_double(&name_hash, &name_hash_double); - GNUNET_CRYPTO_short_hash_double(&pkey_hash, &pkey_hash_double); - - GNUNET_CRYPTO_hash_xor(&name_hash_double, &pkey_hash_double, key); - + if (type != GNUNET_BLOCK_TYPE_GNS_NAMERECORD) + return GNUNET_SYSERR; + name = (const char *) &nrb[1]; + if (NULL == memchr (name, '\0', block_size - sizeof (struct GNSNameRecordBlock))) + { + /* malformed, no 0-termination in name */ + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + GNUNET_CRYPTO_short_hash (&nrb->public_key, + sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), + &pkey_hash); + GNUNET_GNS_get_key_for_record (name, &pkey_hash, key); return GNUNET_OK; } -- cgit v1.2.3