Module Name: othersrc
Committed By: agc
Date: Wed Mar 26 06:22:16 UTC 2014
Modified Files:
othersrc/external/bsd/multigest/dist: multigest.c multigest.h
Log Message:
group all the functions for each digest together - makes it easier to
see what is going on in the wrapper section, and to add new digest
algorithms
just use the first two algorithms when calculating comb4p, xor and
hash combiners.
ride the previous version bump.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 othersrc/external/bsd/multigest/dist/multigest.c
cvs rdiff -u -r1.9 -r1.10 othersrc/external/bsd/multigest/dist/multigest.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/bsd/multigest/dist/multigest.c
diff -u othersrc/external/bsd/multigest/dist/multigest.c:1.11 othersrc/external/bsd/multigest/dist/multigest.c:1.12
--- othersrc/external/bsd/multigest/dist/multigest.c:1.11 Wed Mar 26 01:20:34 2014
+++ othersrc/external/bsd/multigest/dist/multigest.c Wed Mar 26 06:22:16 2014
@@ -86,137 +86,135 @@
/*****/
static void
-wrap_sha1_init(void *v)
-{
- SHA1Init(v);
-}
-
-static void
wrap_md5_init(void *v)
{
MD5Init(v);
}
static void
-wrap_sha256_init(void *v)
+wrap_md5_update(void *v, const char *data, unsigned len)
{
- SHA256_Init(v);
+ MD5Update(v, (const uint8_t *)data, len);
}
static void
-wrap_sha512_init(void *v)
+wrap_md5_final(uint8_t *raw, void *v)
{
- SHA512_Init(v);
+ MD5Final(raw, v);
}
+/*****/
+
static void
-wrap_rmd160_init(void *v)
+wrap_sha1_init(void *v)
{
- RMD160Init(v);
+ SHA1Init(v);
}
static void
-wrap_crc32c_init(void *v)
+wrap_sha1_update(void *v, const char *data, unsigned len)
{
- crc32c_init(v);
+ SHA1Update(v, (const uint8_t *)data, len);
}
static void
-wrap_tiger_init(void *v)
+wrap_sha1_final(uint8_t *raw, void *v)
{
- TIGER_Init(v);
+ SHA1Final(raw, v);
}
+/*****/
+
static void
-wrap_tiger2_init(void *v)
+wrap_sha256_init(void *v)
{
- TIGER2_Init(v);
+ SHA256_Init(v);
}
static void
-wrap_blake2_init(void *v)
+wrap_sha256_update(void *v, const char *data, unsigned len)
{
- blake2b_init(v, 64);
+ SHA256_Update(v, (const uint8_t *)data, len);
}
static void
-wrap_whirlpool_init(void *v)
+wrap_sha256_final(uint8_t *raw, void *v)
{
- whirlpool_init(v);
+ SHA256_Final(raw, v);
}
+/*****/
+
static void
-wrap_keccak224_init(void *v)
+wrap_sha512_init(void *v)
{
- KECCAK_Init(v, 224);
+ SHA512_Init(v);
}
static void
-wrap_keccak256_init(void *v)
+wrap_sha512_update(void *v, const char *data, unsigned len)
{
- KECCAK_Init(v, 256);
+ SHA512_Update(v, (const uint8_t *)data, len);
}
static void
-wrap_keccak384_init(void *v)
+wrap_sha512_final(uint8_t *raw, void *v)
{
- KECCAK_Init(v, 384);
+ SHA512_Final(raw, v);
}
+/*****/
+
static void
-wrap_keccak512_init(void *v)
+wrap_rmd160_init(void *v)
{
- KECCAK_Init(v, 512);
+ RMD160Init(v);
}
static void
-wrap_size_init(void *v)
+wrap_rmd160_update(void *v, const char *data, unsigned len)
{
- memset(v, 0x0, sizeof(uint64_t));
+ RMD160Update(v, (const uint8_t *)data, len);
}
static void
-wrap_null_init(void *v)
+wrap_rmd160_final(uint8_t *raw, void *v)
{
- USE_ARG(v);
+ RMD160Final(raw, v);
}
/*****/
static void
-wrap_md5_update(void *v, const char *data, unsigned len)
+wrap_crc32c_init(void *v)
{
- MD5Update(v, (const uint8_t *)data, len);
+ crc32c_init(v);
}
static void
-wrap_sha1_update(void *v, const char *data, unsigned len)
+wrap_crc32c_update(void *v, const char *data, unsigned len)
{
- SHA1Update(v, (const uint8_t *)data, len);
+ crc32c_update(v, (const uint8_t *)data, len);
}
static void
-wrap_sha256_update(void *v, const char *data, unsigned len)
+wrap_crc32c_final(uint8_t *raw, void *v)
{
- SHA256_Update(v, (const uint8_t *)data, len);
+ crc32c_final((ctx32_t *)(void *)raw, v);
}
-static void
-wrap_sha512_update(void *v, const char *data, unsigned len)
-{
- SHA512_Update(v, (const uint8_t *)data, len);
-}
+/*****/
static void
-wrap_rmd160_update(void *v, const char *data, unsigned len)
+wrap_tiger_init(void *v)
{
- RMD160Update(v, (const uint8_t *)data, len);
+ TIGER_Init(v);
}
static void
-wrap_crc32c_update(void *v, const char *data, unsigned len)
+wrap_tiger2_init(void *v)
{
- crc32c_update(v, (const uint8_t *)data, len);
+ TIGER2_Init(v);
}
static void
@@ -226,103 +224,107 @@ wrap_tiger_update(void *v, const char *d
}
static void
-wrap_blake2_update(void *v, const char *data, unsigned len)
+wrap_tiger_final(uint8_t *raw, void *v)
{
- blake2b_update(v, (const uint8_t *)data, (uint64_t)len);
+ TIGER_Final(raw, v);
}
+/*****/
+
static void
-wrap_whirlpool_update(void *v, const char *data, unsigned len)
+wrap_blake2_init(void *v)
{
- whirlpool_update(v, (const uint8_t *)data, len);
+ blake2b_init(v, 64);
}
static void
-wrap_keccak_update(void *v, const char *data, unsigned len)
+wrap_blake2_update(void *v, const char *data, unsigned len)
{
- /* number of bits for keccak */
- KECCAK_Update(v, (const uint8_t *)data, (uint64_t)(len * 8));
+ blake2b_update(v, (const uint8_t *)data, (uint64_t)len);
}
static void
-wrap_size_update(void *v, const char *data, unsigned len)
+wrap_blake2_final(uint8_t *raw, void *v)
{
- uint64_t n;
-
- USE_ARG(data);
- memcpy(&n, v, sizeof(n));
- n += len;
- memcpy(v, &n, sizeof(n));
+ blake2b_final(v, raw, 64);
}
+/*****/
+
static void
-wrap_null_update(void *v, const char *data, unsigned len)
+wrap_whirlpool_init(void *v)
{
- USE_ARG(v);
- USE_ARG(data);
- USE_ARG(len);
+ whirlpool_init(v);
}
-/*****/
-
static void
-wrap_sha1_final(uint8_t *raw, void *v)
+wrap_whirlpool_update(void *v, const char *data, unsigned len)
{
- SHA1Final(raw, v);
+ whirlpool_update(v, (const uint8_t *)data, len);
}
static void
-wrap_sha256_final(uint8_t *raw, void *v)
+wrap_whirlpool_final(uint8_t *raw, void *v)
{
- SHA256_Final(raw, v);
+ whirlpool_finalize((char *)raw, v);
}
+/*****/
+
static void
-wrap_sha512_final(uint8_t *raw, void *v)
+wrap_keccak224_init(void *v)
{
- SHA512_Final(raw, v);
+ KECCAK_Init(v, 224);
}
static void
-wrap_rmd160_final(uint8_t *raw, void *v)
+wrap_keccak256_init(void *v)
{
- RMD160Final(raw, v);
+ KECCAK_Init(v, 256);
}
static void
-wrap_md5_final(uint8_t *raw, void *v)
+wrap_keccak384_init(void *v)
{
- MD5Final(raw, v);
+ KECCAK_Init(v, 384);
}
static void
-wrap_crc32c_final(uint8_t *raw, void *v)
+wrap_keccak512_init(void *v)
{
- crc32c_final((ctx32_t *)(void *)raw, v);
+ KECCAK_Init(v, 512);
}
static void
-wrap_tiger_final(uint8_t *raw, void *v)
+wrap_keccak_update(void *v, const char *data, unsigned len)
{
- TIGER_Final(raw, v);
+ /* number of bits for keccak */
+ KECCAK_Update(v, (const uint8_t *)data, (uint64_t)(len * 8));
}
static void
-wrap_blake2_final(uint8_t *raw, void *v)
+wrap_keccak_final(uint8_t *raw, void *v)
{
- blake2b_final(v, raw, 64);
+ KECCAK_Final(v, raw);
}
+/*****/
+
static void
-wrap_whirlpool_final(uint8_t *raw, void *v)
+wrap_size_init(void *v)
{
- whirlpool_finalize((char *)raw, v);
+ memset(v, 0x0, sizeof(uint64_t));
}
static void
-wrap_keccak_final(uint8_t *raw, void *v)
+wrap_size_update(void *v, const char *data, unsigned len)
{
- KECCAK_Final(v, raw);
+ uint64_t n;
+
+ USE_ARG(data);
+ memcpy(&n, v, sizeof(n));
+ n += len;
+ memcpy(v, &n, sizeof(n));
}
static void
@@ -344,6 +346,22 @@ wrap_size_final(uint8_t *raw, void *v)
memcpy(raw, &w, sizeof(w));
}
+/*****/
+
+static void
+wrap_null_init(void *v)
+{
+ USE_ARG(v);
+}
+
+static void
+wrap_null_update(void *v, const char *data, unsigned len)
+{
+ USE_ARG(v);
+ USE_ARG(data);
+ USE_ARG(len);
+}
+
static void
wrap_null_final(uint8_t *raw, void *v)
{
@@ -489,6 +507,26 @@ comb4p_round(multigest_t *m, uint8_t *ou
return 1;
}
+/* point d1 and d2 at the first 2 digests found */
+static int
+find_digests(multigest_t *m, multigest_dig_t **d1, multigest_dig_t **d2)
+{
+ multigest_dig_t *d;
+ uint32_t i;
+
+ *d1 = *d2 = NULL;
+ for (d = m->digs, i = 0 ; i < m->digc ; i++, d++) {
+ if (d->rawsize) {
+ if (*d1) {
+ *d2 = d;
+ return 1;
+ }
+ *d1 = d;
+ }
+ }
+ return 0;
+}
+
/***************************************************************************/
/* create a new struct and return it */
@@ -601,10 +639,11 @@ multigest_update(multigest_t *multigest,
}
/* finalise the digest */
-int
+void
multigest_final(multigest_t *m, uint8_t *raw)
{
- multigest_dig_t *d;
+ multigest_dig_t *d1;
+ multigest_dig_t *d2;
uint32_t rawoff;
uint32_t i;
uint8_t h1[4096];
@@ -613,48 +652,46 @@ multigest_final(multigest_t *m, uint8_t
if (m && raw) {
switch(m->combiner) {
case COMBINE_COMB4P:
- if (m->digc != 3 || m->digs[1].rawsize != m->digs[2].rawsize) {
- return 0;
+ if (!find_digests(m, &d1, &d2)) {
+ return;
}
- d = &m->digs[1];
- (*d->final)(h1, &m->ctx[d->ctxoff]);
- d = &m->digs[2];
- (*d->final)(h2, &m->ctx[d->ctxoff]);
- xorbuf(h1, h1, h2, d->rawsize);
- comb4p_round(m, h2, h1, d->rawsize, 1);
- comb4p_round(m, h1, h2, d->rawsize, 2);
- memcpy(raw, h1, d->rawsize);
- memcpy(&raw[d->rawsize], h2, d->rawsize);
+ (*d1->final)(h1, &m->ctx[d1->ctxoff]);
+ (*d2->final)(h2, &m->ctx[d2->ctxoff]);
+ xorbuf(h1, h1, h2, d2->rawsize);
+ comb4p_round(m, h2, h1, d1->rawsize, 1);
+ comb4p_round(m, h1, h2, d2->rawsize, 2);
+ memcpy(raw, h1, d2->rawsize);
+ memcpy(&raw[d1->rawsize], h2, d2->rawsize);
break;
case COMBINE_CONCAT:
rawoff = 0;
- for (d = m->digs, i = 0 ; i < m->digc ; i++, d++) {
- if (d->rawsize) {
- (*d->final)(&raw[rawoff], &m->ctx[d->ctxoff]);
- rawoff += (uint32_t)d->rawsize;
+ for (d1 = m->digs, i = 0 ; i < m->digc ; i++, d1++) {
+ if (d1->rawsize) {
+ (*d1->final)(&raw[rawoff], &m->ctx[d1->ctxoff]);
+ rawoff += (uint32_t)d1->rawsize;
}
}
break;
case COMBINE_HASH:
- d = &m->digs[2];
- (*d->final)(h2, &m->ctx[d->ctxoff]);
- d = &m->digs[1];
- (*d->update)(&m->ctx[d->ctxoff], (const char *)h2, m->digs[2].rawsize);
- (*d->final)(raw, &m->ctx[d->ctxoff]);
+ if (!find_digests(m, &d1, &d2)) {
+ return;
+ }
+ (*d2->final)(h2, &m->ctx[d2->ctxoff]);
+ (*d1->update)(&m->ctx[d1->ctxoff], (const char *)h2, d1->rawsize);
+ (*d1->final)(raw, &m->ctx[d1->ctxoff]);
break;
case COMBINE_XOR:
- d = &m->digs[2];
- (*d->final)(h2, &m->ctx[d->ctxoff]);
- d = &m->digs[1];
- (*d->final)(h1, &m->ctx[d->ctxoff]);
+ if (!find_digests(m, &d1, &d2)) {
+ return;
+ }
+ (*d2->final)(h2, &m->ctx[d2->ctxoff]);
+ (*d1->final)(h1, &m->ctx[d1->ctxoff]);
xorbuf(raw, h1, h2, m->outsize);
break;
default:
break;
}
- return 1;
}
- return 0;
}
/* run sed on data and then digest it */
Index: othersrc/external/bsd/multigest/dist/multigest.h
diff -u othersrc/external/bsd/multigest/dist/multigest.h:1.9 othersrc/external/bsd/multigest/dist/multigest.h:1.10
--- othersrc/external/bsd/multigest/dist/multigest.h:1.9 Wed Mar 26 01:20:34 2014
+++ othersrc/external/bsd/multigest/dist/multigest.h Wed Mar 26 06:22:16 2014
@@ -80,7 +80,7 @@ void multigest_free(multigest_t */*s*/);
int multigest_init(multigest_t */*multigest*/, const char */*alg*/);
int multigest_add_subst(multigest_t */*multigest*/, const char */*from*/, const char */*to*/);
void multigest_update(multigest_t */*multigest*/, const char */*data*/, size_t /*len*/);
-int multigest_final(multigest_t */*multigest*/, uint8_t */*raw*/);
+void multigest_final(multigest_t */*multigest*/, uint8_t */*raw*/);
uint32_t multigest_get_rawsize(multigest_t */*multigest*/);
/* high-level interface */