42 #pragma warning (disable: 4146) 67 sph_u32 A00, A01, A02, A03, A04, A05, A06, A07, \ 69 sph_u32 B0, B1, B2, B3, B4, B5, B6, B7, \ 70 B8, B9, BA, BB, BC, BD, BE, BF; \ 71 sph_u32 C0, C1, C2, C3, C4, C5, C6, C7, \ 72 C8, C9, CA, CB, CC, CD, CE, CF; \ 73 sph_u32 M0, M1, M2, M3, M4, M5, M6, M7, \ 74 M8, M9, MA, MB, MC, MD, ME, MF; \ 77 #define READ_STATE(state) do { \ 78 A00 = (state)->A[0]; \ 79 A01 = (state)->A[1]; \ 80 A02 = (state)->A[2]; \ 81 A03 = (state)->A[3]; \ 82 A04 = (state)->A[4]; \ 83 A05 = (state)->A[5]; \ 84 A06 = (state)->A[6]; \ 85 A07 = (state)->A[7]; \ 86 A08 = (state)->A[8]; \ 87 A09 = (state)->A[9]; \ 88 A0A = (state)->A[10]; \ 89 A0B = (state)->A[11]; \ 100 BA = (state)->B[10]; \ 101 BB = (state)->B[11]; \ 102 BC = (state)->B[12]; \ 103 BD = (state)->B[13]; \ 104 BE = (state)->B[14]; \ 105 BF = (state)->B[15]; \ 106 C0 = (state)->C[0]; \ 107 C1 = (state)->C[1]; \ 108 C2 = (state)->C[2]; \ 109 C3 = (state)->C[3]; \ 110 C4 = (state)->C[4]; \ 111 C5 = (state)->C[5]; \ 112 C6 = (state)->C[6]; \ 113 C7 = (state)->C[7]; \ 114 C8 = (state)->C[8]; \ 115 C9 = (state)->C[9]; \ 116 CA = (state)->C[10]; \ 117 CB = (state)->C[11]; \ 118 CC = (state)->C[12]; \ 119 CD = (state)->C[13]; \ 120 CE = (state)->C[14]; \ 121 CF = (state)->C[15]; \ 122 Wlow = (state)->Wlow; \ 123 Whigh = (state)->Whigh; \ 126 #define WRITE_STATE(state) do { \ 127 (state)->A[0] = A00; \ 128 (state)->A[1] = A01; \ 129 (state)->A[2] = A02; \ 130 (state)->A[3] = A03; \ 131 (state)->A[4] = A04; \ 132 (state)->A[5] = A05; \ 133 (state)->A[6] = A06; \ 134 (state)->A[7] = A07; \ 135 (state)->A[8] = A08; \ 136 (state)->A[9] = A09; \ 137 (state)->A[10] = A0A; \ 138 (state)->A[11] = A0B; \ 139 (state)->B[0] = B0; \ 140 (state)->B[1] = B1; \ 141 (state)->B[2] = B2; \ 142 (state)->B[3] = B3; \ 143 (state)->B[4] = B4; \ 144 (state)->B[5] = B5; \ 145 (state)->B[6] = B6; \ 146 (state)->B[7] = B7; \ 147 (state)->B[8] = B8; \ 148 (state)->B[9] = B9; \ 149 (state)->B[10] = BA; \ 150 (state)->B[11] = BB; \ 151 (state)->B[12] = BC; \ 152 (state)->B[13] = BD; \ 153 (state)->B[14] = BE; \ 154 (state)->B[15] = BF; \ 155 (state)->C[0] = C0; \ 156 (state)->C[1] = C1; \ 157 (state)->C[2] = C2; \ 158 (state)->C[3] = C3; \ 159 (state)->C[4] = C4; \ 160 (state)->C[5] = C5; \ 161 (state)->C[6] = C6; \ 162 (state)->C[7] = C7; \ 163 (state)->C[8] = C8; \ 164 (state)->C[9] = C9; \ 165 (state)->C[10] = CA; \ 166 (state)->C[11] = CB; \ 167 (state)->C[12] = CC; \ 168 (state)->C[13] = CD; \ 169 (state)->C[14] = CE; \ 170 (state)->C[15] = CF; \ 171 (state)->Wlow = Wlow; \ 172 (state)->Whigh = Whigh; \ 175 #define DECODE_BLOCK do { \ 176 M0 = sph_dec32le_aligned(buf + 0); \ 177 M1 = sph_dec32le_aligned(buf + 4); \ 178 M2 = sph_dec32le_aligned(buf + 8); \ 179 M3 = sph_dec32le_aligned(buf + 12); \ 180 M4 = sph_dec32le_aligned(buf + 16); \ 181 M5 = sph_dec32le_aligned(buf + 20); \ 182 M6 = sph_dec32le_aligned(buf + 24); \ 183 M7 = sph_dec32le_aligned(buf + 28); \ 184 M8 = sph_dec32le_aligned(buf + 32); \ 185 M9 = sph_dec32le_aligned(buf + 36); \ 186 MA = sph_dec32le_aligned(buf + 40); \ 187 MB = sph_dec32le_aligned(buf + 44); \ 188 MC = sph_dec32le_aligned(buf + 48); \ 189 MD = sph_dec32le_aligned(buf + 52); \ 190 ME = sph_dec32le_aligned(buf + 56); \ 191 MF = sph_dec32le_aligned(buf + 60); \ 194 #define INPUT_BLOCK_ADD do { \ 213 #define INPUT_BLOCK_SUB do { \ 237 #define SWAP(v1, v2) do { \ 238 sph_u32 tmp = (v1); \ 243 #define SWAP_BC do { \ 262 #define PERM_ELT(xa0, xa1, xb0, xb1, xb2, xb3, xc, xm) do { \ 264 ^ (((xa1 << 15) | (xa1 >> 17)) * 5U) \ 266 ^ xb1 ^ (xb2 & ~xb3) ^ xm; \ 267 xb0 = T32(~(((xb0 << 1) | (xb0 >> 31)) ^ xa0)); \ 270 #define PERM_STEP_0 do { \ 271 PERM_ELT(A00, A0B, B0, BD, B9, B6, C8, M0); \ 272 PERM_ELT(A01, A00, B1, BE, BA, B7, C7, M1); \ 273 PERM_ELT(A02, A01, B2, BF, BB, B8, C6, M2); \ 274 PERM_ELT(A03, A02, B3, B0, BC, B9, C5, M3); \ 275 PERM_ELT(A04, A03, B4, B1, BD, BA, C4, M4); \ 276 PERM_ELT(A05, A04, B5, B2, BE, BB, C3, M5); \ 277 PERM_ELT(A06, A05, B6, B3, BF, BC, C2, M6); \ 278 PERM_ELT(A07, A06, B7, B4, B0, BD, C1, M7); \ 279 PERM_ELT(A08, A07, B8, B5, B1, BE, C0, M8); \ 280 PERM_ELT(A09, A08, B9, B6, B2, BF, CF, M9); \ 281 PERM_ELT(A0A, A09, BA, B7, B3, B0, CE, MA); \ 282 PERM_ELT(A0B, A0A, BB, B8, B4, B1, CD, MB); \ 283 PERM_ELT(A00, A0B, BC, B9, B5, B2, CC, MC); \ 284 PERM_ELT(A01, A00, BD, BA, B6, B3, CB, MD); \ 285 PERM_ELT(A02, A01, BE, BB, B7, B4, CA, ME); \ 286 PERM_ELT(A03, A02, BF, BC, B8, B5, C9, MF); \ 289 #define PERM_STEP_1 do { \ 290 PERM_ELT(A04, A03, B0, BD, B9, B6, C8, M0); \ 291 PERM_ELT(A05, A04, B1, BE, BA, B7, C7, M1); \ 292 PERM_ELT(A06, A05, B2, BF, BB, B8, C6, M2); \ 293 PERM_ELT(A07, A06, B3, B0, BC, B9, C5, M3); \ 294 PERM_ELT(A08, A07, B4, B1, BD, BA, C4, M4); \ 295 PERM_ELT(A09, A08, B5, B2, BE, BB, C3, M5); \ 296 PERM_ELT(A0A, A09, B6, B3, BF, BC, C2, M6); \ 297 PERM_ELT(A0B, A0A, B7, B4, B0, BD, C1, M7); \ 298 PERM_ELT(A00, A0B, B8, B5, B1, BE, C0, M8); \ 299 PERM_ELT(A01, A00, B9, B6, B2, BF, CF, M9); \ 300 PERM_ELT(A02, A01, BA, B7, B3, B0, CE, MA); \ 301 PERM_ELT(A03, A02, BB, B8, B4, B1, CD, MB); \ 302 PERM_ELT(A04, A03, BC, B9, B5, B2, CC, MC); \ 303 PERM_ELT(A05, A04, BD, BA, B6, B3, CB, MD); \ 304 PERM_ELT(A06, A05, BE, BB, B7, B4, CA, ME); \ 305 PERM_ELT(A07, A06, BF, BC, B8, B5, C9, MF); \ 308 #define PERM_STEP_2 do { \ 309 PERM_ELT(A08, A07, B0, BD, B9, B6, C8, M0); \ 310 PERM_ELT(A09, A08, B1, BE, BA, B7, C7, M1); \ 311 PERM_ELT(A0A, A09, B2, BF, BB, B8, C6, M2); \ 312 PERM_ELT(A0B, A0A, B3, B0, BC, B9, C5, M3); \ 313 PERM_ELT(A00, A0B, B4, B1, BD, BA, C4, M4); \ 314 PERM_ELT(A01, A00, B5, B2, BE, BB, C3, M5); \ 315 PERM_ELT(A02, A01, B6, B3, BF, BC, C2, M6); \ 316 PERM_ELT(A03, A02, B7, B4, B0, BD, C1, M7); \ 317 PERM_ELT(A04, A03, B8, B5, B1, BE, C0, M8); \ 318 PERM_ELT(A05, A04, B9, B6, B2, BF, CF, M9); \ 319 PERM_ELT(A06, A05, BA, B7, B3, B0, CE, MA); \ 320 PERM_ELT(A07, A06, BB, B8, B4, B1, CD, MB); \ 321 PERM_ELT(A08, A07, BC, B9, B5, B2, CC, MC); \ 322 PERM_ELT(A09, A08, BD, BA, B6, B3, CB, MD); \ 323 PERM_ELT(A0A, A09, BE, BB, B7, B4, CA, ME); \ 324 PERM_ELT(A0B, A0A, BF, BC, B8, B5, C9, MF); \ 327 #define APPLY_P do { \ 328 B0 = T32(B0 << 17) | (B0 >> 15); \ 329 B1 = T32(B1 << 17) | (B1 >> 15); \ 330 B2 = T32(B2 << 17) | (B2 >> 15); \ 331 B3 = T32(B3 << 17) | (B3 >> 15); \ 332 B4 = T32(B4 << 17) | (B4 >> 15); \ 333 B5 = T32(B5 << 17) | (B5 >> 15); \ 334 B6 = T32(B6 << 17) | (B6 >> 15); \ 335 B7 = T32(B7 << 17) | (B7 >> 15); \ 336 B8 = T32(B8 << 17) | (B8 >> 15); \ 337 B9 = T32(B9 << 17) | (B9 >> 15); \ 338 BA = T32(BA << 17) | (BA >> 15); \ 339 BB = T32(BB << 17) | (BB >> 15); \ 340 BC = T32(BC << 17) | (BC >> 15); \ 341 BD = T32(BD << 17) | (BD >> 15); \ 342 BE = T32(BE << 17) | (BE >> 15); \ 343 BF = T32(BF << 17) | (BF >> 15); \ 347 A0B = T32(A0B + C6); \ 348 A0A = T32(A0A + C5); \ 349 A09 = T32(A09 + C4); \ 350 A08 = T32(A08 + C3); \ 351 A07 = T32(A07 + C2); \ 352 A06 = T32(A06 + C1); \ 353 A05 = T32(A05 + C0); \ 354 A04 = T32(A04 + CF); \ 355 A03 = T32(A03 + CE); \ 356 A02 = T32(A02 + CD); \ 357 A01 = T32(A01 + CC); \ 358 A00 = T32(A00 + CB); \ 359 A0B = T32(A0B + CA); \ 360 A0A = T32(A0A + C9); \ 361 A09 = T32(A09 + C8); \ 362 A08 = T32(A08 + C7); \ 363 A07 = T32(A07 + C6); \ 364 A06 = T32(A06 + C5); \ 365 A05 = T32(A05 + C4); \ 366 A04 = T32(A04 + C3); \ 367 A03 = T32(A03 + C2); \ 368 A02 = T32(A02 + C1); \ 369 A01 = T32(A01 + C0); \ 370 A00 = T32(A00 + CF); \ 371 A0B = T32(A0B + CE); \ 372 A0A = T32(A0A + CD); \ 373 A09 = T32(A09 + CC); \ 374 A08 = T32(A08 + CB); \ 375 A07 = T32(A07 + CA); \ 376 A06 = T32(A06 + C9); \ 377 A05 = T32(A05 + C8); \ 378 A04 = T32(A04 + C7); \ 379 A03 = T32(A03 + C6); \ 380 A02 = T32(A02 + C5); \ 381 A01 = T32(A01 + C4); \ 382 A00 = T32(A00 + C3); \ 385 #define INCR_W do { \ 386 if ((Wlow = T32(Wlow + 1)) == 0) \ 387 Whigh = T32(Whigh + 1); \ 390 static const sph_u32 A_init_192[] = {
391 C32(0xFD749ED4),
C32(0xB798E530),
C32(0x33904B6F),
C32(0x46BDA85E),
392 C32(0x076934B4),
C32(0x454B4058),
C32(0x77F74527),
C32(0xFB4CF465),
393 C32(0x62931DA9),
C32(0xE778C8DB),
C32(0x22B3998E),
C32(0xAC15CFB9)
396 static const sph_u32 B_init_192[] = {
397 C32(0x58BCBAC4),
C32(0xEC47A08E),
C32(0xAEE933B2),
C32(0xDFCBC824),
398 C32(0xA7944804),
C32(0xBF65BDB0),
C32(0x5A9D4502),
C32(0x59979AF7),
399 C32(0xC5CEA54E),
C32(0x4B6B8150),
C32(0x16E71909),
C32(0x7D632319),
400 C32(0x930573A0),
C32(0xF34C63D1),
C32(0xCAF914B4),
C32(0xFDD6612C)
403 static const sph_u32 C_init_192[] = {
404 C32(0x61550878),
C32(0x89EF2B75),
C32(0xA1660C46),
C32(0x7EF3855B),
405 C32(0x7297B58C),
C32(0x1BC67793),
C32(0x7FB1C723),
C32(0xB66FC640),
406 C32(0x1A48B71C),
C32(0xF0976D17),
C32(0x088CE80A),
C32(0xA454EDF3),
407 C32(0x1C096BF4),
C32(0xAC76224B),
C32(0x5215781C),
C32(0xCD5D2669)
410 static const sph_u32 A_init_224[] = {
411 C32(0xA5201467),
C32(0xA9B8D94A),
C32(0xD4CED997),
C32(0x68379D7B),
412 C32(0xA7FC73BA),
C32(0xF1A2546B),
C32(0x606782BF),
C32(0xE0BCFD0F),
413 C32(0x2F25374E),
C32(0x069A149F),
C32(0x5E2DFF25),
C32(0xFAECF061)
416 static const sph_u32 B_init_224[] = {
417 C32(0xEC9905D8),
C32(0xF21850CF),
C32(0xC0A746C8),
C32(0x21DAD498),
418 C32(0x35156EEB),
C32(0x088C97F2),
C32(0x26303E40),
C32(0x8A2D4FB5),
419 C32(0xFEEE44B6),
C32(0x8A1E9573),
C32(0x7B81111A),
C32(0xCBC139F0),
420 C32(0xA3513861),
C32(0x1D2C362E),
C32(0x918C580E),
C32(0xB58E1B9C)
423 static const sph_u32 C_init_224[] = {
424 C32(0xE4B573A1),
C32(0x4C1A0880),
C32(0x1E907C51),
C32(0x04807EFD),
425 C32(0x3AD8CDE5),
C32(0x16B21302),
C32(0x02512C53),
C32(0x2204CB18),
426 C32(0x99405F2D),
C32(0xE5B648A1),
C32(0x70AB1D43),
C32(0xA10C25C2),
427 C32(0x16F1AC05),
C32(0x38BBEB56),
C32(0x9B01DC60),
C32(0xB1096D83)
430 static const sph_u32 A_init_256[] = {
431 C32(0x52F84552),
C32(0xE54B7999),
C32(0x2D8EE3EC),
C32(0xB9645191),
432 C32(0xE0078B86),
C32(0xBB7C44C9),
C32(0xD2B5C1CA),
C32(0xB0D2EB8C),
433 C32(0x14CE5A45),
C32(0x22AF50DC),
C32(0xEFFDBC6B),
C32(0xEB21B74A)
436 static const sph_u32 B_init_256[] = {
437 C32(0xB555C6EE),
C32(0x3E710596),
C32(0xA72A652F),
C32(0x9301515F),
438 C32(0xDA28C1FA),
C32(0x696FD868),
C32(0x9CB6BF72),
C32(0x0AFE4002),
439 C32(0xA6E03615),
C32(0x5138C1D4),
C32(0xBE216306),
C32(0xB38B8890),
440 C32(0x3EA8B96B),
C32(0x3299ACE4),
C32(0x30924DD4),
C32(0x55CB34A5)
443 static const sph_u32 C_init_256[] = {
444 C32(0xB405F031),
C32(0xC4233EBA),
C32(0xB3733979),
C32(0xC0DD9D55),
445 C32(0xC51C28AE),
C32(0xA327B8E1),
C32(0x56C56167),
C32(0xED614433),
446 C32(0x88B59D60),
C32(0x60E2CEBA),
C32(0x758B4B8B),
C32(0x83E82A7F),
447 C32(0xBC968828),
C32(0xE6E00BF7),
C32(0xBA839E55),
C32(0x9B491C60)
450 static const sph_u32 A_init_384[] = {
451 C32(0xC8FCA331),
C32(0xE55C504E),
C32(0x003EBF26),
C32(0xBB6B8D83),
452 C32(0x7B0448C1),
C32(0x41B82789),
C32(0x0A7C9601),
C32(0x8D659CFF),
453 C32(0xB6E2673E),
C32(0xCA54C77B),
C32(0x1460FD7E),
C32(0x3FCB8F2D)
456 static const sph_u32 B_init_384[] = {
457 C32(0x527291FC),
C32(0x2A16455F),
C32(0x78E627E5),
C32(0x944F169F),
458 C32(0x1CA6F016),
C32(0xA854EA25),
C32(0x8DB98ABE),
C32(0xF2C62641),
459 C32(0x30117DCB),
C32(0xCF5C4309),
C32(0x93711A25),
C32(0xF9F671B8),
460 C32(0xB01D2116),
C32(0x333F4B89),
C32(0xB285D165),
C32(0x86829B36)
463 static const sph_u32 C_init_384[] = {
464 C32(0xF764B11A),
C32(0x76172146),
C32(0xCEF6934D),
C32(0xC6D28399),
465 C32(0xFE095F61),
C32(0x5E6018B4),
C32(0x5048ECF5),
C32(0x51353261),
466 C32(0x6E6E36DC),
C32(0x63130DAD),
C32(0xA9C69BD6),
C32(0x1E90EA0C),
467 C32(0x7C35073B),
C32(0x28D95E6D),
C32(0xAA340E0D),
C32(0xCB3DEE70)
470 static const sph_u32 A_init_512[] = {
471 C32(0x20728DFD),
C32(0x46C0BD53),
C32(0xE782B699),
C32(0x55304632),
472 C32(0x71B4EF90),
C32(0x0EA9E82C),
C32(0xDBB930F1),
C32(0xFAD06B8B),
473 C32(0xBE0CAE40),
C32(0x8BD14410),
C32(0x76D2ADAC),
C32(0x28ACAB7F)
476 static const sph_u32 B_init_512[] = {
477 C32(0xC1099CB7),
C32(0x07B385F3),
C32(0xE7442C26),
C32(0xCC8AD640),
478 C32(0xEB6F56C7),
C32(0x1EA81AA9),
C32(0x73B9D314),
C32(0x1DE85D08),
479 C32(0x48910A5A),
C32(0x893B22DB),
C32(0xC5A0DF44),
C32(0xBBC4324E),
480 C32(0x72D2F240),
C32(0x75941D99),
C32(0x6D8BDE82),
C32(0xA1A7502B)
483 static const sph_u32 C_init_512[] = {
484 C32(0xD9BF68D1),
C32(0x58BAD750),
C32(0x56028CB2),
C32(0x8134F359),
485 C32(0xB5D469D8),
C32(0x941A8CC2),
C32(0x418B2A6E),
C32(0x04052780),
486 C32(0x7F07D787),
C32(0x5194358F),
C32(0x3C60D665),
C32(0xBE97D79A),
487 C32(0x950C3434),
C32(0xAED9A06D),
C32(0x2537DC8D),
C32(0x7CDB5969)
493 shabal_init(
void *cc,
unsigned size)
499 const sph_u32 *A_init, *B_init, *C_init;
532 memcpy(sc->
A, A_init,
sizeof sc->
A);
533 memcpy(sc->
B, B_init,
sizeof sc->
B);
534 memcpy(sc->
C, C_init,
sizeof sc->
C);
541 shabal_core(
void *cc,
const unsigned char *data,
size_t len)
558 if (len < (
sizeof sc->buf) - ptr) {
559 memcpy(buf + ptr, data, len);
569 clen = (
sizeof sc->buf) - ptr;
572 memcpy(buf + ptr, data, clen);
576 if (ptr ==
sizeof sc->buf) {
592 shabal_close(
void *cc,
unsigned ub,
unsigned n,
void *dst,
unsigned size_words)
600 unsigned char tmp_out[64];
610 buf[ptr] = ((ub & -z) | z) & 0xFF;
611 memset(buf + ptr + 1, 0, (
sizeof sc->buf) - (ptr + 1));
617 for (i = 0; i < 3; i ++) {
629 switch (size_words) {
631 sph_enc32le_aligned(u.tmp_out + 0, B0);
632 sph_enc32le_aligned(u.tmp_out + 4, B1);
633 sph_enc32le_aligned(u.tmp_out + 8, B2);
634 sph_enc32le_aligned(u.tmp_out + 12, B3);
637 sph_enc32le_aligned(u.tmp_out + 16, B4);
638 sph_enc32le_aligned(u.tmp_out + 20, B5);
639 sph_enc32le_aligned(u.tmp_out + 24, B6);
640 sph_enc32le_aligned(u.tmp_out + 28, B7);
643 sph_enc32le_aligned(u.tmp_out + 32, B8);
646 sph_enc32le_aligned(u.tmp_out + 36, B9);
649 sph_enc32le_aligned(u.tmp_out + 40, BA);
650 sph_enc32le_aligned(u.tmp_out + 44, BB);
651 sph_enc32le_aligned(u.tmp_out + 48, BC);
652 sph_enc32le_aligned(u.tmp_out + 52, BD);
653 sph_enc32le_aligned(u.tmp_out + 56, BE);
654 sph_enc32le_aligned(u.tmp_out + 60, BF);
659 out_len = size_words << 2;
660 memcpy(dst, u.tmp_out + (
sizeof u.tmp_out) - out_len, out_len);
668 shabal_init(cc, 192);
675 shabal_core(cc, data, len);
682 shabal_close(cc, 0, 0, dst, 6);
689 shabal_close(cc, ub, n, dst, 6);
696 shabal_init(cc, 224);
703 shabal_core(cc, data, len);
710 shabal_close(cc, 0, 0, dst, 7);
717 shabal_close(cc, ub, n, dst, 7);
725 shabal_init(cc, 256);
732 shabal_core(cc, data, len);
739 shabal_close(cc, 0, 0, dst, 8);
746 shabal_close(cc, ub, n, dst, 8);
754 shabal_init(cc, 384);
761 shabal_core(cc, data, len);
768 shabal_close(cc, 0, 0, dst, 12);
775 shabal_close(cc, ub, n, dst, 12);
783 shabal_init(cc, 512);
790 shabal_core(cc, data, len);
797 shabal_close(cc, 0, 0, dst, 16);
804 shabal_close(cc, ub, n, dst, 16);
void sph_shabal512_init(void *cc)
Initialize a Shabal-512 context.
void sph_shabal384_close(void *cc, void *dst)
Terminate the current Shabal-384 computation and output the result into the provided buffer...
#define READ_STATE(state)
void sph_shabal256_init(void *cc)
Initialize a Shabal-256 context.
void sph_shabal192(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_shabal192_init(void *cc)
Initialize a Shabal-192 context.
void sph_shabal384_init(void *cc)
Initialize a Shabal-384 context.
This structure is a context for Shabal computations: it contains the intermediate values and some dat...
void sph_shabal512_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_shabal224(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_shabal256_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_shabal512_close(void *cc, void *dst)
Terminate the current Shabal-512 computation and output the result into the provided buffer...
void sph_shabal256_close(void *cc, void *dst)
Terminate the current Shabal-256 computation and output the result into the provided buffer...
void sph_shabal224_init(void *cc)
Initialize a Shabal-224 context.
void sph_shabal192_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 * memcpy(void *a, const void *b, size_t c)
void sph_shabal192_close(void *cc, void *dst)
Terminate the current Shabal-192 computation and output the result into the provided buffer...
void sph_shabal384(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_shabal512(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_shabal384_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_shabal224_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...
#define WRITE_STATE(state)
void sph_shabal224_close(void *cc, void *dst)
Terminate the current Shabal-224 computation and output the result into the provided buffer...
void sph_shabal256(void *cc, const void *data, size_t len)
Process some data bytes.