113 #define DPRINTF(_a) if (_ctx_debug < 0) fprintf _a
136 int (*Update) (
void *
param,
const byte * data,
size_t size)
177 if (_ctxPool == NULL) {
184 memset(((
char *)ctx)+
sizeof(ctx->
_item), 0,
sizeof(*ctx)-
sizeof(ctx->
_item));
200 return (ctx != NULL ? ctx->
name :
"UNKNOWN");
205 return (ctx != NULL ? ctx->
asn1 : NULL);
218 nctx->Update = octx->Update;
238 static int md6_Update(
void * param,
const byte * _data,
size_t _len)
240 return md6_update((md6_state *)param, (
unsigned char *) _data, (
rpmuint64_t)(8 * _len));
271 ctx->
Reset = (int (*)(
void *)) md5Reset;
272 ctx->Update = (int (*)(
void *,
const byte *, size_t)) md5Update;
273 ctx->
Digest = (int (*)(
void *, byte *)) md5Digest;
275 ctx->
asn1 =
"3020300c06082a864886f70d020505000410";
285 ctx->
Reset = (int (*)(
void *)) sha1Reset;
286 ctx->Update = (int (*)(
void *,
const byte *, size_t)) sha1Update;
287 ctx->
Digest = (int (*)(
void *, byte *)) sha1Digest;
289 ctx->
asn1 =
"3021300906052b0e03021a05000414";
292 ctx->
name =
"RIPEMD128";
299 ctx->
Reset = (int (*)(
void *)) ripemd128Reset;
300 ctx->Update = (int (*)(
void *,
const byte *, size_t)) ripemd128Update;
301 ctx->
Digest = (int (*)(
void *, byte *)) ripemd128Digest;
305 ctx->
name =
"RIPEMD160";
312 ctx->
Reset = (int (*)(
void *)) ripemd160Reset;
313 ctx->Update = (int (*)(
void *,
const byte *, size_t)) ripemd160Update;
314 ctx->
Digest = (int (*)(
void *, byte *)) ripemd160Digest;
316 ctx->
asn1 =
"3021300906052b2403020105000414";
319 ctx->
name =
"RIPEMD256";
326 ctx->
Reset = (int (*)(
void *)) ripemd256Reset;
327 ctx->Update = (int (*)(
void *,
const byte *, size_t)) ripemd256Update;
328 ctx->
Digest = (int (*)(
void *, byte *)) ripemd256Digest;
332 ctx->
name =
"RIPEMD320";
339 ctx->
Reset = (int (*)(
void *)) ripemd320Reset;
340 ctx->Update = (int (*)(
void *,
const byte *, size_t)) ripemd320Update;
341 ctx->
Digest = (int (*)(
void *, byte *)) ripemd320Digest;
345 ctx->
name =
"SALSA10";
352 ctx->
Reset = (int (*)(
void *)) salsa10Reset;
353 ctx->Update = (int (*)(
void *,
const byte *, size_t)) salsa10Update;
354 ctx->
Digest = (int (*)(
void *, byte *)) salsa10Digest;
358 ctx->
name =
"SALSA20";
365 ctx->
Reset = (int (*)(
void *)) salsa20Reset;
366 ctx->Update = (int (*)(
void *,
const byte *, size_t)) salsa20Update;
367 ctx->
Digest = (int (*)(
void *, byte *)) salsa20Digest;
371 ctx->
name =
"TIGER192";
378 ctx->
Reset = (int (*)(
void *)) tigerReset;
379 ctx->Update = (int (*)(
void *,
const byte *, size_t)) tigerUpdate;
380 ctx->
Digest = (int (*)(
void *, byte *)) tigerDigest;
382 ctx->
asn1 =
"3029300d06092b06010401da470c0205000418";
393 ctx->
Reset = (int (*)(
void *)) md2Reset;
394 ctx->Update = (int (*)(
void *,
const byte *, size_t)) md2Update;
395 ctx->
Digest = (int (*)(
void *, byte *)) md2Digest;
397 ctx->
asn1 =
"3020300c06082a864886f70d020205000410";
407 ctx->
Reset = (int (*)(
void *)) md4Reset;
408 ctx->Update = (int (*)(
void *,
const byte *, size_t)) md4Update;
409 ctx->
Digest = (int (*)(
void *, byte *)) md4Digest;
426 ctx->Update = (int (*)(
void *,
const byte *, size_t))
sum32Update;
431 ctx->
name =
"ADLER32";
444 ctx->Update = (int (*)(
void *,
const byte *, size_t))
sum32Update;
461 ctx->Update = (int (*)(
void *,
const byte *, size_t))
sum32Update;
479 ctx->Update = (int (*)(
void *,
const byte *, size_t))
sum64Update;
484 ctx->
name =
"SHA224";
491 ctx->
Reset = (int (*)(
void *)) sha224Reset;
492 ctx->Update = (int (*)(
void *,
const byte *, size_t)) sha224Update;
493 ctx->
Digest = (int (*)(
void *, byte *)) sha224Digest;
495 ctx->
asn1 =
"302d300d06096086480165030402040500041C";
498 ctx->
name =
"SHA256";
505 ctx->
Reset = (int (*)(
void *)) sha256Reset;
506 ctx->Update = (int (*)(
void *,
const byte *, size_t)) sha256Update;
507 ctx->
Digest = (int (*)(
void *, byte *)) sha256Digest;
509 ctx->
asn1 =
"3031300d060960864801650304020105000420";
512 ctx->
name =
"SHA384";
520 ctx->
Reset = (int (*)(
void *)) sha384Reset;
521 ctx->Update = (int (*)(
void *,
const byte *, size_t)) sha384Update;
522 ctx->
Digest = (int (*)(
void *, byte *)) sha384Digest;
524 ctx->
asn1 =
"3041300d060960864801650304020205000430";
527 ctx->
name =
"SHA512";
535 ctx->
Reset = (int (*)(
void *)) sha512Reset;
536 ctx->Update = (int (*)(
void *,
const byte *, size_t)) sha512Update;
537 ctx->
Digest = (int (*)(
void *, byte *)) sha512Digest;
539 ctx->
asn1 =
"3051300d060960864801650304020305000440";
544 ctx->
name =
"SKEIN256";
546 ctx->
paramsize =
sizeof(Skein_256_Ctxt_t);
549 (void) Skein_256_Init((Skein_256_Ctxt_t *)ctx->
param,
552 ctx->Update = (int (*)(
void *,
const byte *, size_t)) Skein_256_Update;
553 ctx->
Digest = (int (*)(
void *, byte *)) Skein_256_Final;
558 ctx->
name =
"SKEIN512";
560 ctx->
paramsize =
sizeof(Skein_512_Ctxt_t);
563 (void) Skein_512_Init((Skein_512_Ctxt_t *)ctx->
param,
566 ctx->Update = (int (*)(
void *,
const byte *, size_t)) Skein_512_Update;
567 ctx->
Digest = (int (*)(
void *, byte *)) Skein_512_Final;
570 ctx->
name =
"SKEIN1024";
573 ctx->
paramsize =
sizeof(Skein1024_Ctxt_t);
576 (void) Skein1024_Init((Skein1024_Ctxt_t *)ctx->
param,
579 ctx->Update = (int (*)(
void *,
const byte *, size_t)) Skein1024_Update;
580 ctx->
Digest = (int (*)(
void *, byte *)) Skein1024_Final;
587 ctx->
name =
"ARIRANG";
592 (void) arirangInit((arirangParam *)ctx->
param, (int)(8 * ctx->
digestsize));
593 ctx->
Reset = (int (*)(
void *)) arirangReset;
594 ctx->Update = (int (*)(
void *,
const byte *, size_t)) arirangUpdate;
595 ctx->
Digest = (int (*)(
void *, byte *)) arirangDigest;
607 (void) blakeInit((blakeParam *)ctx->
param, (int)(8 * ctx->
digestsize));
608 ctx->
Reset = (int (*)(
void *)) blakeReset;
609 ctx->Update = (int (*)(
void *,
const byte *, size_t)) blakeUpdate;
610 ctx->
Digest = (int (*)(
void *, byte *)) blakeDigest;
623 ctx->
Reset = (int (*)(
void *)) bmwReset;
624 ctx->Update = (int (*)(
void *,
const byte *, size_t)) bmwUpdate;
625 ctx->
Digest = (int (*)(
void *, byte *)) bmwDigest;
638 ctx->
Reset = (int (*)(
void *)) chiReset;
639 ctx->Update = (int (*)(
void *,
const byte *, size_t)) chiUpdate;
640 ctx->
Digest = (int (*)(
void *, byte *)) chiDigest;
647 ctx->
name =
"CUBEHASH";
652 (void) cubehashInit((cubehashParam *)ctx->
param, (int)(8 * ctx->
digestsize),
653 (int)((ctx->
flags >> 8) & 0xff),
654 (
int)((ctx->
flags ) & 0xff));
655 ctx->
Reset = (int (*)(
void *)) cubehashReset;
656 ctx->Update = (int (*)(
void *,
const byte *, size_t)) cubehashUpdate;
657 ctx->
Digest = (int (*)(
void *, byte *)) cubehashDigest;
669 (void) echo_Init((echo_hashState *)ctx->
param,
672 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _echo_Update;
673 ctx->
Digest = (int (*)(
void *, byte *)) echo_Final;
680 ctx->
name =
"EDON-R";
682 ctx->
paramsize =
sizeof(edonr_hashState);
685 (void) edonr_Init((edonr_hashState *)ctx->
param,
688 ctx->Update = (int (*)(
void *,
const byte *, size_t)) edonr_Update;
689 ctx->
Digest = (int (*)(
void *, byte *)) edonr_Final;
701 (void) fugueInit((fugueParam *)ctx->
param, (int)(8 * ctx->
digestsize));
702 ctx->
Reset = (int (*)(
void *)) fugueReset;
703 ctx->Update = (int (*)(
void *,
const byte *, size_t)) fugueUpdate;
704 ctx->
Digest = (int (*)(
void *, byte *)) fugueDigest;
711 ctx->
name =
"GROESTL";
713 ctx->
paramsize =
sizeof(groestl_hashState);
716 (void) groestl_Init((groestl_hashState *)ctx->
param,
719 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _groestl_Update;
720 ctx->
Digest = (int (*)(
void *, byte *)) groestl_Final;
732 (void) hamsiInit((hamsiParam *)ctx->
param, (int)(8 * ctx->
digestsize));
733 ctx->
Reset = (int (*)(
void *)) hamsiReset;
734 ctx->Update = (int (*)(
void *,
const byte *, size_t)) hamsiUpdate;
735 ctx->
Digest = (int (*)(
void *, byte *)) hamsiDigest;
748 ctx->
Reset = (int (*)(
void *)) jhReset;
749 ctx->Update = (int (*)(
void *,
const byte *, size_t)) jhUpdate;
750 ctx->
Digest = (int (*)(
void *, byte *)) jhDigest;
757 ctx->
name =
"KECCAK";
759 ctx->
paramsize =
sizeof(keccak_hashState);
762 (void) keccak_Init((keccak_hashState *)ctx->
param,
765 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _keccak_Update;
766 ctx->
Digest = (int (*)(
void *, byte *)) keccak_Final;
779 ctx->
Reset = (int (*)(
void *)) laneReset;
780 ctx->Update = (int (*)(
void *,
const byte *, size_t)) laneUpdate;
781 ctx->
Digest = (int (*)(
void *, byte *)) laneDigest;
793 (void) luffaInit((luffaParam *)ctx->
param, (int)(8 * ctx->
digestsize));
794 ctx->
Reset = (int (*)(
void *)) luffaReset;
795 ctx->Update = (int (*)(
void *,
const byte *, size_t)) luffaUpdate;
796 ctx->
Digest = (int (*)(
void *, byte *)) luffaDigest;
809 int L = md6_default_L;
810 unsigned char *K = NULL;
812 int r = md6_default_r(d, keylen);
814 if (ctx->
flags != 0) {
815 r = ((ctx->
flags >> 8) & 0xffff);
816 L = ((ctx->
flags ) & 0xff);
817 if (r <= 0 || r > 255) r = md6_default_r(d, keylen);
819 (void) md6_full_init((md6_state *)ctx->
param,
823 ctx->Update = (int (*)(
void *,
const byte *, size_t))
md6_Update;
824 ctx->
Digest = (int (*)(
void *, byte *)) md6_final;
827 case PGPHASHALGO_SHABAL_192: ctx->
digestsize = 192/8;
goto shabal;
834 ctx->
name =
"SHABAL";
839 (void) shabalInit((shabalParam *)ctx->
param, (int)(8 * ctx->
digestsize));
840 ctx->
Reset = (int (*)(
void *)) shabalReset;
841 ctx->Update = (int (*)(
void *,
const byte *, size_t)) shabalUpdate;
842 ctx->
Digest = (int (*)(
void *, byte *)) shabalDigest;
849 ctx->
name =
"SHAVITE3";
851 ctx->
paramsize =
sizeof(shavite3_hashState);
854 (void) shavite3_Init((shavite3_hashState *)ctx->
param,
857 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _shavite3_Update;
858 ctx->
Digest = (int (*)(
void *, byte *)) shavite3_Final;
870 (void) simd_Init((simd_hashState *)ctx->
param,
873 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _simd_Update;
874 ctx->
Digest = (int (*)(
void *, byte *)) simd_Final;
886 (void) tib3_Init((tib3_hashState *)ctx->
param,
889 ctx->Update = (int (*)(
void *,
const byte *, size_t)) _tib3_Update;
890 ctx->
Digest = (int (*)(
void *, byte *)) tib3_Final;
901 DPRINTF((stderr,
"==> ctx %p ==== Init(%s, %x) param %p\n", ctx, ctx->
name, flags, ctx->
param));
912 DPRINTF((stderr,
"==> ctx %p ==== Update(%s,%p[%u]) param %p\n", ctx, ctx->
name, data, (
unsigned)len, ctx->
param));
913 return (*ctx->Update) (ctx->
param, (byte *)data, len);
917 #define HMAC_IPAD 0x36
918 #define HMAC_OPAD 0x5c
930 DPRINTF((stderr,
"==> ctx %p ==== Final(%s,%p,%p,%d) param %p digest %p[%u]\n", ctx, ctx->
name, datap, lenp, asAscii, ctx->
param, digest, (
unsigned)ctx->
digestsize));
936 if (ctx->
salt != NULL) {
938 byte * salt = (byte *) ctx->
salt;
939 byte * kdigest = NULL;
940 size_t kdigestlen = 0;
948 memcpy(digest, kdigest, kdigestlen);
949 kdigest =
_free(kdigest);
956 *(byte **)datap = digest;
962 const byte * s = (
const byte *) digest;
963 static const char hex[] =
"0123456789abcdef";
968 *t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ];
969 *t++ = hex[ (unsigned)((*s++ ) & 0x0f) ];
992 if (keylen == 0) keylen = strlen((
char *)key);
994 DPRINTF((stderr,
"==> ctx %p ==== HMAC(%s,%p[%u])\n", ctx, ctx->
name, key, (
unsigned)keylen));
998 byte * kdigest = NULL;
999 size_t kdigestlen = 0;
1002 memcpy(ctx->
salt, kdigest, kdigestlen);
1003 kdigest =
_free(kdigest);
1005 memcpy(ctx->
salt, key, keylen);
1007 salt = (byte *)ctx->
salt;