aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-02-14 12:15:25 +0100
committerMartin Schanzenbach <schanzen@gnunet.org>2022-02-14 12:15:25 +0100
commit0c6475bd0c66bbc5190fb199d67594f203d93b2f (patch)
tree2116546680c26caa1c0321cb0aec1c1a9dad2821 /src/gnsrecord
parente94d71fdc640d30ea21fd902eca8a473a03ba68e (diff)
downloadgnunet-0c6475bd0c66bbc5190fb199d67594f203d93b2f.tar.gz
gnunet-0c6475bd0c66bbc5190fb199d67594f203d93b2f.zip
-more tvs
Diffstat (limited to 'src/gnsrecord')
-rw-r--r--src/gnsrecord/gnunet-gnsrecord-tvg.c176
1 files changed, 96 insertions, 80 deletions
diff --git a/src/gnsrecord/gnunet-gnsrecord-tvg.c b/src/gnsrecord/gnunet-gnsrecord-tvg.c
index dec0855eb..f89c0d2fb 100644
--- a/src/gnsrecord/gnunet-gnsrecord-tvg.c
+++ b/src/gnsrecord/gnunet-gnsrecord-tvg.c
@@ -33,9 +33,6 @@
33#include <inttypes.h> 33#include <inttypes.h>
34#include "gnsrecord_crypto.h" 34#include "gnsrecord_crypto.h"
35 35
36#define TEST_RECORD_LABEL "test"
37#define TEST_RECORD_A "1.2.3.4"
38#define TEST_RRCOUNT 2
39 36
40static char *d_pkey = 37static char *d_pkey =
41 "50d7b652a4efeadff37396909785e5952171a02178c8e7d450fa907925fafd98"; 38 "50d7b652a4efeadff37396909785e5952171a02178c8e7d450fa907925fafd98";
@@ -103,7 +100,9 @@ print_record (const struct GNUNET_GNSRECORD_Data *rd)
103 fprintf (stdout, 100 fprintf (stdout,
104 "TYPE: %d\n", rd->record_type); 101 "TYPE: %d\n", rd->record_type);
105 fprintf (stdout, 102 fprintf (stdout,
106 "FLAGS: %d\n", rd->flags); 103 "FLAGS: ");
104 print_bytes ((void*)&rd->flags, sizeof (rd->flags), 8);
105 printf ("\n");
107 fprintf (stdout, 106 fprintf (stdout,
108 "DATA:\n"); 107 "DATA:\n");
109 print_bytes ((char*) rd->data, rd->data_size, 8); 108 print_bytes ((char*) rd->data, rd->data_size, 8);
@@ -120,13 +119,10 @@ print_record (const struct GNUNET_GNSRECORD_Data *rd)
120 * @param cfg configuration 119 * @param cfg configuration
121 */ 120 */
122static void 121static void
123run_pkey (void) 122run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
124{ 123{
125 struct GNUNET_GNSRECORD_Data rd[2];
126 struct GNUNET_TIME_Absolute expire; 124 struct GNUNET_TIME_Absolute expire;
127 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 125 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
128 struct GNUNET_TIME_Absolute exp1;
129 struct GNUNET_TIME_Absolute exp2;
130 struct GNUNET_TIME_Relative delta1; 126 struct GNUNET_TIME_Relative delta1;
131 struct GNUNET_TIME_Relative delta2; 127 struct GNUNET_TIME_Relative delta2;
132 struct GNUNET_GNSRECORD_Block *rrblock; 128 struct GNUNET_GNSRECORD_Block *rrblock;
@@ -145,14 +141,6 @@ run_pkey (void)
145 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2]; 141 unsigned char ctr[GNUNET_CRYPTO_AES_KEY_LENGTH / 2];
146 unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH]; 142 unsigned char skey[GNUNET_CRYPTO_AES_KEY_LENGTH];
147 143
148 /*
149 * Make two different expiration times
150 */
151 GNUNET_STRINGS_fancy_time_to_absolute ("2048-01-23 10:51:34",
152 &exp1);
153 GNUNET_STRINGS_fancy_time_to_absolute ("3540-05-22 07:55:01",
154 &exp2);
155
156 144
157 id_priv.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY); 145 id_priv.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY);
158 GNUNET_CRYPTO_ecdsa_key_create (&id_priv.ecdsa_key); 146 GNUNET_CRYPTO_ecdsa_key_create (&id_priv.ecdsa_key);
@@ -183,40 +171,30 @@ run_pkey (void)
183 GNUNET_IDENTITY_key_get_public (&pkey_data_p, 171 GNUNET_IDENTITY_key_get_public (&pkey_data_p,
184 &pkey_data); 172 &pkey_data);
185 fprintf (stdout, 173 fprintf (stdout,
186 "Label: %s\nRRCOUNT: %d\n\n", TEST_RECORD_LABEL, TEST_RRCOUNT); 174 "Label: %s\nRRCOUNT: %d\n\n", label, rd_count);
187 memset (rd, 0, sizeof (struct GNUNET_GNSRECORD_Data) * 2); 175
188 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_string_to_value ( 176 for (int i = 0; i < rd_count; i++)
189 GNUNET_DNSPARSER_TYPE_A, TEST_RECORD_A, &data, &data_size)); 177 {
190 rd[0].data = data; 178 fprintf (stdout, "Record #%d\n", i);
191 rd[0].data_size = data_size; 179 print_record (&rd[i]);
192 rd[0].expiration_time = exp1.abs_value_us; 180 }
193 rd[0].record_type = GNUNET_DNSPARSER_TYPE_A;
194 fprintf (stdout, "Record #0\n");
195 print_record (&rd[0]);
196 181
197 rd[1].data = "Some nick";
198 rd[1].data_size = sizeof (struct GNUNET_IDENTITY_PublicKey);
199 rd[1].expiration_time = exp2.abs_value_us;
200 rd[1].record_type = GNUNET_GNSRECORD_TYPE_NICK;
201 rd[1].flags = GNUNET_GNSRECORD_RF_PRIVATE;
202 fprintf (stdout, "Record #1\n");
203 print_record (&rd[1]);
204 182
205 rdata_size = GNUNET_GNSRECORD_records_get_size (TEST_RRCOUNT, 183 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count,
206 rd); 184 rd);
207 rdata = GNUNET_malloc (rdata_size); 185 rdata = GNUNET_malloc (rdata_size);
208 GNUNET_GNSRECORD_records_serialize (2, 186 GNUNET_GNSRECORD_records_serialize (rd_count,
209 rd, 187 rd,
210 rdata_size, 188 rdata_size,
211 rdata); 189 rdata);
212 fprintf (stdout, "RDATA:\n"); 190 fprintf (stdout, "RDATA:\n");
213 print_bytes (rdata, rdata_size, 8); 191 print_bytes (rdata, rdata_size, 8);
214 fprintf (stdout, "\n"); 192 fprintf (stdout, "\n");
215 expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, rd, 193 expire = GNUNET_GNSRECORD_record_get_expiration_time (rd_count, rd,
216 GNUNET_TIME_UNIT_FOREVER_ABS); 194 GNUNET_TIME_UNIT_ZERO_ABS);
217 GNR_derive_block_aes_key (ctr, 195 GNR_derive_block_aes_key (ctr,
218 skey, 196 skey,
219 TEST_RECORD_LABEL, 197 label,
220 GNUNET_TIME_absolute_hton ( 198 GNUNET_TIME_absolute_hton (
221 expire).abs_value_us__, 199 expire).abs_value_us__,
222 &id_pub.ecdsa_key); 200 &id_pub.ecdsa_key);
@@ -228,16 +206,16 @@ run_pkey (void)
228 print_bytes (skey, sizeof (skey), 8); 206 print_bytes (skey, sizeof (skey), 8);
229 fprintf (stdout, "\n"); 207 fprintf (stdout, "\n");
230 GNUNET_GNSRECORD_query_from_public_key (&id_pub, 208 GNUNET_GNSRECORD_query_from_public_key (&id_pub,
231 TEST_RECORD_LABEL, 209 label,
232 &query); 210 &query);
233 fprintf (stdout, "Storage key (q):\n"); 211 fprintf (stdout, "Storage key (q):\n");
234 print_bytes (&query, sizeof (query), 8); 212 print_bytes (&query, sizeof (query), 8);
235 fprintf (stdout, "\n"); 213 fprintf (stdout, "\n");
236 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv, 214 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
237 expire, 215 expire,
238 TEST_RECORD_LABEL, 216 label,
239 rd, 217 rd,
240 TEST_RRCOUNT, 218 rd_count,
241 &rrblock)); 219 &rrblock));
242 size_t bdata_size = ntohl(rrblock->size) - sizeof (struct GNUNET_GNSRECORD_Block); 220 size_t bdata_size = ntohl(rrblock->size) - sizeof (struct GNUNET_GNSRECORD_Block);
243 221
@@ -261,13 +239,10 @@ run_pkey (void)
261 * @param cfg configuration 239 * @param cfg configuration
262 */ 240 */
263static void 241static void
264run_edkey (void) 242run_edkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char* label)
265{ 243{
266 struct GNUNET_GNSRECORD_Data rd[2];
267 struct GNUNET_TIME_Absolute expire; 244 struct GNUNET_TIME_Absolute expire;
268 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 245 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
269 struct GNUNET_TIME_Absolute exp1;
270 struct GNUNET_TIME_Absolute exp2;
271 struct GNUNET_TIME_Relative delta1; 246 struct GNUNET_TIME_Relative delta1;
272 struct GNUNET_TIME_Relative delta2; 247 struct GNUNET_TIME_Relative delta2;
273 struct GNUNET_GNSRECORD_Block *rrblock; 248 struct GNUNET_GNSRECORD_Block *rrblock;
@@ -286,14 +261,6 @@ run_edkey (void)
286 unsigned char nonce[crypto_secretbox_NONCEBYTES]; 261 unsigned char nonce[crypto_secretbox_NONCEBYTES];
287 unsigned char skey[crypto_secretbox_KEYBYTES]; 262 unsigned char skey[crypto_secretbox_KEYBYTES];
288 263
289 /*
290 * Make two different expiration times
291 */
292 GNUNET_STRINGS_fancy_time_to_absolute ("%2048-01-23 10:51:34",
293 &exp1);
294 GNUNET_STRINGS_fancy_time_to_absolute ("3540-05-22 07:55:01",
295 &exp2);
296
297 id_priv.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY); 264 id_priv.type = htonl (GNUNET_GNSRECORD_TYPE_PKEY);
298 GNUNET_CRYPTO_ecdsa_key_create (&id_priv.ecdsa_key); 265 GNUNET_CRYPTO_ecdsa_key_create (&id_priv.ecdsa_key);
299 GNUNET_IDENTITY_key_get_public (&id_priv, 266 GNUNET_IDENTITY_key_get_public (&id_priv,
@@ -327,32 +294,21 @@ run_edkey (void)
327 GNUNET_IDENTITY_key_get_public (&pkey_data_p, 294 GNUNET_IDENTITY_key_get_public (&pkey_data_p,
328 &pkey_data); 295 &pkey_data);
329 fprintf (stdout, 296 fprintf (stdout,
330 "Label: %s\nRRCOUNT: %d\n\n", TEST_RECORD_LABEL, TEST_RRCOUNT); 297 "Label: %s\nRRCOUNT: %d\n\n", label, rd_count);
331 memset (rd, 0, sizeof (struct GNUNET_GNSRECORD_Data) * 2);
332 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_string_to_value (
333 GNUNET_DNSPARSER_TYPE_A, TEST_RECORD_A, &data, &data_size));
334 rd[0].data = data;
335 rd[0].data_size = data_size;
336 rd[0].expiration_time = exp1.abs_value_us;
337 rd[0].record_type = GNUNET_DNSPARSER_TYPE_A;
338 fprintf (stdout, "Record #0\n");
339 print_record (&rd[0]);
340 298
341 rd[1].data = "My Nick"; 299 for (int i = 0; i < rd_count; i++)
342 rd[1].data_size = sizeof (struct GNUNET_IDENTITY_PublicKey); 300 {
343 rd[1].expiration_time = exp2.abs_value_us; 301 fprintf (stdout, "Record #%d\n", i);
344 rd[1].record_type = GNUNET_GNSRECORD_TYPE_NICK; 302 print_record (&rd[i]);
345 rd[1].flags = GNUNET_GNSRECORD_RF_PRIVATE; 303 }
346 fprintf (stdout, "Record #1\n");
347 print_record (&rd[1]);
348 304
349 rdata_size = GNUNET_GNSRECORD_records_get_size (TEST_RRCOUNT, 305 rdata_size = GNUNET_GNSRECORD_records_get_size (rd_count,
350 rd); 306 rd);
351 expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, 307 expire = GNUNET_GNSRECORD_record_get_expiration_time (rd_count,
352 rd, 308 rd,
353 GNUNET_TIME_UNIT_FOREVER_ABS); 309 GNUNET_TIME_UNIT_ZERO_ABS);
354 rdata = GNUNET_malloc (rdata_size); 310 rdata = GNUNET_malloc (rdata_size);
355 GNUNET_GNSRECORD_records_serialize (2, 311 GNUNET_GNSRECORD_records_serialize (rd_count,
356 rd, 312 rd,
357 rdata_size, 313 rdata_size,
358 rdata); 314 rdata);
@@ -361,7 +317,7 @@ run_edkey (void)
361 fprintf (stdout, "\n"); 317 fprintf (stdout, "\n");
362 GNR_derive_block_xsalsa_key (nonce, 318 GNR_derive_block_xsalsa_key (nonce,
363 skey, 319 skey,
364 TEST_RECORD_LABEL, 320 label,
365 GNUNET_TIME_absolute_hton ( 321 GNUNET_TIME_absolute_hton (
366 expire).abs_value_us__, 322 expire).abs_value_us__,
367 &id_pub.eddsa_key); 323 &id_pub.eddsa_key);
@@ -372,7 +328,7 @@ run_edkey (void)
372 print_bytes (skey, sizeof (skey), 8); 328 print_bytes (skey, sizeof (skey), 8);
373 fprintf (stdout, "\n"); 329 fprintf (stdout, "\n");
374 GNUNET_GNSRECORD_query_from_public_key (&id_pub, 330 GNUNET_GNSRECORD_query_from_public_key (&id_pub,
375 TEST_RECORD_LABEL, 331 label,
376 &query); 332 &query);
377 fprintf (stdout, "Storage key (q):\n"); 333 fprintf (stdout, "Storage key (q):\n");
378 print_bytes (&query, sizeof (query), 8); 334 print_bytes (&query, sizeof (query), 8);
@@ -380,9 +336,9 @@ run_edkey (void)
380 336
381 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv, 337 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_block_create (&id_priv,
382 expire, 338 expire,
383 TEST_RECORD_LABEL, 339 label,
384 rd, 340 rd,
385 TEST_RRCOUNT, 341 rd_count,
386 &rrblock)); 342 &rrblock));
387 size_t bdata_size = ntohl(rrblock->size) - sizeof (struct GNUNET_GNSRECORD_Block); 343 size_t bdata_size = ntohl(rrblock->size) - sizeof (struct GNUNET_GNSRECORD_Block);
388 344
@@ -411,8 +367,68 @@ run (void *cls,
411 const char *cfgfile, 367 const char *cfgfile,
412 const struct GNUNET_CONFIGURATION_Handle *cfg) 368 const struct GNUNET_CONFIGURATION_Handle *cfg)
413{ 369{
414 run_pkey (); 370 struct GNUNET_GNSRECORD_Data rd_pkey;
415 run_edkey (); 371 struct GNUNET_GNSRECORD_Data rd[3];
372 struct GNUNET_TIME_Absolute exp1;
373 struct GNUNET_TIME_Absolute exp2;
374 struct GNUNET_TIME_Relative exp3;
375 size_t pkey_data_size;
376 size_t ip_data_size;
377 char *pkey_data;
378 char *ip_data;
379
380
381 /*
382 * Make different expiration times
383 */
384 GNUNET_STRINGS_fancy_time_to_absolute ("2048-01-23 10:51:34",
385 &exp1);
386 GNUNET_STRINGS_fancy_time_to_absolute ("3540-05-22 07:55:01",
387 &exp2);
388 GNUNET_STRINGS_fancy_time_to_relative ("100y",
389 &exp3);
390
391
392
393 memset (&rd_pkey, 0, sizeof (struct GNUNET_GNSRECORD_Data));
394 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_string_to_value (
395 GNUNET_GNSRECORD_TYPE_PKEY,
396 "000G0011WESGZY9VRV9NNJ66W3GKNZFZF56BFD2BQF3MHMJST2G2GKDYGG",
397 (void**)&pkey_data,
398 &pkey_data_size));
399 rd_pkey.data = pkey_data;
400 rd_pkey.data_size = pkey_data_size;
401 rd_pkey.expiration_time = exp1.abs_value_us;
402 rd_pkey.record_type = GNUNET_GNSRECORD_TYPE_PKEY;
403 rd_pkey.flags = GNUNET_GNSRECORD_RF_CRITICAL;
404 GNUNET_assert (GNUNET_OK == GNUNET_GNSRECORD_string_to_value (
405 GNUNET_DNSPARSER_TYPE_AAAA,
406 "::dead:beef",
407 (void**)&ip_data,
408 &ip_data_size));
409
410 rd[0].data = ip_data;
411 rd[0].data_size = ip_data_size;
412 rd[0].expiration_time = exp1.abs_value_us;
413 rd[0].record_type = GNUNET_DNSPARSER_TYPE_AAAA;
414 rd[0].flags = GNUNET_GNSRECORD_RF_NONE;
415
416 rd[1].data = "Some nick";
417 rd[1].data_size = strlen (rd[1].data);
418 rd[1].expiration_time = exp2.abs_value_us;
419 rd[1].record_type = GNUNET_GNSRECORD_TYPE_NICK;
420 rd[1].flags = GNUNET_GNSRECORD_RF_PRIVATE;
421
422 rd[2].data = "Hello World";
423 rd[2].data_size = strlen (rd[2].data);
424 rd[2].expiration_time = exp3.rel_value_us;
425 rd[2].record_type = GNUNET_DNSPARSER_TYPE_TXT;
426 rd[2].flags = GNUNET_GNSRECORD_RF_SUPPLEMENTAL | GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
427
428 run_pkey (&rd_pkey, 1, "testdelegation");
429 run_pkey (rd, 3, "testset");
430 run_edkey (&rd_pkey, 1, "testdelegation");
431 run_edkey (rd, 3, "testset");
416} 432}
417 433
418 434