GNUnet  0.11.x
gnunet_gnsrecord_lib.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet
3  Copyright (C) 2012, 2013 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
34 #ifndef GNUNET_GNSRECORD_LIB_H
35 #define GNUNET_GNSRECORD_LIB_H
36 
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #if 0 /* keep Emacsens' auto-indent happy */
42 }
43 #endif
44 #endif
45 
49 #define GNUNET_GNSRECORD_MAX_BLOCK_SIZE (63 * 1024)
50 
51 
55 #define GNUNET_GNSRECORD_TYPE_ANY 0
56 
61 
66 {
71 
77 
82 
88 
94 
106 #define GNUNET_GNSRECORD_RF_RCMP_FLAGS (GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)
107 };
108 
109 
114 {
120  const void *data;
121 
127  uint64_t expiration_time;
128 
132  size_t data_size;
133 
137  uint32_t record_type;
138 
143 };
144 
145 
147 
152 {
157 
162 
167 
168  /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */
169 };
170 
175 {
180 
185 
191 
196 
197  /* followed by encrypted data */
198 };
199 
200 
205 {
210 
215 
221 
226 
227  /* followed by encrypted data */
228 };
229 
230 
232 {
233  uint32_t type;
234 
235  union
236  {
239  };
240 };
241 
242 
254 {
260 
265 
270 
271  /* followed by the 'original' record */
272 };
273 
282 {
287 
292 
293  /* followed by the name the delegator uses to refer to our namespace */
294 };
295 
297 
298 
307  void *cls, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd);
308 
309 
310 /* ***************** API related to GNSRECORD plugins ************** */
311 
321 char *
322 GNUNET_GNSRECORD_value_to_string (uint32_t type, const void *data,
323  size_t data_size);
324 
325 
336 int
337 GNUNET_GNSRECORD_string_to_value (uint32_t type, const char *s, void **data,
338  size_t *data_size);
339 
340 
347 uint32_t
348 GNUNET_GNSRECORD_typename_to_number (const char *dns_typename);
349 
350 
357 const char *
359 
360 
361 /* convenience APIs for serializing / deserializing GNS records */
362 
371 ssize_t
372 GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
373  const struct GNUNET_GNSRECORD_Data *rd);
374 
375 
385 ssize_t
386 GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
387  const struct GNUNET_GNSRECORD_Data *rd,
388  size_t dest_size, char *dest);
389 
390 
400 int
401 GNUNET_GNSRECORD_records_deserialize (size_t len, const char *src,
402  unsigned int rd_count,
403  struct GNUNET_GNSRECORD_Data *dest);
404 
405 
406 /* ******* general APIs relating to blocks, records and labels ******** */
407 
408 
416 int
418 
419 
425 char *
426 GNUNET_GNSRECORD_string_to_lowercase (const char *src);
427 
428 
438 const char *
440 
441 
452 const char *
454 
455 
465 int
466 GNUNET_GNSRECORD_zkey_to_pkey (const char *zkey,
468 
469 
477 void
479  const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label,
480  struct GNUNET_HashCode *query);
481 
482 
490 void
492  const struct GNUNET_IDENTITY_PublicKey *pub, const char *label,
493  struct GNUNET_HashCode *query);
494 
495 
505 struct GNUNET_GNSRECORD_Block *
508  const char *label,
509  const struct GNUNET_GNSRECORD_Data *rd,
510  unsigned int rd_count);
511 
512 
524 struct GNUNET_GNSRECORD_Block *
527  const char *label,
528  const struct GNUNET_GNSRECORD_Data *rd,
529  unsigned int rd_count);
530 
531 
539 int
541 
542 
554 int
556  const struct GNUNET_GNSRECORD_Block *block,
557  const struct GNUNET_IDENTITY_PublicKey *zone_key, const char *label,
558  GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls);
559 
560 
568 int
570  const struct GNUNET_GNSRECORD_Data *b);
571 
572 
584  unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd);
585 
586 
594 size_t
596 
605  GNUNET_GNSRECORD_Block *block);
606 
607 
617  struct GNUNET_HashCode *query);
618 
619 
632  size_t data_size,
633  uint32_t type,
635 
636 
649  char **data,
650  size_t *data_size,
651  uint32_t *type);
652 
653 
663 
664 
665 #if 0 /* keep Emacsens' auto-indent happy */
666 {
667 #endif
668 #ifdef __cplusplus
669 }
670 #endif
671 
672 #endif
673  /* end of group */
static size_t data_size
Number of bytes in data.
Definition: gnunet-abd.c:187
struct GNUNET_HashCode key
The key used in the DHT.
uint32_t data
The data value.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
static char * pkey
Public key of the zone to look in, in ASCII.
static char * zone
Name of the zone being managed.
static const struct GNUNET_IDENTITY_PrivateKey * zone_key
Private key of the zone.
static struct GNUNET_CRYPTO_EddsaPublicKey pub
Definition: gnunet-scrypt.c:46
static void expire(void *cls)
Expire a PooledConnection object.
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32;.
GNUNET_GenericReturnValue
Named constants for return values.
Definition: gnunet_common.h:92
#define GNUNET_PACKED
gcc-ism to get packed structs.
void GNUNET_GNSRECORD_query_from_private_key(const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number to the corresponding type string (e.g.
Definition: gnsrecord.c:244
GNUNET_GNSRECORD_Flags
Include the record types generated from GANA.
void GNUNET_GNSRECORD_query_from_public_key(const struct GNUNET_IDENTITY_PublicKey *pub, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
enum GNUNET_GenericReturnValue GNUNET_GNSRECORD_identity_from_data(const char *data, size_t data_size, uint32_t type, struct GNUNET_IDENTITY_PublicKey *key)
Build a #GNUNET_GNSRECORD_PublicKey from zone delegation resource record data.
char * GNUNET_GNSRECORD_value_to_string(uint32_t type, const void *data, size_t data_size)
Convert the binary value data of a record of type type to a human-readable string.
Definition: gnsrecord.c:156
int GNUNET_GNSRECORD_records_deserialize(size_t len, const char *src, unsigned int rd_count, struct GNUNET_GNSRECORD_Data *dest)
Deserialize the given records to the given destination.
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (e.g.
Definition: gnsrecord.c:217
ssize_t GNUNET_GNSRECORD_records_serialize(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, size_t dest_size, char *dest)
Serialize the given records to the given destination buffer.
char * GNUNET_GNSRECORD_string_to_lowercase(const char *src)
Convert a UTF-8 string to UTF-8 lowercase.
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of the value s of a record of type type to the respective binary repre...
Definition: gnsrecord.c:188
int GNUNET_GNSRECORD_block_decrypt(const struct GNUNET_GNSRECORD_Block *block, const struct GNUNET_IDENTITY_PublicKey *zone_key, const char *label, GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls)
Decrypt block.
enum GNUNET_GenericReturnValue GNUNET_GNSRECORD_data_from_identity(const struct GNUNET_IDENTITY_PublicKey *key, char **data, size_t *data_size, uint32_t *type)
Create record data and size from an identity key.
int GNUNET_GNSRECORD_block_verify(const struct GNUNET_GNSRECORD_Block *block)
Check if a signature is valid.
size_t GNUNET_GNSRECORD_block_get_size(const struct GNUNET_GNSRECORD_Block *block)
Returns the length of this block in bytes.
void(* GNUNET_GNSRECORD_RecordCallback)(void *cls, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Process a records that were decrypted from a block.
enum GNUNET_GenericReturnValue GNUNET_GNSRECORD_query_from_block(const struct GNUNET_GNSRECORD_Block *block, struct GNUNET_HashCode *query)
Builds the query hash from a block.
int GNUNET_GNSRECORD_is_expired(const struct GNUNET_GNSRECORD_Data *rd)
Test if a given record is expired.
ssize_t GNUNET_GNSRECORD_records_get_size(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Calculate how many bytes we will need to serialize the given records.
int GNUNET_GNSRECORD_zkey_to_pkey(const char *zkey, struct GNUNET_IDENTITY_PublicKey *pkey)
Convert an absolute domain name to the respective public key.
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create(const struct GNUNET_IDENTITY_PrivateKey *key, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records.
enum GNUNET_GenericReturnValue GNUNET_GNSRECORD_is_zonekey_type(uint32_t type)
Check if this type is one of the supported GNS zone types.
struct GNUNET_TIME_Absolute GNUNET_GNSRECORD_record_get_expiration_time(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Returns the expiration time of the given block of records.
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create2(const struct GNUNET_IDENTITY_PrivateKey *key, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records, cache derived public key (also keeps the private key in static memory,...
const char * GNUNET_GNSRECORD_z2s(const struct GNUNET_IDENTITY_PublicKey *z)
Convert a zone to a string (for printing debug messages).
int GNUNET_GNSRECORD_records_cmp(const struct GNUNET_GNSRECORD_Data *a, const struct GNUNET_GNSRECORD_Data *b)
Compares if two records are equal.
struct GNUNET_TIME_Absolute GNUNET_GNSRECORD_block_get_expiration(const struct GNUNET_GNSRECORD_Block *block)
Returns the expiration of a block.
const char * GNUNET_GNSRECORD_pkey_to_zkey(const struct GNUNET_IDENTITY_PublicKey *pkey)
Convert public key to the respective absolute domain name in the ".zkey" pTLD.
@ GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION
This expiration time of the record is a relative time (not an absolute time).
@ GNUNET_GNSRECORD_RF_SUPPLEMENTAL
This is a supplemental record.
@ GNUNET_GNSRECORD_RF_SHADOW_RECORD
This record should not be used unless all (other) records with an absolute expiration time have expir...
@ GNUNET_GNSRECORD_RF_PRIVATE
This is a private record of this peer and it should thus not be handed out to other peers.
@ GNUNET_GNSRECORD_RF_NONE
No special options.
header of what an ECC signature signs this must be followed by "size - 8" bytes of the actual signed ...
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
an ECC signature using ECDSA
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...
an ECC signature using EdDSA.
struct GNUNET_GNSRECORD_EcdsaBlock ecdsa_block
struct GNUNET_GNSRECORD_EddsaBlock eddsa_block
Record type used to box up SRV and TLSA records.
uint32_t record_type
GNS record type of the boxed record.
uint16_t service
Service of the boxed record (aka port number), in NBO.
uint16_t protocol
Protocol of the boxed record (6 = TCP, 17 = UDP, etc.).
uint32_t record_type
Type of the GNS/DNS record.
const void * data
Binary value stored in the DNS record.
size_t data_size
Number of bytes in data.
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
uint64_t expiration_time
Expiration time for the DNS record.
Information we have in an encrypted block with record data (i.e.
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Number of bytes signed; also specifies the number of bytes of encrypted data that follow.
struct GNUNET_CRYPTO_EcdsaSignature signature
Signature of the block.
struct GNUNET_TIME_AbsoluteNBO expiration_time
Expiration time of the block.
struct GNUNET_CRYPTO_EcdsaPublicKey derived_key
Derived key used for signing; hash of this is the query.
Information we have in an encrypted block with record data (i.e.
struct GNUNET_CRYPTO_EddsaPublicKey derived_key
Derived key used for signing; hash of this is the query.
struct GNUNET_TIME_AbsoluteNBO expiration_time
Expiration time of the block.
struct GNUNET_CRYPTO_EddsaSignature signature
Signature of the block.
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Number of bytes signed; also specifies the number of bytes of encrypted data that follow.
Data stored in a PLACE record.
uint32_t relay_count
Number of relays that follow.
struct GNUNET_PeerIdentity origin
Peer identity of the origin.
struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key
Public key of the place.
Record type used internally to keep track of reverse mappings into a namespace.
struct GNUNET_IDENTITY_PublicKey pkey
The public key of the namespace the is delegating to our namespace.
struct GNUNET_TIME_Absolute expiration
The expiration time of the delegation.
A 512-bit hashcode.
A private key for an identity as per LSD0001.
An identity key as per LSD0001.
The identity of the host (wraps the signing key of the peer).
Time for absolute time used by GNUnet, in microseconds and in network byte order.
Time for absolute times used by GNUnet, in microseconds.
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model