v2 / vlib / crypto / sha256 / sha256_shavs_monte_test.v
551 lines · 539 sloc · 14.29 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 SHA256, the test vectors come from:
6// SHA256Monte.rsp
7import crypto.sha256
8import encoding.hex
9
10const seed = '6d1e72ad03ddeb5de891e572e2396f8da015d899ef0e79503152d6010a3fe691'
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: 'e93c330ae5447738c8aa85d71a6c80f2a58381d05872d26bdd39f1fcd4f2b788'
23 },
24 MonteTestCase{
25 name: 'checkpoint 1'
26 count: 1
27 digest: '2e78f8c8772ea7c9331d41ed3f9cdf27d8f514a99342ee766ee3b8b0d0b121c0'
28 },
29 MonteTestCase{
30 name: 'checkpoint 2'
31 count: 2
32 digest: 'd6a23dff1b7f2eddc1a212f8a218397523a799b07386a30692fd6fe9d2bf0944'
33 },
34 MonteTestCase{
35 name: 'checkpoint 3'
36 count: 3
37 digest: 'fb0099a964fad5a88cf12952f2991ce256a4ac3049f3d389c3b9e6c00e585db4'
38 },
39 MonteTestCase{
40 name: 'checkpoint 4'
41 count: 4
42 digest: 'f9eba2a4cf6263826beaf6150057849eb975a9513c0b76ecad0f1c19ebbad89b'
43 },
44 MonteTestCase{
45 name: 'checkpoint 5'
46 count: 5
47 digest: '3ddf05ba8dfec982451a3e9a97695ea9cdb7098c877d0c2cd2c64e58a87754d9'
48 },
49 MonteTestCase{
50 name: 'checkpoint 6'
51 count: 6
52 digest: '2cc3fe501e3b2e33e60407b0a27025735dd04fd7623bb4fceeebae5cad67ad4b'
53 },
54 MonteTestCase{
55 name: 'checkpoint 7'
56 count: 7
57 digest: 'c534802a459b40c792e1fa68e54ceab69e333fbeeecad65fb124d2f3cc1f1fc1'
58 },
59 MonteTestCase{
60 name: 'checkpoint 8'
61 count: 8
62 digest: '8986e95d85e64822287c78cb7a714339431332182107109d57827776c6cc930e'
63 },
64 MonteTestCase{
65 name: 'checkpoint 9'
66 count: 9
67 digest: '72361401c670d07f1151a95e2ee914665c2bdb1228581833c7dc53b89c01c927'
68 },
69 MonteTestCase{
70 name: 'checkpoint 10'
71 count: 10
72 digest: '124c443bad9d955e084a3961b079c43c59b5e0d666af38f2f37846e85369a618'
73 },
74 MonteTestCase{
75 name: 'checkpoint 11'
76 count: 11
77 digest: '81914b78674a2a6204eef78ff51369526bf0c2e121cd364eb40a8435479dda14'
78 },
79 MonteTestCase{
80 name: 'checkpoint 12'
81 count: 12
82 digest: '8eac9d963b44021b70a527ea07420b03f51a998d0d6cb73ad4cb7fc688b4d174'
83 },
84 MonteTestCase{
85 name: 'checkpoint 13'
86 count: 13
87 digest: '0427263b4dd3ebfcb7871939dbaca5ca94e794f748c02920c9759dfa554ea534'
88 },
89 MonteTestCase{
90 name: 'checkpoint 14'
91 count: 14
92 digest: '3e9d754f2ec273b0056c2fcad2e891aaf9616fe74005d36cbf5ccba2e037b5b3'
93 },
94 MonteTestCase{
95 name: 'checkpoint 15'
96 count: 15
97 digest: '986b6594ed96a819e49edb9f65db2ea52168973d7e18ae9e0b8869a8b5dd29a0'
98 },
99 MonteTestCase{
100 name: 'checkpoint 16'
101 count: 16
102 digest: '117578126a35176a00f8c0cf999442df0890737be1880f06e6a7270959c114c6'
103 },
104 MonteTestCase{
105 name: 'checkpoint 17'
106 count: 17
107 digest: 'fd7f5574788d8ef64b83333ffb62e4cd3311e638db0c514071c19b84e9117afe'
108 },
109 MonteTestCase{
110 name: 'checkpoint 18'
111 count: 18
112 digest: '19db7ba6e3488a9e935af33ffb912d60c9d3b98a0be1d78e0b374dcb5274a7fb'
113 },
114 MonteTestCase{
115 name: 'checkpoint 19'
116 count: 19
117 digest: '52519e6319505df7a9aa83778618ec10b78c5771bac50e8d3f59bc815dabfb1f'
118 },
119 MonteTestCase{
120 name: 'checkpoint 20'
121 count: 20
122 digest: '434d7795fc7510af04b613e120f7f48e6d613ec056ae9fbc7c869b87c1dce63e'
123 },
124 MonteTestCase{
125 name: 'checkpoint 21'
126 count: 21
127 digest: '020324de7f6763be57bc4a6a0960258ea401ffe40d68f854e82ccfa9e0612ff7'
128 },
129 MonteTestCase{
130 name: 'checkpoint 22'
131 count: 22
132 digest: 'b87c7fd0ec4cd35fab077b64d00917ad06aaccb095bbe4603466644ce6cbce18'
133 },
134 MonteTestCase{
135 name: 'checkpoint 23'
136 count: 23
137 digest: '01abbd12b2b476b2d540d0c47edcb56263ea658a8080a8f08dbb313942562f00'
138 },
139 MonteTestCase{
140 name: 'checkpoint 24'
141 count: 24
142 digest: 'ce95bb2bf2d5c91402e13ed5271615607f39e0678aae776d18a78351b90b5838'
143 },
144 MonteTestCase{
145 name: 'checkpoint 25'
146 count: 25
147 digest: 'b81af264b0bb485f6656be91478f7b96c324fe262fcc366d9ce3edd44ccb85d0'
148 },
149 MonteTestCase{
150 name: 'checkpoint 26'
151 count: 26
152 digest: '9e2ad901200ca524c91373f7b5eda9cda142353e763862e350314f793a0b700d'
153 },
154 MonteTestCase{
155 name: 'checkpoint 27'
156 count: 27
157 digest: 'dbfabc7124338d6845f083cb1bbdf7b4060274d8e0e98d08bb7ca3779059b45b'
158 },
159 MonteTestCase{
160 name: 'checkpoint 28'
161 count: 28
162 digest: 'd93c2cd61f5476ea08d85f741720ab2ce5c4e38cd8254758238155fd68ea7723'
163 },
164 MonteTestCase{
165 name: 'checkpoint 29'
166 count: 29
167 digest: '232d9c3b583e297439c859150738e1b1d530812d63a9a2c1cb8e40cb50a2f27b'
168 },
169 MonteTestCase{
170 name: 'checkpoint 30'
171 count: 30
172 digest: '8b9c858bd135138d9023a0b5fcf3f12ebbc3b7f721ee0b44be1871187f21f506'
173 },
174 MonteTestCase{
175 name: 'checkpoint 31'
176 count: 31
177 digest: '05cedbd568ce9adcf5022999b8f3a28995a910c572375186da5febd775d62b79'
178 },
179 MonteTestCase{
180 name: 'checkpoint 32'
181 count: 32
182 digest: '24282cba8f5dfce7e423a103488a9a924080d549853c699159d27816dbdbe5d9'
183 },
184 MonteTestCase{
185 name: 'checkpoint 33'
186 count: 33
187 digest: 'ba6e3c38128f93f288e781af8a13e7ce5120c2a43a6d1c0d4edc831247350079'
188 },
189 MonteTestCase{
190 name: 'checkpoint 34'
191 count: 34
192 digest: '706fffec5b69f5ef5465b6a8663c302143af743c6b7cd5fec9f3fa9bf9b2e285'
193 },
194 MonteTestCase{
195 name: 'checkpoint 35'
196 count: 35
197 digest: '6d32c55c005eea65dacdf0e90f436943d0d0acec3c2355c36e2df1a86d1a11a7'
198 },
199 MonteTestCase{
200 name: 'checkpoint 36'
201 count: 36
202 digest: 'b353f425293db464ad814177ea9689f43054bcdbaf75675e918b78a82ca97a50'
203 },
204 MonteTestCase{
205 name: 'checkpoint 37'
206 count: 37
207 digest: 'c3fa9993130b3c95d9aed30243ba902035933d18adf5e21d2567674769062e81'
208 },
209 MonteTestCase{
210 name: 'checkpoint 38'
211 count: 38
212 digest: '1e77e07988ebd618740c2f89a7bcf0ae2542279ea8895b39aa70ba8bc37ee00f'
213 },
214 MonteTestCase{
215 name: 'checkpoint 39'
216 count: 39
217 digest: '063927892a0b095be7d21987ff8157cd4c674c1cd01ab9f0834824e8efbcf938'
218 },
219 MonteTestCase{
220 name: 'checkpoint 40'
221 count: 40
222 digest: 'f43054c280f05371cfbac776d43d6001f71350d898677f035aa8f7e5bd7b3fa3'
223 },
224 MonteTestCase{
225 name: 'checkpoint 41'
226 count: 41
227 digest: '2427934b28c7a9c2b18a5b7e996351aa567523744f60d54dc35bbb61f56f6fd4'
228 },
229 MonteTestCase{
230 name: 'checkpoint 42'
231 count: 42
232 digest: '3633976d174279161e13b49e5866c144ce8c1d17ec1901ad56a02c900273fe11'
233 },
234 MonteTestCase{
235 name: 'checkpoint 43'
236 count: 43
237 digest: '5f9788660d82c80155a7fea91896be3be2eb6a7b2ce963f3804cd09da5ac0c8f'
238 },
239 MonteTestCase{
240 name: 'checkpoint 44'
241 count: 44
242 digest: '097ef57de6df98c29346e67e7f676569ad402f7a1c88d1cf39ce2d44fd706f72'
243 },
244 MonteTestCase{
245 name: 'checkpoint 45'
246 count: 45
247 digest: 'fedcc810c74706a27fc0b6663ab2f9de0761089682dff1279fcd91312af1b8e3'
248 },
249 MonteTestCase{
250 name: 'checkpoint 46'
251 count: 46
252 digest: 'bd5d61fea8d23089f3f30266b1daa636a352e49476526e71cc0735cbd17054fe'
253 },
254 MonteTestCase{
255 name: 'checkpoint 47'
256 count: 47
257 digest: '5ead027c03d7a55c17f0c783b6d77670cdb8942772077d09dff9a46ecd527bec'
258 },
259 MonteTestCase{
260 name: 'checkpoint 48'
261 count: 48
262 digest: '7a06eeea07ca9eb94a98a5e9f00b7efd8de9843b6aa888822c3dccf803637732'
263 },
264 MonteTestCase{
265 name: 'checkpoint 49'
266 count: 49
267 digest: '44b6a895058ed3f31a5549407af8f788631f8a6eb8c0a5f2e15facc9190b5672'
268 },
269 MonteTestCase{
270 name: 'checkpoint 50'
271 count: 50
272 digest: 'f8a58bff4b54aaebe18fc3f0bb1d24974a125530756dd4a0f15628c35c02ea1c'
273 },
274 MonteTestCase{
275 name: 'checkpoint 51'
276 count: 51
277 digest: '3bf2ae5408399aba59f42e5bed35a00d038fada16013ffa5da9e8b7207f6012c'
278 },
279 MonteTestCase{
280 name: 'checkpoint 52'
281 count: 52
282 digest: '31d33c0275986b06f6dccf570d1064c7b36e1574cc4371d4bba2e55321d75397'
283 },
284 MonteTestCase{
285 name: 'checkpoint 53'
286 count: 53
287 digest: 'bda59cbd65e87a57df3f03c89e4d9511de71da05e2eee0560948696b37615f8f'
288 },
289 MonteTestCase{
290 name: 'checkpoint 54'
291 count: 54
292 digest: 'f431cc1817569e92c8ba11ec4741e6dd2e361156575af7b482587ed78e9fb7fe'
293 },
294 MonteTestCase{
295 name: 'checkpoint 55'
296 count: 55
297 digest: '1b3b3789a32165f725167da6f5ef89d95de5992783961440fce67b66c3351ea6'
298 },
299 MonteTestCase{
300 name: 'checkpoint 56'
301 count: 56
302 digest: 'c9873a09c079ca7f477b5601519ce51896c2a35a28fe05fe8b13e990813c6634'
303 },
304 MonteTestCase{
305 name: 'checkpoint 57'
306 count: 57
307 digest: 'fb16cc865ddcf513be298c7d514033ab3fae7a80b285d2b43e82363342e498f4'
308 },
309 MonteTestCase{
310 name: 'checkpoint 58'
311 count: 58
312 digest: 'ebaebc261b327f8be24026e32099a6b15927c54dbe390b72756f3f6362ea3b3a'
313 },
314 MonteTestCase{
315 name: 'checkpoint 59'
316 count: 59
317 digest: 'ae5a4fdc779d808ba898966c8c14a6c9894107ef3e1d680f6ae37e95cb7e1b67'
318 },
319 MonteTestCase{
320 name: 'checkpoint 60'
321 count: 60
322 digest: '5a4a67451c197b038c540878b6e7bc6fce3eea9c95795d611359703d6cc7ca02'
323 },
324 MonteTestCase{
325 name: 'checkpoint 61'
326 count: 61
327 digest: 'efb075aa051070a6b2303e026f81a5262a6e64eabb270ec5e13fc6efa3529f6f'
328 },
329 MonteTestCase{
330 name: 'checkpoint 62'
331 count: 62
332 digest: '8ff3df1a5cd0840bce61520f1e5645ce272a37b884c1750c69a957134c1a20d2'
333 },
334 MonteTestCase{
335 name: 'checkpoint 63'
336 count: 63
337 digest: '8fbd86567c20dc3ea9948dd5ea6f5204028c4ba258c35052994e7c86de2d7701'
338 },
339 MonteTestCase{
340 name: 'checkpoint 64'
341 count: 64
342 digest: '670559572a74e9af0513a3f9243bfbfd5805b837705faedc3c480d67a92bc124'
343 },
344 MonteTestCase{
345 name: 'checkpoint 65'
346 count: 65
347 digest: 'ef2ad8656fac9c593d301fcfac77a7815d50b42526d3a44e1573316a25b05904'
348 },
349 MonteTestCase{
350 name: 'checkpoint 66'
351 count: 66
352 digest: 'a3484a7a6cb5c941e15346a3ac4e09e99a5189cc96a87104d196af3c43cf995e'
353 },
354 MonteTestCase{
355 name: 'checkpoint 67'
356 count: 67
357 digest: '966851a0ef41f8d8ff970f4340a8dae8eec4f1999f5fd4f6cbcfa372fbf85495'
358 },
359 MonteTestCase{
360 name: 'checkpoint 68'
361 count: 68
362 digest: '8e1559cd4431febfa15662a2ccf2cac82f5401b2657551480bb0e3dd2111032c'
363 },
364 MonteTestCase{
365 name: 'checkpoint 69'
366 count: 69
367 digest: '5f535e2e7351cb8caf0070166218238a843c17472cea2f5911008be5d7fd6ba2'
368 },
369 MonteTestCase{
370 name: 'checkpoint 70'
371 count: 70
372 digest: '86ac4ea15f10c264b158058f5c13a36a87ac72f840071bbc45399b36823a5709'
373 },
374 MonteTestCase{
375 name: 'checkpoint 71'
376 count: 71
377 digest: '5c0d3fe289b2aac7d1bbaf57f4154b8d10875cffc9d8bd2402255ed1615f1d5f'
378 },
379 MonteTestCase{
380 name: 'checkpoint 72'
381 count: 72
382 digest: 'd7d808366d0c8b76ce3e7ab80ea11b4e2f8758f9ff404a3aafbf5b0cc191adcb'
383 },
384 MonteTestCase{
385 name: 'checkpoint 73'
386 count: 73
387 digest: 'e0768536856d1d7399667d6fd2c32f72416eeea1c40a313ee6edc910a5c3b786'
388 },
389 MonteTestCase{
390 name: 'checkpoint 74'
391 count: 74
392 digest: 'd670923731b3e598f5c4db4c7e57fe2275cc6c49b4bf67cb91d520846aec256e'
393 },
394 MonteTestCase{
395 name: 'checkpoint 75'
396 count: 75
397 digest: '2cb0bdcc305ef3b3d6b7265ab62bee555c524102679da122424713a9a01d69f6'
398 },
399 MonteTestCase{
400 name: 'checkpoint 76'
401 count: 76
402 digest: '5acdc323fe067a4b915ee521ac8eb81bcff4e205d53e4e7f9a69d436035cc5ad'
403 },
404 MonteTestCase{
405 name: 'checkpoint 77'
406 count: 77
407 digest: 'e634c43558d12c2a8710f2d6f10a86411cfad5a014e6b6cc159733c8ccece283'
408 },
409 MonteTestCase{
410 name: 'checkpoint 78'
411 count: 78
412 digest: '4a05f4bc3fcaf50e6d0916d7e7024b0ed22e9a3c413ff4bbcc0922d2326dcf6e'
413 },
414 MonteTestCase{
415 name: 'checkpoint 79'
416 count: 79
417 digest: '17c9d6029e15d3fd84e6809c5ef8a279a040f49ada91601a3ba4572cef7c08bd'
418 },
419 MonteTestCase{
420 name: 'checkpoint 80'
421 count: 80
422 digest: '1f21e137da2427536758409f3fbf5842589c5f587f0b9d2d10430f840faaaf45'
423 },
424 MonteTestCase{
425 name: 'checkpoint 81'
426 count: 81
427 digest: 'e3d38cff8a8d7fc00693dca5e37b03e7b10dafe4926023e26d937106ddac6a78'
428 },
429 MonteTestCase{
430 name: 'checkpoint 82'
431 count: 82
432 digest: 'cd749eb05c67038fe837910310b3b4cdda190f6235fa970602f865bec1b61a1b'
433 },
434 MonteTestCase{
435 name: 'checkpoint 83'
436 count: 83
437 digest: 'd596ccddea01b4ae29b68b0e8a191007f0c89a1016c380b49786f2d4fac4c43d'
438 },
439 MonteTestCase{
440 name: 'checkpoint 84'
441 count: 84
442 digest: 'cbccb1ff23e33c59dc4c858093c9e215c3759acfe6bc84ff75940b59b25a4e40'
443 },
444 MonteTestCase{
445 name: 'checkpoint 85'
446 count: 85
447 digest: '7214c134e9a963d6c43969d3ef44ece825dd9cf35bda5fcce92a6b9d0d3fd1b8'
448 },
449 MonteTestCase{
450 name: 'checkpoint 86'
451 count: 86
452 digest: 'aceaf5b775779621319f9ab5d4d370a3359cd6553ed2328cdc9dbab5b68840fa'
453 },
454 MonteTestCase{
455 name: 'checkpoint 87'
456 count: 87
457 digest: 'e8123acb0a2fb62978d3811b31676975542993932108ab14d487ad7875ddef72'
458 },
459 MonteTestCase{
460 name: 'checkpoint 88'
461 count: 88
462 digest: '660202a436fb05c3d59be699734e77c9750c906c8597ca213d064853ecf8c9f3'
463 },
464 MonteTestCase{
465 name: 'checkpoint 89'
466 count: 89
467 digest: '4752b0a5ec3f1fb295d5bfa98fa63a0ba38a02a4c1e1f73b0c4d4e88a07e0317'
468 },
469 MonteTestCase{
470 name: 'checkpoint 90'
471 count: 90
472 digest: '1e24f1467c36b051af3241fcf8c2c868b86dcb8e4669931878018e9914129b42'
473 },
474 MonteTestCase{
475 name: 'checkpoint 91'
476 count: 91
477 digest: 'd1c3efc99d9487e147282d811ab932d4a24362d09ac909f4854e783887068891'
478 },
479 MonteTestCase{
480 name: 'checkpoint 92'
481 count: 92
482 digest: '7dc455cf6f8b2042b6f0f368c44f18a080e5d3912ce3cdaf7142bd61ae50d02e'
483 },
484 MonteTestCase{
485 name: 'checkpoint 93'
486 count: 93
487 digest: '4b991c15789084eb1d6c1d7ce8f0928df4d3931c0c22c571f375849b9a6c2b71'
488 },
489 MonteTestCase{
490 name: 'checkpoint 94'
491 count: 94
492 digest: '8b78f95a007cfb0bd054a1f5d962cd8d927665f79a5ce9e0fc31105e57b8460b'
493 },
494 MonteTestCase{
495 name: 'checkpoint 95'
496 count: 95
497 digest: 'bf305423849cf773fc54206d8ae3c000c3e8b359cba8364581d1f91b0a201032'
498 },
499 MonteTestCase{
500 name: 'checkpoint 96'
501 count: 96
502 digest: '47006af96cff3843d3ed53bdedb167490d7bfefd93ae3e9ef473cb53aa840fc0'
503 },
504 MonteTestCase{
505 name: 'checkpoint 97'
506 count: 97
507 digest: 'c53cf5026162021fd2345dbad7c53d3a3df47b5bdff8cd34a0ccfee06dbb7328'
508 },
509 MonteTestCase{
510 name: 'checkpoint 98'
511 count: 98
512 digest: '3326899b575f93cdaff757f8ab7c3996a2fe930450d5002d4575f4e4cc4b4360'
513 },
514 MonteTestCase{
515 name: 'checkpoint 99'
516 count: 99
517 digest: '6a912ba4188391a78e6f13d88ed2d14e13afce9db6f7dcbf4a48c24f3db02778'
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: 128}
531
532 for _ in 0 .. 1000 {
533 mi.clear()
534 mi << md0
535 mi << md1
536 mi << md2
537
538 md3 = sha256.sum(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