v2 / vlib / crypto / sha1 / sha1_shavs_monte_test.v
545 lines · 533 sloc · 11.63 KB · 86fe9456a5850026048933de1ba82185168d5a43
Raw
1import crypto.sha1
2import encoding.hex
3
4const seed = 'dd4df644eaf3d85bace2b21accaa22b28821f5cd'
5
6struct MonteTestCase {
7 name string
8 count int
9 digest string
10}
11
12const monte_cases = [
13 MonteTestCase{
14 name: 'checkpoint 0'
15 count: 0
16 digest: '11f5c38b4479d4ad55cb69fadf62de0b036d5163'
17 },
18 MonteTestCase{
19 name: 'checkpoint 1'
20 count: 1
21 digest: '5c26de848c21586bec36995809cb02d3677423d9'
22 },
23 MonteTestCase{
24 name: 'checkpoint 2'
25 count: 2
26 digest: '453b5fcf263d01c891d7897d4013990f7c1fb0ab'
27 },
28 MonteTestCase{
29 name: 'checkpoint 3'
30 count: 3
31 digest: '36d0273ae363f992bbc313aa4ff602e95c207be3'
32 },
33 MonteTestCase{
34 name: 'checkpoint 4'
35 count: 4
36 digest: 'd1c65e9ac55727fbf30eaf5f00cc22b9bab81a2c'
37 },
38 MonteTestCase{
39 name: 'checkpoint 5'
40 count: 5
41 digest: '2c477cd77e5749da7fc4e5ca7eed77166e8ceae6'
42 },
43 MonteTestCase{
44 name: 'checkpoint 6'
45 count: 6
46 digest: '60b11211137f46863501a32a435976eabd4532f3'
47 },
48 MonteTestCase{
49 name: 'checkpoint 7'
50 count: 7
51 digest: '0894f4f012a1e5344044e0ecfa6f078382064602'
52 },
53 MonteTestCase{
54 name: 'checkpoint 8'
55 count: 8
56 digest: '06b6222855cae9bed77e9e3050d164a98286ea5f'
57 },
58 MonteTestCase{
59 name: 'checkpoint 9'
60 count: 9
61 digest: 'e2872694d3d23a68a24419c35bd9ac9006248a8f'
62 },
63 MonteTestCase{
64 name: 'checkpoint 10'
65 count: 10
66 digest: 'ea43595eb1cff3a7e045c5868d0775b4409b14a3'
67 },
68 MonteTestCase{
69 name: 'checkpoint 11'
70 count: 11
71 digest: '05a9e94fdc792a61aa60bcd37592acee1f983280'
72 },
73 MonteTestCase{
74 name: 'checkpoint 12'
75 count: 12
76 digest: '7d11aa9413cd89a387a5c0f9aa5ce541be2aa6e8'
77 },
78 MonteTestCase{
79 name: 'checkpoint 13'
80 count: 13
81 digest: '37297d053aaa4a845cc9ce0c0165644ab8d0e00b'
82 },
83 MonteTestCase{
84 name: 'checkpoint 14'
85 count: 14
86 digest: 'd9dcde396d69748c1fe357f8b662a27ce89082c8'
87 },
88 MonteTestCase{
89 name: 'checkpoint 15'
90 count: 15
91 digest: '737a484499b6858b14e656c328979e8aa56b0a43'
92 },
93 MonteTestCase{
94 name: 'checkpoint 16'
95 count: 16
96 digest: '4e9c8b3bce910432ac2ad17d51e6b9ec4f92c1ad'
97 },
98 MonteTestCase{
99 name: 'checkpoint 17'
100 count: 17
101 digest: '62325b9a7cebcc6da3bfe781d84eb53a6eb7b019'
102 },
103 MonteTestCase{
104 name: 'checkpoint 18'
105 count: 18
106 digest: '4710670e071609d470f7d628d8ea978dfb9234ac'
107 },
108 MonteTestCase{
109 name: 'checkpoint 19'
110 count: 19
111 digest: '23baee80eee052f3263ac26dd12ea6504a5bd234'
112 },
113 MonteTestCase{
114 name: 'checkpoint 20'
115 count: 20
116 digest: '9451efb9c9586a403747acfa3ec74d359bb9d7ff'
117 },
118 MonteTestCase{
119 name: 'checkpoint 21'
120 count: 21
121 digest: '37e9d7c81b79f090c8e05848050936c64a1bd662'
122 },
123 MonteTestCase{
124 name: 'checkpoint 22'
125 count: 22
126 digest: 'a6489ff37141f7a86dd978f685fdd4789d1993dc'
127 },
128 MonteTestCase{
129 name: 'checkpoint 23'
130 count: 23
131 digest: '39650d32501dfcee212d0de10af9db47e4e5af65'
132 },
133 MonteTestCase{
134 name: 'checkpoint 24'
135 count: 24
136 digest: 'cd4ea3474e046b281da5a4bf69fd873ef8d568d6'
137 },
138 MonteTestCase{
139 name: 'checkpoint 25'
140 count: 25
141 digest: '0d7b518c07c6da877eee35301a99c7563f1840df'
142 },
143 MonteTestCase{
144 name: 'checkpoint 26'
145 count: 26
146 digest: '68a70ae466532f7f61af138889c0d3f9670f3590'
147 },
148 MonteTestCase{
149 name: 'checkpoint 27'
150 count: 27
151 digest: 'c0222aae5fd2b9eff143ac93c4493abe5c8806af'
152 },
153 MonteTestCase{
154 name: 'checkpoint 28'
155 count: 28
156 digest: 'd2efc5aa0b29db15f3e5de82aaa0a8ce888ffb2f'
157 },
158 MonteTestCase{
159 name: 'checkpoint 29'
160 count: 29
161 digest: 'eec4f55d02c627dcee36b5b5606603bdc9a94a26'
162 },
163 MonteTestCase{
164 name: 'checkpoint 30'
165 count: 30
166 digest: '0e706fb1a1fa26aab74efcef57ab6a49c07ca7bd'
167 },
168 MonteTestCase{
169 name: 'checkpoint 31'
170 count: 31
171 digest: '2ea392ca8043686424f7e9500edfb9e9297943f7'
172 },
173 MonteTestCase{
174 name: 'checkpoint 32'
175 count: 32
176 digest: '74737ef257b32a4cb9428c866b65bee62ccbe653'
177 },
178 MonteTestCase{
179 name: 'checkpoint 33'
180 count: 33
181 digest: 'df3e86e49a0429fa81f553b04b9fc003510e9a51'
182 },
183 MonteTestCase{
184 name: 'checkpoint 34'
185 count: 34
186 digest: '79c3049944fbf8b80dadadc7f5174e5cfdf996de'
187 },
188 MonteTestCase{
189 name: 'checkpoint 35'
190 count: 35
191 digest: 'f25e2eca4cfb6da8e8b7b62f581672fab80754fa'
192 },
193 MonteTestCase{
194 name: 'checkpoint 36'
195 count: 36
196 digest: '76509239d9fd6c6f050c0d9b3777b5645e4d4c70'
197 },
198 MonteTestCase{
199 name: 'checkpoint 37'
200 count: 37
201 digest: 'cf4bb3e1f330c862e239d9b010bd842f302bd227'
202 },
203 MonteTestCase{
204 name: 'checkpoint 38'
205 count: 38
206 digest: '4eeac7ab2ac9e4c81ed1a93a300b2af75beddb08'
207 },
208 MonteTestCase{
209 name: 'checkpoint 39'
210 count: 39
211 digest: '46443ba72a64fff4b5252fbac9ef93c2949f8585'
212 },
213 MonteTestCase{
214 name: 'checkpoint 40'
215 count: 40
216 digest: '5e9c42482343a54aadb11ab00c2e00cbe25ec91a'
217 },
218 MonteTestCase{
219 name: 'checkpoint 41'
220 count: 41
221 digest: '93acee1977128f2a4218678b32e2844f23eb526b'
222 },
223 MonteTestCase{
224 name: 'checkpoint 42'
225 count: 42
226 digest: '226065d299b2d6c582d386897b93f2adf14de00b'
227 },
228 MonteTestCase{
229 name: 'checkpoint 43'
230 count: 43
231 digest: '672fed0d90c21d4ec0111a7284bcf1bbd72af9bd'
232 },
233 MonteTestCase{
234 name: 'checkpoint 44'
235 count: 44
236 digest: '90d642f12f28cb3dad7daad84cf0f94ded1137ae'
237 },
238 MonteTestCase{
239 name: 'checkpoint 45'
240 count: 45
241 digest: '4a2815b58ffc858e5e7e9e6106765458d2af4ec3'
242 },
243 MonteTestCase{
244 name: 'checkpoint 46'
245 count: 46
246 digest: '29fa3679032421b78b7a08c54766c1592f6739c1'
247 },
248 MonteTestCase{
249 name: 'checkpoint 47'
250 count: 47
251 digest: '19f4e30393eb66c6e200744fa8999d224e6df173'
252 },
253 MonteTestCase{
254 name: 'checkpoint 48'
255 count: 48
256 digest: '30650026be77212088ab50438e04b4b8e3761977'
257 },
258 MonteTestCase{
259 name: 'checkpoint 49'
260 count: 49
261 digest: '993d0e135bcd598fa673c6f19251bcbde18b7b34'
262 },
263 MonteTestCase{
264 name: 'checkpoint 50'
265 count: 50
266 digest: 'c9eaf20b473219a70efe85940620426c6ff6f4a4'
267 },
268 MonteTestCase{
269 name: 'checkpoint 51'
270 count: 51
271 digest: '6325d0b83c308bd42854ce69446e85ba36348d7d'
272 },
273 MonteTestCase{
274 name: 'checkpoint 52'
275 count: 52
276 digest: '2fb354f8a68030efb747f78812060a9c05e92164'
277 },
278 MonteTestCase{
279 name: 'checkpoint 53'
280 count: 53
281 digest: 'a7e33bd16f770c17e8818ad5a5fc4fee673eae56'
282 },
283 MonteTestCase{
284 name: 'checkpoint 54'
285 count: 54
286 digest: 'ff23e7105bc9f4dad0fb9c6519d1eae16439a5d6'
287 },
288 MonteTestCase{
289 name: 'checkpoint 55'
290 count: 55
291 digest: 'a31aca821e163213cd2ae84cf56c1134daa4a621'
292 },
293 MonteTestCase{
294 name: 'checkpoint 56'
295 count: 56
296 digest: '94ab9cfd4cf9bf2e4409dbcdc9ef2c8b611cc69d'
297 },
298 MonteTestCase{
299 name: 'checkpoint 57'
300 count: 57
301 digest: 'c0194064ce48dde771b7871efa86a4a6e87eec76'
302 },
303 MonteTestCase{
304 name: 'checkpoint 58'
305 count: 58
306 digest: 'f1a9065e3e7f98753c6f833f5ffe74133f6b887f'
307 },
308 MonteTestCase{
309 name: 'checkpoint 59'
310 count: 59
311 digest: 'b8b3cd6ca1d5b5610e43212f8df75211aaddcf96'
312 },
313 MonteTestCase{
314 name: 'checkpoint 60'
315 count: 60
316 digest: '33c3a8d739cc2f83be597aa11c43e2ad6f0d2436'
317 },
318 MonteTestCase{
319 name: 'checkpoint 61'
320 count: 61
321 digest: '4f5c67e5110f3663b7aa88759dbba6fa82f2d705'
322 },
323 MonteTestCase{
324 name: 'checkpoint 62'
325 count: 62
326 digest: 'b1ebc87c7b2b8fe73e7a882d3f4f0492946e0d7c'
327 },
328 MonteTestCase{
329 name: 'checkpoint 63'
330 count: 63
331 digest: '01566616fe4a8c7cf22f21031ac6ea7fb7ce15db'
332 },
333 MonteTestCase{
334 name: 'checkpoint 64'
335 count: 64
336 digest: '5650f3517a393792781d23b4c9d360bf8bd31d65'
337 },
338 MonteTestCase{
339 name: 'checkpoint 65'
340 count: 65
341 digest: 'a4fdbd24cb4a328b898b804b103caa98baedd3fa'
342 },
343 MonteTestCase{
344 name: 'checkpoint 66'
345 count: 66
346 digest: '0cf01eecec4b85aa39f40aa9b4dce208d68eb17b'
347 },
348 MonteTestCase{
349 name: 'checkpoint 67'
350 count: 67
351 digest: 'ae9ac147bab7c10609abe6e931a5ab087a41dc5a'
352 },
353 MonteTestCase{
354 name: 'checkpoint 68'
355 count: 68
356 digest: 'c0328145ce63fb0aceeb414e791d2be92009b1ec'
357 },
358 MonteTestCase{
359 name: 'checkpoint 69'
360 count: 69
361 digest: '60343e5fb7eee00d31ea507b820ddbb7ef405dc7'
362 },
363 MonteTestCase{
364 name: 'checkpoint 70'
365 count: 70
366 digest: 'e0b97cd9149ff9955b6a35b3a79ecb3bdbd2a5a5'
367 },
368 MonteTestCase{
369 name: 'checkpoint 71'
370 count: 71
371 digest: '4e4fdcd382ae0f3f4fbda5fd934eee0d6ad37df5'
372 },
373 MonteTestCase{
374 name: 'checkpoint 72'
375 count: 72
376 digest: '9d97dd237d193482cf3ab862a38843762e69077f'
377 },
378 MonteTestCase{
379 name: 'checkpoint 73'
380 count: 73
381 digest: '2bc927d17ff2f8a844f6f36a944a64d73d431192'
382 },
383 MonteTestCase{
384 name: 'checkpoint 74'
385 count: 74
386 digest: 'b91200306b769aab18e5e411b5bd5e7bce1cc80e'
387 },
388 MonteTestCase{
389 name: 'checkpoint 75'
390 count: 75
391 digest: 'c47493a666085e1b7a75618761a80c402f46546d'
392 },
393 MonteTestCase{
394 name: 'checkpoint 76'
395 count: 76
396 digest: '31355869b80ff84fac239db694ada07d3be26b15'
397 },
398 MonteTestCase{
399 name: 'checkpoint 77'
400 count: 77
401 digest: '1a2022f6330bf96f025cb7d8f0201a7d70b3b58e'
402 },
403 MonteTestCase{
404 name: 'checkpoint 78'
405 count: 78
406 digest: '0f60d7c5ad49efce939c3a27da9973f7f1747848'
407 },
408 MonteTestCase{
409 name: 'checkpoint 79'
410 count: 79
411 digest: 'ceada087801616fc6c08cfa469658f3dc5239ca7'
412 },
413 MonteTestCase{
414 name: 'checkpoint 80'
415 count: 80
416 digest: '4ad0cf9181122b06df714397bd5366aa90bfc9fa'
417 },
418 MonteTestCase{
419 name: 'checkpoint 81'
420 count: 81
421 digest: 'ac6404e6b9d5c0fa17fa77fd39850f22b76ecd83'
422 },
423 MonteTestCase{
424 name: 'checkpoint 82'
425 count: 82
426 digest: 'f0658218adffb9ee9328577854b6387393957a3a'
427 },
428 MonteTestCase{
429 name: 'checkpoint 83'
430 count: 83
431 digest: '6fe9992747897389957b9a91467a4ec983829ab6'
432 },
433 MonteTestCase{
434 name: 'checkpoint 84'
435 count: 84
436 digest: '74320b3ddde6dbfbdad3ad29a7695f5a275b2105'
437 },
438 MonteTestCase{
439 name: 'checkpoint 85'
440 count: 85
441 digest: '2009ea5d6452f51d12477740e374e0e313134779'
442 },
443 MonteTestCase{
444 name: 'checkpoint 86'
445 count: 86
446 digest: '7dbf33d7125709f101fea4ec03436ab95a900c28'
447 },
448 MonteTestCase{
449 name: 'checkpoint 87'
450 count: 87
451 digest: '0c05b78e324cb265bd6adc7452249eaa85bccb3f'
452 },
453 MonteTestCase{
454 name: 'checkpoint 88'
455 count: 88
456 digest: '10c1b9b2de8a9050fb6f4b10a99f7e1e47159f25'
457 },
458 MonteTestCase{
459 name: 'checkpoint 89'
460 count: 89
461 digest: '20072c1f691142d9b83a090dd01f446b4e325a1c'
462 },
463 MonteTestCase{
464 name: 'checkpoint 90'
465 count: 90
466 digest: 'ffcb6a1525f20803cfc79deb40addfd3e7b2f05c'
467 },
468 MonteTestCase{
469 name: 'checkpoint 91'
470 count: 91
471 digest: 'bdcbb4ed636e244bb0fe6af4bc53998936df4ebc'
472 },
473 MonteTestCase{
474 name: 'checkpoint 92'
475 count: 92
476 digest: 'f58ccbc65a2ffa5b35274dd0ceb4ea70eb73c26a'
477 },
478 MonteTestCase{
479 name: 'checkpoint 93'
480 count: 93
481 digest: 'fbe95ac75e4b9cccd1a5debf757fa1a502d07944'
482 },
483 MonteTestCase{
484 name: 'checkpoint 94'
485 count: 94
486 digest: 'a8babac55950dba4993601d35adff874a2b9bb2a'
487 },
488 MonteTestCase{
489 name: 'checkpoint 95'
490 count: 95
491 digest: '594db79de71c7651e9eef2f08bb7be3d26b6ee99'
492 },
493 MonteTestCase{
494 name: 'checkpoint 96'
495 count: 96
496 digest: '63377d45d0e2d0c987bebe8086c76a5e8b63a14b'
497 },
498 MonteTestCase{
499 name: 'checkpoint 97'
500 count: 97
501 digest: 'cd1e7a192130866aa87fd1c8b43e9b7a0eab7615'
502 },
503 MonteTestCase{
504 name: 'checkpoint 98'
505 count: 98
506 digest: 'b3c69ad5dbdd34b7b45b2a89dad72f4cf1d8fd73'
507 },
508 MonteTestCase{
509 name: 'checkpoint 99'
510 count: 99
511 digest: '01b7be5b70ef64843a03fdbb3b247a6278d2cbe1'
512 },
513]
514
515fn test_monte_messages() {
516 mut msg_seed := hex.decode(seed)!
517
518 for c in monte_cases {
519 mut md0 := msg_seed.clone()
520 mut md1 := msg_seed.clone()
521 mut md2 := msg_seed.clone()
522 mut md3 := msg_seed.clone()
523
524 mut mi := []u8{len: 0, cap: 64}
525
526 for _ in 0 .. 1000 {
527 mi.clear()
528 mi << md0
529 mi << md1
530 mi << md2
531
532 md3 = sha1.sum(mi)
533
534 md0 = md1.clone()
535 md1 = md2.clone()
536 md2 = md3.clone()
537 }
538
539 msg_seed = md3.clone()
540
541 expected_result := hex.decode(c.digest)!
542
543 assert md3 == expected_result, 'failed ${c.name}'
544 }
545}
546