aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2023-07-03 11:56:33 +0200
committerMartin Schanzenbach <schanzen@gnunet.org>2023-07-03 11:56:33 +0200
commitcefb5c679c9d6673247e77148fed4df1b107463d (patch)
treee9996a7da6dea304d08f10ee0df3f31ebc1f73fd /src/gnsrecord
parent97e3f402657fb5b298c66fb92c4a0e2b8892e10b (diff)
downloadgnunet-cefb5c679c9d6673247e77148fed4df1b107463d.tar.gz
gnunet-cefb5c679c9d6673247e77148fed4df1b107463d.zip
GNS: Also consume a set of test vectors.
Diffstat (limited to 'src/gnsrecord')
-rw-r--r--src/gnsrecord/gnunet-gnsrecord-tvg.c15
-rw-r--r--src/gnsrecord/test_gnsrecord_testvectors.c299
2 files changed, 289 insertions, 25 deletions
diff --git a/src/gnsrecord/gnunet-gnsrecord-tvg.c b/src/gnsrecord/gnunet-gnsrecord-tvg.c
index 588f16b4b..b2a8d1405 100644
--- a/src/gnsrecord/gnunet-gnsrecord-tvg.c
+++ b/src/gnsrecord/gnunet-gnsrecord-tvg.c
@@ -116,17 +116,17 @@ print_record (const struct GNUNET_GNSRECORD_Data *rd)
116 at = GNUNET_TIME_relative_to_absolute (rt); 116 at = GNUNET_TIME_relative_to_absolute (rt);
117 abs_nbo = GNUNET_htonll (at.abs_value_us); 117 abs_nbo = GNUNET_htonll (at.abs_value_us);
118 } 118 }
119 printf ("EXPIRATION: %" PRIu64 " us\n", rd->expiration_time); 119 printf (" EXPIRATION: %" PRIu64 " us\n", rd->expiration_time);
120 print_bytes (&abs_nbo, sizeof (abs_nbo), 8); 120 print_bytes (&abs_nbo, sizeof (abs_nbo), 8);
121 printf ("\nDATA_SIZE:\n"); 121 printf ("\n DATA_SIZE:\n");
122 print_bytes (&size_nbo, sizeof (size_nbo), 8); 122 print_bytes (&size_nbo, sizeof (size_nbo), 8);
123 printf ("\nTYPE:\n"); 123 printf ("\n TYPE:\n");
124 print_bytes (&type_nbo, sizeof (type_nbo), 8); 124 print_bytes (&type_nbo, sizeof (type_nbo), 8);
125 printf ("\nFLAGS: "); 125 printf ("\n FLAGS: ");
126 print_bytes ((void*) &flags, sizeof (flags), 8); 126 print_bytes ((void*) &flags, sizeof (flags), 8);
127 printf ("\n"); 127 printf ("\n");
128 fprintf (stdout, 128 fprintf (stdout,
129 "DATA:\n"); 129 " DATA:\n");
130 print_bytes ((char*) rd->data, rd->data_size, 8); 130 print_bytes ((char*) rd->data, rd->data_size, 8);
131 printf ("\n"); 131 printf ("\n");
132} 132}
@@ -241,6 +241,7 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
241 &rrblock)); 241 &rrblock));
242 struct GNUNET_CRYPTO_EcdsaPublicKey derived_key; 242 struct GNUNET_CRYPTO_EcdsaPublicKey derived_key;
243 struct GNUNET_CRYPTO_EcdsaPrivateKey *derived_privkey; 243 struct GNUNET_CRYPTO_EcdsaPrivateKey *derived_privkey;
244
244 GNUNET_CRYPTO_ecdsa_public_key_derive (&id_pub.ecdsa_key, 245 GNUNET_CRYPTO_ecdsa_public_key_derive (&id_pub.ecdsa_key,
245 label, 246 label,
246 "gns", 247 "gns",
@@ -251,8 +252,8 @@ run_pkey (struct GNUNET_GNSRECORD_Data *rd, int rd_count, const char *label)
251 printf ("ZKDF(zkey):\n"); 252 printf ("ZKDF(zkey):\n");
252 print_bytes (&derived_key, sizeof (derived_key), 8); 253 print_bytes (&derived_key, sizeof (derived_key), 8);
253 printf ("\n"); 254 printf ("\n");
254 printf ("Derived private key (d'):\n"); 255 printf ("Derived private key (d', big-endian):\n");
255 print_bytes (derived_privkey, sizeof (*derived_privkey), 8); 256 print_bytes_ (derived_privkey, sizeof (*derived_privkey), 8, 1);
256 printf ("\n"); 257 printf ("\n");
257 size_t bdata_size = ntohl (rrblock->size) - sizeof (struct 258 size_t bdata_size = ntohl (rrblock->size) - sizeof (struct
258 GNUNET_GNSRECORD_Block); 259 GNUNET_GNSRECORD_Block);
diff --git a/src/gnsrecord/test_gnsrecord_testvectors.c b/src/gnsrecord/test_gnsrecord_testvectors.c
index 2b05c1b5d..60af14b15 100644
--- a/src/gnsrecord/test_gnsrecord_testvectors.c
+++ b/src/gnsrecord/test_gnsrecord_testvectors.c
@@ -6,50 +6,293 @@
6 6
7struct GnsTv 7struct GnsTv
8{ 8{
9 uint32_t expected_rd_count;
10 struct GNUNET_GNSRECORD_Data expected_rd[2048];
9 char *d; 11 char *d;
10 char *zid; 12 char *zid;
11 int rrcount;
12 char *label; 13 char *label;
13 char *q; 14 char *q;
14 char *rdata; 15 char *rdata;
15 char *bdata;
16 char *rrblock; 16 char *rrblock;
17}; 17};
18 18
19#define TVCOUNT 1 19#define TVCOUNT 4
20 20
21struct GnsTv tvs[] = { 21struct GnsTv tvs[] = {
22 { .d = "5af7020ee19160328832352bbc6a68a8d71a7cbe1b929969a7c66d415a0d8f65\0", 22 { .d =
23 "50 d7 b6 52 a4 ef ea df"
24 "f3 73 96 90 97 85 e5 95"
25 "21 71 a0 21 78 c8 e7 d4"
26 "50 fa 90 79 25 fa fd 98",
23 .zid = 27 .zid =
24 "000100143cf4b924032022f0dc50581453b85d93b047b63d446c5845cb48445ddb96688f\0", 28 "00 01 00 00 67 7c 47 7d"
25 .rrcount = 1, 29 "2d 93 09 7c 85 b1 95 c6"
26 .label = "7465737464656c65676174696f6e\0", 30 "f9 6d 84 ff 61 f5 98 2c"
31 "2c 4f e0 2d 5a 11 fe df"
32 "b0 c2 90 1f",
33 .label = "74 65 73 74 64 65 6c 65"
34 "67 61 74 69 6f 6e",
27 .q = 35 .q =
28 "ed76cefdb6a9d73a9e1f10d96717eba3fc89ebe1b37584f6b077c2912e2fc5f312cf74e1b4d4dfca5abaec736d72666f0faa2945217f3b1436aa4e27c14c9732\0", 36 "4a dc 67 c5 ec ee 9f 76"
37 "98 6a bd 71 c2 22 4a 3d"
38 "ce 2e 91 70 26 c9 a0 9d"
39 "fd 44 ce f3 d2 0f 55 a2"
40 "73 32 72 5a 6c 8a fb bb"
41 "b0 f7 ec 9a f1 cc 42 64"
42 "12 99 40 6b 04 fd 9b 5b"
43 "57 91 f8 6c 4b 08 d5 f4",
29 .rdata = 44 .rdata =
30 "0008c06fb9281580002000010001000021e3b30ff93bc6d35ac8c6e0e13afdff794cb7b44bbbc748d259d0a0284dbe84\0", 45 "00 1c ee 8b 3a 4e b5 80"
31 .bdata = 46 "00 20 00 01 00 01 00 00"
32 "9cc455a1293319435993cb3d67179ec06ea8d8894e904a0c35e91c5c2ff2ed939cc2f8301231f44e592a4ac87e4998b94625c64af51686a2b36a2b2892d44f2d\0", 47 "21 e3 b3 0f f9 3b c6 d3"
48 "5a c8 c6 e0 e1 3a fd ff"
49 "79 4c b7 b4 4b bb c7 48"
50 "d2 59 d0 a0 28 4d be 84",
33 .rrblock = 51 .rrblock =
34 "000000b0000100149bf233198c6d53bbdbac495cabd91049a684af3f4051bacab0dcf21c8cf27a1a44d240d07902f490b7c43ef00758abce8851c18c70ac6df97a88f79211cf875f784885ca3e349ec4ca892b9ff084c5358965b8e74a2315952d4c8c06521c2f0c0008c06fb92815809cc455a1293319435993cb3d67179ec06ea8d8894e904a0c35e91c5c2ff2ed939cc2f8301231f44e592a4ac87e4998b94625c64af51686a2b36a2b2892d44f2d\0"} 52 "00 00 00 a0 00 01 00 00"
53 "18 2b b6 36 ed a7 9f 79"
54 "57 11 bc 27 08 ad bb 24"
55 "2a 60 44 6a d3 c3 08 03"
56 "12 1d 03 d3 48 b7 ce b6"
57 "0b af 41 a3 af 96 03 ea"
58 "be 46 0f 8a f6 7f 10 26"
59 "6c 14 90 17 2b 27 18 24"
60 "7f 29 09 99 f0 9f 34 d4"
61 "02 76 47 47 83 ed 63 39"
62 "d4 2c 76 80 b1 b2 ec 40"
63 "46 05 d6 f5 6b b3 f5 e3"
64 "7a 94 6d 4a 14 83 06 03"
65 "00 1c ee 8b 3a 4e b5 80"
66 "6c d1 19 47 8c d9 1c 80"
67 "dc 67 56 f8 96 83 f1 d5"
68 "d7 2e 1a a6 d9 bb 2d 14"
69 "ea 7a 24 9a ce b6 a6 00"
70 "59 f1 e9 d4 15 1b 0e ce"
71 "5f e7 fa 58 63 4d 81 c5"},
72 { .d =
73 "50 d7 b6 52 a4 ef ea df"
74 "f3 73 96 90 97 85 e5 95"
75 "21 71 a0 21 78 c8 e7 d4"
76 "50 fa 90 79 25 fa fd 98",
77 .zid =
78 "00 01 00 00 67 7c 47 7d"
79 "2d 93 09 7c 85 b1 95 c6"
80 "f9 6d 84 ff 61 f5 98 2c"
81 "2c 4f e0 2d 5a 11 fe df"
82 "b0 c2 90 1f",
83 .label =
84 "e5 a4 a9 e4 b8 8b e7 84"
85 "a1 e6 95 b5",
86 .q =
87 "af f0 ad 6a 44 09 73 68"
88 "42 9a c4 76 df a1 f3 4b"
89 "ee 4c 36 e7 47 6d 07 aa"
90 "64 63 ff 20 91 5b 10 05"
91 "c0 99 1d ef 91 fc 3e 10"
92 "90 9f 87 02 c0 be 40 43"
93 "67 78 c7 11 f2 ca 47 d5"
94 "5c f0 b5 4d 23 5d a9 77",
95 .rdata =
96 "00 1c ee 8b 3a 4e b5 80"
97 "00 10 00 00 00 00 00 1c"
98 "00 00 00 00 00 00 00 00"
99 "00 00 00 00 de ad be ef"
100 "00 3f f2 aa 54 08 db 40"
101 "00 06 00 00 00 01 00 01"
102 "e6 84 9b e7 a7 b0 00 28"
103 "bb 13 ff 37 19 40 00 0b"
104 "00 04 00 00 00 10 48 65"
105 "6c 6c 6f 20 57 6f 72 6c"
106 "64 00 00 00 00 00 00 00"
107 "00 00 00 00 00 00 00 00"
108 "00 00 00 00 00 00 00 00"
109 "00 00 00 00 00 00 00 00"
110 "00 00 00 00 00 00 00 00"
111 "00 00 00 00 00 00 00 00",
112 .rrblock =
113 "00 00 00 f0 00 01 00 00"
114 "a5 12 96 df 75 7e e2 75"
115 "ca 11 8d 4f 07 fa 7a ae"
116 "55 08 bc f5 12 aa 41 12"
117 "14 29 d4 a0 de 9d 05 7e"
118 "04 85 97 8d 22 64 74 a9"
119 "22 fe 78 60 49 89 eb 52"
120 "61 38 0d 16 11 e6 9f 01"
121 "fc e0 d5 6d fc 53 24 c5"
122 "08 2a 6b ef 15 7c 9d 27"
123 "c3 35 4a 39 75 a4 30 98"
124 "d4 2b 5e d6 12 3c f5 41"
125 "c4 7c b4 22 16 4c a9 30"
126 "00 1c ee 8b 3a 4e b5 80"
127 "03 a3 4a e6 1e 07 1c 08"
128 "17 fd d4 57 68 e8 c7 cd"
129 "ab 72 b3 06 61 6e d1 f9"
130 "3f b5 64 e1 63 4c 64 64"
131 "29 20 ac 74 eb cd 97 f8"
132 "1f 8a 93 d4 b0 c8 f7 c2"
133 "0d ff 38 bb 60 b4 ed 9d"
134 "cd 02 d7 e3 9f 4b 89 c2"
135 "95 79 e0 75 dd ba 7b 8d"
136 "ad 4b 9d cd ef 15 57 4c"
137 "f3 50 b6 32 b3 93 a4 90"
138 "fc f4 90 32 be eb 4e 68"
139 "25 72 70 b1 70 6f c6 1f"
140 "d4 a4 c9 95 6c 64 f5 9e"
141 "81 d0 2b 6a 30 f5 8a 48"
142 "23 58 a1 2a ec 3d 0f 2d"},
143 { .d =
144 "5a f7 02 0e e1 91 60 32"
145 "88 32 35 2b bc 6a 68 a8"
146 "d7 1a 7c be 1b 92 99 69"
147 "a7 c6 6d 41 5a 0d 8f 65",
148 .zid =
149 "00 01 00 14 3c f4 b9 24"
150 "03 20 22 f0 dc 50 58 14"
151 "53 b8 5d 93 b0 47 b6 3d"
152 "44 6c 58 45 cb 48 44 5d"
153 "db 96 68 8f",
154 .label =
155 "74 65 73 74 64 65 6c 65"
156 "67 61 74 69 6f 6e",
157 .q =
158 "ab aa ba c0 e1 24 94 59"
159 "75 98 83 95 aa c0 24 1e"
160 "55 59 c4 1c 40 74 e2 55"
161 "7b 9f e6 d1 54 b6 14 fb"
162 "cd d4 7f c7 f5 1d 78 6d"
163 "c2 e0 b1 ec e7 60 37 c0"
164 "a1 57 8c 38 4e c6 1d 44"
165 "56 36 a9 4e 88 03 29 e9",
166 .rdata =
167 "00 1c ee 8b 3a 4e b5 80"
168 "00 20 00 01 00 01 00 00"
169 "21 e3 b3 0f f9 3b c6 d3"
170 "5a c8 c6 e0 e1 3a fd ff"
171 "79 4c b7 b4 4b bb c7 48"
172 "d2 59 d0 a0 28 4d be 84",
173 .rrblock =
174 "00 00 00 b0 00 01 00 14"
175 "9b f2 33 19 8c 6d 53 bb"
176 "db ac 49 5c ab d9 10 49"
177 "a6 84 af 3f 40 51 ba ca"
178 "b0 dc f2 1c 8c f2 7a 1a"
179 "f4 27 a9 98 be 90 91 f3"
180 "bd 44 19 c2 86 06 81 fa"
181 "0f c8 46 5c 35 e2 10 91"
182 "f0 87 fd 8d dc a8 78 51"
183 "53 d6 d9 bd 73 4f 08 9c"
184 "26 b6 52 da ea b4 73 25"
185 "71 e5 d9 2b c9 96 3d ad"
186 "d8 be 55 31 87 26 52 00"
187 "00 1c ee 8b 3a 4e b5 80"
188 "16 c7 0f d2 9a 62 38 9e"
189 "9b 04 9a 09 31 ba ba 46"
190 "a1 73 bb 56 f6 bf 56 16"
191 "18 ba a1 69 0f ae fa 1c"
192 "c4 24 75 55 4d 47 96 98"
193 "39 8d f6 f0 42 0b 9e c2"
194 "6f b0 43 cf 1e fc 34 bd"
195 "2e a0 c6 4a 7d ef d6 ac"},
196 { .d =
197 "5a f7 02 0e e1 91 60 32"
198 "88 32 35 2b bc 6a 68 a8"
199 "d7 1a 7c be 1b 92 99 69"
200 "a7 c6 6d 41 5a 0d 8f 65",
201 .zid =
202 "00 01 00 14 3c f4 b9 24"
203 "03 20 22 f0 dc 50 58 14"
204 "53 b8 5d 93 b0 47 b6 3d"
205 "44 6c 58 45 cb 48 44 5d"
206 "db 96 68 8f",
207 .label =
208 "e5 a4 a9 e4 b8 8b e7 84"
209 "a1 e6 95 b5",
210 .q =
211 "ba f8 21 77 ee c0 81 e0"
212 "74 a7 da 47 ff c6 48 77"
213 "58 fb 0d f0 1a 6c 7f bb"
214 "52 fc 8a 31 be f0 29 af"
215 "74 aa 0d c1 5a b8 e2 fa"
216 "7a 54 b4 f5 f6 37 f6 15"
217 "8f a7 f0 3c 3f ce be 78"
218 "d3 f9 d6 40 aa c0 d1 ed",
219 .rdata =
220 "00 1c ee 8b 3a 4e b5 80"
221 "00 10 00 00 00 00 00 1c"
222 "00 00 00 00 00 00 00 00"
223 "00 00 00 00 de ad be ef"
224 "00 3f f2 aa 54 08 db 40"
225 "00 06 00 00 00 01 00 01"
226 "e6 84 9b e7 a7 b0 00 28"
227 "bb 13 ff 37 19 40 00 0b"
228 "00 04 00 00 00 10 48 65"
229 "6c 6c 6f 20 57 6f 72 6c"
230 "64 00 00 00 00 00 00 00"
231 "00 00 00 00 00 00 00 00"
232 "00 00 00 00 00 00 00 00"
233 "00 00 00 00 00 00 00 00"
234 "00 00 00 00 00 00 00 00"
235 "00 00 00 00 00 00 00 00",
236 .rrblock =
237 "00 00 01 00 00 01 00 14"
238 "74 f9 00 68 f1 67 69 53"
239 "52 a8 a6 c2 eb 98 48 98"
240 "c5 3a cc a0 98 04 70 c6"
241 "c8 12 64 cb dd 78 ad 11"
242 "36 47 fb d2 27 cb 62 bf"
243 "bf 28 6a cb 82 fc f3 64"
244 "67 3c dd 18 a7 a7 1e b3"
245 "44 8e 71 72 35 89 a6 4a"
246 "43 59 11 fe 14 f3 26 e9"
247 "48 48 21 16 78 74 19 dd"
248 "ce f6 1a c2 2e 66 7a 0b"
249 "99 4a c4 cb 6d a5 49 05"
250 "00 1c ee 8b 3a 4e b5 80"
251 "8e 45 6d e7 7d 37 2f 82"
252 "f4 0b a0 4c 04 ca ac 4c"
253 "04 f2 8a 2b 5f 34 1d fc"
254 "73 59 8c 18 2a 9e 06 5e"
255 "e1 02 bc 7b a5 f1 cb e2"
256 "48 a3 d4 6e 56 3c 47 1d"
257 "8d 10 0b 36 40 9e 37 31"
258 "89 94 bf fd d4 c8 d0 ff"
259 "68 00 de a3 1b 81 09 b1"
260 "eb fb 21 71 f8 77 b8 6d"
261 "c2 53 1a b2 5e bb 88 62"
262 "7f 93 74 56 d9 d7 a8 75"
263 "e5 f4 98 57 da 14 1c 61"
264 "52 ae 88 d0 6e 9a 47 fb"
265 "fd f3 b5 f7 db 99 e4 47"
266 "93 4e 31 66 d1 15 bf 16"
267 "63 4e 5f 51 b8 87 fb 70"
268 "3b d4 4a 42 9b d3 32 ab"}
35}; 269};
36 270
37int 271int
38parsehex (char *src, char *dst, size_t dstlen, int invert) 272parsehex (char *src, char *dst, size_t dstlen, int invert)
39{ 273{
40 char *line = src;
41 char *data = line;
42 int off; 274 int off;
43 int read_byte; 275 int read_byte;
44 int data_len = 0; 276 int data_len = 0;
277 char data[strlen (src) + 1];
278 char *pos = data;
279 int i = 0;
280 int j = 0;
281
282 for (i = 0; i < strlen (src); i++)
283 {
284 if ((src[i] == ' ') || (src[i] == '\n'))
285 continue;
286 data[j++] = src[i];
287 }
45 288
46 while (sscanf (data, " %02x%n", &read_byte, &off) == 1) 289 while (sscanf (pos, " %02x%n", &read_byte, &off) == 1)
47 { 290 {
48 if (invert) 291 if (invert)
49 dst[dstlen - 1 - data_len++] = read_byte; 292 dst[dstlen - 1 - data_len++] = read_byte;
50 else 293 else
51 dst[data_len++] = read_byte; 294 dst[data_len++] = read_byte;
52 data += off; 295 pos += off;
53 } 296 }
54 return data_len; 297 return data_len;
55} 298}
@@ -60,8 +303,17 @@ res_checker (void *cls,
60 unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd) 303 unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
61{ 304{
62 struct GnsTv *tv = cls; 305 struct GnsTv *tv = cls;
63 GNUNET_assert (rd_count == tv->rrcount); 306 GNUNET_assert (rd_count == tv->expected_rd_count);
64 printf ("RRCOUNT good: %d\n", rd_count); 307 printf ("RRCOUNT good: %d\n", rd_count);
308 for (int i = 0; i < rd_count; i++)
309 {
310 GNUNET_assert (rd[i].record_type == tv->expected_rd[i].record_type);
311 GNUNET_assert (rd[i].expiration_time == tv->expected_rd[i].expiration_time);
312 GNUNET_assert (rd[i].flags == tv->expected_rd[i].flags);
313 GNUNET_assert (rd[i].data_size == tv->expected_rd[i].data_size);
314 GNUNET_assert (0 == memcmp (rd[i].data, tv->expected_rd[i].data,
315 rd[i].data_size));
316 }
65} 317}
66 318
67 319
@@ -72,8 +324,8 @@ main ()
72 struct GNUNET_IDENTITY_PublicKey pub; 324 struct GNUNET_IDENTITY_PublicKey pub;
73 struct GNUNET_IDENTITY_PublicKey pub_parsed; 325 struct GNUNET_IDENTITY_PublicKey pub_parsed;
74 struct GNUNET_GNSRECORD_Block *rrblock; 326 struct GNUNET_GNSRECORD_Block *rrblock;
75 char *bdata;
76 char label[128]; 327 char label[128];
328 char rdata[8096];
77 329
78 for (int i = 0; i < TVCOUNT; i++) 330 for (int i = 0; i < TVCOUNT; i++)
79 { 331 {
@@ -88,6 +340,17 @@ main ()
88 parsehex (tvs[i].rrblock, (char*) rrblock, 0, 0); 340 parsehex (tvs[i].rrblock, (char*) rrblock, 0, 0);
89 parsehex (tvs[i].label, (char*) label, 0, 0); 341 parsehex (tvs[i].label, (char*) label, 0, 0);
90 printf ("Got label: %s\n", label); 342 printf ("Got label: %s\n", label);
343 int len = parsehex (tvs[i].rdata, (char*) rdata, 0, 0);
344 tvs[i].expected_rd_count = GNUNET_GNSRECORD_records_deserialize_get_size (
345 len,
346 rdata);
347 GNUNET_assert (tvs[i].expected_rd_count < 2048);
348 GNUNET_assert (GNUNET_OK ==
349 GNUNET_GNSRECORD_records_deserialize (len,
350 rdata,
351 tvs[i].
352 expected_rd_count,
353 tvs[i].expected_rd));
91 GNUNET_GNSRECORD_block_decrypt (rrblock, 354 GNUNET_GNSRECORD_block_decrypt (rrblock,
92 &pub_parsed, 355 &pub_parsed,
93 label, 356 label,