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 */

Reply via email to