diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-11-22 11:53:26 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-11-22 11:53:26 +0000 |
commit | d9a610d5d7c6d5c59f7c75385dcc9767c06bd5c3 (patch) | |
tree | 0e8e19c935735b4ab2cd2e6b884e70a451331ed3 /src/block | |
parent | 171caf7cfe0ef1baf0bab83d9efbbfde8d672562 (diff) |
moving block plugins to respective subsystem
Diffstat (limited to 'src/block')
-rw-r--r-- | src/block/Makefile.am | 32 | ||||
-rw-r--r-- | src/block/plugin_block_dht.c | 181 | ||||
-rw-r--r-- | src/block/plugin_block_dns.c | 170 | ||||
-rw-r--r-- | src/block/plugin_block_fs.c | 322 |
4 files changed, 0 insertions, 705 deletions
diff --git a/src/block/Makefile.am b/src/block/Makefile.am index cfbcb797fd..39de6edf01 100644 --- a/src/block/Makefile.am +++ b/src/block/Makefile.am @@ -13,41 +13,9 @@ endif lib_LTLIBRARIES = libgnunetblock.la plugin_LTLIBRARIES = \ - libgnunet_plugin_block_dht.la \ - libgnunet_plugin_block_fs.la \ libgnunet_plugin_block_template.la \ - libgnunet_plugin_block_dns.la \ libgnunet_plugin_block_test.la -libgnunet_plugin_block_dht_la_SOURCES = \ - plugin_block_dht.c -libgnunet_plugin_block_dht_la_LIBADD = \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/block/libgnunetblock.la \ - $(top_builddir)/src/util/libgnunetutil.la -libgnunet_plugin_block_dht_la_LDFLAGS = \ - $(GN_PLUGIN_LDFLAGS) -libgnunet_plugin_block_dht_la_DEPENDENCIES = \ - libgnunetblock.la - - -libgnunet_plugin_block_fs_la_SOURCES = \ - plugin_block_fs.c -libgnunet_plugin_block_fs_la_LIBADD = \ - $(top_builddir)/src/block/libgnunetblock.la \ - $(top_builddir)/src/util/libgnunetutil.la -libgnunet_plugin_block_fs_la_LDFLAGS = \ - $(GN_PLUGIN_LDFLAGS) -libgnunet_plugin_block_fs_la_DEPENDENCIES = \ - libgnunetblock.la - - -libgnunet_plugin_block_dns_la_SOURCES = \ - plugin_block_dns.c -libgnunet_plugin_block_dns_la_LIBADD = \ - $(top_builddir)/src/util/libgnunetutil.la -libgnunet_plugin_block_dns_la_LDFLAGS = \ - $(GN_PLUGIN_LDFLAGS) libgnunet_plugin_block_template_la_SOURCES = \ plugin_block_template.c diff --git a/src/block/plugin_block_dht.c b/src/block/plugin_block_dht.c deleted file mode 100644 index f574e6d064..0000000000 --- a/src/block/plugin_block_dht.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - This file is part of GNUnet - (C) 2010 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file block/plugin_block_dht.c - * @brief block plugin for DHT internals (right now, find-peer requests only); - * other plugins should be used to store "useful" data in the - * DHT (see fs block plugin) - * @author Christian Grothoff - */ - -#include "platform.h" -#include "gnunet_constants.h" -#include "gnunet_hello_lib.h" -#include "gnunet_block_plugin.h" - -#define DEBUG_DHT GNUNET_EXTRA_LOGGING - - -/** - * Function called to validate a reply or a request. For - * request evaluation, simply pass "NULL" for the reply_block. - * - * @param cls closure - * @param type block type - * @param query original query (hash) - * @param bf pointer to bloom filter associated with query; possibly updated (!) - * @param bf_mutator mutation value for bf - * @param xquery extended query data (can be NULL, depending on type) - * @param xquery_size number of bytes in xquery - * @param reply_block response to validate - * @param reply_block_size number of bytes in reply block - * @return characterization of result - */ -static enum GNUNET_BLOCK_EvaluationResult -block_plugin_dht_evaluate (void *cls, enum GNUNET_BLOCK_Type type, - const GNUNET_HashCode * query, - struct GNUNET_CONTAINER_BloomFilter **bf, - int32_t bf_mutator, const void *xquery, - size_t xquery_size, const void *reply_block, - size_t reply_block_size) -{ - GNUNET_HashCode mhash; - const struct GNUNET_HELLO_Message *hello; - struct GNUNET_PeerIdentity pid; - const struct GNUNET_MessageHeader *msg; - - if (type != GNUNET_BLOCK_TYPE_DHT_HELLO) - return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED; - if (xquery_size != 0) - return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID; - if (reply_block_size == 0) - return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; - if (reply_block_size < sizeof (struct GNUNET_MessageHeader)) - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - msg = reply_block; - if (reply_block_size != ntohs (msg->size)) - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - hello = reply_block; - if (GNUNET_OK != GNUNET_HELLO_get_id (hello, &pid)) - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - if (NULL != bf) - { - GNUNET_BLOCK_mingle_hash (&pid.hashPubKey, bf_mutator, &mhash); - if (NULL != *bf) - { - if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test (*bf, &mhash)) - return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE; - } - else - { - *bf = - GNUNET_CONTAINER_bloomfilter_init (NULL, 8, - GNUNET_CONSTANTS_BLOOMFILTER_K); - } - GNUNET_CONTAINER_bloomfilter_add (*bf, &mhash); - } - return GNUNET_BLOCK_EVALUATION_OK_MORE; -} - - -/** - * Function called to obtain the key for a block. - * - * @param cls closure - * @param type block type - * @param block block to get the key for - * @param block_size number of bytes in block - * @param key set to the key (query) for the given block - * @return GNUNET_OK on success, GNUNET_SYSERR if type not supported - * (or if extracting a key from a block of this type does not work) - */ -static int -block_plugin_dht_get_key (void *cls, enum GNUNET_BLOCK_Type type, - const void *block, size_t block_size, - GNUNET_HashCode * key) -{ - const struct GNUNET_MessageHeader *msg; - const struct GNUNET_HELLO_Message *hello; - struct GNUNET_PeerIdentity *pid; - - if (type != GNUNET_BLOCK_TYPE_DHT_HELLO) - return GNUNET_SYSERR; - if (block_size < sizeof (struct GNUNET_MessageHeader)) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "block-dht", - _("Block not of type %u\n"), GNUNET_BLOCK_TYPE_DHT_HELLO); - return GNUNET_NO; - } - msg = block; - if (block_size != ntohs (msg->size)) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "block-dht", - _("Size mismatch for block\n"), - GNUNET_BLOCK_TYPE_DHT_HELLO); - return GNUNET_NO; - } - hello = block; - pid = (struct GNUNET_PeerIdentity *) key; - if (GNUNET_OK != GNUNET_HELLO_get_id (hello, pid)) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "block-dht", - _("Block of type %u is malformed\n"), - GNUNET_BLOCK_TYPE_DHT_HELLO); - return GNUNET_NO; - } - return GNUNET_OK; -} - - -/** - * Entry point for the plugin. - */ -void * -libgnunet_plugin_block_dht_init (void *cls) -{ - static enum GNUNET_BLOCK_Type types[] = - { - GNUNET_BLOCK_TYPE_DHT_HELLO, - GNUNET_BLOCK_TYPE_ANY /* end of list */ - }; - struct GNUNET_BLOCK_PluginFunctions *api; - - api = GNUNET_malloc (sizeof (struct GNUNET_BLOCK_PluginFunctions)); - api->evaluate = &block_plugin_dht_evaluate; - api->get_key = &block_plugin_dht_get_key; - api->types = types; - return api; -} - - -/** - * Exit point from the plugin. - */ -void * -libgnunet_plugin_block_dht_done (void *cls) -{ - struct GNUNET_TRANSPORT_PluginFunctions *api = cls; - - GNUNET_free (api); - return NULL; -} - -/* end of plugin_block_dht.c */ diff --git a/src/block/plugin_block_dns.c b/src/block/plugin_block_dns.c deleted file mode 100644 index b33b3798ae..0000000000 --- a/src/block/plugin_block_dns.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - This file is part of GNUnet - (C) 2010 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file block/plugin_block_dns.c - * @brief block plugin for storing .gnunet-bindings - * @author Philipp Tölke - */ - -#include "platform.h" -#include "gnunet_block_plugin.h" -#include "block_dns.h" -#include "gnunet_signatures.h" - -#define DEBUG_DHT GNUNET_EXTRA_LOGGING - -/** - * Function called to validate a reply or a request. For - * request evaluation, simply pass "NULL" for the reply_block. - * - * @param cls closure - * @param type block type - * @param query original query (hash) - * @param bf pointer to bloom filter associated with query; possibly updated (!) - * @param bf_mutator mutation value for bf - * @param xquery extended query data (can be NULL, depending on type) - * @param xquery_size number of bytes in xquery - * @param reply_block response to validate - * @param reply_block_size number of bytes in reply block - * @return characterization of result - */ -static enum GNUNET_BLOCK_EvaluationResult -block_plugin_dns_evaluate (void *cls, enum GNUNET_BLOCK_Type type, - const GNUNET_HashCode * query, - struct GNUNET_CONTAINER_BloomFilter **bf, - int32_t bf_mutator, const void *xquery, - size_t xquery_size, const void *reply_block, - size_t reply_block_size) -{ - switch (type) - { - case GNUNET_BLOCK_TYPE_DNS: - if (xquery_size != 0) - return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID; - - if (reply_block_size == 0) - return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; - - if (reply_block_size != sizeof (struct GNUNET_DNS_Record)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "DNS-Block is invalid: reply_block_size=%d != %d\n", - reply_block_size, sizeof (struct GNUNET_DNS_Record)); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - - const struct GNUNET_DNS_Record *rec = reply_block; - - if (ntohl (rec->purpose.size) != - sizeof (struct GNUNET_DNS_Record) - - sizeof (struct GNUNET_CRYPTO_RsaSignature)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "DNS-Block is invalid: rec->purpose.size=%d != %d\n", - ntohl (rec->purpose.size), - sizeof (struct GNUNET_DNS_Record) - - sizeof (struct GNUNET_CRYPTO_RsaSignature)); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - - if (GNUNET_TIME_relative_get_zero ().rel_value == - GNUNET_TIME_absolute_get_remaining (GNUNET_TIME_absolute_ntoh - (rec->expiration_time)).rel_value) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "DNS-Block is invalid: Timeout\n"); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - - if (GNUNET_OK != - GNUNET_CRYPTO_rsa_verify (htonl (GNUNET_SIGNATURE_PURPOSE_DNS_RECORD), - &rec->purpose, &rec->signature, &rec->peer)) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "DNS-Block is invalid: invalid signature\n"); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - - /* How to decide whether there are no more? */ - return GNUNET_BLOCK_EVALUATION_OK_MORE; - default: - return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED; - } -} - - -/** - * Function called to obtain the key for a block. - * - * @param cls closure - * @param type block type - * @param block block to get the key for - * @param block_size number of bytes in block - * @param key set to the key (query) for the given block - * @return GNUNET_OK on success, GNUNET_SYSERR if type not supported - * (or if extracting a key from a block of this type does not work) - */ -static int -block_plugin_dns_get_key (void *cls, enum GNUNET_BLOCK_Type type, - const void *block, size_t block_size, - GNUNET_HashCode * key) -{ - if (type != GNUNET_BLOCK_TYPE_DNS) - return GNUNET_SYSERR; - const struct GNUNET_DNS_Record *rec = block; - - memcpy (key, &rec->service_descriptor, sizeof (GNUNET_HashCode)); - return GNUNET_OK; -} - -/** - * Entry point for the plugin. - */ -void * -libgnunet_plugin_block_dns_init (void *cls) -{ - static enum GNUNET_BLOCK_Type types[] = - { - GNUNET_BLOCK_TYPE_DNS, - GNUNET_BLOCK_TYPE_ANY /* end of list */ - }; - struct GNUNET_BLOCK_PluginFunctions *api; - - api = GNUNET_malloc (sizeof (struct GNUNET_BLOCK_PluginFunctions)); - api->evaluate = &block_plugin_dns_evaluate; - api->get_key = &block_plugin_dns_get_key; - api->types = types; - return api; -} - - -/** - * Exit point from the plugin. - */ -void * -libgnunet_plugin_block_dns_done (void *cls) -{ - struct GNUNET_TRANSPORT_PluginFunctions *api = cls; - - GNUNET_free (api); - return NULL; -} - -/* end of plugin_block_dns.c */ diff --git a/src/block/plugin_block_fs.c b/src/block/plugin_block_fs.c deleted file mode 100644 index c1b4ad7c8a..0000000000 --- a/src/block/plugin_block_fs.c +++ /dev/null @@ -1,322 +0,0 @@ -/* - This file is part of GNUnet - (C) 2010 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file block/plugin_block_fs.c - * @brief blocks used for file-sharing - * @author Christian Grothoff - */ - -#include "platform.h" -#include "gnunet_block_plugin.h" -#include "block_fs.h" -#include "gnunet_signatures.h" - -#define DEBUG_FS_BLOCK GNUNET_EXTRA_LOGGING - -/** - * Number of bits we set per entry in the bloomfilter. - * Do not change! - */ -#define BLOOMFILTER_K 16 - -/** - * Function called to validate a reply or a request. For - * request evaluation, simply pass "NULL" for the reply_block. - * Note that it is assumed that the reply has already been - * matched to the key (and signatures checked) as it would - * be done with the "get_key" function. - * - * @param cls closure - * @param type block type - * @param query original query (hash) - * @param bf pointer to bloom filter associated with query; possibly updated (!) - * @param bf_mutator mutation value for bf - * @param xquery extrended query data (can be NULL, depending on type) - * @param xquery_size number of bytes in xquery - * @param reply_block response to validate - * @param reply_block_size number of bytes in reply block - * @return characterization of result - */ -static enum GNUNET_BLOCK_EvaluationResult -block_plugin_fs_evaluate (void *cls, enum GNUNET_BLOCK_Type type, - const GNUNET_HashCode * query, - struct GNUNET_CONTAINER_BloomFilter **bf, - int32_t bf_mutator, const void *xquery, - size_t xquery_size, const void *reply_block, - size_t reply_block_size) -{ - const struct SBlock *sb; - GNUNET_HashCode chash; - GNUNET_HashCode mhash; - const GNUNET_HashCode *nsid; - GNUNET_HashCode sh; - - switch (type) - { - case GNUNET_BLOCK_TYPE_FS_DBLOCK: - case GNUNET_BLOCK_TYPE_FS_IBLOCK: - if (xquery_size != 0) - { - GNUNET_break_op (0); - return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID; - } - if (reply_block == NULL) - return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; - return GNUNET_BLOCK_EVALUATION_OK_LAST; - case GNUNET_BLOCK_TYPE_FS_KBLOCK: - case GNUNET_BLOCK_TYPE_FS_NBLOCK: - if (xquery_size != 0) - { - GNUNET_break_op (0); - return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID; - } - if (reply_block == NULL) - return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; - if (NULL != bf) - { - GNUNET_CRYPTO_hash (reply_block, reply_block_size, &chash); - GNUNET_BLOCK_mingle_hash (&chash, bf_mutator, &mhash); - if (NULL != *bf) - { - if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test (*bf, &mhash)) - return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE; - } - else - { - *bf = GNUNET_CONTAINER_bloomfilter_init (NULL, 8, BLOOMFILTER_K); - } - GNUNET_CONTAINER_bloomfilter_add (*bf, &mhash); - } - return GNUNET_BLOCK_EVALUATION_OK_MORE; - case GNUNET_BLOCK_TYPE_FS_SBLOCK: - if (xquery_size != sizeof (GNUNET_HashCode)) - { - GNUNET_break_op (0); - return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID; - } - if (reply_block == NULL) - return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; - nsid = xquery; - if (reply_block_size < sizeof (struct SBlock)) - { - GNUNET_break_op (0); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - sb = reply_block; - GNUNET_CRYPTO_hash (&sb->subspace, - sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), - &sh); - if (0 != memcmp (nsid, &sh, sizeof (GNUNET_HashCode))) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, "block-fs", - _ - ("Reply mismatched in terms of namespace. Discarded.\n")); - return GNUNET_BLOCK_EVALUATION_RESULT_INVALID; - } - if (NULL != bf) - { - GNUNET_CRYPTO_hash (reply_block, reply_block_size, &chash); - GNUNET_BLOCK_mingle_hash (&chash, bf_mutator, &mhash); - if (NULL != *bf) - { - if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test (*bf, &mhash)) - return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE; - } - else - { - *bf = GNUNET_CONTAINER_bloomfilter_init (NULL, 8, BLOOMFILTER_K); - } - GNUNET_CONTAINER_bloomfilter_add (*bf, &mhash); - } - return GNUNET_BLOCK_EVALUATION_OK_MORE; - default: - return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED; - } -} - - -/** - * Function called to obtain the key for a block. - * - * @param cls closure - * @param type block type - * @param block block to get the key for - * @param block_size number of bytes in block - * @param key set to the key (query) for the given block - * @return GNUNET_OK on success, GNUNET_SYSERR if type not supported - * (or if extracting a key from a block of this type does not work) - */ -static int -block_plugin_fs_get_key (void *cls, enum GNUNET_BLOCK_Type type, - const void *block, size_t block_size, - GNUNET_HashCode * key) -{ - const struct KBlock *kb; - const struct SBlock *sb; - const struct NBlock *nb; - - switch (type) - { - case GNUNET_BLOCK_TYPE_FS_DBLOCK: - case GNUNET_BLOCK_TYPE_FS_IBLOCK: - GNUNET_CRYPTO_hash (block, block_size, key); - return GNUNET_OK; - case GNUNET_BLOCK_TYPE_FS_KBLOCK: - if (block_size < sizeof (struct KBlock)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - kb = block; - if (block_size - sizeof (struct KBlock) != - ntohl (kb->purpose.size) - - sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) - - sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (GNUNET_OK != - GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_KBLOCK, - &kb->purpose, &kb->signature, &kb->keyspace)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (key != NULL) - GNUNET_CRYPTO_hash (&kb->keyspace, - sizeof (struct - GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), - key); - return GNUNET_OK; - case GNUNET_BLOCK_TYPE_FS_SBLOCK: - if (block_size < sizeof (struct SBlock)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - sb = block; - if (block_size != - ntohl (sb->purpose.size) + sizeof (struct GNUNET_CRYPTO_RsaSignature)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (GNUNET_OK != - GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_SBLOCK, - &sb->purpose, &sb->signature, &sb->subspace)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (key != NULL) - *key = sb->identifier; - return GNUNET_OK; - case GNUNET_BLOCK_TYPE_FS_NBLOCK: - if (block_size < sizeof (struct NBlock)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - nb = block; - if (block_size - sizeof (struct NBlock) != - ntohl (nb->ns_purpose.size) - - sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose) - - sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (block_size != - ntohl (nb->ksk_purpose.size) + - sizeof (struct GNUNET_CRYPTO_RsaSignature)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (GNUNET_OK != - GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_NBLOCK_KSIG, - &nb->ksk_purpose, &nb->ksk_signature, - &nb->keyspace)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - if (GNUNET_OK != - GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_NBLOCK, - &nb->ns_purpose, &nb->ns_signature, - &nb->subspace)) - { - GNUNET_break_op (0); - return GNUNET_NO; - } - /* FIXME: we used to xor ID with NSID, - * why not here? */ - if (key != NULL) - GNUNET_CRYPTO_hash (&nb->keyspace, - sizeof (struct - GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), - key); - return GNUNET_OK; - default: - return GNUNET_SYSERR; - } -} - - -/** - * Entry point for the plugin. - */ -void * -libgnunet_plugin_block_fs_init (void *cls) -{ - static enum GNUNET_BLOCK_Type types[] = - { - GNUNET_BLOCK_TYPE_FS_DBLOCK, - GNUNET_BLOCK_TYPE_FS_IBLOCK, - GNUNET_BLOCK_TYPE_FS_KBLOCK, - GNUNET_BLOCK_TYPE_FS_SBLOCK, - GNUNET_BLOCK_TYPE_FS_NBLOCK, - GNUNET_BLOCK_TYPE_ANY /* end of list */ - }; - struct GNUNET_BLOCK_PluginFunctions *api; - - api = GNUNET_malloc (sizeof (struct GNUNET_BLOCK_PluginFunctions)); - api->evaluate = &block_plugin_fs_evaluate; - api->get_key = &block_plugin_fs_get_key; - api->types = types; - return api; -} - - -/** - * Exit point from the plugin. - */ -void * -libgnunet_plugin_block_fs_done (void *cls) -{ - struct GNUNET_TRANSPORT_PluginFunctions *api = cls; - - GNUNET_free (api); - return NULL; -} - -/* end of plugin_block_fs.c */ |