v / vlib / crypto / sha512 / sha512_224_shavs_monte_test.v
551 lines · 539 sloc · 13.52 KB · 86fe9456a5850026048933de1ba82185168d5a43
Raw
1// These tests are derived from the Secure Hash Algorithm Validation System
2// test vectors contained in:
3// https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/shs/shabytetestvectors.zip
4//
5// For SHA512_224, the test vectors come from:
6// SHA512_224Monte.rsp
7import crypto.sha512
8import encoding.hex
9
10const seed = '2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a'
11
12struct MonteTestCase {
13 name string
14 count int
15 digest string
16}
17
18const monte_cases = [
19 MonteTestCase{
20 name: 'checkpoint 0'
21 count: 0
22 digest: '9ee006873962aa0842d636c759646a4ef4b65bcbebcc35430b20f7f4'
23 },
24 MonteTestCase{
25 name: 'checkpoint 1'
26 count: 1
27 digest: '87726eda4570734b396f4c253146ecb9770b8591739240f02a4f2a02'
28 },
29 MonteTestCase{
30 name: 'checkpoint 2'
31 count: 2
32 digest: '7be0871653db5fa514b4ec1a0363df004657155575b0383bc9fdec35'
33 },
34 MonteTestCase{
35 name: 'checkpoint 3'
36 count: 3
37 digest: '7a794a3a1ae255e67ffbf688a05b6aba7f231cebec64b4fc75092d49'
38 },
39 MonteTestCase{
40 name: 'checkpoint 4'
41 count: 4
42 digest: 'aaf5d4ecaf9426149821b15821b41c49e3900c0fc91664fb294216ea'
43 },
44 MonteTestCase{
45 name: 'checkpoint 5'
46 count: 5
47 digest: '60f6ff2fbffc9151f67c7e9325e27706f9904d1d55311bb587c183c7'
48 },
49 MonteTestCase{
50 name: 'checkpoint 6'
51 count: 6
52 digest: 'c6e46e63fd0b37a7fd460f724315796a6be5dcfd047907acc0512278'
53 },
54 MonteTestCase{
55 name: 'checkpoint 7'
56 count: 7
57 digest: '1c9dd92b35f00ea3cd13bcdef3c99e73fd604fe167d4a23ba1aec8eb'
58 },
59 MonteTestCase{
60 name: 'checkpoint 8'
61 count: 8
62 digest: '3ebec6bbf913b0eee0cc8aec7f9611648432674551fc3f1e01520dd8'
63 },
64 MonteTestCase{
65 name: 'checkpoint 9'
66 count: 9
67 digest: 'b09556d256b3de7b122096a7a2a8c1d2ffcb23a9bfc38bb1d919739a'
68 },
69 MonteTestCase{
70 name: 'checkpoint 10'
71 count: 10
72 digest: '756dd96518eff331dc48e2af06c6f2a92831d49bef28af687d0c3912'
73 },
74 MonteTestCase{
75 name: 'checkpoint 11'
76 count: 11
77 digest: '08ef4f1cfe5b707ff57218240f5c02e75cc875e6585fc17fd60d3af7'
78 },
79 MonteTestCase{
80 name: 'checkpoint 12'
81 count: 12
82 digest: '6f956e415d7c29d8073d6e5f89d9288215988db029b86183af622de5'
83 },
84 MonteTestCase{
85 name: 'checkpoint 13'
86 count: 13
87 digest: 'a39947509d4a45d39837f785b2205a2fb4ab184fc40c88ec8dd7fe7b'
88 },
89 MonteTestCase{
90 name: 'checkpoint 14'
91 count: 14
92 digest: 'c7b53227a32fc6e03f300ec56bc4505f03bad3d66a39940e1670b62f'
93 },
94 MonteTestCase{
95 name: 'checkpoint 15'
96 count: 15
97 digest: 'b61a60ea4173d714cbcccff0dfef932f9d719175d5747ebca2b55b09'
98 },
99 MonteTestCase{
100 name: 'checkpoint 16'
101 count: 16
102 digest: 'ee2c5fc1649e4033884ddbf3c2d93fe3ec9e8e8171df0cd94b438613'
103 },
104 MonteTestCase{
105 name: 'checkpoint 17'
106 count: 17
107 digest: 'a333fbe4ea8dc682f8dc5e96cc2365ec2510b96d8e6bffdec1324b41'
108 },
109 MonteTestCase{
110 name: 'checkpoint 18'
111 count: 18
112 digest: '5ae36caae04f3426a6b8da72d16b261b79ddef7e94a5ac2c601a40cd'
113 },
114 MonteTestCase{
115 name: 'checkpoint 19'
116 count: 19
117 digest: '0d13a738747e8a15dc02e26338ad47a556afb4af033874de50e31a39'
118 },
119 MonteTestCase{
120 name: 'checkpoint 20'
121 count: 20
122 digest: '4fd90174f249e11b99e7eb63ebca5e06f8f1f78efee855b71545ef5d'
123 },
124 MonteTestCase{
125 name: 'checkpoint 21'
126 count: 21
127 digest: '02a47cd22538f44db8e2b0f769cf8fe2c0528dac2f47e53740fa7384'
128 },
129 MonteTestCase{
130 name: 'checkpoint 22'
131 count: 22
132 digest: '75ceb64019f21eecef34741b96e2dd57eb261b24d65fcd1a409210ce'
133 },
134 MonteTestCase{
135 name: 'checkpoint 23'
136 count: 23
137 digest: '4ffe012bc77387dd23c521ece6686e67c8584f308f5f62adc46715c8'
138 },
139 MonteTestCase{
140 name: 'checkpoint 24'
141 count: 24
142 digest: 'c1b12961b27395bd2d309b5e6a20451411bd3986d992bb83b30b92d5'
143 },
144 MonteTestCase{
145 name: 'checkpoint 25'
146 count: 25
147 digest: '0547c463bf3aeac722005c48d45e008f09c33551f1cfdd85b8d67dec'
148 },
149 MonteTestCase{
150 name: 'checkpoint 26'
151 count: 26
152 digest: '8704119b4a6f7fd8ac25bc1ad72c1d573106a0af5dad3c8b7563c742'
153 },
154 MonteTestCase{
155 name: 'checkpoint 27'
156 count: 27
157 digest: '877f5024aa6fa131e4660a8c7dd19bc80ce77c784b01ad79a5528fbb'
158 },
159 MonteTestCase{
160 name: 'checkpoint 28'
161 count: 28
162 digest: '15750a559a4aed2925d280671b75d34e3a5b080259143f7b671e0e5e'
163 },
164 MonteTestCase{
165 name: 'checkpoint 29'
166 count: 29
167 digest: 'deb48a5c402f539d0a0a62d81928debf78519cbeaebce1a29f203b06'
168 },
169 MonteTestCase{
170 name: 'checkpoint 30'
171 count: 30
172 digest: '19af4d392fecc6a03f443f8aeb8e59a5496ca3b75481771b3efe45f9'
173 },
174 MonteTestCase{
175 name: 'checkpoint 31'
176 count: 31
177 digest: 'd7e0d727fea61dae8f2c92fe884f2cd939ab2737f6bbf4545aa27e67'
178 },
179 MonteTestCase{
180 name: 'checkpoint 32'
181 count: 32
182 digest: 'c8b6e303d2c654a5f330209502ac89adf9840a6c832a356095c98b70'
183 },
184 MonteTestCase{
185 name: 'checkpoint 33'
186 count: 33
187 digest: 'bbc6d0112d60da2975d2028cf3c6b9509aed404f378540235199456c'
188 },
189 MonteTestCase{
190 name: 'checkpoint 34'
191 count: 34
192 digest: 'b8bec3ad04591295081ef9484df499d4659ee1cfbd74b11033fa3d27'
193 },
194 MonteTestCase{
195 name: 'checkpoint 35'
196 count: 35
197 digest: 'e6f5a285cdc65b24496c1b5040fd354b7abbc930128e6c750fe72ef8'
198 },
199 MonteTestCase{
200 name: 'checkpoint 36'
201 count: 36
202 digest: 'af77e2ccd33403b22954796a071da760f7c27fd998e9aaa38126172a'
203 },
204 MonteTestCase{
205 name: 'checkpoint 37'
206 count: 37
207 digest: 'de0e347e717e3331a73fc27c4d0a6f4adae82de2c70c701a6d5ab2b3'
208 },
209 MonteTestCase{
210 name: 'checkpoint 38'
211 count: 38
212 digest: '00397993b6b0ab272be84263167167270c45df00483b01fe9b1ea365'
213 },
214 MonteTestCase{
215 name: 'checkpoint 39'
216 count: 39
217 digest: '9a95e0f3e52e822552ff16c701d3541674de4cf183b6f30c43154bcd'
218 },
219 MonteTestCase{
220 name: 'checkpoint 40'
221 count: 40
222 digest: '6a9d0c77cc592b625be5896b41e5dfc10a28ebbfdf688c84b525e0ca'
223 },
224 MonteTestCase{
225 name: 'checkpoint 41'
226 count: 41
227 digest: '39b8102119ff29ab458d92c691bad39cad3e3a9bd08a6d051b9e8603'
228 },
229 MonteTestCase{
230 name: 'checkpoint 42'
231 count: 42
232 digest: '49aad2c03b7c4d3dcf8356325fe6c43705731341697290c824f9eacf'
233 },
234 MonteTestCase{
235 name: 'checkpoint 43'
236 count: 43
237 digest: 'fe4e83590811ce54caa352e52829268532a20b1a38d069ad99fa9a41'
238 },
239 MonteTestCase{
240 name: 'checkpoint 44'
241 count: 44
242 digest: 'eeba13d3177da1b2b6877cdbb8ba32e0886b94bae893a9a062af4d4d'
243 },
244 MonteTestCase{
245 name: 'checkpoint 45'
246 count: 45
247 digest: 'edd2d2365300c6a904526ad7106ee74d75bcbb9634c97f3fec57fc48'
248 },
249 MonteTestCase{
250 name: 'checkpoint 46'
251 count: 46
252 digest: '46bd3b5289ff2278b2d1d652c9294f31415dda38694fce83fdd25f15'
253 },
254 MonteTestCase{
255 name: 'checkpoint 47'
256 count: 47
257 digest: '1e1059e7089fa33e23fc1572b08131c7600ac8a1bbe583b6a4c6e09e'
258 },
259 MonteTestCase{
260 name: 'checkpoint 48'
261 count: 48
262 digest: 'cd70a5e3d6ba8281c5ecc468dd7e96bb3d7723754d2cdc19e8a6063d'
263 },
264 MonteTestCase{
265 name: 'checkpoint 49'
266 count: 49
267 digest: 'cb46f0380d1db1b1bec9b70d51c29d1300c5c814a4b360a0db548363'
268 },
269 MonteTestCase{
270 name: 'checkpoint 50'
271 count: 50
272 digest: '76b467577856973eab224e2ecd0689601446c7915f6805e93276a4bc'
273 },
274 MonteTestCase{
275 name: 'checkpoint 51'
276 count: 51
277 digest: '3f4d4db5e47d20c7458a87c5029eb340c4b639ebd3b6f1fca9c20427'
278 },
279 MonteTestCase{
280 name: 'checkpoint 52'
281 count: 52
282 digest: 'f8fff1c83b456dd8ce96aa977a7a1b968c1a5bd4f2cb6e0ff80aa923'
283 },
284 MonteTestCase{
285 name: 'checkpoint 53'
286 count: 53
287 digest: 'f88800640deb5328d0a6985474a041be43c7248609fa97ea0b9236cb'
288 },
289 MonteTestCase{
290 name: 'checkpoint 54'
291 count: 54
292 digest: 'a071d9e4da86be8c17bbbbcf47a863ceea303bf02bb872565f829bdf'
293 },
294 MonteTestCase{
295 name: 'checkpoint 55'
296 count: 55
297 digest: '19e399fc939c03fd3d016f69f77345580c1f8869b42c8231aea37027'
298 },
299 MonteTestCase{
300 name: 'checkpoint 56'
301 count: 56
302 digest: '87f1884b3f78b9c962beef4e024e235fc9ca25c8667426fdcf18ee34'
303 },
304 MonteTestCase{
305 name: 'checkpoint 57'
306 count: 57
307 digest: '6172fb88775686115c5d62e7b32affb353b40a41fe1ebfc603917274'
308 },
309 MonteTestCase{
310 name: 'checkpoint 58'
311 count: 58
312 digest: 'df9e73edd801f9f457192f7d3aae4261dd89515200b028b27684d554'
313 },
314 MonteTestCase{
315 name: 'checkpoint 59'
316 count: 59
317 digest: '3c5c668e1b085b7efb28c5413657b921c7db8cec6eb91177bc5fdb25'
318 },
319 MonteTestCase{
320 name: 'checkpoint 60'
321 count: 60
322 digest: '2273fe0a482b701a54dc397ea93bbf73f7a8ce0fd891cf4bd7d0b9e0'
323 },
324 MonteTestCase{
325 name: 'checkpoint 61'
326 count: 61
327 digest: 'bdfd8d50df97a02af4ba997e237f99d17503321f67cc5af8c3aadf2f'
328 },
329 MonteTestCase{
330 name: 'checkpoint 62'
331 count: 62
332 digest: '24f6e6a0d54767dc5b33a46ca073d368cb3ec1b36fecc2672838a194'
333 },
334 MonteTestCase{
335 name: 'checkpoint 63'
336 count: 63
337 digest: 'ea7672b36987befb16352c13231fb7668c75673a932bf880181765e4'
338 },
339 MonteTestCase{
340 name: 'checkpoint 64'
341 count: 64
342 digest: 'e45da9a4f5c0dc38a2f7d2a30b0c8fe153584a56d80ce69e929a2784'
343 },
344 MonteTestCase{
345 name: 'checkpoint 65'
346 count: 65
347 digest: '86983ba278254438244b1bf5ea59492ec36504a078530b6a7812f832'
348 },
349 MonteTestCase{
350 name: 'checkpoint 66'
351 count: 66
352 digest: 'ad9c1161761135fff88c17963e86cdbc74ff1b1cfc4433fbc8d9efc1'
353 },
354 MonteTestCase{
355 name: 'checkpoint 67'
356 count: 67
357 digest: '9af064cf4fa078b50835f283cee8ecb6ada36012ece1a8426a62342c'
358 },
359 MonteTestCase{
360 name: 'checkpoint 68'
361 count: 68
362 digest: '046810fe8fb6826cc5b6b15eaa5e52f6b3679359ccdd773d6d3b638c'
363 },
364 MonteTestCase{
365 name: 'checkpoint 69'
366 count: 69
367 digest: 'a5ecb35e74f484c8dfbf759ab4c0ab432aa2a9d7d75fdce80e556fb0'
368 },
369 MonteTestCase{
370 name: 'checkpoint 70'
371 count: 70
372 digest: '5e1de1624a8111e59cb1955a4c2c4a2b54aa4df035679c0bdbaafc2d'
373 },
374 MonteTestCase{
375 name: 'checkpoint 71'
376 count: 71
377 digest: '9b449c13d9633869261dfa842c63c82ee9ac71b392b1ab268d536917'
378 },
379 MonteTestCase{
380 name: 'checkpoint 72'
381 count: 72
382 digest: '502270faa8397007684f76f331365a793e7a6cc8298dd9798229a515'
383 },
384 MonteTestCase{
385 name: 'checkpoint 73'
386 count: 73
387 digest: '7e1fb43c7ffd08d08ca9a0cc5d5414f8e2b20cc3458a63ac00ab388d'
388 },
389 MonteTestCase{
390 name: 'checkpoint 74'
391 count: 74
392 digest: 'b8694aa799471f785e33c6f8d5729f6c0db59f46d652cbacc923dd70'
393 },
394 MonteTestCase{
395 name: 'checkpoint 75'
396 count: 75
397 digest: '6b431252c1f23628d7ec11656d52e8d6724100a6204e136bfc7ccd92'
398 },
399 MonteTestCase{
400 name: 'checkpoint 76'
401 count: 76
402 digest: '357f7779dc289dd46231a46bdeabaf899b167984864d232410736505'
403 },
404 MonteTestCase{
405 name: 'checkpoint 77'
406 count: 77
407 digest: '28cd0f7181f891e138c3cc43f14b7e826eff9dea465cdfe948d31d88'
408 },
409 MonteTestCase{
410 name: 'checkpoint 78'
411 count: 78
412 digest: 'd3eefb1a85d7ade8278706aec0c0c2b889004ca386278fe466605d2d'
413 },
414 MonteTestCase{
415 name: 'checkpoint 79'
416 count: 79
417 digest: 'bbcf4c4b31af3a6ea82d23907fe71bdaf5ae4db1446fe28fabf01145'
418 },
419 MonteTestCase{
420 name: 'checkpoint 80'
421 count: 80
422 digest: '1f8354c43cb18715125c504ea1bff73e4e95c64fbc19e850468924a3'
423 },
424 MonteTestCase{
425 name: 'checkpoint 81'
426 count: 81
427 digest: 'd3a57114d5572427096478d26162d7cebbbe6b99cb06234327b21ef9'
428 },
429 MonteTestCase{
430 name: 'checkpoint 82'
431 count: 82
432 digest: '45b964bcdbde997f8b8de4a7617152a2f80b0333aeac6aa3e53901fd'
433 },
434 MonteTestCase{
435 name: 'checkpoint 83'
436 count: 83
437 digest: '2fad09cb0e93263548120115972110979eec7ef94e303c462223005d'
438 },
439 MonteTestCase{
440 name: 'checkpoint 84'
441 count: 84
442 digest: '6680932f0332b4c0ccb708d4bf351af23bb05b6fb8c36b458efa46f3'
443 },
444 MonteTestCase{
445 name: 'checkpoint 85'
446 count: 85
447 digest: '1076a4637cc36c9f5c2fff3700362a9d62cda3596be7b5e7f244fff1'
448 },
449 MonteTestCase{
450 name: 'checkpoint 86'
451 count: 86
452 digest: '0a819369c413d8d20195fa16660b320988357d63c1a94602eb117377'
453 },
454 MonteTestCase{
455 name: 'checkpoint 87'
456 count: 87
457 digest: '397fcc30577bc5327a8cf9284cc64a02700f1b2f2d1ca8a1506b9916'
458 },
459 MonteTestCase{
460 name: 'checkpoint 88'
461 count: 88
462 digest: '217be1548b8d99bb1080ea0f3995be3c6494c91235fbf3a6d854a08e'
463 },
464 MonteTestCase{
465 name: 'checkpoint 89'
466 count: 89
467 digest: 'ddcc841fd03e9d942f886657b0feb522682979e836307f68f4f19843'
468 },
469 MonteTestCase{
470 name: 'checkpoint 90'
471 count: 90
472 digest: '4a33efa590ee444c75b6a4530a0fedd9987661199ccded49e40bc8b0'
473 },
474 MonteTestCase{
475 name: 'checkpoint 91'
476 count: 91
477 digest: '970a4a3334796b06cb0ba8014eca67bbc471dbcea0efbcb22c666b2e'
478 },
479 MonteTestCase{
480 name: 'checkpoint 92'
481 count: 92
482 digest: 'a7630df9688bbc66ceac6ae4a3a549513e427f5dc0f55ad2696b021a'
483 },
484 MonteTestCase{
485 name: 'checkpoint 93'
486 count: 93
487 digest: 'd63c202d5feab56898d8eb793115a8ac216ea1b163a967eb119367fc'
488 },
489 MonteTestCase{
490 name: 'checkpoint 94'
491 count: 94
492 digest: '0dec4d35fa7737c2d93d901a0556ce3cb357224d3caa25dec8095a05'
493 },
494 MonteTestCase{
495 name: 'checkpoint 95'
496 count: 95
497 digest: 'c40b609646eef457dea98eb32f45ee1f0af31658d742680bdb784f53'
498 },
499 MonteTestCase{
500 name: 'checkpoint 96'
501 count: 96
502 digest: '1b2a12a3bc4403a1bebfc1358cb2844c56215ae413ed6df10fe2f8d3'
503 },
504 MonteTestCase{
505 name: 'checkpoint 97'
506 count: 97
507 digest: '8342cbc0b0e8c270134a7907448037e07201150f0891b20dcf20867c'
508 },
509 MonteTestCase{
510 name: 'checkpoint 98'
511 count: 98
512 digest: 'a09ed66100b982070edecb5af45ac354759778134098ca3c0bf67b05'
513 },
514 MonteTestCase{
515 name: 'checkpoint 99'
516 count: 99
517 digest: '5d8fc89761e82efe7188596a52eb43efd9492038bbc47bc0df5e9843'
518 },
519]
520
521fn test_monte_messages() {
522 mut msg_seed := hex.decode(seed)!
523
524 for c in monte_cases {
525 mut md0 := msg_seed.clone()
526 mut md1 := msg_seed.clone()
527 mut md2 := msg_seed.clone()
528 mut md3 := msg_seed.clone()
529
530 mut mi := []u8{len: 0, cap: 64}
531
532 for _ in 0 .. 1000 {
533 mi.clear()
534 mi << md0
535 mi << md1
536 mi << md2
537
538 md3 = sha512.sum512_224(mi)
539
540 md0 = md1.clone()
541 md1 = md2.clone()
542 md2 = md3.clone()
543 }
544
545 msg_seed = md3.clone()
546
547 expected_result := hex.decode(c.digest)!
548
549 assert md3 == expected_result, 'failed ${c.name}'
550 }
551}
552