43 #if SPH_SMALL_FOOTPRINT && !defined SPH_SMALL_FOOTPRINT_JH 44 #define SPH_SMALL_FOOTPRINT_JH 1 47 #if !defined SPH_JH_64 && SPH_64_TRUE 56 #pragma warning (disable: 4146) 70 #define C32e(x) ((SPH_C32(x) >> 24) \ 71 | ((SPH_C32(x) >> 8) & SPH_C32(0x0000FF00)) \ 72 | ((SPH_C32(x) << 8) & SPH_C32(0x00FF0000)) \ 73 | ((SPH_C32(x) << 24) & SPH_C32(0xFF000000))) 74 #define dec32e_aligned sph_dec32le_aligned 75 #define enc32e sph_enc32le 78 #define C64e(x) ((SPH_C64(x) >> 56) \ 79 | ((SPH_C64(x) >> 40) & SPH_C64(0x000000000000FF00)) \ 80 | ((SPH_C64(x) >> 24) & SPH_C64(0x0000000000FF0000)) \ 81 | ((SPH_C64(x) >> 8) & SPH_C64(0x00000000FF000000)) \ 82 | ((SPH_C64(x) << 8) & SPH_C64(0x000000FF00000000)) \ 83 | ((SPH_C64(x) << 24) & SPH_C64(0x0000FF0000000000)) \ 84 | ((SPH_C64(x) << 40) & SPH_C64(0x00FF000000000000)) \ 85 | ((SPH_C64(x) << 56) & SPH_C64(0xFF00000000000000))) 86 #define dec64e_aligned sph_dec64le_aligned 87 #define enc64e sph_enc64le 92 #define C32e(x) SPH_C32(x) 93 #define dec32e_aligned sph_dec32be_aligned 94 #define enc32e sph_enc32be 96 #define C64e(x) SPH_C64(x) 97 #define dec64e_aligned sph_dec64be_aligned 98 #define enc64e sph_enc64be 103 #define Sb(x0, x1, x2, x3, c) do { \ 106 tmp = (c) ^ (x0 & x1); \ 117 #define Lb(x0, x1, x2, x3, x4, x5, x6, x7) do { \ 130 static const sph_u64
C[] = {
131 C64e(0x72d5dea2df15f867), C64e(0x7b84150ab7231557),
132 C64e(0x81abd6904d5a87f6), C64e(0x4e9f4fc5c3d12b40),
133 C64e(0xea983ae05c45fa9c), C64e(0x03c5d29966b2999a),
134 C64e(0x660296b4f2bb538a), C64e(0xb556141a88dba231),
135 C64e(0x03a35a5c9a190edb), C64e(0x403fb20a87c14410),
136 C64e(0x1c051980849e951d), C64e(0x6f33ebad5ee7cddc),
137 C64e(0x10ba139202bf6b41), C64e(0xdc786515f7bb27d0),
138 C64e(0x0a2c813937aa7850), C64e(0x3f1abfd2410091d3),
139 C64e(0x422d5a0df6cc7e90), C64e(0xdd629f9c92c097ce),
140 C64e(0x185ca70bc72b44ac), C64e(0xd1df65d663c6fc23),
141 C64e(0x976e6c039ee0b81a), C64e(0x2105457e446ceca8),
142 C64e(0xeef103bb5d8e61fa), C64e(0xfd9697b294838197),
143 C64e(0x4a8e8537db03302f), C64e(0x2a678d2dfb9f6a95),
144 C64e(0x8afe7381f8b8696c), C64e(0x8ac77246c07f4214),
145 C64e(0xc5f4158fbdc75ec4), C64e(0x75446fa78f11bb80),
146 C64e(0x52de75b7aee488bc), C64e(0x82b8001e98a6a3f4),
147 C64e(0x8ef48f33a9a36315), C64e(0xaa5f5624d5b7f989),
148 C64e(0xb6f1ed207c5ae0fd), C64e(0x36cae95a06422c36),
149 C64e(0xce2935434efe983d), C64e(0x533af974739a4ba7),
150 C64e(0xd0f51f596f4e8186), C64e(0x0e9dad81afd85a9f),
151 C64e(0xa7050667ee34626a), C64e(0x8b0b28be6eb91727),
152 C64e(0x47740726c680103f), C64e(0xe0a07e6fc67e487b),
153 C64e(0x0d550aa54af8a4c0), C64e(0x91e3e79f978ef19e),
154 C64e(0x8676728150608dd4), C64e(0x7e9e5a41f3e5b062),
155 C64e(0xfc9f1fec4054207a), C64e(0xe3e41a00cef4c984),
156 C64e(0x4fd794f59dfa95d8), C64e(0x552e7e1124c354a5),
157 C64e(0x5bdf7228bdfe6e28), C64e(0x78f57fe20fa5c4b2),
158 C64e(0x05897cefee49d32e), C64e(0x447e9385eb28597f),
159 C64e(0x705f6937b324314a), C64e(0x5e8628f11dd6e465),
160 C64e(0xc71b770451b920e7), C64e(0x74fe43e823d4878a),
161 C64e(0x7d29e8a3927694f2), C64e(0xddcb7a099b30d9c1),
162 C64e(0x1d1b30fb5bdc1be0), C64e(0xda24494ff29c82bf),
163 C64e(0xa4e7ba31b470bfff), C64e(0x0d324405def8bc48),
164 C64e(0x3baefc3253bbd339), C64e(0x459fc3c1e0298ba0),
165 C64e(0xe5c905fdf7ae090f), C64e(0x947034124290f134),
166 C64e(0xa271b701e344ed95), C64e(0xe93b8e364f2f984a),
167 C64e(0x88401d63a06cf615), C64e(0x47c1444b8752afff),
168 C64e(0x7ebb4af1e20ac630), C64e(0x4670b6c5cc6e8ce6),
169 C64e(0xa4d5a456bd4fca00), C64e(0xda9d844bc83e18ae),
170 C64e(0x7357ce453064d1ad), C64e(0xe8a6ce68145c2567),
171 C64e(0xa3da8cf2cb0ee116), C64e(0x33e906589a94999a),
172 C64e(0x1f60b220c26f847b), C64e(0xd1ceac7fa0d18518),
173 C64e(0x32595ba18ddd19d3), C64e(0x509a1cc0aaa5b446),
174 C64e(0x9f3d6367e4046bba), C64e(0xf6ca19ab0b56ee7e),
175 C64e(0x1fb179eaa9282174), C64e(0xe9bdf7353b3651ee),
176 C64e(0x1d57ac5a7550d376), C64e(0x3a46c2fea37d7001),
177 C64e(0xf735c1af98a4d842), C64e(0x78edec209e6b6779),
178 C64e(0x41836315ea3adba8), C64e(0xfac33b4d32832c83),
179 C64e(0xa7403b1f1c2747f3), C64e(0x5940f034b72d769a),
180 C64e(0xe73e4e6cd2214ffd), C64e(0xb8fd8d39dc5759ef),
181 C64e(0x8d9b0c492b49ebda), C64e(0x5ba2d74968f3700d),
182 C64e(0x7d3baed07a8d5584), C64e(0xf5a5e9f0e4f88e65),
183 C64e(0xa0b8a2f436103b53), C64e(0x0ca8079e753eec5a),
184 C64e(0x9168949256e8884f), C64e(0x5bb05c55f8babc4c),
185 C64e(0xe3bb3b99f387947b), C64e(0x75daf4d6726b1c5d),
186 C64e(0x64aeac28dc34b36d), C64e(0x6c34a550b828db71),
187 C64e(0xf861e2f2108d512a), C64e(0xe3db643359dd75fc),
188 C64e(0x1cacbcf143ce3fa2), C64e(0x67bbd13c02e843b0),
189 C64e(0x330a5bca8829a175), C64e(0x7f34194db416535c),
190 C64e(0x923b94c30e794d1e), C64e(0x797475d7b6eeaf3f),
191 C64e(0xeaa8d4f7be1a3921), C64e(0x5cf47e094c232751),
192 C64e(0x26a32453ba323cd2), C64e(0x44a3174a6da6d5ad),
193 C64e(0xb51d3ea6aff2c908), C64e(0x83593d98916b3c56),
194 C64e(0x4cf87ca17286604d), C64e(0x46e23ecc086ec7f6),
195 C64e(0x2f9833b3b1bc765e), C64e(0x2bd666a5efc4e62a),
196 C64e(0x06f4b6e8bec1d436), C64e(0x74ee8215bcef2163),
197 C64e(0xfdc14e0df453c969), C64e(0xa77d5ac406585826),
198 C64e(0x7ec1141606e0fa16), C64e(0x7e90af3d28639d3f),
199 C64e(0xd2c9f2e3009bd20c), C64e(0x5faace30b7d40c30),
200 C64e(0x742a5116f2e03298), C64e(0x0deb30d8e3cef89a),
201 C64e(0x4bc59e7bb5f17992), C64e(0xff51e66e048668d3),
202 C64e(0x9b234d57e6966731), C64e(0xcce6a6f3170a7505),
203 C64e(0xb17681d913326cce), C64e(0x3c175284f805a262),
204 C64e(0xf42bcbb378471547), C64e(0xff46548223936a48),
205 C64e(0x38df58074e5e6565), C64e(0xf2fc7c89fc86508e),
206 C64e(0x31702e44d00bca86), C64e(0xf04009a23078474e),
207 C64e(0x65a0ee39d1f73883), C64e(0xf75ee937e42c3abd),
208 C64e(0x2197b2260113f86f), C64e(0xa344edd1ef9fdee7),
209 C64e(0x8ba0df15762592d9), C64e(0x3c85f7f612dc42be),
210 C64e(0xd8a7ec7cab27b07e), C64e(0x538d7ddaaa3ea8de),
211 C64e(0xaa25ce93bd0269d8), C64e(0x5af643fd1a7308f9),
212 C64e(0xc05fefda174a19a5), C64e(0x974d66334cfd216a),
213 C64e(0x35b49831db411570), C64e(0xea1e0fbbedcd549b),
214 C64e(0x9ad063a151974072), C64e(0xf6759dbf91476fe2)
217 #define Ceven_hi(r) (C[((r) << 2) + 0]) 218 #define Ceven_lo(r) (C[((r) << 2) + 1]) 219 #define Codd_hi(r) (C[((r) << 2) + 2]) 220 #define Codd_lo(r) (C[((r) << 2) + 3]) 222 #define S(x0, x1, x2, x3, cb, r) do { \ 223 Sb(x0 ## h, x1 ## h, x2 ## h, x3 ## h, cb ## hi(r)); \ 224 Sb(x0 ## l, x1 ## l, x2 ## l, x3 ## l, cb ## lo(r)); \ 227 #define L(x0, x1, x2, x3, x4, x5, x6, x7) do { \ 228 Lb(x0 ## h, x1 ## h, x2 ## h, x3 ## h, \ 229 x4 ## h, x5 ## h, x6 ## h, x7 ## h); \ 230 Lb(x0 ## l, x1 ## l, x2 ## l, x3 ## l, \ 231 x4 ## l, x5 ## l, x6 ## l, x7 ## l); \ 234 #define Wz(x, c, n) do { \ 235 sph_u64 t = (x ## h & (c)) << (n); \ 236 x ## h = ((x ## h >> (n)) & (c)) | t; \ 237 t = (x ## l & (c)) << (n); \ 238 x ## l = ((x ## l >> (n)) & (c)) | t; \ 241 #define W0(x) Wz(x, SPH_C64(0x5555555555555555), 1) 242 #define W1(x) Wz(x, SPH_C64(0x3333333333333333), 2) 243 #define W2(x) Wz(x, SPH_C64(0x0F0F0F0F0F0F0F0F), 4) 244 #define W3(x) Wz(x, SPH_C64(0x00FF00FF00FF00FF), 8) 245 #define W4(x) Wz(x, SPH_C64(0x0000FFFF0000FFFF), 16) 246 #define W5(x) Wz(x, SPH_C64(0x00000000FFFFFFFF), 32) 248 sph_u64 t = x ## h; \ 254 sph_u64 h0h, h1h, h2h, h3h, h4h, h5h, h6h, h7h; \ 255 sph_u64 h0l, h1l, h2l, h3l, h4l, h5l, h6l, h7l; \ 258 #define READ_STATE(state) do { \ 259 h0h = (state)->H.wide[ 0]; \ 260 h0l = (state)->H.wide[ 1]; \ 261 h1h = (state)->H.wide[ 2]; \ 262 h1l = (state)->H.wide[ 3]; \ 263 h2h = (state)->H.wide[ 4]; \ 264 h2l = (state)->H.wide[ 5]; \ 265 h3h = (state)->H.wide[ 6]; \ 266 h3l = (state)->H.wide[ 7]; \ 267 h4h = (state)->H.wide[ 8]; \ 268 h4l = (state)->H.wide[ 9]; \ 269 h5h = (state)->H.wide[10]; \ 270 h5l = (state)->H.wide[11]; \ 271 h6h = (state)->H.wide[12]; \ 272 h6l = (state)->H.wide[13]; \ 273 h7h = (state)->H.wide[14]; \ 274 h7l = (state)->H.wide[15]; \ 277 #define WRITE_STATE(state) do { \ 278 (state)->H.wide[ 0] = h0h; \ 279 (state)->H.wide[ 1] = h0l; \ 280 (state)->H.wide[ 2] = h1h; \ 281 (state)->H.wide[ 3] = h1l; \ 282 (state)->H.wide[ 4] = h2h; \ 283 (state)->H.wide[ 5] = h2l; \ 284 (state)->H.wide[ 6] = h3h; \ 285 (state)->H.wide[ 7] = h3l; \ 286 (state)->H.wide[ 8] = h4h; \ 287 (state)->H.wide[ 9] = h4l; \ 288 (state)->H.wide[10] = h5h; \ 289 (state)->H.wide[11] = h5l; \ 290 (state)->H.wide[12] = h6h; \ 291 (state)->H.wide[13] = h6l; \ 292 (state)->H.wide[14] = h7h; \ 293 (state)->H.wide[15] = h7l; \ 297 sph_u64 m0h = dec64e_aligned(buf + 0); \ 298 sph_u64 m0l = dec64e_aligned(buf + 8); \ 299 sph_u64 m1h = dec64e_aligned(buf + 16); \ 300 sph_u64 m1l = dec64e_aligned(buf + 24); \ 301 sph_u64 m2h = dec64e_aligned(buf + 32); \ 302 sph_u64 m2l = dec64e_aligned(buf + 40); \ 303 sph_u64 m3h = dec64e_aligned(buf + 48); \ 304 sph_u64 m3l = dec64e_aligned(buf + 56); \ 324 static const sph_u64
IV224[] = {
325 C64e(0x2dfedd62f99a98ac), C64e(0xae7cacd619d634e7),
326 C64e(0xa4831005bc301216), C64e(0xb86038c6c9661494),
327 C64e(0x66d9899f2580706f), C64e(0xce9ea31b1d9b1adc),
328 C64e(0x11e8325f7b366e10), C64e(0xf994857f02fa06c1),
329 C64e(0x1b4f1b5cd8c840b3), C64e(0x97f6a17f6e738099),
330 C64e(0xdcdf93a5adeaa3d3), C64e(0xa431e8dec9539a68),
331 C64e(0x22b4a98aec86a1e4), C64e(0xd574ac959ce56cf0),
332 C64e(0x15960deab5ab2bbf), C64e(0x9611dcf0dd64ea6e)
335 static const sph_u64
IV256[] = {
336 C64e(0xeb98a3412c20d3eb), C64e(0x92cdbe7b9cb245c1),
337 C64e(0x1c93519160d4c7fa), C64e(0x260082d67e508a03),
338 C64e(0xa4239e267726b945), C64e(0xe0fb1a48d41a9477),
339 C64e(0xcdb5ab26026b177a), C64e(0x56f024420fff2fa8),
340 C64e(0x71a396897f2e4d75), C64e(0x1d144908f77de262),
341 C64e(0x277695f776248f94), C64e(0x87d5b6574780296c),
342 C64e(0x5c5e272dac8e0d6c), C64e(0x518450c657057a0f),
343 C64e(0x7be4d367702412ea), C64e(0x89e3ab13d31cd769)
346 static const sph_u64
IV384[] = {
347 C64e(0x481e3bc6d813398a), C64e(0x6d3b5e894ade879b),
348 C64e(0x63faea68d480ad2e), C64e(0x332ccb21480f8267),
349 C64e(0x98aec84d9082b928), C64e(0xd455ea3041114249),
350 C64e(0x36f555b2924847ec), C64e(0xc7250a93baf43ce1),
351 C64e(0x569b7f8a27db454c), C64e(0x9efcbd496397af0e),
352 C64e(0x589fc27d26aa80cd), C64e(0x80c08b8c9deb2eda),
353 C64e(0x8a7981e8f8d5373a), C64e(0xf43967adddd17a71),
354 C64e(0xa9b4d3bda475d394), C64e(0x976c3fba9842737f)
357 static const sph_u64
IV512[] = {
358 C64e(0x6fd14b963e00aa17), C64e(0x636a2e057a15d543),
359 C64e(0x8a225e8d0c97ef0b), C64e(0xe9341259f2b3c361),
360 C64e(0x891da0c1536f801e), C64e(0x2aa9056bea2b6d80),
361 C64e(0x588eccdb2075baa6), C64e(0xa90f3a76baf83bf7),
362 C64e(0x0169e60541e34a69), C64e(0x46b58a8e2e6fe65a),
363 C64e(0x1047a7d0c1843c24), C64e(0x3b6e71b12d5ac199),
364 C64e(0xcf57f6ec9db1f856), C64e(0xa706887c5716b156),
365 C64e(0xe3c2fcdfe68517fb), C64e(0x545a4678cc8cdd4b)
485 #define Ceven_w3(r) (C[((r) << 3) + 0]) 486 #define Ceven_w2(r) (C[((r) << 3) + 1]) 487 #define Ceven_w1(r) (C[((r) << 3) + 2]) 488 #define Ceven_w0(r) (C[((r) << 3) + 3]) 489 #define Codd_w3(r) (C[((r) << 3) + 4]) 490 #define Codd_w2(r) (C[((r) << 3) + 5]) 491 #define Codd_w1(r) (C[((r) << 3) + 6]) 492 #define Codd_w0(r) (C[((r) << 3) + 7]) 494 #define S(x0, x1, x2, x3, cb, r) do { \ 495 Sb(x0 ## 3, x1 ## 3, x2 ## 3, x3 ## 3, cb ## w3(r)); \ 496 Sb(x0 ## 2, x1 ## 2, x2 ## 2, x3 ## 2, cb ## w2(r)); \ 497 Sb(x0 ## 1, x1 ## 1, x2 ## 1, x3 ## 1, cb ## w1(r)); \ 498 Sb(x0 ## 0, x1 ## 0, x2 ## 0, x3 ## 0, cb ## w0(r)); \ 501 #define L(x0, x1, x2, x3, x4, x5, x6, x7) do { \ 502 Lb(x0 ## 3, x1 ## 3, x2 ## 3, x3 ## 3, \ 503 x4 ## 3, x5 ## 3, x6 ## 3, x7 ## 3); \ 504 Lb(x0 ## 2, x1 ## 2, x2 ## 2, x3 ## 2, \ 505 x4 ## 2, x5 ## 2, x6 ## 2, x7 ## 2); \ 506 Lb(x0 ## 1, x1 ## 1, x2 ## 1, x3 ## 1, \ 507 x4 ## 1, x5 ## 1, x6 ## 1, x7 ## 1); \ 508 Lb(x0 ## 0, x1 ## 0, x2 ## 0, x3 ## 0, \ 509 x4 ## 0, x5 ## 0, x6 ## 0, x7 ## 0); \ 512 #define Wz(x, c, n) do { \ 513 sph_u32 t = (x ## 3 & (c)) << (n); \ 514 x ## 3 = ((x ## 3 >> (n)) & (c)) | t; \ 515 t = (x ## 2 & (c)) << (n); \ 516 x ## 2 = ((x ## 2 >> (n)) & (c)) | t; \ 517 t = (x ## 1 & (c)) << (n); \ 518 x ## 1 = ((x ## 1 >> (n)) & (c)) | t; \ 519 t = (x ## 0 & (c)) << (n); \ 520 x ## 0 = ((x ## 0 >> (n)) & (c)) | t; \ 523 #define W0(x) Wz(x, SPH_C32(0x55555555), 1) 524 #define W1(x) Wz(x, SPH_C32(0x33333333), 2) 525 #define W2(x) Wz(x, SPH_C32(0x0F0F0F0F), 4) 526 #define W3(x) Wz(x, SPH_C32(0x00FF00FF), 8) 527 #define W4(x) Wz(x, SPH_C32(0x0000FFFF), 16) 529 sph_u32 t = x ## 3; \ 537 sph_u32 t = x ## 3; \ 546 sph_u32 h03, h02, h01, h00, h13, h12, h11, h10; \ 547 sph_u32 h23, h22, h21, h20, h33, h32, h31, h30; \ 548 sph_u32 h43, h42, h41, h40, h53, h52, h51, h50; \ 549 sph_u32 h63, h62, h61, h60, h73, h72, h71, h70; \ 552 #define READ_STATE(state) do { \ 553 h03 = (state)->H.narrow[ 0]; \ 554 h02 = (state)->H.narrow[ 1]; \ 555 h01 = (state)->H.narrow[ 2]; \ 556 h00 = (state)->H.narrow[ 3]; \ 557 h13 = (state)->H.narrow[ 4]; \ 558 h12 = (state)->H.narrow[ 5]; \ 559 h11 = (state)->H.narrow[ 6]; \ 560 h10 = (state)->H.narrow[ 7]; \ 561 h23 = (state)->H.narrow[ 8]; \ 562 h22 = (state)->H.narrow[ 9]; \ 563 h21 = (state)->H.narrow[10]; \ 564 h20 = (state)->H.narrow[11]; \ 565 h33 = (state)->H.narrow[12]; \ 566 h32 = (state)->H.narrow[13]; \ 567 h31 = (state)->H.narrow[14]; \ 568 h30 = (state)->H.narrow[15]; \ 569 h43 = (state)->H.narrow[16]; \ 570 h42 = (state)->H.narrow[17]; \ 571 h41 = (state)->H.narrow[18]; \ 572 h40 = (state)->H.narrow[19]; \ 573 h53 = (state)->H.narrow[20]; \ 574 h52 = (state)->H.narrow[21]; \ 575 h51 = (state)->H.narrow[22]; \ 576 h50 = (state)->H.narrow[23]; \ 577 h63 = (state)->H.narrow[24]; \ 578 h62 = (state)->H.narrow[25]; \ 579 h61 = (state)->H.narrow[26]; \ 580 h60 = (state)->H.narrow[27]; \ 581 h73 = (state)->H.narrow[28]; \ 582 h72 = (state)->H.narrow[29]; \ 583 h71 = (state)->H.narrow[30]; \ 584 h70 = (state)->H.narrow[31]; \ 587 #define WRITE_STATE(state) do { \ 588 (state)->H.narrow[ 0] = h03; \ 589 (state)->H.narrow[ 1] = h02; \ 590 (state)->H.narrow[ 2] = h01; \ 591 (state)->H.narrow[ 3] = h00; \ 592 (state)->H.narrow[ 4] = h13; \ 593 (state)->H.narrow[ 5] = h12; \ 594 (state)->H.narrow[ 6] = h11; \ 595 (state)->H.narrow[ 7] = h10; \ 596 (state)->H.narrow[ 8] = h23; \ 597 (state)->H.narrow[ 9] = h22; \ 598 (state)->H.narrow[10] = h21; \ 599 (state)->H.narrow[11] = h20; \ 600 (state)->H.narrow[12] = h33; \ 601 (state)->H.narrow[13] = h32; \ 602 (state)->H.narrow[14] = h31; \ 603 (state)->H.narrow[15] = h30; \ 604 (state)->H.narrow[16] = h43; \ 605 (state)->H.narrow[17] = h42; \ 606 (state)->H.narrow[18] = h41; \ 607 (state)->H.narrow[19] = h40; \ 608 (state)->H.narrow[20] = h53; \ 609 (state)->H.narrow[21] = h52; \ 610 (state)->H.narrow[22] = h51; \ 611 (state)->H.narrow[23] = h50; \ 612 (state)->H.narrow[24] = h63; \ 613 (state)->H.narrow[25] = h62; \ 614 (state)->H.narrow[26] = h61; \ 615 (state)->H.narrow[27] = h60; \ 616 (state)->H.narrow[28] = h73; \ 617 (state)->H.narrow[29] = h72; \ 618 (state)->H.narrow[30] = h71; \ 619 (state)->H.narrow[31] = h70; \ 623 sph_u32 m03 = dec32e_aligned(buf + 0); \ 624 sph_u32 m02 = dec32e_aligned(buf + 4); \ 625 sph_u32 m01 = dec32e_aligned(buf + 8); \ 626 sph_u32 m00 = dec32e_aligned(buf + 12); \ 627 sph_u32 m13 = dec32e_aligned(buf + 16); \ 628 sph_u32 m12 = dec32e_aligned(buf + 20); \ 629 sph_u32 m11 = dec32e_aligned(buf + 24); \ 630 sph_u32 m10 = dec32e_aligned(buf + 28); \ 631 sph_u32 m23 = dec32e_aligned(buf + 32); \ 632 sph_u32 m22 = dec32e_aligned(buf + 36); \ 633 sph_u32 m21 = dec32e_aligned(buf + 40); \ 634 sph_u32 m20 = dec32e_aligned(buf + 44); \ 635 sph_u32 m33 = dec32e_aligned(buf + 48); \ 636 sph_u32 m32 = dec32e_aligned(buf + 52); \ 637 sph_u32 m31 = dec32e_aligned(buf + 56); \ 638 sph_u32 m30 = dec32e_aligned(buf + 60); \ 720 #define SL(ro) SLu(r + ro, ro) 722 #define SLu(r, ro) do { \ 723 S(h0, h2, h4, h6, Ceven_, r); \ 724 S(h1, h3, h5, h7, Codd_, r); \ 725 L(h0, h2, h4, h6, h1, h3, h5, h7); \ 732 #if SPH_SMALL_FOOTPRINT_JH 743 for (r = 0; r < 42; r += 7) { \ 758 for (r = g = 0; r < 42; r ++) { \ 759 S(h0, h2, h4, h6, Ceven_, r); \ 760 S(h1, h3, h5, h7, Codd_, r); \ 761 L(h0, h2, h4, h6, h1, h3, h5, h7); \ 876 for (r = 0; r < 42; r += 7) { \ 896 memcpy(sc->
H.wide, iv,
sizeof sc->
H.wide);
917 if (len < (
sizeof sc->
buf) - ptr) {
918 memcpy(buf + ptr, data, len);
928 clen = (
sizeof sc->
buf) - ptr;
931 memcpy(buf + ptr, data, clen);
933 data = (
const unsigned char *)data + clen;
935 if (ptr ==
sizeof sc->
buf) {
955 void *dst,
size_t out_size_w32,
const void *iv)
958 unsigned char buf[128];
967 buf[0] = ((ub & -z) | z) & 0xFF;
968 if (sc->
ptr == 0 && n == 0) {
971 numz = 111 - sc->
ptr;
973 memset(buf + 1, 0, numz);
975 l0 = SPH_T64(sc->block_count << 9) + (sc->
ptr << 3) + n;
976 l1 = SPH_T64(sc->block_count >> 55);
977 sph_enc64be(buf + numz + 1, l1);
978 sph_enc64be(buf + numz + 9, l0);
992 for (u = 0; u < 8; u ++)
993 enc64e(buf + (u << 3), sc->
H.wide[u + 8]);
995 for (u = 0; u < 16; u ++)
998 memcpy(dst, buf + ((16 - out_size_w32) << 2), out_size_w32 << 2);
static void jh_core(sph_jh_context *sc, const void *data, size_t len)
void sph_jh224_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
Add a few additional bits (0 to 7) to the current computation, then terminate it and output the resul...
static void jh_init(sph_jh_context *sc, const void *iv)
static const sph_u32 IV512[]
static const sph_u32 IV224[]
void sph_jh256(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_jh512_init(void *cc)
Initialize a JH-512 context.
#define READ_STATE(state)
void sph_jh256_close(void *cc, void *dst)
Terminate the current JH-256 computation and output the result into the provided buffer.
void sph_jh384_close(void *cc, void *dst)
Terminate the current JH-384 computation and output the result into the provided buffer.
void sph_jh256_init(void *cc)
Initialize a JH-256 context.
void sph_jh512_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
Add a few additional bits (0 to 7) to the current computation, then terminate it and output the resul...
void sph_jh384_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
Add a few additional bits (0 to 7) to the current computation, then terminate it and output the resul...
union sph_jh_context::@5 H
void sph_jh224_init(void *cc)
Initialize a JH-224 context.
void sph_jh512_close(void *cc, void *dst)
Terminate the current JH-512 computation and output the result into the provided buffer.
#define WRITE_STATE(state)
static SPH_INLINE void sph_enc32be(void *dst, sph_u32 val)
Encode a 32-bit value into the provided buffer (big endian convention).
void sph_jh384_init(void *cc)
Initialize a JH-384 context.
void * memcpy(void *a, const void *b, size_t c)
static const sph_u32 IV256[]
This structure is a context for JH computations: it contains the intermediate values and some data fr...
static const sph_u32 IV384[]
void sph_jh256_addbits_and_close(void *cc, unsigned ub, unsigned n, void *dst)
Add a few additional bits (0 to 7) to the current computation, then terminate it and output the resul...
void sph_jh512(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_jh224(void *cc, const void *data, size_t len)
Process some data bytes.
static void jh_close(sph_jh_context *sc, unsigned ub, unsigned n, void *dst, size_t out_size_w32, const void *iv)
void sph_jh384(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_jh224_close(void *cc, void *dst)
Terminate the current JH-224 computation and output the result into the provided buffer.