diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-02-14 12:15:25 +0100 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-02-14 12:15:25 +0100 |
commit | 0c6475bd0c66bbc5190fb199d67594f203d93b2f (patch) | |
tree | 2116546680c26caa1c0321cb0aec1c1a9dad2821 /src/gnsrecord | |
parent | e94d71fdc640d30ea21fd902eca8a473a03ba68e (diff) | |
download | gnunet-0c6475bd0c66bbc5190fb199d67594f203d93b2f.tar.gz gnunet-0c6475bd0c66bbc5190fb199d67594f203d93b2f.zip |
-more tvs
Diffstat (limited to 'src/gnsrecord')
-rw-r--r-- | src/gnsrecord/gnunet-gnsrecord-tvg.c | 176 |
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 | ||
40 | static char *d_pkey = | 37 | static 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 | */ |
122 | static void | 121 | static void |
123 | run_pkey (void) | 122 | run_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 | */ |
263 | static void | 241 | static void |
264 | run_edkey (void) | 242 | run_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 | ||