Coverage report: /home/ellis/comp/ext/ironclad/src/digests/groestl.lisp
Kind | Covered | All | % |
expression | 0 | 788 | 0.0 |
branch | 0 | 20 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;;; groestl.lisp -- implementation of the Grøstl hash function
5
(eval-when (:compile-toplevel :load-toplevel :execute)
6
(defconstant +groestl-rows+ 8)
7
(defconstant +groestl-length-field-length+ +groestl-rows+)
8
(defconstant +groestl-cols-512+ 8)
9
(defconstant +groestl-cols-1024+ 16)
10
(defconstant +groestl-size-512+ (* +groestl-rows+ +groestl-cols-512+))
11
(defconstant +groestl-size-1024+ (* +groestl-rows+ +groestl-cols-1024+))
12
(defconstant +groestl-rounds-512+ 10)
13
(defconstant +groestl-rounds-1024+ 14)
14
(defconst +groestl-table+
16
:element-type '(unsigned-byte 64)
17
:initial-contents '(#xc632f4a5f497a5c6 #xf86f978497eb84f8
18
#xee5eb099b0c799ee #xf67a8c8d8cf78df6
19
#xffe8170d17e50dff #xd60adcbddcb7bdd6
20
#xde16c8b1c8a7b1de #x916dfc54fc395491
21
#x6090f050f0c05060 #x0207050305040302
22
#xce2ee0a9e087a9ce #x56d1877d87ac7d56
23
#xe7cc2b192bd519e7 #xb513a662a67162b5
24
#x4d7c31e6319ae64d #xec59b59ab5c39aec
25
#x8f40cf45cf05458f #x1fa3bc9dbc3e9d1f
26
#x8949c040c0094089 #xfa68928792ef87fa
27
#xefd03f153fc515ef #xb29426eb267febb2
28
#x8ece40c94007c98e #xfbe61d0b1ded0bfb
29
#x416e2fec2f82ec41 #xb31aa967a97d67b3
30
#x5f431cfd1cbefd5f #x456025ea258aea45
31
#x23f9dabfda46bf23 #x535102f702a6f753
32
#xe445a196a1d396e4 #x9b76ed5bed2d5b9b
33
#x75285dc25deac275 #xe1c5241c24d91ce1
34
#x3dd4e9aee97aae3d #x4cf2be6abe986a4c
35
#x6c82ee5aeed85a6c #x7ebdc341c3fc417e
36
#xf5f3060206f102f5 #x8352d14fd11d4f83
37
#x688ce45ce4d05c68 #x515607f407a2f451
38
#xd18d5c345cb934d1 #xf9e1180818e908f9
39
#xe24cae93aedf93e2 #xab3e9573954d73ab
40
#x6297f553f5c45362 #x2a6b413f41543f2a
41
#x081c140c14100c08 #x9563f652f6315295
42
#x46e9af65af8c6546 #x9d7fe25ee2215e9d
43
#x3048782878602830 #x37cff8a1f86ea137
44
#x0a1b110f11140f0a #x2febc4b5c45eb52f
45
#x0e151b091b1c090e #x247e5a365a483624
46
#x1badb69bb6369b1b #xdf98473d47a53ddf
47
#xcda76a266a8126cd #x4ef5bb69bb9c694e
48
#x7f334ccd4cfecd7f #xea50ba9fbacf9fea
49
#x123f2d1b2d241b12 #x1da4b99eb93a9e1d
50
#x58c49c749cb07458 #x3446722e72682e34
51
#x3641772d776c2d36 #xdc11cdb2cda3b2dc
52
#xb49d29ee2973eeb4 #x5b4d16fb16b6fb5b
53
#xa4a501f60153f6a4 #x76a1d74dd7ec4d76
54
#xb714a361a37561b7 #x7d3449ce49face7d
55
#x52df8d7b8da47b52 #xdd9f423e42a13edd
56
#x5ecd937193bc715e #x13b1a297a2269713
57
#xa6a204f50457f5a6 #xb901b868b86968b9
58
#x0000000000000000 #xc1b5742c74992cc1
59
#x40e0a060a0806040 #xe3c2211f21dd1fe3
60
#x793a43c843f2c879 #xb69a2ced2c77edb6
61
#xd40dd9bed9b3bed4 #x8d47ca46ca01468d
62
#x671770d970ced967 #x72afdd4bdde44b72
63
#x94ed79de7933de94 #x98ff67d4672bd498
64
#xb09323e8237be8b0 #x855bde4ade114a85
65
#xbb06bd6bbd6d6bbb #xc5bb7e2a7e912ac5
66
#x4f7b34e5349ee54f #xedd73a163ac116ed
67
#x86d254c55417c586 #x9af862d7622fd79a
68
#x6699ff55ffcc5566 #x11b6a794a7229411
69
#x8ac04acf4a0fcf8a #xe9d9301030c910e9
70
#x040e0a060a080604 #xfe66988198e781fe
71
#xa0ab0bf00b5bf0a0 #x78b4cc44ccf04478
72
#x25f0d5bad54aba25 #x4b753ee33e96e34b
73
#xa2ac0ef30e5ff3a2 #x5d4419fe19bafe5d
74
#x80db5bc05b1bc080 #x0580858a850a8a05
75
#x3fd3ecadec7ead3f #x21fedfbcdf42bc21
76
#x70a8d848d8e04870 #xf1fd0c040cf904f1
77
#x63197adf7ac6df63 #x772f58c158eec177
78
#xaf309f759f4575af #x42e7a563a5846342
79
#x2070503050403020 #xe5cb2e1a2ed11ae5
80
#xfdef120e12e10efd #xbf08b76db7656dbf
81
#x8155d44cd4194c81 #x18243c143c301418
82
#x26795f355f4c3526 #xc3b2712f719d2fc3
83
#xbe8638e13867e1be #x35c8fda2fd6aa235
84
#x88c74fcc4f0bcc88 #x2e654b394b5c392e
85
#x936af957f93d5793 #x55580df20daaf255
86
#xfc619d829de382fc #x7ab3c947c9f4477a
87
#xc827efacef8bacc8 #xba8832e7326fe7ba
88
#x324f7d2b7d642b32 #xe642a495a4d795e6
89
#xc03bfba0fb9ba0c0 #x19aab398b3329819
90
#x9ef668d16827d19e #xa322817f815d7fa3
91
#x44eeaa66aa886644 #x54d6827e82a87e54
92
#x3bdde6abe676ab3b #x0b959e839e16830b
93
#x8cc945ca4503ca8c #xc7bc7b297b9529c7
94
#x6b056ed36ed6d36b #x286c443c44503c28
95
#xa72c8b798b5579a7 #xbc813de23d63e2bc
96
#x1631271d272c1d16 #xad379a769a4176ad
97
#xdb964d3b4dad3bdb #x649efa56fac85664
98
#x74a6d24ed2e84e74 #x1436221e22281e14
99
#x92e476db763fdb92 #x0c121e0a1e180a0c
100
#x48fcb46cb4906c48 #xb88f37e4376be4b8
101
#x9f78e75de7255d9f #xbd0fb26eb2616ebd
102
#x43692aef2a86ef43 #xc435f1a6f193a6c4
103
#x39dae3a8e372a839 #x31c6f7a4f762a431
104
#xd38a593759bd37d3 #xf274868b86ff8bf2
105
#xd583563256b132d5 #x8b4ec543c50d438b
106
#x6e85eb59ebdc596e #xda18c2b7c2afb7da
107
#x018e8f8c8f028c01 #xb11dac64ac7964b1
108
#x9cf16dd26d23d29c #x49723be03b92e049
109
#xd81fc7b4c7abb4d8 #xacb915fa1543faac
110
#xf3fa090709fd07f3 #xcfa06f256f8525cf
111
#xca20eaafea8fafca #xf47d898e89f38ef4
112
#x476720e9208ee947 #x1038281828201810
113
#x6f0b64d564ded56f #xf073838883fb88f0
114
#x4afbb16fb1946f4a #x5cca967296b8725c
115
#x38546c246c702438 #x575f08f108aef157
116
#x732152c752e6c773 #x9764f351f3355197
117
#xcbae6523658d23cb #xa125847c84597ca1
118
#xe857bf9cbfcb9ce8 #x3e5d6321637c213e
119
#x96ea7cdd7c37dd96 #x611e7fdc7fc2dc61
120
#x0d9c9186911a860d #x0f9b9485941e850f
121
#xe04bab90abdb90e0 #x7cbac642c6f8427c
122
#x712657c457e2c471 #xcc29e5aae583aacc
123
#x90e373d8733bd890 #x06090f050f0c0506
124
#xf7f4030103f501f7 #x1c2a36123638121c
125
#xc23cfea3fe9fa3c2 #x6a8be15fe1d45f6a
126
#xaebe10f91047f9ae #x69026bd06bd2d069
127
#x17bfa891a82e9117 #x9971e858e8295899
128
#x3a5369276974273a #x27f7d0b9d04eb927
129
#xd991483848a938d9 #xebde351335cd13eb
130
#x2be5ceb3ce56b32b #x2277553355443322
131
#xd204d6bbd6bfbbd2 #xa9399070904970a9
132
#x07878089800e8907 #x33c1f2a7f266a733
133
#x2decc1b6c15ab62d #x3c5a66226678223c
134
#x15b8ad92ad2a9215 #xc9a96020608920c9
135
#x875cdb49db154987 #xaab01aff1a4fffaa
136
#x50d8887888a07850 #xa52b8e7a8e517aa5
137
#x03898a8f8a068f03 #x594a13f813b2f859
138
#x09929b809b128009 #x1a2339173934171a
139
#x651075da75cada65 #xd784533153b531d7
140
#x84d551c65113c684 #xd003d3b8d3bbb8d0
141
#x82dc5ec35e1fc382 #x29e2cbb0cb52b029
142
#x5ac3997799b4775a #x1e2d3311333c111e
143
#x7b3d46cb46f6cb7b #xa8b71ffc1f4bfca8
144
#x6d0c61d661dad66d #x2c624e3a4e583a2c
146
#xc6c632f4a5f497a5 #xf8f86f978497eb84
147
#xeeee5eb099b0c799 #xf6f67a8c8d8cf78d
148
#xffffe8170d17e50d #xd6d60adcbddcb7bd
149
#xdede16c8b1c8a7b1 #x91916dfc54fc3954
150
#x606090f050f0c050 #x0202070503050403
151
#xcece2ee0a9e087a9 #x5656d1877d87ac7d
152
#xe7e7cc2b192bd519 #xb5b513a662a67162
153
#x4d4d7c31e6319ae6 #xecec59b59ab5c39a
154
#x8f8f40cf45cf0545 #x1f1fa3bc9dbc3e9d
155
#x898949c040c00940 #xfafa68928792ef87
156
#xefefd03f153fc515 #xb2b29426eb267feb
157
#x8e8ece40c94007c9 #xfbfbe61d0b1ded0b
158
#x41416e2fec2f82ec #xb3b31aa967a97d67
159
#x5f5f431cfd1cbefd #x45456025ea258aea
160
#x2323f9dabfda46bf #x53535102f702a6f7
161
#xe4e445a196a1d396 #x9b9b76ed5bed2d5b
162
#x7575285dc25deac2 #xe1e1c5241c24d91c
163
#x3d3dd4e9aee97aae #x4c4cf2be6abe986a
164
#x6c6c82ee5aeed85a #x7e7ebdc341c3fc41
165
#xf5f5f3060206f102 #x838352d14fd11d4f
166
#x68688ce45ce4d05c #x51515607f407a2f4
167
#xd1d18d5c345cb934 #xf9f9e1180818e908
168
#xe2e24cae93aedf93 #xabab3e9573954d73
169
#x626297f553f5c453 #x2a2a6b413f41543f
170
#x08081c140c14100c #x959563f652f63152
171
#x4646e9af65af8c65 #x9d9d7fe25ee2215e
172
#x3030487828786028 #x3737cff8a1f86ea1
173
#x0a0a1b110f11140f #x2f2febc4b5c45eb5
174
#x0e0e151b091b1c09 #x24247e5a365a4836
175
#x1b1badb69bb6369b #xdfdf98473d47a53d
176
#xcdcda76a266a8126 #x4e4ef5bb69bb9c69
177
#x7f7f334ccd4cfecd #xeaea50ba9fbacf9f
178
#x12123f2d1b2d241b #x1d1da4b99eb93a9e
179
#x5858c49c749cb074 #x343446722e72682e
180
#x363641772d776c2d #xdcdc11cdb2cda3b2
181
#xb4b49d29ee2973ee #x5b5b4d16fb16b6fb
182
#xa4a4a501f60153f6 #x7676a1d74dd7ec4d
183
#xb7b714a361a37561 #x7d7d3449ce49face
184
#x5252df8d7b8da47b #xdddd9f423e42a13e
185
#x5e5ecd937193bc71 #x1313b1a297a22697
186
#xa6a6a204f50457f5 #xb9b901b868b86968
187
#x0000000000000000 #xc1c1b5742c74992c
188
#x4040e0a060a08060 #xe3e3c2211f21dd1f
189
#x79793a43c843f2c8 #xb6b69a2ced2c77ed
190
#xd4d40dd9bed9b3be #x8d8d47ca46ca0146
191
#x67671770d970ced9 #x7272afdd4bdde44b
192
#x9494ed79de7933de #x9898ff67d4672bd4
193
#xb0b09323e8237be8 #x85855bde4ade114a
194
#xbbbb06bd6bbd6d6b #xc5c5bb7e2a7e912a
195
#x4f4f7b34e5349ee5 #xededd73a163ac116
196
#x8686d254c55417c5 #x9a9af862d7622fd7
197
#x666699ff55ffcc55 #x1111b6a794a72294
198
#x8a8ac04acf4a0fcf #xe9e9d9301030c910
199
#x04040e0a060a0806 #xfefe66988198e781
200
#xa0a0ab0bf00b5bf0 #x7878b4cc44ccf044
201
#x2525f0d5bad54aba #x4b4b753ee33e96e3
202
#xa2a2ac0ef30e5ff3 #x5d5d4419fe19bafe
203
#x8080db5bc05b1bc0 #x050580858a850a8a
204
#x3f3fd3ecadec7ead #x2121fedfbcdf42bc
205
#x7070a8d848d8e048 #xf1f1fd0c040cf904
206
#x6363197adf7ac6df #x77772f58c158eec1
207
#xafaf309f759f4575 #x4242e7a563a58463
208
#x2020705030504030 #xe5e5cb2e1a2ed11a
209
#xfdfdef120e12e10e #xbfbf08b76db7656d
210
#x818155d44cd4194c #x1818243c143c3014
211
#x2626795f355f4c35 #xc3c3b2712f719d2f
212
#xbebe8638e13867e1 #x3535c8fda2fd6aa2
213
#x8888c74fcc4f0bcc #x2e2e654b394b5c39
214
#x93936af957f93d57 #x5555580df20daaf2
215
#xfcfc619d829de382 #x7a7ab3c947c9f447
216
#xc8c827efacef8bac #xbaba8832e7326fe7
217
#x32324f7d2b7d642b #xe6e642a495a4d795
218
#xc0c03bfba0fb9ba0 #x1919aab398b33298
219
#x9e9ef668d16827d1 #xa3a322817f815d7f
220
#x4444eeaa66aa8866 #x5454d6827e82a87e
221
#x3b3bdde6abe676ab #x0b0b959e839e1683
222
#x8c8cc945ca4503ca #xc7c7bc7b297b9529
223
#x6b6b056ed36ed6d3 #x28286c443c44503c
224
#xa7a72c8b798b5579 #xbcbc813de23d63e2
225
#x161631271d272c1d #xadad379a769a4176
226
#xdbdb964d3b4dad3b #x64649efa56fac856
227
#x7474a6d24ed2e84e #x141436221e22281e
228
#x9292e476db763fdb #x0c0c121e0a1e180a
229
#x4848fcb46cb4906c #xb8b88f37e4376be4
230
#x9f9f78e75de7255d #xbdbd0fb26eb2616e
231
#x4343692aef2a86ef #xc4c435f1a6f193a6
232
#x3939dae3a8e372a8 #x3131c6f7a4f762a4
233
#xd3d38a593759bd37 #xf2f274868b86ff8b
234
#xd5d583563256b132 #x8b8b4ec543c50d43
235
#x6e6e85eb59ebdc59 #xdada18c2b7c2afb7
236
#x01018e8f8c8f028c #xb1b11dac64ac7964
237
#x9c9cf16dd26d23d2 #x4949723be03b92e0
238
#xd8d81fc7b4c7abb4 #xacacb915fa1543fa
239
#xf3f3fa090709fd07 #xcfcfa06f256f8525
240
#xcaca20eaafea8faf #xf4f47d898e89f38e
241
#x47476720e9208ee9 #x1010382818282018
242
#x6f6f0b64d564ded5 #xf0f073838883fb88
243
#x4a4afbb16fb1946f #x5c5cca967296b872
244
#x3838546c246c7024 #x57575f08f108aef1
245
#x73732152c752e6c7 #x979764f351f33551
246
#xcbcbae6523658d23 #xa1a125847c84597c
247
#xe8e857bf9cbfcb9c #x3e3e5d6321637c21
248
#x9696ea7cdd7c37dd #x61611e7fdc7fc2dc
249
#x0d0d9c9186911a86 #x0f0f9b9485941e85
250
#xe0e04bab90abdb90 #x7c7cbac642c6f842
251
#x71712657c457e2c4 #xcccc29e5aae583aa
252
#x9090e373d8733bd8 #x0606090f050f0c05
253
#xf7f7f4030103f501 #x1c1c2a3612363812
254
#xc2c23cfea3fe9fa3 #x6a6a8be15fe1d45f
255
#xaeaebe10f91047f9 #x6969026bd06bd2d0
256
#x1717bfa891a82e91 #x999971e858e82958
257
#x3a3a536927697427 #x2727f7d0b9d04eb9
258
#xd9d991483848a938 #xebebde351335cd13
259
#x2b2be5ceb3ce56b3 #x2222775533554433
260
#xd2d204d6bbd6bfbb #xa9a9399070904970
261
#x0707878089800e89 #x3333c1f2a7f266a7
262
#x2d2decc1b6c15ab6 #x3c3c5a6622667822
263
#x1515b8ad92ad2a92 #xc9c9a96020608920
264
#x87875cdb49db1549 #xaaaab01aff1a4fff
265
#x5050d8887888a078 #xa5a52b8e7a8e517a
266
#x0303898a8f8a068f #x59594a13f813b2f8
267
#x0909929b809b1280 #x1a1a233917393417
268
#x65651075da75cada #xd7d784533153b531
269
#x8484d551c65113c6 #xd0d003d3b8d3bbb8
270
#x8282dc5ec35e1fc3 #x2929e2cbb0cb52b0
271
#x5a5ac3997799b477 #x1e1e2d3311333c11
272
#x7b7b3d46cb46f6cb #xa8a8b71ffc1f4bfc
273
#x6d6d0c61d661dad6 #x2c2c624e3a4e583a
275
#xa5c6c632f4a5f497 #x84f8f86f978497eb
276
#x99eeee5eb099b0c7 #x8df6f67a8c8d8cf7
277
#x0dffffe8170d17e5 #xbdd6d60adcbddcb7
278
#xb1dede16c8b1c8a7 #x5491916dfc54fc39
279
#x50606090f050f0c0 #x0302020705030504
280
#xa9cece2ee0a9e087 #x7d5656d1877d87ac
281
#x19e7e7cc2b192bd5 #x62b5b513a662a671
282
#xe64d4d7c31e6319a #x9aecec59b59ab5c3
283
#x458f8f40cf45cf05 #x9d1f1fa3bc9dbc3e
284
#x40898949c040c009 #x87fafa68928792ef
285
#x15efefd03f153fc5 #xebb2b29426eb267f
286
#xc98e8ece40c94007 #x0bfbfbe61d0b1ded
287
#xec41416e2fec2f82 #x67b3b31aa967a97d
288
#xfd5f5f431cfd1cbe #xea45456025ea258a
289
#xbf2323f9dabfda46 #xf753535102f702a6
290
#x96e4e445a196a1d3 #x5b9b9b76ed5bed2d
291
#xc27575285dc25dea #x1ce1e1c5241c24d9
292
#xae3d3dd4e9aee97a #x6a4c4cf2be6abe98
293
#x5a6c6c82ee5aeed8 #x417e7ebdc341c3fc
294
#x02f5f5f3060206f1 #x4f838352d14fd11d
295
#x5c68688ce45ce4d0 #xf451515607f407a2
296
#x34d1d18d5c345cb9 #x08f9f9e1180818e9
297
#x93e2e24cae93aedf #x73abab3e9573954d
298
#x53626297f553f5c4 #x3f2a2a6b413f4154
299
#x0c08081c140c1410 #x52959563f652f631
300
#x654646e9af65af8c #x5e9d9d7fe25ee221
301
#x2830304878287860 #xa13737cff8a1f86e
302
#x0f0a0a1b110f1114 #xb52f2febc4b5c45e
303
#x090e0e151b091b1c #x3624247e5a365a48
304
#x9b1b1badb69bb636 #x3ddfdf98473d47a5
305
#x26cdcda76a266a81 #x694e4ef5bb69bb9c
306
#xcd7f7f334ccd4cfe #x9feaea50ba9fbacf
307
#x1b12123f2d1b2d24 #x9e1d1da4b99eb93a
308
#x745858c49c749cb0 #x2e343446722e7268
309
#x2d363641772d776c #xb2dcdc11cdb2cda3
310
#xeeb4b49d29ee2973 #xfb5b5b4d16fb16b6
311
#xf6a4a4a501f60153 #x4d7676a1d74dd7ec
312
#x61b7b714a361a375 #xce7d7d3449ce49fa
313
#x7b5252df8d7b8da4 #x3edddd9f423e42a1
314
#x715e5ecd937193bc #x971313b1a297a226
315
#xf5a6a6a204f50457 #x68b9b901b868b869
316
#x0000000000000000 #x2cc1c1b5742c7499
317
#x604040e0a060a080 #x1fe3e3c2211f21dd
318
#xc879793a43c843f2 #xedb6b69a2ced2c77
319
#xbed4d40dd9bed9b3 #x468d8d47ca46ca01
320
#xd967671770d970ce #x4b7272afdd4bdde4
321
#xde9494ed79de7933 #xd49898ff67d4672b
322
#xe8b0b09323e8237b #x4a85855bde4ade11
323
#x6bbbbb06bd6bbd6d #x2ac5c5bb7e2a7e91
324
#xe54f4f7b34e5349e #x16ededd73a163ac1
325
#xc58686d254c55417 #xd79a9af862d7622f
326
#x55666699ff55ffcc #x941111b6a794a722
327
#xcf8a8ac04acf4a0f #x10e9e9d9301030c9
328
#x0604040e0a060a08 #x81fefe66988198e7
329
#xf0a0a0ab0bf00b5b #x447878b4cc44ccf0
330
#xba2525f0d5bad54a #xe34b4b753ee33e96
331
#xf3a2a2ac0ef30e5f #xfe5d5d4419fe19ba
332
#xc08080db5bc05b1b #x8a050580858a850a
333
#xad3f3fd3ecadec7e #xbc2121fedfbcdf42
334
#x487070a8d848d8e0 #x04f1f1fd0c040cf9
335
#xdf6363197adf7ac6 #xc177772f58c158ee
336
#x75afaf309f759f45 #x634242e7a563a584
337
#x3020207050305040 #x1ae5e5cb2e1a2ed1
338
#x0efdfdef120e12e1 #x6dbfbf08b76db765
339
#x4c818155d44cd419 #x141818243c143c30
340
#x352626795f355f4c #x2fc3c3b2712f719d
341
#xe1bebe8638e13867 #xa23535c8fda2fd6a
342
#xcc8888c74fcc4f0b #x392e2e654b394b5c
343
#x5793936af957f93d #xf25555580df20daa
344
#x82fcfc619d829de3 #x477a7ab3c947c9f4
345
#xacc8c827efacef8b #xe7baba8832e7326f
346
#x2b32324f7d2b7d64 #x95e6e642a495a4d7
347
#xa0c0c03bfba0fb9b #x981919aab398b332
348
#xd19e9ef668d16827 #x7fa3a322817f815d
349
#x664444eeaa66aa88 #x7e5454d6827e82a8
350
#xab3b3bdde6abe676 #x830b0b959e839e16
351
#xca8c8cc945ca4503 #x29c7c7bc7b297b95
352
#xd36b6b056ed36ed6 #x3c28286c443c4450
353
#x79a7a72c8b798b55 #xe2bcbc813de23d63
354
#x1d161631271d272c #x76adad379a769a41
355
#x3bdbdb964d3b4dad #x5664649efa56fac8
356
#x4e7474a6d24ed2e8 #x1e141436221e2228
357
#xdb9292e476db763f #x0a0c0c121e0a1e18
358
#x6c4848fcb46cb490 #xe4b8b88f37e4376b
359
#x5d9f9f78e75de725 #x6ebdbd0fb26eb261
360
#xef4343692aef2a86 #xa6c4c435f1a6f193
361
#xa83939dae3a8e372 #xa43131c6f7a4f762
362
#x37d3d38a593759bd #x8bf2f274868b86ff
363
#x32d5d583563256b1 #x438b8b4ec543c50d
364
#x596e6e85eb59ebdc #xb7dada18c2b7c2af
365
#x8c01018e8f8c8f02 #x64b1b11dac64ac79
366
#xd29c9cf16dd26d23 #xe04949723be03b92
367
#xb4d8d81fc7b4c7ab #xfaacacb915fa1543
368
#x07f3f3fa090709fd #x25cfcfa06f256f85
369
#xafcaca20eaafea8f #x8ef4f47d898e89f3
370
#xe947476720e9208e #x1810103828182820
371
#xd56f6f0b64d564de #x88f0f073838883fb
372
#x6f4a4afbb16fb194 #x725c5cca967296b8
373
#x243838546c246c70 #xf157575f08f108ae
374
#xc773732152c752e6 #x51979764f351f335
375
#x23cbcbae6523658d #x7ca1a125847c8459
376
#x9ce8e857bf9cbfcb #x213e3e5d6321637c
377
#xdd9696ea7cdd7c37 #xdc61611e7fdc7fc2
378
#x860d0d9c9186911a #x850f0f9b9485941e
379
#x90e0e04bab90abdb #x427c7cbac642c6f8
380
#xc471712657c457e2 #xaacccc29e5aae583
381
#xd89090e373d8733b #x050606090f050f0c
382
#x01f7f7f4030103f5 #x121c1c2a36123638
383
#xa3c2c23cfea3fe9f #x5f6a6a8be15fe1d4
384
#xf9aeaebe10f91047 #xd06969026bd06bd2
385
#x911717bfa891a82e #x58999971e858e829
386
#x273a3a5369276974 #xb92727f7d0b9d04e
387
#x38d9d991483848a9 #x13ebebde351335cd
388
#xb32b2be5ceb3ce56 #x3322227755335544
389
#xbbd2d204d6bbd6bf #x70a9a93990709049
390
#x890707878089800e #xa73333c1f2a7f266
391
#xb62d2decc1b6c15a #x223c3c5a66226678
392
#x921515b8ad92ad2a #x20c9c9a960206089
393
#x4987875cdb49db15 #xffaaaab01aff1a4f
394
#x785050d8887888a0 #x7aa5a52b8e7a8e51
395
#x8f0303898a8f8a06 #xf859594a13f813b2
396
#x800909929b809b12 #x171a1a2339173934
397
#xda65651075da75ca #x31d7d784533153b5
398
#xc68484d551c65113 #xb8d0d003d3b8d3bb
399
#xc38282dc5ec35e1f #xb02929e2cbb0cb52
400
#x775a5ac3997799b4 #x111e1e2d3311333c
401
#xcb7b7b3d46cb46f6 #xfca8a8b71ffc1f4b
402
#xd66d6d0c61d661da #x3a2c2c624e3a4e58
404
#x97a5c6c632f4a5f4 #xeb84f8f86f978497
405
#xc799eeee5eb099b0 #xf78df6f67a8c8d8c
406
#xe50dffffe8170d17 #xb7bdd6d60adcbddc
407
#xa7b1dede16c8b1c8 #x395491916dfc54fc
408
#xc050606090f050f0 #x0403020207050305
409
#x87a9cece2ee0a9e0 #xac7d5656d1877d87
410
#xd519e7e7cc2b192b #x7162b5b513a662a6
411
#x9ae64d4d7c31e631 #xc39aecec59b59ab5
412
#x05458f8f40cf45cf #x3e9d1f1fa3bc9dbc
413
#x0940898949c040c0 #xef87fafa68928792
414
#xc515efefd03f153f #x7febb2b29426eb26
415
#x07c98e8ece40c940 #xed0bfbfbe61d0b1d
416
#x82ec41416e2fec2f #x7d67b3b31aa967a9
417
#xbefd5f5f431cfd1c #x8aea45456025ea25
418
#x46bf2323f9dabfda #xa6f753535102f702
419
#xd396e4e445a196a1 #x2d5b9b9b76ed5bed
420
#xeac27575285dc25d #xd91ce1e1c5241c24
421
#x7aae3d3dd4e9aee9 #x986a4c4cf2be6abe
422
#xd85a6c6c82ee5aee #xfc417e7ebdc341c3
423
#xf102f5f5f3060206 #x1d4f838352d14fd1
424
#xd05c68688ce45ce4 #xa2f451515607f407
425
#xb934d1d18d5c345c #xe908f9f9e1180818
426
#xdf93e2e24cae93ae #x4d73abab3e957395
427
#xc453626297f553f5 #x543f2a2a6b413f41
428
#x100c08081c140c14 #x3152959563f652f6
429
#x8c654646e9af65af #x215e9d9d7fe25ee2
430
#x6028303048782878 #x6ea13737cff8a1f8
431
#x140f0a0a1b110f11 #x5eb52f2febc4b5c4
432
#x1c090e0e151b091b #x483624247e5a365a
433
#x369b1b1badb69bb6 #xa53ddfdf98473d47
434
#x8126cdcda76a266a #x9c694e4ef5bb69bb
435
#xfecd7f7f334ccd4c #xcf9feaea50ba9fba
436
#x241b12123f2d1b2d #x3a9e1d1da4b99eb9
437
#xb0745858c49c749c #x682e343446722e72
438
#x6c2d363641772d77 #xa3b2dcdc11cdb2cd
439
#x73eeb4b49d29ee29 #xb6fb5b5b4d16fb16
440
#x53f6a4a4a501f601 #xec4d7676a1d74dd7
441
#x7561b7b714a361a3 #xface7d7d3449ce49
442
#xa47b5252df8d7b8d #xa13edddd9f423e42
443
#xbc715e5ecd937193 #x26971313b1a297a2
444
#x57f5a6a6a204f504 #x6968b9b901b868b8
445
#x0000000000000000 #x992cc1c1b5742c74
446
#x80604040e0a060a0 #xdd1fe3e3c2211f21
447
#xf2c879793a43c843 #x77edb6b69a2ced2c
448
#xb3bed4d40dd9bed9 #x01468d8d47ca46ca
449
#xced967671770d970 #xe44b7272afdd4bdd
450
#x33de9494ed79de79 #x2bd49898ff67d467
451
#x7be8b0b09323e823 #x114a85855bde4ade
452
#x6d6bbbbb06bd6bbd #x912ac5c5bb7e2a7e
453
#x9ee54f4f7b34e534 #xc116ededd73a163a
454
#x17c58686d254c554 #x2fd79a9af862d762
455
#xcc55666699ff55ff #x22941111b6a794a7
456
#x0fcf8a8ac04acf4a #xc910e9e9d9301030
457
#x080604040e0a060a #xe781fefe66988198
458
#x5bf0a0a0ab0bf00b #xf0447878b4cc44cc
459
#x4aba2525f0d5bad5 #x96e34b4b753ee33e
460
#x5ff3a2a2ac0ef30e #xbafe5d5d4419fe19
461
#x1bc08080db5bc05b #x0a8a050580858a85
462
#x7ead3f3fd3ecadec #x42bc2121fedfbcdf
463
#xe0487070a8d848d8 #xf904f1f1fd0c040c
464
#xc6df6363197adf7a #xeec177772f58c158
465
#x4575afaf309f759f #x84634242e7a563a5
466
#x4030202070503050 #xd11ae5e5cb2e1a2e
467
#xe10efdfdef120e12 #x656dbfbf08b76db7
468
#x194c818155d44cd4 #x30141818243c143c
469
#x4c352626795f355f #x9d2fc3c3b2712f71
470
#x67e1bebe8638e138 #x6aa23535c8fda2fd
471
#x0bcc8888c74fcc4f #x5c392e2e654b394b
472
#x3d5793936af957f9 #xaaf25555580df20d
473
#xe382fcfc619d829d #xf4477a7ab3c947c9
474
#x8bacc8c827efacef #x6fe7baba8832e732
475
#x642b32324f7d2b7d #xd795e6e642a495a4
476
#x9ba0c0c03bfba0fb #x32981919aab398b3
477
#x27d19e9ef668d168 #x5d7fa3a322817f81
478
#x88664444eeaa66aa #xa87e5454d6827e82
479
#x76ab3b3bdde6abe6 #x16830b0b959e839e
480
#x03ca8c8cc945ca45 #x9529c7c7bc7b297b
481
#xd6d36b6b056ed36e #x503c28286c443c44
482
#x5579a7a72c8b798b #x63e2bcbc813de23d
483
#x2c1d161631271d27 #x4176adad379a769a
484
#xad3bdbdb964d3b4d #xc85664649efa56fa
485
#xe84e7474a6d24ed2 #x281e141436221e22
486
#x3fdb9292e476db76 #x180a0c0c121e0a1e
487
#x906c4848fcb46cb4 #x6be4b8b88f37e437
488
#x255d9f9f78e75de7 #x616ebdbd0fb26eb2
489
#x86ef4343692aef2a #x93a6c4c435f1a6f1
490
#x72a83939dae3a8e3 #x62a43131c6f7a4f7
491
#xbd37d3d38a593759 #xff8bf2f274868b86
492
#xb132d5d583563256 #x0d438b8b4ec543c5
493
#xdc596e6e85eb59eb #xafb7dada18c2b7c2
494
#x028c01018e8f8c8f #x7964b1b11dac64ac
495
#x23d29c9cf16dd26d #x92e04949723be03b
496
#xabb4d8d81fc7b4c7 #x43faacacb915fa15
497
#xfd07f3f3fa090709 #x8525cfcfa06f256f
498
#x8fafcaca20eaafea #xf38ef4f47d898e89
499
#x8ee947476720e920 #x2018101038281828
500
#xded56f6f0b64d564 #xfb88f0f073838883
501
#x946f4a4afbb16fb1 #xb8725c5cca967296
502
#x70243838546c246c #xaef157575f08f108
503
#xe6c773732152c752 #x3551979764f351f3
504
#x8d23cbcbae652365 #x597ca1a125847c84
505
#xcb9ce8e857bf9cbf #x7c213e3e5d632163
506
#x37dd9696ea7cdd7c #xc2dc61611e7fdc7f
507
#x1a860d0d9c918691 #x1e850f0f9b948594
508
#xdb90e0e04bab90ab #xf8427c7cbac642c6
509
#xe2c471712657c457 #x83aacccc29e5aae5
510
#x3bd89090e373d873 #x0c050606090f050f
511
#xf501f7f7f4030103 #x38121c1c2a361236
512
#x9fa3c2c23cfea3fe #xd45f6a6a8be15fe1
513
#x47f9aeaebe10f910 #xd2d06969026bd06b
514
#x2e911717bfa891a8 #x2958999971e858e8
515
#x74273a3a53692769 #x4eb92727f7d0b9d0
516
#xa938d9d991483848 #xcd13ebebde351335
517
#x56b32b2be5ceb3ce #x4433222277553355
518
#xbfbbd2d204d6bbd6 #x4970a9a939907090
519
#x0e89070787808980 #x66a73333c1f2a7f2
520
#x5ab62d2decc1b6c1 #x78223c3c5a662266
521
#x2a921515b8ad92ad #x8920c9c9a9602060
522
#x154987875cdb49db #x4fffaaaab01aff1a
523
#xa0785050d8887888 #x517aa5a52b8e7a8e
524
#x068f0303898a8f8a #xb2f859594a13f813
525
#x12800909929b809b #x34171a1a23391739
526
#xcada65651075da75 #xb531d7d784533153
527
#x13c68484d551c651 #xbbb8d0d003d3b8d3
528
#x1fc38282dc5ec35e #x52b02929e2cbb0cb
529
#xb4775a5ac3997799 #x3c111e1e2d331133
530
#xf6cb7b7b3d46cb46 #x4bfca8a8b71ffc1f
531
#xdad66d6d0c61d661 #x583a2c2c624e3a4e
533
#xf497a5c6c632f4a5 #x97eb84f8f86f9784
534
#xb0c799eeee5eb099 #x8cf78df6f67a8c8d
535
#x17e50dffffe8170d #xdcb7bdd6d60adcbd
536
#xc8a7b1dede16c8b1 #xfc395491916dfc54
537
#xf0c050606090f050 #x0504030202070503
538
#xe087a9cece2ee0a9 #x87ac7d5656d1877d
539
#x2bd519e7e7cc2b19 #xa67162b5b513a662
540
#x319ae64d4d7c31e6 #xb5c39aecec59b59a
541
#xcf05458f8f40cf45 #xbc3e9d1f1fa3bc9d
542
#xc00940898949c040 #x92ef87fafa689287
543
#x3fc515efefd03f15 #x267febb2b29426eb
544
#x4007c98e8ece40c9 #x1ded0bfbfbe61d0b
545
#x2f82ec41416e2fec #xa97d67b3b31aa967
546
#x1cbefd5f5f431cfd #x258aea45456025ea
547
#xda46bf2323f9dabf #x02a6f753535102f7
548
#xa1d396e4e445a196 #xed2d5b9b9b76ed5b
549
#x5deac27575285dc2 #x24d91ce1e1c5241c
550
#xe97aae3d3dd4e9ae #xbe986a4c4cf2be6a
551
#xeed85a6c6c82ee5a #xc3fc417e7ebdc341
552
#x06f102f5f5f30602 #xd11d4f838352d14f
553
#xe4d05c68688ce45c #x07a2f451515607f4
554
#x5cb934d1d18d5c34 #x18e908f9f9e11808
555
#xaedf93e2e24cae93 #x954d73abab3e9573
556
#xf5c453626297f553 #x41543f2a2a6b413f
557
#x14100c08081c140c #xf63152959563f652
558
#xaf8c654646e9af65 #xe2215e9d9d7fe25e
559
#x7860283030487828 #xf86ea13737cff8a1
560
#x11140f0a0a1b110f #xc45eb52f2febc4b5
561
#x1b1c090e0e151b09 #x5a483624247e5a36
562
#xb6369b1b1badb69b #x47a53ddfdf98473d
563
#x6a8126cdcda76a26 #xbb9c694e4ef5bb69
564
#x4cfecd7f7f334ccd #xbacf9feaea50ba9f
565
#x2d241b12123f2d1b #xb93a9e1d1da4b99e
566
#x9cb0745858c49c74 #x72682e343446722e
567
#x776c2d363641772d #xcda3b2dcdc11cdb2
568
#x2973eeb4b49d29ee #x16b6fb5b5b4d16fb
569
#x0153f6a4a4a501f6 #xd7ec4d7676a1d74d
570
#xa37561b7b714a361 #x49face7d7d3449ce
571
#x8da47b5252df8d7b #x42a13edddd9f423e
572
#x93bc715e5ecd9371 #xa226971313b1a297
573
#x0457f5a6a6a204f5 #xb86968b9b901b868
574
#x0000000000000000 #x74992cc1c1b5742c
575
#xa080604040e0a060 #x21dd1fe3e3c2211f
576
#x43f2c879793a43c8 #x2c77edb6b69a2ced
577
#xd9b3bed4d40dd9be #xca01468d8d47ca46
578
#x70ced967671770d9 #xdde44b7272afdd4b
579
#x7933de9494ed79de #x672bd49898ff67d4
580
#x237be8b0b09323e8 #xde114a85855bde4a
581
#xbd6d6bbbbb06bd6b #x7e912ac5c5bb7e2a
582
#x349ee54f4f7b34e5 #x3ac116ededd73a16
583
#x5417c58686d254c5 #x622fd79a9af862d7
584
#xffcc55666699ff55 #xa722941111b6a794
585
#x4a0fcf8a8ac04acf #x30c910e9e9d93010
586
#x0a080604040e0a06 #x98e781fefe669881
587
#x0b5bf0a0a0ab0bf0 #xccf0447878b4cc44
588
#xd54aba2525f0d5ba #x3e96e34b4b753ee3
589
#x0e5ff3a2a2ac0ef3 #x19bafe5d5d4419fe
590
#x5b1bc08080db5bc0 #x850a8a050580858a
591
#xec7ead3f3fd3ecad #xdf42bc2121fedfbc
592
#xd8e0487070a8d848 #x0cf904f1f1fd0c04
593
#x7ac6df6363197adf #x58eec177772f58c1
594
#x9f4575afaf309f75 #xa584634242e7a563
595
#x5040302020705030 #x2ed11ae5e5cb2e1a
596
#x12e10efdfdef120e #xb7656dbfbf08b76d
597
#xd4194c818155d44c #x3c30141818243c14
598
#x5f4c352626795f35 #x719d2fc3c3b2712f
599
#x3867e1bebe8638e1 #xfd6aa23535c8fda2
600
#x4f0bcc8888c74fcc #x4b5c392e2e654b39
601
#xf93d5793936af957 #x0daaf25555580df2
602
#x9de382fcfc619d82 #xc9f4477a7ab3c947
603
#xef8bacc8c827efac #x326fe7baba8832e7
604
#x7d642b32324f7d2b #xa4d795e6e642a495
605
#xfb9ba0c0c03bfba0 #xb332981919aab398
606
#x6827d19e9ef668d1 #x815d7fa3a322817f
607
#xaa88664444eeaa66 #x82a87e5454d6827e
608
#xe676ab3b3bdde6ab #x9e16830b0b959e83
609
#x4503ca8c8cc945ca #x7b9529c7c7bc7b29
610
#x6ed6d36b6b056ed3 #x44503c28286c443c
611
#x8b5579a7a72c8b79 #x3d63e2bcbc813de2
612
#x272c1d161631271d #x9a4176adad379a76
613
#x4dad3bdbdb964d3b #xfac85664649efa56
614
#xd2e84e7474a6d24e #x22281e141436221e
615
#x763fdb9292e476db #x1e180a0c0c121e0a
616
#xb4906c4848fcb46c #x376be4b8b88f37e4
617
#xe7255d9f9f78e75d #xb2616ebdbd0fb26e
618
#x2a86ef4343692aef #xf193a6c4c435f1a6
619
#xe372a83939dae3a8 #xf762a43131c6f7a4
620
#x59bd37d3d38a5937 #x86ff8bf2f274868b
621
#x56b132d5d5835632 #xc50d438b8b4ec543
622
#xebdc596e6e85eb59 #xc2afb7dada18c2b7
623
#x8f028c01018e8f8c #xac7964b1b11dac64
624
#x6d23d29c9cf16dd2 #x3b92e04949723be0
625
#xc7abb4d8d81fc7b4 #x1543faacacb915fa
626
#x09fd07f3f3fa0907 #x6f8525cfcfa06f25
627
#xea8fafcaca20eaaf #x89f38ef4f47d898e
628
#x208ee947476720e9 #x2820181010382818
629
#x64ded56f6f0b64d5 #x83fb88f0f0738388
630
#xb1946f4a4afbb16f #x96b8725c5cca9672
631
#x6c70243838546c24 #x08aef157575f08f1
632
#x52e6c773732152c7 #xf33551979764f351
633
#x658d23cbcbae6523 #x84597ca1a125847c
634
#xbfcb9ce8e857bf9c #x637c213e3e5d6321
635
#x7c37dd9696ea7cdd #x7fc2dc61611e7fdc
636
#x911a860d0d9c9186 #x941e850f0f9b9485
637
#xabdb90e0e04bab90 #xc6f8427c7cbac642
638
#x57e2c471712657c4 #xe583aacccc29e5aa
639
#x733bd89090e373d8 #x0f0c050606090f05
640
#x03f501f7f7f40301 #x3638121c1c2a3612
641
#xfe9fa3c2c23cfea3 #xe1d45f6a6a8be15f
642
#x1047f9aeaebe10f9 #x6bd2d06969026bd0
643
#xa82e911717bfa891 #xe82958999971e858
644
#x6974273a3a536927 #xd04eb92727f7d0b9
645
#x48a938d9d9914838 #x35cd13ebebde3513
646
#xce56b32b2be5ceb3 #x5544332222775533
647
#xd6bfbbd2d204d6bb #x904970a9a9399070
648
#x800e890707878089 #xf266a73333c1f2a7
649
#xc15ab62d2decc1b6 #x6678223c3c5a6622
650
#xad2a921515b8ad92 #x608920c9c9a96020
651
#xdb154987875cdb49 #x1a4fffaaaab01aff
652
#x88a0785050d88878 #x8e517aa5a52b8e7a
653
#x8a068f0303898a8f #x13b2f859594a13f8
654
#x9b12800909929b80 #x3934171a1a233917
655
#x75cada65651075da #x53b531d7d7845331
656
#x5113c68484d551c6 #xd3bbb8d0d003d3b8
657
#x5e1fc38282dc5ec3 #xcb52b02929e2cbb0
658
#x99b4775a5ac39977 #x333c111e1e2d3311
659
#x46f6cb7b7b3d46cb #x1f4bfca8a8b71ffc
660
#x61dad66d6d0c61d6 #x4e583a2c2c624e3a
662
#xa5f497a5c6c632f4 #x8497eb84f8f86f97
663
#x99b0c799eeee5eb0 #x8d8cf78df6f67a8c
664
#x0d17e50dffffe817 #xbddcb7bdd6d60adc
665
#xb1c8a7b1dede16c8 #x54fc395491916dfc
666
#x50f0c050606090f0 #x0305040302020705
667
#xa9e087a9cece2ee0 #x7d87ac7d5656d187
668
#x192bd519e7e7cc2b #x62a67162b5b513a6
669
#xe6319ae64d4d7c31 #x9ab5c39aecec59b5
670
#x45cf05458f8f40cf #x9dbc3e9d1f1fa3bc
671
#x40c00940898949c0 #x8792ef87fafa6892
672
#x153fc515efefd03f #xeb267febb2b29426
673
#xc94007c98e8ece40 #x0b1ded0bfbfbe61d
674
#xec2f82ec41416e2f #x67a97d67b3b31aa9
675
#xfd1cbefd5f5f431c #xea258aea45456025
676
#xbfda46bf2323f9da #xf702a6f753535102
677
#x96a1d396e4e445a1 #x5bed2d5b9b9b76ed
678
#xc25deac27575285d #x1c24d91ce1e1c524
679
#xaee97aae3d3dd4e9 #x6abe986a4c4cf2be
680
#x5aeed85a6c6c82ee #x41c3fc417e7ebdc3
681
#x0206f102f5f5f306 #x4fd11d4f838352d1
682
#x5ce4d05c68688ce4 #xf407a2f451515607
683
#x345cb934d1d18d5c #x0818e908f9f9e118
684
#x93aedf93e2e24cae #x73954d73abab3e95
685
#x53f5c453626297f5 #x3f41543f2a2a6b41
686
#x0c14100c08081c14 #x52f63152959563f6
687
#x65af8c654646e9af #x5ee2215e9d9d7fe2
688
#x2878602830304878 #xa1f86ea13737cff8
689
#x0f11140f0a0a1b11 #xb5c45eb52f2febc4
690
#x091b1c090e0e151b #x365a483624247e5a
691
#x9bb6369b1b1badb6 #x3d47a53ddfdf9847
692
#x266a8126cdcda76a #x69bb9c694e4ef5bb
693
#xcd4cfecd7f7f334c #x9fbacf9feaea50ba
694
#x1b2d241b12123f2d #x9eb93a9e1d1da4b9
695
#x749cb0745858c49c #x2e72682e34344672
696
#x2d776c2d36364177 #xb2cda3b2dcdc11cd
697
#xee2973eeb4b49d29 #xfb16b6fb5b5b4d16
698
#xf60153f6a4a4a501 #x4dd7ec4d7676a1d7
699
#x61a37561b7b714a3 #xce49face7d7d3449
700
#x7b8da47b5252df8d #x3e42a13edddd9f42
701
#x7193bc715e5ecd93 #x97a226971313b1a2
702
#xf50457f5a6a6a204 #x68b86968b9b901b8
703
#x0000000000000000 #x2c74992cc1c1b574
704
#x60a080604040e0a0 #x1f21dd1fe3e3c221
705
#xc843f2c879793a43 #xed2c77edb6b69a2c
706
#xbed9b3bed4d40dd9 #x46ca01468d8d47ca
707
#xd970ced967671770 #x4bdde44b7272afdd
708
#xde7933de9494ed79 #xd4672bd49898ff67
709
#xe8237be8b0b09323 #x4ade114a85855bde
710
#x6bbd6d6bbbbb06bd #x2a7e912ac5c5bb7e
711
#xe5349ee54f4f7b34 #x163ac116ededd73a
712
#xc55417c58686d254 #xd7622fd79a9af862
713
#x55ffcc55666699ff #x94a722941111b6a7
714
#xcf4a0fcf8a8ac04a #x1030c910e9e9d930
715
#x060a080604040e0a #x8198e781fefe6698
716
#xf00b5bf0a0a0ab0b #x44ccf0447878b4cc
717
#xbad54aba2525f0d5 #xe33e96e34b4b753e
718
#xf30e5ff3a2a2ac0e #xfe19bafe5d5d4419
719
#xc05b1bc08080db5b #x8a850a8a05058085
720
#xadec7ead3f3fd3ec #xbcdf42bc2121fedf
721
#x48d8e0487070a8d8 #x040cf904f1f1fd0c
722
#xdf7ac6df6363197a #xc158eec177772f58
723
#x759f4575afaf309f #x63a584634242e7a5
724
#x3050403020207050 #x1a2ed11ae5e5cb2e
725
#x0e12e10efdfdef12 #x6db7656dbfbf08b7
726
#x4cd4194c818155d4 #x143c30141818243c
727
#x355f4c352626795f #x2f719d2fc3c3b271
728
#xe13867e1bebe8638 #xa2fd6aa23535c8fd
729
#xcc4f0bcc8888c74f #x394b5c392e2e654b
730
#x57f93d5793936af9 #xf20daaf25555580d
731
#x829de382fcfc619d #x47c9f4477a7ab3c9
732
#xacef8bacc8c827ef #xe7326fe7baba8832
733
#x2b7d642b32324f7d #x95a4d795e6e642a4
734
#xa0fb9ba0c0c03bfb #x98b332981919aab3
735
#xd16827d19e9ef668 #x7f815d7fa3a32281
736
#x66aa88664444eeaa #x7e82a87e5454d682
737
#xabe676ab3b3bdde6 #x839e16830b0b959e
738
#xca4503ca8c8cc945 #x297b9529c7c7bc7b
739
#xd36ed6d36b6b056e #x3c44503c28286c44
740
#x798b5579a7a72c8b #xe23d63e2bcbc813d
741
#x1d272c1d16163127 #x769a4176adad379a
742
#x3b4dad3bdbdb964d #x56fac85664649efa
743
#x4ed2e84e7474a6d2 #x1e22281e14143622
744
#xdb763fdb9292e476 #x0a1e180a0c0c121e
745
#x6cb4906c4848fcb4 #xe4376be4b8b88f37
746
#x5de7255d9f9f78e7 #x6eb2616ebdbd0fb2
747
#xef2a86ef4343692a #xa6f193a6c4c435f1
748
#xa8e372a83939dae3 #xa4f762a43131c6f7
749
#x3759bd37d3d38a59 #x8b86ff8bf2f27486
750
#x3256b132d5d58356 #x43c50d438b8b4ec5
751
#x59ebdc596e6e85eb #xb7c2afb7dada18c2
752
#x8c8f028c01018e8f #x64ac7964b1b11dac
753
#xd26d23d29c9cf16d #xe03b92e04949723b
754
#xb4c7abb4d8d81fc7 #xfa1543faacacb915
755
#x0709fd07f3f3fa09 #x256f8525cfcfa06f
756
#xafea8fafcaca20ea #x8e89f38ef4f47d89
757
#xe9208ee947476720 #x1828201810103828
758
#xd564ded56f6f0b64 #x8883fb88f0f07383
759
#x6fb1946f4a4afbb1 #x7296b8725c5cca96
760
#x246c70243838546c #xf108aef157575f08
761
#xc752e6c773732152 #x51f33551979764f3
762
#x23658d23cbcbae65 #x7c84597ca1a12584
763
#x9cbfcb9ce8e857bf #x21637c213e3e5d63
764
#xdd7c37dd9696ea7c #xdc7fc2dc61611e7f
765
#x86911a860d0d9c91 #x85941e850f0f9b94
766
#x90abdb90e0e04bab #x42c6f8427c7cbac6
767
#xc457e2c471712657 #xaae583aacccc29e5
768
#xd8733bd89090e373 #x050f0c050606090f
769
#x0103f501f7f7f403 #x123638121c1c2a36
770
#xa3fe9fa3c2c23cfe #x5fe1d45f6a6a8be1
771
#xf91047f9aeaebe10 #xd06bd2d06969026b
772
#x91a82e911717bfa8 #x58e82958999971e8
773
#x276974273a3a5369 #xb9d04eb92727f7d0
774
#x3848a938d9d99148 #x1335cd13ebebde35
775
#xb3ce56b32b2be5ce #x3355443322227755
776
#xbbd6bfbbd2d204d6 #x70904970a9a93990
777
#x89800e8907078780 #xa7f266a73333c1f2
778
#xb6c15ab62d2decc1 #x226678223c3c5a66
779
#x92ad2a921515b8ad #x20608920c9c9a960
780
#x49db154987875cdb #xff1a4fffaaaab01a
781
#x7888a0785050d888 #x7a8e517aa5a52b8e
782
#x8f8a068f0303898a #xf813b2f859594a13
783
#x809b12800909929b #x173934171a1a2339
784
#xda75cada65651075 #x3153b531d7d78453
785
#xc65113c68484d551 #xb8d3bbb8d0d003d3
786
#xc35e1fc38282dc5e #xb0cb52b02929e2cb
787
#x7799b4775a5ac399 #x11333c111e1e2d33
788
#xcb46f6cb7b7b3d46 #xfc1f4bfca8a8b71f
789
#xd661dad66d6d0c61 #x3a4e583a2c2c624e
791
#xf4a5f497a5c6c632 #x978497eb84f8f86f
792
#xb099b0c799eeee5e #x8c8d8cf78df6f67a
793
#x170d17e50dffffe8 #xdcbddcb7bdd6d60a
794
#xc8b1c8a7b1dede16 #xfc54fc395491916d
795
#xf050f0c050606090 #x0503050403020207
796
#xe0a9e087a9cece2e #x877d87ac7d5656d1
797
#x2b192bd519e7e7cc #xa662a67162b5b513
798
#x31e6319ae64d4d7c #xb59ab5c39aecec59
799
#xcf45cf05458f8f40 #xbc9dbc3e9d1f1fa3
800
#xc040c00940898949 #x928792ef87fafa68
801
#x3f153fc515efefd0 #x26eb267febb2b294
802
#x40c94007c98e8ece #x1d0b1ded0bfbfbe6
803
#x2fec2f82ec41416e #xa967a97d67b3b31a
804
#x1cfd1cbefd5f5f43 #x25ea258aea454560
805
#xdabfda46bf2323f9 #x02f702a6f7535351
806
#xa196a1d396e4e445 #xed5bed2d5b9b9b76
807
#x5dc25deac2757528 #x241c24d91ce1e1c5
808
#xe9aee97aae3d3dd4 #xbe6abe986a4c4cf2
809
#xee5aeed85a6c6c82 #xc341c3fc417e7ebd
810
#x060206f102f5f5f3 #xd14fd11d4f838352
811
#xe45ce4d05c68688c #x07f407a2f4515156
812
#x5c345cb934d1d18d #x180818e908f9f9e1
813
#xae93aedf93e2e24c #x9573954d73abab3e
814
#xf553f5c453626297 #x413f41543f2a2a6b
815
#x140c14100c08081c #xf652f63152959563
816
#xaf65af8c654646e9 #xe25ee2215e9d9d7f
817
#x7828786028303048 #xf8a1f86ea13737cf
818
#x110f11140f0a0a1b #xc4b5c45eb52f2feb
819
#x1b091b1c090e0e15 #x5a365a483624247e
820
#xb69bb6369b1b1bad #x473d47a53ddfdf98
821
#x6a266a8126cdcda7 #xbb69bb9c694e4ef5
822
#x4ccd4cfecd7f7f33 #xba9fbacf9feaea50
823
#x2d1b2d241b12123f #xb99eb93a9e1d1da4
824
#x9c749cb0745858c4 #x722e72682e343446
825
#x772d776c2d363641 #xcdb2cda3b2dcdc11
826
#x29ee2973eeb4b49d #x16fb16b6fb5b5b4d
827
#x01f60153f6a4a4a5 #xd74dd7ec4d7676a1
828
#xa361a37561b7b714 #x49ce49face7d7d34
829
#x8d7b8da47b5252df #x423e42a13edddd9f
830
#x937193bc715e5ecd #xa297a226971313b1
831
#x04f50457f5a6a6a2 #xb868b86968b9b901
832
#x0000000000000000 #x742c74992cc1c1b5
833
#xa060a080604040e0 #x211f21dd1fe3e3c2
834
#x43c843f2c879793a #x2ced2c77edb6b69a
835
#xd9bed9b3bed4d40d #xca46ca01468d8d47
836
#x70d970ced9676717 #xdd4bdde44b7272af
837
#x79de7933de9494ed #x67d4672bd49898ff
838
#x23e8237be8b0b093 #xde4ade114a85855b
839
#xbd6bbd6d6bbbbb06 #x7e2a7e912ac5c5bb
840
#x34e5349ee54f4f7b #x3a163ac116ededd7
841
#x54c55417c58686d2 #x62d7622fd79a9af8
842
#xff55ffcc55666699 #xa794a722941111b6
843
#x4acf4a0fcf8a8ac0 #x301030c910e9e9d9
844
#x0a060a080604040e #x988198e781fefe66
845
#x0bf00b5bf0a0a0ab #xcc44ccf0447878b4
846
#xd5bad54aba2525f0 #x3ee33e96e34b4b75
847
#x0ef30e5ff3a2a2ac #x19fe19bafe5d5d44
848
#x5bc05b1bc08080db #x858a850a8a050580
849
#xecadec7ead3f3fd3 #xdfbcdf42bc2121fe
850
#xd848d8e0487070a8 #x0c040cf904f1f1fd
851
#x7adf7ac6df636319 #x58c158eec177772f
852
#x9f759f4575afaf30 #xa563a584634242e7
853
#x5030504030202070 #x2e1a2ed11ae5e5cb
854
#x120e12e10efdfdef #xb76db7656dbfbf08
855
#xd44cd4194c818155 #x3c143c3014181824
856
#x5f355f4c35262679 #x712f719d2fc3c3b2
857
#x38e13867e1bebe86 #xfda2fd6aa23535c8
858
#x4fcc4f0bcc8888c7 #x4b394b5c392e2e65
859
#xf957f93d5793936a #x0df20daaf2555558
860
#x9d829de382fcfc61 #xc947c9f4477a7ab3
861
#xefacef8bacc8c827 #x32e7326fe7baba88
862
#x7d2b7d642b32324f #xa495a4d795e6e642
863
#xfba0fb9ba0c0c03b #xb398b332981919aa
864
#x68d16827d19e9ef6 #x817f815d7fa3a322
865
#xaa66aa88664444ee #x827e82a87e5454d6
866
#xe6abe676ab3b3bdd #x9e839e16830b0b95
867
#x45ca4503ca8c8cc9 #x7b297b9529c7c7bc
868
#x6ed36ed6d36b6b05 #x443c44503c28286c
869
#x8b798b5579a7a72c #x3de23d63e2bcbc81
870
#x271d272c1d161631 #x9a769a4176adad37
871
#x4d3b4dad3bdbdb96 #xfa56fac85664649e
872
#xd24ed2e84e7474a6 #x221e22281e141436
873
#x76db763fdb9292e4 #x1e0a1e180a0c0c12
874
#xb46cb4906c4848fc #x37e4376be4b8b88f
875
#xe75de7255d9f9f78 #xb26eb2616ebdbd0f
876
#x2aef2a86ef434369 #xf1a6f193a6c4c435
877
#xe3a8e372a83939da #xf7a4f762a43131c6
878
#x593759bd37d3d38a #x868b86ff8bf2f274
879
#x563256b132d5d583 #xc543c50d438b8b4e
880
#xeb59ebdc596e6e85 #xc2b7c2afb7dada18
881
#x8f8c8f028c01018e #xac64ac7964b1b11d
882
#x6dd26d23d29c9cf1 #x3be03b92e0494972
883
#xc7b4c7abb4d8d81f #x15fa1543faacacb9
884
#x090709fd07f3f3fa #x6f256f8525cfcfa0
885
#xeaafea8fafcaca20 #x898e89f38ef4f47d
886
#x20e9208ee9474767 #x2818282018101038
887
#x64d564ded56f6f0b #x838883fb88f0f073
888
#xb16fb1946f4a4afb #x967296b8725c5cca
889
#x6c246c7024383854 #x08f108aef157575f
890
#x52c752e6c7737321 #xf351f33551979764
891
#x6523658d23cbcbae #x847c84597ca1a125
892
#xbf9cbfcb9ce8e857 #x6321637c213e3e5d
893
#x7cdd7c37dd9696ea #x7fdc7fc2dc61611e
894
#x9186911a860d0d9c #x9485941e850f0f9b
895
#xab90abdb90e0e04b #xc642c6f8427c7cba
896
#x57c457e2c4717126 #xe5aae583aacccc29
897
#x73d8733bd89090e3 #x0f050f0c05060609
898
#x030103f501f7f7f4 #x36123638121c1c2a
899
#xfea3fe9fa3c2c23c #xe15fe1d45f6a6a8b
900
#x10f91047f9aeaebe #x6bd06bd2d0696902
901
#xa891a82e911717bf #xe858e82958999971
902
#x69276974273a3a53 #xd0b9d04eb92727f7
903
#x483848a938d9d991 #x351335cd13ebebde
904
#xceb3ce56b32b2be5 #x5533554433222277
905
#xd6bbd6bfbbd2d204 #x9070904970a9a939
906
#x8089800e89070787 #xf2a7f266a73333c1
907
#xc1b6c15ab62d2dec #x66226678223c3c5a
908
#xad92ad2a921515b8 #x6020608920c9c9a9
909
#xdb49db154987875c #x1aff1a4fffaaaab0
910
#x887888a0785050d8 #x8e7a8e517aa5a52b
911
#x8a8f8a068f030389 #x13f813b2f859594a
912
#x9b809b1280090992 #x39173934171a1a23
913
#x75da75cada656510 #x533153b531d7d784
914
#x51c65113c68484d5 #xd3b8d3bbb8d0d003
915
#x5ec35e1fc38282dc #xcbb0cb52b02929e2
916
#x997799b4775a5ac3 #x3311333c111e1e2d
917
#x46cb46f6cb7b7b3d #x1ffc1f4bfca8a8b7
918
#x61d661dad66d6d0c #x4e3a4e583a2c2c62
920
#x32f4a5f497a5c6c6 #x6f978497eb84f8f8
921
#x5eb099b0c799eeee #x7a8c8d8cf78df6f6
922
#xe8170d17e50dffff #x0adcbddcb7bdd6d6
923
#x16c8b1c8a7b1dede #x6dfc54fc39549191
924
#x90f050f0c0506060 #x0705030504030202
925
#x2ee0a9e087a9cece #xd1877d87ac7d5656
926
#xcc2b192bd519e7e7 #x13a662a67162b5b5
927
#x7c31e6319ae64d4d #x59b59ab5c39aecec
928
#x40cf45cf05458f8f #xa3bc9dbc3e9d1f1f
929
#x49c040c009408989 #x68928792ef87fafa
930
#xd03f153fc515efef #x9426eb267febb2b2
931
#xce40c94007c98e8e #xe61d0b1ded0bfbfb
932
#x6e2fec2f82ec4141 #x1aa967a97d67b3b3
933
#x431cfd1cbefd5f5f #x6025ea258aea4545
934
#xf9dabfda46bf2323 #x5102f702a6f75353
935
#x45a196a1d396e4e4 #x76ed5bed2d5b9b9b
936
#x285dc25deac27575 #xc5241c24d91ce1e1
937
#xd4e9aee97aae3d3d #xf2be6abe986a4c4c
938
#x82ee5aeed85a6c6c #xbdc341c3fc417e7e
939
#xf3060206f102f5f5 #x52d14fd11d4f8383
940
#x8ce45ce4d05c6868 #x5607f407a2f45151
941
#x8d5c345cb934d1d1 #xe1180818e908f9f9
942
#x4cae93aedf93e2e2 #x3e9573954d73abab
943
#x97f553f5c4536262 #x6b413f41543f2a2a
944
#x1c140c14100c0808 #x63f652f631529595
945
#xe9af65af8c654646 #x7fe25ee2215e9d9d
946
#x4878287860283030 #xcff8a1f86ea13737
947
#x1b110f11140f0a0a #xebc4b5c45eb52f2f
948
#x151b091b1c090e0e #x7e5a365a48362424
949
#xadb69bb6369b1b1b #x98473d47a53ddfdf
950
#xa76a266a8126cdcd #xf5bb69bb9c694e4e
951
#x334ccd4cfecd7f7f #x50ba9fbacf9feaea
952
#x3f2d1b2d241b1212 #xa4b99eb93a9e1d1d
953
#xc49c749cb0745858 #x46722e72682e3434
954
#x41772d776c2d3636 #x11cdb2cda3b2dcdc
955
#x9d29ee2973eeb4b4 #x4d16fb16b6fb5b5b
956
#xa501f60153f6a4a4 #xa1d74dd7ec4d7676
957
#x14a361a37561b7b7 #x3449ce49face7d7d
958
#xdf8d7b8da47b5252 #x9f423e42a13edddd
959
#xcd937193bc715e5e #xb1a297a226971313
960
#xa204f50457f5a6a6 #x01b868b86968b9b9
961
#x0000000000000000 #xb5742c74992cc1c1
962
#xe0a060a080604040 #xc2211f21dd1fe3e3
963
#x3a43c843f2c87979 #x9a2ced2c77edb6b6
964
#x0dd9bed9b3bed4d4 #x47ca46ca01468d8d
965
#x1770d970ced96767 #xafdd4bdde44b7272
966
#xed79de7933de9494 #xff67d4672bd49898
967
#x9323e8237be8b0b0 #x5bde4ade114a8585
968
#x06bd6bbd6d6bbbbb #xbb7e2a7e912ac5c5
969
#x7b34e5349ee54f4f #xd73a163ac116eded
970
#xd254c55417c58686 #xf862d7622fd79a9a
971
#x99ff55ffcc556666 #xb6a794a722941111
972
#xc04acf4a0fcf8a8a #xd9301030c910e9e9
973
#x0e0a060a08060404 #x66988198e781fefe
974
#xab0bf00b5bf0a0a0 #xb4cc44ccf0447878
975
#xf0d5bad54aba2525 #x753ee33e96e34b4b
976
#xac0ef30e5ff3a2a2 #x4419fe19bafe5d5d
977
#xdb5bc05b1bc08080 #x80858a850a8a0505
978
#xd3ecadec7ead3f3f #xfedfbcdf42bc2121
979
#xa8d848d8e0487070 #xfd0c040cf904f1f1
980
#x197adf7ac6df6363 #x2f58c158eec17777
981
#x309f759f4575afaf #xe7a563a584634242
982
#x7050305040302020 #xcb2e1a2ed11ae5e5
983
#xef120e12e10efdfd #x08b76db7656dbfbf
984
#x55d44cd4194c8181 #x243c143c30141818
985
#x795f355f4c352626 #xb2712f719d2fc3c3
986
#x8638e13867e1bebe #xc8fda2fd6aa23535
987
#xc74fcc4f0bcc8888 #x654b394b5c392e2e
988
#x6af957f93d579393 #x580df20daaf25555
989
#x619d829de382fcfc #xb3c947c9f4477a7a
990
#x27efacef8bacc8c8 #x8832e7326fe7baba
991
#x4f7d2b7d642b3232 #x42a495a4d795e6e6
992
#x3bfba0fb9ba0c0c0 #xaab398b332981919
993
#xf668d16827d19e9e #x22817f815d7fa3a3
994
#xeeaa66aa88664444 #xd6827e82a87e5454
995
#xdde6abe676ab3b3b #x959e839e16830b0b
996
#xc945ca4503ca8c8c #xbc7b297b9529c7c7
997
#x056ed36ed6d36b6b #x6c443c44503c2828
998
#x2c8b798b5579a7a7 #x813de23d63e2bcbc
999
#x31271d272c1d1616 #x379a769a4176adad
1000
#x964d3b4dad3bdbdb #x9efa56fac8566464
1001
#xa6d24ed2e84e7474 #x36221e22281e1414
1002
#xe476db763fdb9292 #x121e0a1e180a0c0c
1003
#xfcb46cb4906c4848 #x8f37e4376be4b8b8
1004
#x78e75de7255d9f9f #x0fb26eb2616ebdbd
1005
#x692aef2a86ef4343 #x35f1a6f193a6c4c4
1006
#xdae3a8e372a83939 #xc6f7a4f762a43131
1007
#x8a593759bd37d3d3 #x74868b86ff8bf2f2
1008
#x83563256b132d5d5 #x4ec543c50d438b8b
1009
#x85eb59ebdc596e6e #x18c2b7c2afb7dada
1010
#x8e8f8c8f028c0101 #x1dac64ac7964b1b1
1011
#xf16dd26d23d29c9c #x723be03b92e04949
1012
#x1fc7b4c7abb4d8d8 #xb915fa1543faacac
1013
#xfa090709fd07f3f3 #xa06f256f8525cfcf
1014
#x20eaafea8fafcaca #x7d898e89f38ef4f4
1015
#x6720e9208ee94747 #x3828182820181010
1016
#x0b64d564ded56f6f #x73838883fb88f0f0
1017
#xfbb16fb1946f4a4a #xca967296b8725c5c
1018
#x546c246c70243838 #x5f08f108aef15757
1019
#x2152c752e6c77373 #x64f351f335519797
1020
#xae6523658d23cbcb #x25847c84597ca1a1
1021
#x57bf9cbfcb9ce8e8 #x5d6321637c213e3e
1022
#xea7cdd7c37dd9696 #x1e7fdc7fc2dc6161
1023
#x9c9186911a860d0d #x9b9485941e850f0f
1024
#x4bab90abdb90e0e0 #xbac642c6f8427c7c
1025
#x2657c457e2c47171 #x29e5aae583aacccc
1026
#xe373d8733bd89090 #x090f050f0c050606
1027
#xf4030103f501f7f7 #x2a36123638121c1c
1028
#x3cfea3fe9fa3c2c2 #x8be15fe1d45f6a6a
1029
#xbe10f91047f9aeae #x026bd06bd2d06969
1030
#xbfa891a82e911717 #x71e858e829589999
1031
#x5369276974273a3a #xf7d0b9d04eb92727
1032
#x91483848a938d9d9 #xde351335cd13ebeb
1033
#xe5ceb3ce56b32b2b #x7755335544332222
1034
#x04d6bbd6bfbbd2d2 #x399070904970a9a9
1035
#x878089800e890707 #xc1f2a7f266a73333
1036
#xecc1b6c15ab62d2d #x5a66226678223c3c
1037
#xb8ad92ad2a921515 #xa96020608920c9c9
1038
#x5cdb49db15498787 #xb01aff1a4fffaaaa
1039
#xd8887888a0785050 #x2b8e7a8e517aa5a5
1040
#x898a8f8a068f0303 #x4a13f813b2f85959
1041
#x929b809b12800909 #x2339173934171a1a
1042
#x1075da75cada6565 #x84533153b531d7d7
1043
#xd551c65113c68484 #x03d3b8d3bbb8d0d0
1044
#xdc5ec35e1fc38282 #xe2cbb0cb52b02929
1045
#xc3997799b4775a5a #x2d3311333c111e1e
1046
#x3d46cb46f6cb7b7b #xb71ffc1f4bfca8a8
1047
#x0c61d661dad66d6d #x624e3a4e583a2c2c))))
1049
(declaim (inline groestl-table)
1050
(ftype (function ((integer 0 2048)) (unsigned-byte 64)) groestl-table))
1051
(defun groestl-table (i)
1052
(declare (type (integer 0 2048) i))
1053
(aref +groestl-table+ i))
1059
(defmacro groestl-ext-byte (v n)
1060
`(logand (ash ,v (* 8 (- ,n 7))) #xff))
1062
(defmacro groestl-column (x y i c0 c1 c2 c3 c4 c5 c6 c7)
1063
"Compute one new state column."
1065
(logxor (groestl-table (groestl-ext-byte (aref ,x ,c0) 0))
1066
(groestl-table (+ 256 (groestl-ext-byte (aref ,x ,c1) 1)))
1067
(groestl-table (+ 512 (groestl-ext-byte (aref ,x ,c2) 2)))
1068
(groestl-table (+ 768 (groestl-ext-byte (aref ,x ,c3) 3)))
1069
(groestl-table (+ 1024 (groestl-ext-byte (aref ,x ,c4) 4)))
1070
(groestl-table (+ 1280 (groestl-ext-byte (aref ,x ,c5) 5)))
1071
(groestl-table (+ 1536 (groestl-ext-byte (aref ,x ,c6) 6)))
1072
(groestl-table (+ 1792 (groestl-ext-byte (aref ,x ,c7) 7))))))
1074
(declaim (inline groestl-rnd512p)
1075
(ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-512+))
1076
(simple-array (unsigned-byte 64) (#.+groestl-cols-512+))
1077
(unsigned-byte 64)))
1079
(defun groestl-rnd512p (x y r)
1080
"Compute a round in P (short variants)."
1081
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) x y)
1082
(type (unsigned-byte 64) r)
1083
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1084
(setf (aref x 0) (logxor (aref x 0) #x0000000000000000 r)
1085
(aref x 1) (logxor (aref x 1) #x1000000000000000 r)
1086
(aref x 2) (logxor (aref x 2) #x2000000000000000 r)
1087
(aref x 3) (logxor (aref x 3) #x3000000000000000 r)
1088
(aref x 4) (logxor (aref x 4) #x4000000000000000 r)
1089
(aref x 5) (logxor (aref x 5) #x5000000000000000 r)
1090
(aref x 6) (logxor (aref x 6) #x6000000000000000 r)
1091
(aref x 7) (logxor (aref x 7) #x7000000000000000 r))
1092
(groestl-column x y 0 0 1 2 3 4 5 6 7)
1093
(groestl-column x y 1 1 2 3 4 5 6 7 0)
1094
(groestl-column x y 2 2 3 4 5 6 7 0 1)
1095
(groestl-column x y 3 3 4 5 6 7 0 1 2)
1096
(groestl-column x y 4 4 5 6 7 0 1 2 3)
1097
(groestl-column x y 5 5 6 7 0 1 2 3 4)
1098
(groestl-column x y 6 6 7 0 1 2 3 4 5)
1099
(groestl-column x y 7 7 0 1 2 3 4 5 6)
1102
(declaim (inline groestl-rnd512q)
1103
(ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-512+))
1104
(simple-array (unsigned-byte 64) (#.+groestl-cols-512+))
1105
(unsigned-byte 64)))
1107
(defun groestl-rnd512q (x y r)
1108
"Compute a round in Q (short variants)."
1109
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) x y)
1110
(type (unsigned-byte 64) r)
1111
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1112
(setf (aref x 0) (logxor (aref x 0) #xffffffffffffffff r)
1113
(aref x 1) (logxor (aref x 1) #xffffffffffffffef r)
1114
(aref x 2) (logxor (aref x 2) #xffffffffffffffdf r)
1115
(aref x 3) (logxor (aref x 3) #xffffffffffffffcf r)
1116
(aref x 4) (logxor (aref x 4) #xffffffffffffffbf r)
1117
(aref x 5) (logxor (aref x 5) #xffffffffffffffaf r)
1118
(aref x 6) (logxor (aref x 6) #xffffffffffffff9f r)
1119
(aref x 7) (logxor (aref x 7) #xffffffffffffff8f r))
1120
(groestl-column x y 0 1 3 5 7 0 2 4 6)
1121
(groestl-column x y 1 2 4 6 0 1 3 5 7)
1122
(groestl-column x y 2 3 5 7 1 2 4 6 0)
1123
(groestl-column x y 3 4 6 0 2 3 5 7 1)
1124
(groestl-column x y 4 5 7 1 3 4 6 0 2)
1125
(groestl-column x y 5 6 0 2 4 5 7 1 3)
1126
(groestl-column x y 6 7 1 3 5 6 0 2 4)
1127
(groestl-column x y 7 0 2 4 6 7 1 3 5)
1130
(declaim (inline groestl-rnd1024p)
1131
(ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-1024+))
1132
(simple-array (unsigned-byte 64) (#.+groestl-cols-1024+))
1133
(unsigned-byte 64)))
1135
(defun groestl-rnd1024p (x y r)
1136
"Compute a round in P (long variants)."
1137
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) x y)
1138
(type (unsigned-byte 64) r)
1139
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1140
(setf (aref x 0) (logxor (aref x 0) #x0000000000000000 r)
1141
(aref x 1) (logxor (aref x 1) #x1000000000000000 r)
1142
(aref x 2) (logxor (aref x 2) #x2000000000000000 r)
1143
(aref x 3) (logxor (aref x 3) #x3000000000000000 r)
1144
(aref x 4) (logxor (aref x 4) #x4000000000000000 r)
1145
(aref x 5) (logxor (aref x 5) #x5000000000000000 r)
1146
(aref x 6) (logxor (aref x 6) #x6000000000000000 r)
1147
(aref x 7) (logxor (aref x 7) #x7000000000000000 r)
1148
(aref x 8) (logxor (aref x 8) #x8000000000000000 r)
1149
(aref x 9) (logxor (aref x 9) #x9000000000000000 r)
1150
(aref x 10) (logxor (aref x 10) #xa000000000000000 r)
1151
(aref x 11) (logxor (aref x 11) #xb000000000000000 r)
1152
(aref x 12) (logxor (aref x 12) #xc000000000000000 r)
1153
(aref x 13) (logxor (aref x 13) #xd000000000000000 r)
1154
(aref x 14) (logxor (aref x 14) #xe000000000000000 r)
1155
(aref x 15) (logxor (aref x 15) #xf000000000000000 r))
1156
(groestl-column x y 15 15 0 1 2 3 4 5 10)
1157
(groestl-column x y 14 14 15 0 1 2 3 4 9)
1158
(groestl-column x y 13 13 14 15 0 1 2 3 8)
1159
(groestl-column x y 12 12 13 14 15 0 1 2 7)
1160
(groestl-column x y 11 11 12 13 14 15 0 1 6)
1161
(groestl-column x y 10 10 11 12 13 14 15 0 5)
1162
(groestl-column x y 9 9 10 11 12 13 14 15 4)
1163
(groestl-column x y 8 8 9 10 11 12 13 14 3)
1164
(groestl-column x y 7 7 8 9 10 11 12 13 2)
1165
(groestl-column x y 6 6 7 8 9 10 11 12 1)
1166
(groestl-column x y 5 5 6 7 8 9 10 11 0)
1167
(groestl-column x y 4 4 5 6 7 8 9 10 15)
1168
(groestl-column x y 3 3 4 5 6 7 8 9 14)
1169
(groestl-column x y 2 2 3 4 5 6 7 8 13)
1170
(groestl-column x y 1 1 2 3 4 5 6 7 12)
1171
(groestl-column x y 0 0 1 2 3 4 5 6 11)
1174
(declaim (inline groestl-rnd1024q)
1175
(ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-1024+))
1176
(simple-array (unsigned-byte 64) (#.+groestl-cols-1024+))
1177
(unsigned-byte 64)))
1179
(defun groestl-rnd1024q (x y r)
1180
"Compute a round in Q (long variants)."
1181
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) x y)
1182
(type (unsigned-byte 64) r)
1183
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1184
(setf (aref x 0) (logxor (aref x 0) #xffffffffffffffff r)
1185
(aref x 1) (logxor (aref x 1) #xffffffffffffffef r)
1186
(aref x 2) (logxor (aref x 2) #xffffffffffffffdf r)
1187
(aref x 3) (logxor (aref x 3) #xffffffffffffffcf r)
1188
(aref x 4) (logxor (aref x 4) #xffffffffffffffbf r)
1189
(aref x 5) (logxor (aref x 5) #xffffffffffffffaf r)
1190
(aref x 6) (logxor (aref x 6) #xffffffffffffff9f r)
1191
(aref x 7) (logxor (aref x 7) #xffffffffffffff8f r)
1192
(aref x 8) (logxor (aref x 8) #xffffffffffffff7f r)
1193
(aref x 9) (logxor (aref x 9) #xffffffffffffff6f r)
1194
(aref x 10) (logxor (aref x 10) #xffffffffffffff5f r)
1195
(aref x 11) (logxor (aref x 11) #xffffffffffffff4f r)
1196
(aref x 12) (logxor (aref x 12) #xffffffffffffff3f r)
1197
(aref x 13) (logxor (aref x 13) #xffffffffffffff2f r)
1198
(aref x 14) (logxor (aref x 14) #xffffffffffffff1f r)
1199
(aref x 15) (logxor (aref x 15) #xffffffffffffff0f r))
1200
(groestl-column x y 15 0 2 4 10 15 1 3 5)
1201
(groestl-column x y 14 15 1 3 9 14 0 2 4)
1202
(groestl-column x y 13 14 0 2 8 13 15 1 3)
1203
(groestl-column x y 12 13 15 1 7 12 14 0 2)
1204
(groestl-column x y 11 12 14 0 6 11 13 15 1)
1205
(groestl-column x y 10 11 13 15 5 10 12 14 0)
1206
(groestl-column x y 9 10 12 14 4 9 11 13 15)
1207
(groestl-column x y 8 9 11 13 3 8 10 12 14)
1208
(groestl-column x y 7 8 10 12 2 7 9 11 13)
1209
(groestl-column x y 6 7 9 11 1 6 8 10 12)
1210
(groestl-column x y 5 6 8 10 0 5 7 9 11)
1211
(groestl-column x y 4 5 7 9 15 4 6 8 10)
1212
(groestl-column x y 3 4 6 8 14 3 5 7 9)
1213
(groestl-column x y 2 3 5 7 13 2 4 6 8)
1214
(groestl-column x y 1 2 4 6 12 1 3 5 7)
1215
(groestl-column x y 0 1 3 5 11 0 2 4 6)
1223
(defun groestl-f512 (state input start)
1224
"The compression function (short variants)."
1225
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) state)
1226
(type (simple-array (unsigned-byte 8) (*)) input)
1227
(type (unsigned-byte 64) start)
1228
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1229
(let ((y (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64)))
1230
(z (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64)))
1231
(outq (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64)))
1232
(inp (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64))))
1233
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) y z outq inp)
1234
(dynamic-extent y z outq inp))
1236
(dotimes (i +groestl-cols-512+)
1237
(declare (type (integer 0 #.+groestl-cols-512+) i))
1238
(let ((n (ub64ref/be input (+ start (* 8 i)))))
1239
(declare (type (unsigned-byte 64) n))
1241
(aref inp i) (logxor (aref state i) n))))
1244
(groestl-rnd512q z y 0)
1245
(loop for i from 1 below (1- +groestl-rounds-512+) by 2 do
1246
(groestl-rnd512q y z i)
1247
(groestl-rnd512q z y (1+ i)))
1248
(groestl-rnd512q y outq (1- +groestl-rounds-512+))
1251
(groestl-rnd512p inp z 0)
1252
(loop for i of-type fixnum from 1 below (1- +groestl-rounds-512+) by 2 do
1253
(groestl-rnd512p z y (ash i 56))
1254
(groestl-rnd512p y z (ash (1+ i) 56)))
1255
(groestl-rnd512p z y (ash (1- +groestl-rounds-512+) 56))
1257
;; h' = h + Q(m) + P(h + m)
1258
(dotimes (i +groestl-cols-512+)
1259
(declare (type (integer 0 #.+groestl-cols-512+) i))
1260
(setf (aref state i) (logxor (aref state i) (aref outq i) (aref y i))))
1264
(defun groestl-f1024 (state input start)
1265
"The compression function (long variants)."
1266
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) state)
1267
(type (simple-array (unsigned-byte 8) (*)) input)
1268
(type (unsigned-byte 64) start)
1269
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1270
(let ((y (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64)))
1271
(z (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64)))
1272
(outq (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64)))
1273
(inp (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64))))
1274
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) y z outq inp)
1275
(dynamic-extent y z outq inp))
1277
(dotimes (i +groestl-cols-1024+)
1278
(declare (type (integer 0 #.+groestl-cols-1024+) i))
1279
(let ((n (ub64ref/be input (+ start (* 8 i)))))
1280
(declare (type (unsigned-byte 64) n))
1282
(aref inp i) (logxor (aref state i) n))))
1285
(groestl-rnd1024q z y 0)
1286
(loop for i from 1 below (1- +groestl-rounds-1024+) by 2 do
1287
(groestl-rnd1024q y z i)
1288
(groestl-rnd1024q z y (1+ i)))
1289
(groestl-rnd1024q y outq (1- +groestl-rounds-1024+))
1292
(groestl-rnd1024p inp z 0)
1293
(loop for i of-type fixnum from 1 below (1- +groestl-rounds-1024+) by 2 do
1294
(groestl-rnd1024p z y (ash i 56))
1295
(groestl-rnd1024p y z (ash (1+ i) 56)))
1296
(groestl-rnd1024p z y (ash (1- +groestl-rounds-1024+) 56))
1298
;; h' = h + Q(m) + P(h + m)
1299
(dotimes (i +groestl-cols-1024+)
1300
(declare (type (integer 0 #.+groestl-cols-1024+) i))
1301
(setf (aref state i) (logxor (aref state i) (aref outq i) (aref y i))))
1307
;;; Digest structures and functions
1310
(defun groestl-make-initial-state (output-bit-length)
1311
(let ((state (make-array (if (<= output-bit-length 256)
1312
#.+groestl-cols-512+
1313
#.+groestl-cols-1024+)
1314
:element-type '(unsigned-byte 64)
1315
:initial-element 0)))
1316
(setf (aref state (1- (length state))) output-bit-length)
1320
(:constructor %make-groestl-digest nil)
1322
(state (groestl-make-initial-state 512)
1323
:type (simple-array (unsigned-byte 64) (*)))
1324
(block-counter 0 :type (unsigned-byte 64))
1325
(buffer (make-array #.+groestl-size-1024+ :element-type '(unsigned-byte 8))
1326
:type (simple-array (unsigned-byte 8) (*)))
1327
(buffer-index 0 :type (integer 0 #.+groestl-size-1024+)))
1329
(defstruct (groestl/384
1331
(:constructor %make-groestl/384-digest
1332
(&aux (state (groestl-make-initial-state 384))))
1335
(defstruct (groestl/256
1337
(:constructor %make-groestl/256-digest
1338
(&aux (state (groestl-make-initial-state 256))
1339
(buffer (make-array #.+groestl-size-512+
1340
:element-type '(unsigned-byte 8)))))))
1342
(defstruct (groestl/224
1344
(:constructor %make-groestl/224-digest
1345
(&aux (state (groestl-make-initial-state 224))
1346
(buffer (make-array #.+groestl-size-512+
1347
:element-type '(unsigned-byte 8)))))))
1349
(defmethod reinitialize-instance ((state groestl) &rest initargs)
1350
(declare (ignore initargs))
1351
(setf (groestl-state state) (etypecase state
1352
(groestl/224 (groestl-make-initial-state 224))
1353
(groestl/256 (groestl-make-initial-state 256))
1354
(groestl/384 (groestl-make-initial-state 384))
1355
(groestl (groestl-make-initial-state 512)))
1356
(groestl-block-counter state) 0
1357
(groestl-buffer-index state) 0)
1360
(defmethod copy-digest ((state groestl) &optional copy)
1361
(check-type copy (or null groestl))
1362
(let ((copy (if copy
1365
(groestl/224 (%make-groestl/224-digest))
1366
(groestl/256 (%make-groestl/256-digest))
1367
(groestl/384 (%make-groestl/384-digest))
1368
(groestl (%make-groestl-digest))))))
1369
(declare (type groestl copy))
1370
(replace (groestl-state copy) (groestl-state state))
1371
(replace (groestl-buffer copy) (groestl-buffer state))
1372
(setf (groestl-block-counter copy) (groestl-block-counter state)
1373
(groestl-buffer-index copy) (groestl-buffer-index state))
1376
(defun groestl-update (state input start end)
1377
(declare (type (simple-array (unsigned-byte 8) (*)) input)
1378
(type (unsigned-byte 64) start end)
1379
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1380
(let* ((groestl-state (groestl-state state))
1381
(buffer (groestl-buffer state))
1382
(buffer-index (groestl-buffer-index state))
1383
(block-counter (groestl-block-counter state))
1384
(block-size (length buffer))
1385
(transform (if (= block-size +groestl-size-512+)
1388
(length (- end start))
1390
(declare (type (simple-array (unsigned-byte 64) (*)) groestl-state)
1391
(type (simple-array (unsigned-byte 8) (*)) buffer)
1392
(type (integer 0 #.+groestl-size-1024+) block-size buffer-index n)
1393
(type (unsigned-byte 64) length))
1395
;; Try to fill the buffer with the new data
1396
(setf n (min length (- block-size buffer-index)))
1397
(replace buffer input :start1 buffer-index :start2 start :end2 (+ start n))
1398
(incf buffer-index n)
1402
;; Process data in buffer
1403
(when (= buffer-index block-size)
1404
(funcall transform groestl-state buffer 0)
1405
(setf buffer-index 0)
1406
(incf block-counter))
1408
;; Process data in message
1409
(loop until (< length block-size) do
1410
(funcall transform groestl-state input start)
1411
(incf block-counter)
1412
(incf start block-size)
1413
(decf length block-size))
1415
;; Put remaining message data in buffer
1416
(when (plusp length)
1417
(replace buffer input :end1 length :start2 start)
1418
(setf buffer-index length))
1420
;; Save the new state
1421
(setf (groestl-block-counter state) block-counter
1422
(groestl-buffer-index state) buffer-index)
1426
(defun groestl-finalize (state digest digest-start)
1427
(let* ((digest-length (digest-length state))
1428
(groestl-state (groestl-state state))
1429
(buffer (groestl-buffer state))
1430
(buffer-index (groestl-buffer-index state))
1431
(block-counter (groestl-block-counter state))
1432
(block-size (length buffer))
1433
(transform (if (= block-size +groestl-size-512+)
1436
(declare (type (simple-array (unsigned-byte 64) (*)) groestl-state)
1437
(type (simple-array (unsigned-byte 8) (*)) buffer)
1438
(type (integer 0 #.+groestl-size-1024+) block-size buffer-index)
1439
(optimize (speed 3) (space 0) (safety 0) (debug 0)))
1442
(setf (aref buffer buffer-index) #x80)
1444
(when (> buffer-index (- block-size +groestl-length-field-length+))
1445
;; Padding requires two blocks
1446
(fill buffer 0 :start buffer-index)
1447
(funcall transform groestl-state buffer 0)
1448
(incf block-counter)
1449
(setf buffer-index 0))
1450
(fill buffer 0 :start buffer-index)
1451
(setf buffer-index (- block-size +groestl-length-field-length+))
1454
(incf block-counter)
1455
(setf (ub64ref/be buffer buffer-index) block-counter)
1456
(funcall transform groestl-state buffer 0)
1458
;; Output transformation: h = P(h) + h
1459
(if (= block-size +groestl-size-512+)
1460
(let ((temp (copy-seq groestl-state))
1461
(y (make-array +groestl-cols-512+ :element-type '(unsigned-byte 64)))
1462
(z (make-array +groestl-cols-512+ :element-type '(unsigned-byte 64))))
1463
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) temp y z)
1464
(dynamic-extent temp y z))
1465
(groestl-rnd512p temp z 0)
1466
(loop for i from 1 below (1- +groestl-rounds-512+) by 2 do
1467
(groestl-rnd512p z y (ash i 56))
1468
(groestl-rnd512p y z (ash (1+ i) 56)))
1469
(groestl-rnd512p z temp (ash (1- +groestl-rounds-512+) 56))
1470
(dotimes (i +groestl-cols-512+)
1471
(setf (aref groestl-state i) (logxor (aref groestl-state i)
1473
(let ((temp (copy-seq groestl-state))
1474
(y (make-array +groestl-cols-1024+ :element-type '(unsigned-byte 64)))
1475
(z (make-array +groestl-cols-1024+ :element-type '(unsigned-byte 64))))
1476
(declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) temp y z)
1477
(dynamic-extent temp y z))
1478
(groestl-rnd1024p temp y 0)
1479
(loop for i from 1 below (1- +groestl-rounds-1024+) by 2 do
1480
(groestl-rnd1024p y z (ash i 56))
1481
(groestl-rnd1024p z y (ash (1+ i) 56)))
1482
(groestl-rnd1024p y temp (ash (1- +groestl-rounds-1024+) 56))
1483
(dotimes (i +groestl-cols-1024+)
1484
(setf (aref groestl-state i) (logxor (aref groestl-state i)
1487
;; Truncate the final hash value to generate the message digest
1488
(let ((output (make-array block-size :element-type '(unsigned-byte 8))))
1489
(dotimes (i (length groestl-state))
1490
(setf (ub64ref/be output (* i 8)) (aref groestl-state i)))
1491
(replace digest output :start1 digest-start :start2 (- block-size digest-length))
1494
(define-digest-updater groestl
1495
(groestl-update state sequence start end))
1497
(define-digest-finalizer ((groestl 64)
1501
(groestl-finalize state digest digest-start))
1503
(defdigest groestl :digest-length 64 :block-length 128)
1504
(defdigest groestl/384 :digest-length 48 :block-length 128)
1505
(defdigest groestl/256 :digest-length 32 :block-length 64)
1506
(defdigest groestl/224 :digest-length 28 :block-length 64)