v

Зеркало из https://github.com/vlang/v
Форк
0
/
sha512_224_shavs_monte_test.v 
551 строка · 13.5 Кб
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
7
import crypto.sha512
8
import encoding.hex
9

10
const seed = '2e325bf8c98c0be54493d04c329e706343aebe4968fdd33b37da9c0a'
11

12
struct MonteTestCase {
13
	name   string
14
	count  int
15
	digest string
16
}
17

18
const 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

521
fn 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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.