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 
37 #ifdef __cplusplus
38 extern "C" {
39 #if 0 /* keep Emacsens' auto-indent happy */
40 }
41 #endif
42 #endif
43 
47 #define GNUNET_GNSRECORD_MAX_BLOCK_SIZE (63 * 1024)
48 
49 
53 #define GNUNET_GNSRECORD_TYPE_ANY 0
54 
58 #define GNUNET_GNSRECORD_TYPE_PKEY 65536
59 
63 #define GNUNET_GNSRECORD_TYPE_NICK 65537
64 
68 #define GNUNET_GNSRECORD_TYPE_LEHO 65538
69 
73 #define GNUNET_GNSRECORD_TYPE_VPN 65539
74 
78 #define GNUNET_GNSRECORD_TYPE_GNS2DNS 65540
79 
83 #define GNUNET_GNSRECORD_TYPE_BOX 65541
84 
88 #define GNUNET_GNSRECORD_TYPE_PLACE 65542
89 
93 #define GNUNET_GNSRECORD_TYPE_PHONE 65543
94 
98 #define GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR 65544
99 
103 #define GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET 65545
104 
116 #define GNUNET_GNSRECORD_TYPE_DELEGATE 65548
117 
121 #define GNUNET_GNSRECORD_TYPE_ATTRIBUTE 65549
122 
126 #define GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF 65550
127 
131 #define GNUNET_GNSRECORD_TYPE_RECLAIM_MASTER 65551
132 
136 #define GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_CLIENT 65552
137 
141 #define GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_REDIRECT 65553
142 
147 {
152 
158 
170 
176 
188 #define GNUNET_GNSRECORD_RF_RCMP_FLAGS (GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)
189 };
190 
191 
196 {
202  const void *data;
203 
209  uint64_t expiration_time;
210 
214  size_t data_size;
215 
219  uint32_t record_type;
220 
225 };
226 
227 
229 
234 {
238  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
239 
243  struct GNUNET_PeerIdentity origin;
244 
248  uint32_t relay_count GNUNET_PACKED;
249 
250  /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */
251 };
252 
253 
258 {
263 
267  struct GNUNET_CRYPTO_EcdsaPublicKey derived_key;
268 
274 
279 
280  /* followed by encrypted data */
281 };
282 
283 
295 {
300  uint16_t protocol GNUNET_PACKED;
301 
306 
311 
312  /* followed by the 'original' record */
313 };
314 
323 {
328 
333 
334  /* followed by the name the delegator uses to refer to our namespace */
335 };
336 
338 
339 
348  void *cls, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd);
349 
350 
351 /* ***************** API related to GNSRECORD plugins ************** */
352 
362 char *
363 GNUNET_GNSRECORD_value_to_string (uint32_t type, const void *data,
364  size_t data_size);
365 
366 
377 int
378 GNUNET_GNSRECORD_string_to_value (uint32_t type, const char *s, void **data,
379  size_t *data_size);
380 
381 
388 uint32_t
389 GNUNET_GNSRECORD_typename_to_number (const char *dns_typename);
390 
391 
398 const char *
400 
401 
402 /* convenience APIs for serializing / deserializing GNS records */
403 
412 ssize_t
413 GNUNET_GNSRECORD_records_get_size (unsigned int rd_count,
414  const struct GNUNET_GNSRECORD_Data *rd);
415 
416 
426 ssize_t
427 GNUNET_GNSRECORD_records_serialize (unsigned int rd_count,
428  const struct GNUNET_GNSRECORD_Data *rd,
429  size_t dest_size, char *dest);
430 
431 
441 int
442 GNUNET_GNSRECORD_records_deserialize (size_t len, const char *src,
443  unsigned int rd_count,
444  struct GNUNET_GNSRECORD_Data *dest);
445 
446 
447 /* ******* general APIs relating to blocks, records and labels ******** */
448 
449 
457 int
459 
460 
466 char *
467 GNUNET_GNSRECORD_string_to_lowercase (const char *src);
468 
469 
479 const char *
481 
482 
493 const char *
495 
496 
506 int
507 GNUNET_GNSRECORD_zkey_to_pkey (const char *zkey,
509 
510 
518 void
520  const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label,
521  struct GNUNET_HashCode *query);
522 
523 
531 void
533  const struct GNUNET_CRYPTO_EcdsaPublicKey *pub, const char *label,
534  struct GNUNET_HashCode *query);
535 
536 
546 struct GNUNET_GNSRECORD_Block *
549  const char *label,
550  const struct GNUNET_GNSRECORD_Data *rd,
551  unsigned int rd_count);
552 
553 
565 struct GNUNET_GNSRECORD_Block *
568  const char *label,
569  const struct GNUNET_GNSRECORD_Data *rd,
570  unsigned int rd_count);
571 
572 
580 int
582 
583 
595 int
597  const struct GNUNET_GNSRECORD_Block *block,
598  const struct GNUNET_CRYPTO_EcdsaPublicKey *zone_key, const char *label,
599  GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls);
600 
601 
609 int
611  const struct GNUNET_GNSRECORD_Data *b);
612 
613 
625  unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd);
626 
627 
628 #if 0 /* keep Emacsens' auto-indent happy */
629 {
630 #endif
631 #ifdef __cplusplus
632 }
633 #endif
634 
635 #endif
636  /* end of group */
GNUNET_NETWORK_STRUCT_END typedef 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.
This record should not be used unless all (other) records with an absolute expiration time have expir...
static struct GNUNET_SERVICE_Handle * service
Handle to our service instance.
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.
Record type used to box up SRV and TLSA records.
char * GNUNET_GNSRECORD_string_to_lowercase(const char *src)
Convert a UTF-8 string to UTF-8 lowercase.
static char * pkey
Public key of the zone to look in, in ASCII.
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create(const struct GNUNET_CRYPTO_EcdsaPrivateKey *key, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records.
uint32_t purpose
What does this signature vouch for? This must contain a GNUNET_SIGNATURE_PURPOSE_XXX constant (from g...
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.
static void expire(void *cls)
Expire a PooledConnection object.
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
Definition: gnsrecord.c:204
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create2(const struct GNUNET_CRYPTO_EcdsaPrivateKey *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...
int GNUNET_GNSRECORD_zkey_to_pkey(const char *zkey, struct GNUNET_CRYPTO_EcdsaPublicKey *pkey)
Convert an absolute domain name to the respective public key.
size_t data_size
Number of bytes in data.
Private ECC key encoded for transmission.
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.
Information we have in an encrypted block with record data (i.e.
Time for absolute time used by GNUnet, in microseconds and in network byte order. ...
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32.
static char * zone
Name of the zone we manage.
void GNUNET_GNSRECORD_query_from_private_key(const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
header of what an ECC signature signs this must be followed by "size - 8" bytes of the actual signed ...
const void * data
Binary value stored in the DNS record.
uint64_t expiration_time
Expiration time for the DNS record.
an ECC signature using ECDSA
This is a private record of this peer and it should thus not be handed out to other peers...
A 512-bit hashcode.
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:175
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
const char * GNUNET_GNSRECORD_z2s(const struct GNUNET_CRYPTO_EcdsaPublicKey *z)
Convert a zone to a string (for printing debug messages).
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.
int GNUNET_GNSRECORD_block_verify(const struct GNUNET_GNSRECORD_Block *block)
Check if a signature is valid.
struct GNUNET_HashCode key
The key used in the DHT.
int GNUNET_GNSRECORD_records_cmp(const struct GNUNET_GNSRECORD_Data *a, const struct GNUNET_GNSRECORD_Data *b)
Compares if two records are equal.
const char * GNUNET_GNSRECORD_pkey_to_zkey(const struct GNUNET_CRYPTO_EcdsaPublicKey *pkey)
Convert public key to the respective absolute domain name in the ".zkey" pTLD.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32;.
int GNUNET_GNSRECORD_is_expired(const struct GNUNET_GNSRECORD_Data *rd)
Test if a given record is expired.
The identity of the host (wraps the signing key of the peer).
uint32_t record_type
Type of the GNS/DNS record.
#define GNUNET_PACKED
gcc-ism to get packed structs.
static struct GNUNET_CRYPTO_EddsaPublicKey pub
Definition: gnunet-scrypt.c:39
int GNUNET_GNSRECORD_block_decrypt(const struct GNUNET_GNSRECORD_Block *block, const struct GNUNET_CRYPTO_EcdsaPublicKey *zone_key, const char *label, GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls)
Decrypt block.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
Data stored in a PLACE record.
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
Time for absolute times used by GNUnet, in microseconds.
GNUNET_GNSRECORD_Flags
Flags that can be set for a record.
void GNUNET_GNSRECORD_query_from_public_key(const struct GNUNET_CRYPTO_EcdsaPublicKey *pub, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
This flag is currently unused; former RF_PENDING flag.
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:143
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number (i.e.
Definition: gnsrecord.c:231
Record type used internally to keep track of reverse mappings into a namespace.
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...