X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnamestore%2Fnamestore.h;h=7d406df61d56be3c0124da9736c05e9bcbb4407c;hb=dc40d894157a9eeee4c72f8cb974fd48e1a98a1b;hp=ac59d9a119698ab548c3d3d72c22b57f64436a1a;hpb=46bab5b9f9afefaac097767ea356defea5efbbaa;p=oweals%2Fgnunet.git diff --git a/src/namestore/namestore.h b/src/namestore/namestore.h index ac59d9a11..7d406df61 100644 --- a/src/namestore/namestore.h +++ b/src/namestore/namestore.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + (C) 2011-2013 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 @@ -22,103 +22,17 @@ * @file namestore/namestore.h * @brief common internal definitions for namestore service * @author Matthias Wachs + * @author Christian Grothoff */ #ifndef NAMESTORE_H #define NAMESTORE_H -/* - * Collect message types here, move to protocols later - */ -#define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME 431 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE 432 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT 433 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE 434 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE 435 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE 436 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE 437 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE_RESPONSE 438 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME 439 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE 440 - -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START 445 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE 446 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT 447 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP 448 -#define GNUNET_MESSAGE_TYPE_NAMESTORE_DISCONNECT 449 - -/** - * Create a signature based on name and records - * - * @param key the private key - * @param name the name - * @param rd record data - * @param rd_count number of records - * - * @return the signature - */ -struct GNUNET_CRYPTO_RsaSignature * -GNUNET_NAMESTORE_create_signature (const struct GNUNET_CRYPTO_RsaPrivateKey *key, - const char *name, - const struct GNUNET_NAMESTORE_RecordData *rd, - unsigned int rd_count); - /** - * Compares if two records are equal - * - * @param a Record a - * @param b Record b - * - * @return GNUNET_YES or GNUNET_NO + * Maximum length of any name, including 0-termination. */ -int -GNUNET_NAMESTORE_records_cmp (const struct GNUNET_NAMESTORE_RecordData *a, - const struct GNUNET_NAMESTORE_RecordData *b); - +#define MAX_NAME_LEN 256 GNUNET_NETWORK_STRUCT_BEGIN -/** - * A GNS record serialized for network transmission. - * - * Layout is [struct GNUNET_NAMESTORE_NetworkRecord][char[data_size] data] - */ -struct GNUNET_NAMESTORE_NetworkRecord -{ - /** - * Expiration time for the DNS record. - */ - struct GNUNET_TIME_AbsoluteNBO expiration; - - /** - * Number of bytes in 'data'. - */ - uint32_t data_size; - - /** - * Type of the GNS/DNS record. - */ - uint32_t record_type; - - /** - * Flags for the record. - */ - uint32_t flags; -}; - - - -/** - * Connect to namestore service. FIXME: UNNECESSARY. - */ -struct StartMessage -{ - - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_START - */ - struct GNUNET_MessageHeader header; - -}; - /** * Generic namestore message with op id @@ -139,38 +53,30 @@ struct GNUNET_NAMESTORE_Header /** - * Lookup a name in the namestore + * Lookup a block in the namestore */ -struct LookupNameMessage +struct LookupBlockMessage { - struct GNUNET_NAMESTORE_Header gns_header; - - /** - * The zone - */ - GNUNET_HashCode zone; - /** - * Requested record type + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK */ - uint32_t record_type; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Length of the name + * The query. */ - uint32_t name_len; + struct GNUNET_HashCode query; - /* 0-terminated name here */ }; /** * Lookup response */ -struct LookupNameResponseMessage +struct LookupBlockResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPONSE + * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; @@ -179,50 +85,27 @@ struct LookupNameResponseMessage */ struct GNUNET_TIME_AbsoluteNBO expire; - - /** - * Name length - */ - uint16_t name_len; - /** - * Bytes of serialized record data + * Signature. */ - uint16_t rd_len; - - /** - * Number of records contained - */ - uint16_t rd_count; - - /** - * Is the signature valid - * GNUNET_YES or GNUNET_NO - */ - int16_t contains_sig; - - /** - * All zeros if 'contains_sig' is GNUNET_NO. - */ - struct GNUNET_CRYPTO_RsaSignature signature; + struct GNUNET_CRYPTO_EccSignature signature; /** - * The public key for the name + * Derived public key. */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded public_key; + struct GNUNET_CRYPTO_EccPublicKey derived_key; - /* 0-terminated name and serialized record data */ - /* rd_len bytes serialized record data */ + /* follwed by encrypted block data */ }; /** - * Put a record to the namestore + * Cache a record in the namestore. */ -struct RecordPutMessage +struct BlockCacheMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_RECORD_PUT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE */ struct GNUNET_NAMESTORE_Header gns_header; @@ -232,70 +115,49 @@ struct RecordPutMessage struct GNUNET_TIME_AbsoluteNBO expire; /** - * Name length - */ - uint16_t name_len; - - /** - * Length of serialized record data - */ - uint16_t rd_len; - - /** - * Number of records contained - */ - uint16_t rd_count; - - /** - * always zero (for alignment) - */ - uint16_t reserved; - - /** - * The signature + * Signature. */ - struct GNUNET_CRYPTO_RsaSignature signature; + struct GNUNET_CRYPTO_EccSignature signature; /** - * The public key + * Derived public key. */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded public_key; - - /* name (0-terminated) followed by "rd_count" serialized records */ + struct GNUNET_CRYPTO_EccPublicKey derived_key; + /* follwed by encrypted block data */ }; /** - * Put a record to the namestore response + * Response to a request to cache a block. */ -struct RecordPutResponseMessage +struct BlockCacheResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_PUT_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * result: - * GNUNET_SYSERR on failure - * GNUNET_OK on success + * #GNUNET_OK on success, #GNUNET_SYSERR error */ int32_t op_result; }; /** - * Create a record and put it to the namestore - * Memory layout: + * Store a record to the namestore (as authority). */ -struct RecordCreateMessage +struct RecordStoreMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE */ struct GNUNET_NAMESTORE_Header gns_header; + /** + * Expiration time + */ struct GNUNET_TIME_AbsoluteNBO expire; /** @@ -309,139 +171,123 @@ struct RecordCreateMessage uint16_t rd_len; /** - * Record count + * Number of records contained */ uint16_t rd_count; /** - * private key length + * always zero (for alignment) + */ + uint16_t reserved; + + /** + * The private key of the authority. */ - uint16_t pkey_len; + struct GNUNET_CRYPTO_EccPrivateKey private_key; /* followed by: - * GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded private key with length pkey_len * name with length name_len - * serialized record data with length rd_len - * */ + * serialized record data with rd_count records + */ }; /** - * Create a record to the namestore response + * Response to a record storage request. */ -struct RecordCreateResponseMessage +struct RecordStoreResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_CREATE_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * name length: GNUNET_NO already exists, GNUNET_YES on success, GNUNET_SYSERR error + * #GNUNET_SYSERR on failure, #GNUNET_OK on success */ int32_t op_result; }; + /** - * Remove a record from the namestore - * Memory layout: + * Lookup a name for a zone hash */ -struct RecordRemoveMessage +struct ZoneToNameMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Name length + * The private key of the zone to look up in */ - uint16_t name_len; + struct GNUNET_CRYPTO_EccPrivateKey zone; /** - * Length of serialized rd data + * The public key of the target zone */ - uint16_t rd_len; - - /** - * Number of records contained - */ - uint16_t rd_count; - - /** - * Length of private key - */ - uint16_t pkey_len; - - /* followed by: - * GNUNET_CRYPTO_RsaPrivateKeyBinaryEncoded private key with length pkey_len - * name with length name_len - * serialized record data with length rd_len - * */ + struct GNUNET_CRYPTO_EccPublicKey value_zone; }; /** - * Remove a record from the namestore response + * Respone for zone to name lookup */ -struct RecordRemoveResponseMessage +struct ZoneToNameResponseMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_REMOVE_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE */ struct GNUNET_NAMESTORE_Header gns_header; /** - * result: - * 0 : successful - * 1 : no records for entry - * 2 : Could not find record to remove - * 3 : Failed to create new signature - * 4 : Failed to put new set of records in database + * Length of the name */ - int32_t op_result; -}; + uint16_t name_len; + /** + * Length of serialized record data + */ + uint16_t rd_len; -/** - * Lookup a name for a zone hash - */ -struct ZoneToNameMessage -{ /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME + * Number of records contained */ - struct GNUNET_NAMESTORE_Header gns_header; + uint16_t rd_count; /** - * The hash of public key of the zone to look up in + * result in NBO: #GNUNET_OK on success, #GNUNET_NO if there were no + * results, #GNUNET_SYSERR on error */ - GNUNET_HashCode zone; + int16_t res; /** - * The hash of the public key of the target zone + * The private key of the zone that contained the name. */ - GNUNET_HashCode value_zone; + struct GNUNET_CRYPTO_EccPrivateKey zone; + + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ + }; + /** - * Respone for zone to name lookup + * Record is returned from the namestore (as authority). */ -struct ZoneToNameResponseMessage +struct RecordResultMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME_RESPONSE + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Record block expiration - */ - struct GNUNET_TIME_AbsoluteNBO expire; - - /** - * Length of the name + * Name length */ uint16_t name_len; @@ -451,51 +297,60 @@ struct ZoneToNameResponseMessage uint16_t rd_len; /** - * Number of records contained + * Number of records contained */ uint16_t rd_count; - /* result in NBO: GNUNET_OK on success, GNUNET_NO if there were no results, GNUNET_SYSERR on error */ - int16_t res; - /** - * Signature + * always zero (for alignment) */ - struct GNUNET_CRYPTO_RsaSignature signature; + uint16_t reserved; /** - * Publik key + * The private key of the authority. */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded zone_key; + struct GNUNET_CRYPTO_EccPrivateKey private_key; + /* followed by: + * name with length name_len + * serialized record data with rd_count records + */ }; - /** - * Start a zone iteration for the given zone + * Start monitoring a zone. */ -struct ZoneIterationStartMessage +struct ZoneMonitorStartMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START */ struct GNUNET_NAMESTORE_Header gns_header; /** - * Zone hash + * Zone key. */ - GNUNET_HashCode zone; + struct GNUNET_CRYPTO_EccPrivateKey zone; + +}; + +/** + * Start a zone iteration for the given zone + */ +struct ZoneIterationStartMessage +{ /** - * Which flags must be included + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START */ - uint16_t must_have_flags; + struct GNUNET_NAMESTORE_Header gns_header; /** - * Which flags must not be included + * Zone key. All zeros for "all zones". */ - uint16_t must_not_have_flags; + struct GNUNET_CRYPTO_EccPrivateKey zone; + }; @@ -505,7 +360,7 @@ struct ZoneIterationStartMessage struct ZoneIterationNextMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT */ struct GNUNET_NAMESTORE_Header gns_header; }; @@ -517,53 +372,12 @@ struct ZoneIterationNextMessage struct ZoneIterationStopMessage { /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP + * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP */ struct GNUNET_NAMESTORE_Header gns_header; }; -/** - * Next result of zone iteration for the given operation - * // FIXME: use 'struct LookupResponseMessage' instead? (identical except - * for having 'contains_sig' instead of 'reserved', but fully compatible otherwise). - */ -struct ZoneIterationResponseMessage -{ - /** - * Type will be GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE - */ - struct GNUNET_NAMESTORE_Header gns_header; - struct GNUNET_TIME_AbsoluteNBO expire; - - uint16_t name_len; - - /* Record data length */ - uint16_t rd_len; - - /** - * Number of records contained - */ - uint16_t rd_count; - - /** - * always zero (for alignment) - */ - uint16_t reserved; - - /** - * All zeros if 'contains_sig' is GNUNET_NO. - */ - struct GNUNET_CRYPTO_RsaSignature signature; - - /** - * The public key - */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded public_key; - - - -}; GNUNET_NETWORK_STRUCT_END