v2 / vlib / crypto / sha256 / sha224_shavs_monte_test.v
551 lines · 539 sloc · 13.51 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 SHA224, the test vectors come from:
6// SHA224Monte.rsp
7import crypto.sha256
8import encoding.hex
9
10const seed = 'ed2b70d575d9d0b4196ae84a03eed940057ea89cdd729b95b7d4e6a5'
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: 'cd94d7da13c030208b2d0d78fcfe9ea22fa8906df66aa9a1f42afa70'
23 },
24 MonteTestCase{
25 name: 'checkpoint 1'
26 count: 1
27 digest: '555846e884633639565d5e0c01dd93ba58edb01ee18e68ccca28f7b8'
28 },
29 MonteTestCase{
30 name: 'checkpoint 2'
31 count: 2
32 digest: '44d5f4a179b33231f24cc209ed2542ddb931391f2a2d604f80ed460b'
33 },
34 MonteTestCase{
35 name: 'checkpoint 3'
36 count: 3
37 digest: '18678e3c151f05f92a89fc5b2ec56bfc6fafa66d73ffc1937fcab4d0'
38 },
39 MonteTestCase{
40 name: 'checkpoint 4'
41 count: 4
42 digest: 'b285f829b0499ff45f8454eda2d4e0997b3f438c2728f1a25cfbb05a'
43 },
44 MonteTestCase{
45 name: 'checkpoint 5'
46 count: 5
47 digest: '206d442c6605be0e675b0efc76243c2f18f2260a93375fb36e469631'
48 },
49 MonteTestCase{
50 name: 'checkpoint 6'
51 count: 6
52 digest: '1cd8ea34d8483b6a513c52a74e416bac2f322bbaeee02c6b0b05a781'
53 },
54 MonteTestCase{
55 name: 'checkpoint 7'
56 count: 7
57 digest: '00cee48001fe8442ef39c3433ed05473179f34205d337940d4bfd3cd'
58 },
59 MonteTestCase{
60 name: 'checkpoint 8'
61 count: 8
62 digest: 'ead3ad27819401912bc9abfdb50037672a3aed0e94fbaa1cc0560621'
63 },
64 MonteTestCase{
65 name: 'checkpoint 9'
66 count: 9
67 digest: '8f4dd5aef9cea829d8802ffcced2e8ed6b48ac23bbfbb0fae2fad0fd'
68 },
69 MonteTestCase{
70 name: 'checkpoint 10'
71 count: 10
72 digest: '03aeb918feab459e39af29ff3aaf406088bf06d793338bbd563641a2'
73 },
74 MonteTestCase{
75 name: 'checkpoint 11'
76 count: 11
77 digest: 'de80c312b153fbd7241c8bc432d1ed253d26dcc6f458b953ac2d9259'
78 },
79 MonteTestCase{
80 name: 'checkpoint 12'
81 count: 12
82 digest: '3eb8d347cc2565ddd71f7fc21cff7eb3a2cf8e85c5e1d4c751f69f26'
83 },
84 MonteTestCase{
85 name: 'checkpoint 13'
86 count: 13
87 digest: 'dbfd7033a4f884ecf7053f07b4c51f3efb1c09084cc7bbe667196a3e'
88 },
89 MonteTestCase{
90 name: 'checkpoint 14'
91 count: 14
92 digest: '5323fc60310fe29900eb7a500f29897001c37945c5f8849674725553'
93 },
94 MonteTestCase{
95 name: 'checkpoint 15'
96 count: 15
97 digest: 'c3d9416549bebebf679c0122a9c5bb86c0b514c6a4e9eda1e9782040'
98 },
99 MonteTestCase{
100 name: 'checkpoint 16'
101 count: 16
102 digest: '749fc9c8c21957ddcaf5eff69c297284d722c79be1fc6c910495a586'
103 },
104 MonteTestCase{
105 name: 'checkpoint 17'
106 count: 17
107 digest: 'aa307d91c4037372ff0ca60eb17ec8f1faba862601b95754783ea808'
108 },
109 MonteTestCase{
110 name: 'checkpoint 18'
111 count: 18
112 digest: '071e361909c38791e941d995b0b25a3294bdf39456cc012806ada3c5'
113 },
114 MonteTestCase{
115 name: 'checkpoint 19'
116 count: 19
117 digest: '18751a765f3b06fc2c9a1888d4bb78b2d2226799a54dba72b5429f25'
118 },
119 MonteTestCase{
120 name: 'checkpoint 20'
121 count: 20
122 digest: '54b39c96f6377e3fc2ae0ba4ec89049a6c04808da3fa0415c9053ce4'
123 },
124 MonteTestCase{
125 name: 'checkpoint 21'
126 count: 21
127 digest: '58c1eda7eab2fc4046ae153ee95de5df036dbba25b9bb5c5428ea882'
128 },
129 MonteTestCase{
130 name: 'checkpoint 22'
131 count: 22
132 digest: '3a02eaf55d04b6052b7d79b96d1e316f90f5dbbb3217dbfaea55faef'
133 },
134 MonteTestCase{
135 name: 'checkpoint 23'
136 count: 23
137 digest: 'c8b5eac17f450458c60c075a8f75a24a1dbc58247fcd0ccfaf03e446'
138 },
139 MonteTestCase{
140 name: 'checkpoint 24'
141 count: 24
142 digest: '53084cacfebbc4d1ff2db614b42714c18ddde36c6b7c2fbc3b1a8706'
143 },
144 MonteTestCase{
145 name: 'checkpoint 25'
146 count: 25
147 digest: '528b867aa481d42fc4931a47d24c3c905aaafa8f6dd5820c67d3579c'
148 },
149 MonteTestCase{
150 name: 'checkpoint 26'
151 count: 26
152 digest: 'f0a3cd3f53eb72df80ab67d264a973b6bb2f58bde8f636d9100e8864'
153 },
154 MonteTestCase{
155 name: 'checkpoint 27'
156 count: 27
157 digest: '7912f20299d803ba917f408a5a59822d147bcd1008ad5c7b678e2390'
158 },
159 MonteTestCase{
160 name: 'checkpoint 28'
161 count: 28
162 digest: '6f0e49505c15669302133d66e45d192e0c6ad02fc5b9aa128aa5517a'
163 },
164 MonteTestCase{
165 name: 'checkpoint 29'
166 count: 29
167 digest: 'd06aed0f18e6c377174fd00cc74a92020b3df218c376eac0501a094a'
168 },
169 MonteTestCase{
170 name: 'checkpoint 30'
171 count: 30
172 digest: 'cb1bbf7cc5dad591d32534c570e5bca93b8952832779dd6e0ccdc91c'
173 },
174 MonteTestCase{
175 name: 'checkpoint 31'
176 count: 31
177 digest: '4775bc11834930118654a3e66e5b7f51871d6f5068f4305dc2845574'
178 },
179 MonteTestCase{
180 name: 'checkpoint 32'
181 count: 32
182 digest: 'ce3b5703ed9f946ec4af62fade6e69c2751474ab8da570064ecd2ef6'
183 },
184 MonteTestCase{
185 name: 'checkpoint 33'
186 count: 33
187 digest: '49a9e1aa84700874ac27eee43f193df69ed6718b131c4854f729a32e'
188 },
189 MonteTestCase{
190 name: 'checkpoint 34'
191 count: 34
192 digest: 'd2c6592251a27cae7d819ac7b476c8a2ff608e57b018f79e0cf19b87'
193 },
194 MonteTestCase{
195 name: 'checkpoint 35'
196 count: 35
197 digest: 'a861be4fe188858b913aad179ba575cec91bed54c1ca27608daa27dc'
198 },
199 MonteTestCase{
200 name: 'checkpoint 36'
201 count: 36
202 digest: 'bf7975e63aa7f1bef84e7446f1c4a00a75c13285fd7c4a7a8318b1cf'
203 },
204 MonteTestCase{
205 name: 'checkpoint 37'
206 count: 37
207 digest: '5d125b14e966c9e431bdc5592d3e6305fae678dc5d6dd064fa1345f9'
208 },
209 MonteTestCase{
210 name: 'checkpoint 38'
211 count: 38
212 digest: '8c0fbb471404371145dbb66e8b1c6fc428e6dcfa263e3f5ddb47b30d'
213 },
214 MonteTestCase{
215 name: 'checkpoint 39'
216 count: 39
217 digest: '7148b69b04457296fca18e6f7b7f2145d9af9e6bc8f48b8571af0e53'
218 },
219 MonteTestCase{
220 name: 'checkpoint 40'
221 count: 40
222 digest: '0bd47a04fc42fb3d9643496e5b0719c22262f741e862adfcef91d61c'
223 },
224 MonteTestCase{
225 name: 'checkpoint 41'
226 count: 41
227 digest: '3dbb14133351e5d4bc885d9594c07f7f0f99d4a7c745eff3e7aadc2c'
228 },
229 MonteTestCase{
230 name: 'checkpoint 42'
231 count: 42
232 digest: '94f6ba7f94ba9903f7e9bde9b131353fce560c7de7159458f1a39cfa'
233 },
234 MonteTestCase{
235 name: 'checkpoint 43'
236 count: 43
237 digest: '65fc03fabbf57904f572358c20f004aa16e0b5ae6530fa961ea10b9d'
238 },
239 MonteTestCase{
240 name: 'checkpoint 44'
241 count: 44
242 digest: 'e46532e3e4bd0a0cb389abfba5d679e916a7c193324f1bac498ee1ee'
243 },
244 MonteTestCase{
245 name: 'checkpoint 45'
246 count: 45
247 digest: '131d096c684345311cff958706eded139676a74d97a1beb861998485'
248 },
249 MonteTestCase{
250 name: 'checkpoint 46'
251 count: 46
252 digest: 'fe3e03637088ac8ee2e035bfc1e7f4e944304663c832c26089e85f9f'
253 },
254 MonteTestCase{
255 name: 'checkpoint 47'
256 count: 47
257 digest: 'd570c2b7040fc721b41f2d213f6ee87ac1e37f2b86526cf46c699aa7'
258 },
259 MonteTestCase{
260 name: 'checkpoint 48'
261 count: 48
262 digest: '82ede72ad163b914be7c22c085cd99438b6d5557ddd3b752f0a9fb7b'
263 },
264 MonteTestCase{
265 name: 'checkpoint 49'
266 count: 49
267 digest: '343c21a0cbde3cccdbbd66eee32c50f5a54b0ac267ec3f41ec07a67f'
268 },
269 MonteTestCase{
270 name: 'checkpoint 50'
271 count: 50
272 digest: '94ad254f3b4a76f6140d0dd3775bd75eb3c081085fcb76c91b4cca92'
273 },
274 MonteTestCase{
275 name: 'checkpoint 51'
276 count: 51
277 digest: '65fa84f358bc32caaff799129bc2cad883636826415703a2dd1a3cbe'
278 },
279 MonteTestCase{
280 name: 'checkpoint 52'
281 count: 52
282 digest: '1c2f47c532856198d03dd85275357dce085c8f6c5a871aac4ff4ea28'
283 },
284 MonteTestCase{
285 name: 'checkpoint 53'
286 count: 53
287 digest: '1d51c1019131b41a076cc603f4a8e56b2f4ee70dba326af30d926827'
288 },
289 MonteTestCase{
290 name: 'checkpoint 54'
291 count: 54
292 digest: '9789daba3a8e9702d2d0b319878f88b08ebc5876dd5dff6414bf1922'
293 },
294 MonteTestCase{
295 name: 'checkpoint 55'
296 count: 55
297 digest: '1968789785f1ef61f849bcb29fbc1491c006021f729718e72f29b80d'
298 },
299 MonteTestCase{
300 name: 'checkpoint 56'
301 count: 56
302 digest: '62dca9550461f8a85e1abca4192a8a55a6e6663ebcda9ba6fb95f10c'
303 },
304 MonteTestCase{
305 name: 'checkpoint 57'
306 count: 57
307 digest: 'ee190aa251c1a2ae0a376b4c6b6ab3bb09f743fa01eafaab68d170e3'
308 },
309 MonteTestCase{
310 name: 'checkpoint 58'
311 count: 58
312 digest: '02273be94aaaf4a1d22496821e8abda8c418d3a4c278947c27d6c912'
313 },
314 MonteTestCase{
315 name: 'checkpoint 59'
316 count: 59
317 digest: '3998a213e392978a38016545a59bd435180da66d2b3da373088f406a'
318 },
319 MonteTestCase{
320 name: 'checkpoint 60'
321 count: 60
322 digest: '7308f2145d345bdb01c38a9993a0ec81ed5164ed0c6caabfa3b23fea'
323 },
324 MonteTestCase{
325 name: 'checkpoint 61'
326 count: 61
327 digest: '3ccde61f4734978995b7489bad8c1e6bafe03f7c3886e9b4ef0f1aa0'
328 },
329 MonteTestCase{
330 name: 'checkpoint 62'
331 count: 62
332 digest: 'cca9745f59f3ae2bbb8d65d31c171aa33960c8c6fa4689bb7e6d2152'
333 },
334 MonteTestCase{
335 name: 'checkpoint 63'
336 count: 63
337 digest: 'c976de72db46c1a254293af6093c563ce43232077c249584c016ff6f'
338 },
339 MonteTestCase{
340 name: 'checkpoint 64'
341 count: 64
342 digest: 'f1448af3cfe317aff1470f0a3de7bf533d77dc7f55e8dd790fd57727'
343 },
344 MonteTestCase{
345 name: 'checkpoint 65'
346 count: 65
347 digest: 'd4be0ccfe4913851c9636ed036c625524e72891c5c0627aae50288ce'
348 },
349 MonteTestCase{
350 name: 'checkpoint 66'
351 count: 66
352 digest: '6bd99c53693d4e2467ba6094710a6d2f48cc2ae907c4ae28604586a1'
353 },
354 MonteTestCase{
355 name: 'checkpoint 67'
356 count: 67
357 digest: '2eb4fa0872ede2a378386e40002cb00b4d1c2fca3413b944ed210915'
358 },
359 MonteTestCase{
360 name: 'checkpoint 68'
361 count: 68
362 digest: '48b624151c9d3a1cc8e9d6665d42d4e640ac91abcd3556a31ff0250c'
363 },
364 MonteTestCase{
365 name: 'checkpoint 69'
366 count: 69
367 digest: '31159840b7cb040d819ebee1ed0e52d09f5805be523cccc22eeacba9'
368 },
369 MonteTestCase{
370 name: 'checkpoint 70'
371 count: 70
372 digest: 'f9a67791dcae0aea00f77f8536ddba439e9fcf7e5b1ed827f83818a8'
373 },
374 MonteTestCase{
375 name: 'checkpoint 71'
376 count: 71
377 digest: 'a5913105fba645ba0df942da96d271a1d5efb923a4f61eb463450ea9'
378 },
379 MonteTestCase{
380 name: 'checkpoint 72'
381 count: 72
382 digest: '6ece291f81eceaa9eb5a5e228c9924f165b8b10e2cf0e143dd5fe601'
383 },
384 MonteTestCase{
385 name: 'checkpoint 73'
386 count: 73
387 digest: 'e07ab143f09eb8ad0d381b888adb22229c2e2a8b067e0fd012ef67a7'
388 },
389 MonteTestCase{
390 name: 'checkpoint 74'
391 count: 74
392 digest: '88a33980be5bc911c1713d5c2bd2e5ecca7fc87879501aefa9722c89'
393 },
394 MonteTestCase{
395 name: 'checkpoint 75'
396 count: 75
397 digest: 'a709d188da8ee187d91bd17069f785ebb379df013d78844a45b2bfe5'
398 },
399 MonteTestCase{
400 name: 'checkpoint 76'
401 count: 76
402 digest: '306fa7bd696b3e9841f84d1c861712acba0febddd7a952499b96579e'
403 },
404 MonteTestCase{
405 name: 'checkpoint 77'
406 count: 77
407 digest: '61341dee2e2869112bba2e1077fb409375f755dcafc1457bf49e0e8e'
408 },
409 MonteTestCase{
410 name: 'checkpoint 78'
411 count: 78
412 digest: '0959a6e3b727c6213119b9e8411132b5819eb848bec6ebda0b75578a'
413 },
414 MonteTestCase{
415 name: 'checkpoint 79'
416 count: 79
417 digest: '11cef0312aaedb9d0b26de64656406c8f4c358e6d3db459d364481de'
418 },
419 MonteTestCase{
420 name: 'checkpoint 80'
421 count: 80
422 digest: '5de71b191eec70e591c22ebe3a5d2973aa3172f1c272e926cc0d4873'
423 },
424 MonteTestCase{
425 name: 'checkpoint 81'
426 count: 81
427 digest: 'ab218bf4268aec9b41dd2db80622e4c0319cc0de12a60e06d80414ea'
428 },
429 MonteTestCase{
430 name: 'checkpoint 82'
431 count: 82
432 digest: '5c83874afe6da0443abfbbbf8ceef38f9400b63593ee7a29d467b4f5'
433 },
434 MonteTestCase{
435 name: 'checkpoint 83'
436 count: 83
437 digest: 'ba0fd01f699a0d00a0dff4c63f6ad19e9530a7ad11fec504e6481816'
438 },
439 MonteTestCase{
440 name: 'checkpoint 84'
441 count: 84
442 digest: '835ec2c57424baaeed09a7c0c0b6e8bf9d1cec83de4c719846c990fb'
443 },
444 MonteTestCase{
445 name: 'checkpoint 85'
446 count: 85
447 digest: '64d95f2c92343d8fca6f6914fba8814478850b5d4c2eb227f4ae6fa1'
448 },
449 MonteTestCase{
450 name: 'checkpoint 86'
451 count: 86
452 digest: 'f8dd5355827ac4bd040fc05ed6cb2914d013f126487a6d5f2c22f767'
453 },
454 MonteTestCase{
455 name: 'checkpoint 87'
456 count: 87
457 digest: 'be5bbf68d6b99749edefa6b113638ca5cf5fddfd8fcd4d719aeb54b5'
458 },
459 MonteTestCase{
460 name: 'checkpoint 88'
461 count: 88
462 digest: '3434d03e98d0af69281e7a7ff8301369c5bc6166cd29b83397ad3fd7'
463 },
464 MonteTestCase{
465 name: 'checkpoint 89'
466 count: 89
467 digest: '747b2a7cfb8c4fef7de0a08499f8b19f37e9161b855a84bd50ef84c5'
468 },
469 MonteTestCase{
470 name: 'checkpoint 90'
471 count: 90
472 digest: 'c1c1fa2bbb10c5672b040ed0c33d4d93e0fd210d1373fc7fd2312c0c'
473 },
474 MonteTestCase{
475 name: 'checkpoint 91'
476 count: 91
477 digest: '671f67380b7676ee7c9fbfe71f3807e3575745ec3ae3128420a141fd'
478 },
479 MonteTestCase{
480 name: 'checkpoint 92'
481 count: 92
482 digest: 'e88394adf710b9764a448abc6d62928b0268c6b119306f3c93d7b6d2'
483 },
484 MonteTestCase{
485 name: 'checkpoint 93'
486 count: 93
487 digest: '711cc90bfdeed121bd5a8629a9cba6df7bf8df89184ec64ee918cc67'
488 },
489 MonteTestCase{
490 name: 'checkpoint 94'
491 count: 94
492 digest: '3f63432484eaa1f389d27947a84e256618f9bc81015993cac386887a'
493 },
494 MonteTestCase{
495 name: 'checkpoint 95'
496 count: 95
497 digest: 'e00e0bf2a32227461230a065bbd2eeb5364277e83a850c53ef5c92e9'
498 },
499 MonteTestCase{
500 name: 'checkpoint 96'
501 count: 96
502 digest: '1977311cea23a681c83dc58a6863e362bf6c02e30f4c9c4c8439ab4e'
503 },
504 MonteTestCase{
505 name: 'checkpoint 97'
506 count: 97
507 digest: '2853a64f56c6282de53e30eba9418dd62eccb8c9a662c313b4768265'
508 },
509 MonteTestCase{
510 name: 'checkpoint 98'
511 count: 98
512 digest: 'ca9d0a2eeb484b9809c3850f166362d893f951f5e93cc7a3c72522e0'
513 },
514 MonteTestCase{
515 name: 'checkpoint 99'
516 count: 99
517 digest: '27033d2d89329ba9d2a39c0292552a5f1f945c115d5abf2064e93754'
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 = sha256.sum224(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