25 #define DPRINTF(_a) fprintf _a
30 #if !defined(ZLIB_H) || defined(__LCLINT__)
34 static uint32_t
crc32(uint32_t crc,
const byte * data,
size_t size)
37 static uint32_t polynomial = 0xedb88320;
38 static uint32_t xorout = 0xffffffff;
39 static uint32_t table[256];
47 for (i = 0; i < 256; i++) {
49 for (j = 0; j < 8; j++) {
51 c = polynomial ^ (c >> 1);
59 crc = table[(crc ^ *data) & 0xff] ^ (crc >> 8);
80 uint32_t (*update) (uint32_t crc,
const byte * data,
size_t size);
81 uint32_t (*combine) (uint32_t crc1, uint32_t crc2,
size_t len2);
109 uint32_t c = mp->
crc;
111 data[ 0] = (
byte)(c >> 24);
112 data[ 1] = (
byte)(c >> 16);
113 data[ 2] = (
byte)(c >> 8);
114 data[ 3] = (
byte)(c );
127 static uint64_t
crc64(uint64_t crc,
const byte * data,
size_t size)
130 static uint64_t polynomial =
131 0xc96c5795d7870f42ULL;
132 static uint64_t xorout = 0xffffffffffffffffULL;
133 static uint64_t table[256];
141 for (i = 0; i < 256; i++) {
143 for (j = 0; j < 8; j++) {
145 c = polynomial ^ (c >> 1);
153 crc = table[(crc ^ *data) & 0xff] ^ (crc >> 8);
213 odd[0] = 0xc96c5795d7870f42ULL;
215 for (n = 1; n <
GF2_DIM; n++) {
257 uint64_t (*update) (uint64_t crc,
const byte * data,
size_t size);
258 uint64_t (*combine) (uint64_t crc1, uint64_t crc2,
size_t len2);
286 uint64_t c = mp->
crc;
288 data[ 0] = (
byte)(c >> 56);
289 data[ 1] = (
byte)(c >> 48);
290 data[ 2] = (
byte)(c >> 40);
291 data[ 3] = (
byte)(c >> 32);
292 data[ 4] = (
byte)(c >> 24);
293 data[ 5] = (
byte)(c >> 16);
294 data[ 6] = (
byte)(c >> 8);
295 data[ 7] = (
byte)(c );
328 nctx = memcpy(
xcalloc(1,
sizeof(*nctx)), octx,
sizeof(*nctx));
352 ctx->
Reset = (
void *) md5Reset;
353 ctx->
Update = (
void *) md5Update;
354 ctx->
Digest = (
void *) md5Digest;
366 ctx->
Reset = (
void *) sha1Reset;
367 ctx->
Update = (
void *) sha1Update;
368 ctx->
Digest = (
void *) sha1Digest;
372 ctx->
name =
"RIPEMD-128";
380 ctx->
Reset = (
void *) rmd128Reset;
381 ctx->
Update = (
void *) rmd128Update;
382 ctx->
Digest = (
void *) rmd128Digest;
386 ctx->
name =
"RIPEMD-160";
394 ctx->
Reset = (
void *) rmd160Reset;
395 ctx->
Update = (
void *) rmd160Update;
396 ctx->
Digest = (
void *) rmd160Digest;
400 ctx->
name =
"RIPEMD-256";
408 ctx->
Reset = (
void *) rmd256Reset;
409 ctx->
Update = (
void *) rmd256Update;
410 ctx->
Digest = (
void *) rmd256Digest;
414 ctx->
name =
"RIPEMD-320";
422 ctx->
Reset = (
void *) rmd320Reset;
423 ctx->
Update = (
void *) rmd320Update;
424 ctx->
Digest = (
void *) rmd320Digest;
428 ctx->
name =
"SALSA-10";
436 ctx->
Reset = (
void *) salsa10Reset;
437 ctx->
Update = (
void *) salsa10Update;
438 ctx->
Digest = (
void *) salsa10Digest;
442 ctx->
name =
"SALSA-20";
450 ctx->
Reset = (
void *) salsa20Reset;
451 ctx->
Update = (
void *) salsa20Update;
452 ctx->
Digest = (
void *) salsa20Digest;
456 ctx->
name =
"TIGER-192";
464 ctx->
Reset = (
void *) tigerReset;
465 ctx->
Update = (
void *) tigerUpdate;
466 ctx->
Digest = (
void *) tigerDigest;
478 ctx->
Reset = (
void *) md2Reset;
479 ctx->
Update = (
void *) md2Update;
480 ctx->
Digest = (
void *) md2Digest;
492 ctx->
Reset = (
void *) md4Reset;
493 ctx->
Update = (
void *) md4Update;
494 ctx->
Digest = (
void *) md4Digest;
498 ctx->
name =
"CRC-32";
505 mp->
combine = (
void *) crc32_combine;
518 ctx->
name =
"ADLER-32";
524 mp->
update = (
void *) adler32;
525 mp->
combine = (
void *) adler32_combine;
538 ctx->
name =
"JLU-32";
543 mp->
update = (
void *) jlu32l;
555 ctx->
name =
"CRC-64";
572 #if HAVE_BEECRYPT_API_H
574 ctx->
name =
"SHA-224";
582 ctx->
Reset = (
void *) sha224Reset;
583 ctx->
Update = (
void *) sha224Update;
584 ctx->
Digest = (
void *) sha224Digest;
588 ctx->
name =
"SHA-256";
596 ctx->
Reset = (
void *) sha256Reset;
597 ctx->
Update = (
void *) sha256Update;
598 ctx->
Digest = (
void *) sha256Digest;
602 ctx->
name =
"SHA-384";
610 ctx->
Reset = (
void *) sha384Reset;
611 ctx->
Update = (
void *) sha384Update;
612 ctx->
Digest = (
void *) sha384Digest;
616 ctx->
name =
"SHA-512";
624 ctx->
Reset = (
void *) sha512Reset;
625 ctx->
Update = (
void *) sha512Update;
626 ctx->
Digest = (
void *) sha512Digest;
641 DPRINTF((stderr,
"*** Init(%x) ctx %p param %p\n", flags, ctx, ctx->
param));
652 DPRINTF((stderr,
"*** Update(%p,%p,%d) param %p \"%s\"\n", ctx, data, len, ctx->
param, ((
char *)data)));
671 DPRINTF((stderr,
"*** Final(%p,%p,%p,%d) param %p digest %p\n", ctx, datap, lenp, asAscii, ctx->
param, digest));
681 *(
byte **)datap = digest;
687 const byte * s = (
const byte *) digest;
688 static const char hex[] =
"0123456789abcdef";
692 *t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ];
693 *t++ = hex[ (unsigned)((*s++ ) & 0x0f) ];
705 memset(ctx, 0,
sizeof(*ctx));
756 N_(
"no hash algorithm"), NULL },
757 {
"alldigests",
'\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &
rpmDigestHashAlgo, 256,
758 N_(
"all hash algorithm(s)"), NULL },