From 136f10dae003cf0f1cd50c7e8ae58295646351b4 Mon Sep 17 00:00:00 2001 From: Andreas Date: Wed, 12 Aug 2015 17:59:29 +0200 Subject: [PATCH] Added support for n=m=64 --- Makefile | 7 +++---- hash.c | 50 +++++++++++++++++++++++++++++------------------ prg.c | 33 ++++++++++++++++++++++++------- test/test_chacha | Bin 26613 -> 28037 bytes test/test_wots | Bin 62804 -> 64732 bytes test/test_xmss | Bin 125776 -> 127656 bytes xmss.c | 4 ++-- 7 files changed, 62 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index 5153eab..054796d 100644 --- a/Makefile +++ b/Makefile @@ -22,8 +22,7 @@ test/test_xmssmt: chacha.c hash.c prg.c randombytes.c wots.c xmss.c xmss_commons clean: -rm *.o *.s - -rm test/test_sign + -rm test/test_chacha -rm test/test_wots - -rm test/test_horst - -rm test/speed - -rm test/gen_testvectors \ No newline at end of file + -rm test/test_xmss + -rm test/test_xmssmt \ No newline at end of file diff --git a/hash.c b/hash.c index e009aad..7d043f3 100644 --- a/hash.c +++ b/hash.c @@ -93,10 +93,7 @@ int hash_m(unsigned char *out,const unsigned char *in,unsigned long long inlen,c */ int hash_2n_n(unsigned char *out,const unsigned char *in, const unsigned char *pub_seed, unsigned char addr[16], const int n) { - if(n != 32){ - fprintf(stderr, "Hash.c:hash_2n_n: Current implementation does not support n != 32, yet.\n"); - return -1; - } + unsigned char buf[4*n]; unsigned char key[n]; unsigned char bitmask[2*n]; @@ -104,12 +101,12 @@ int hash_2n_n(unsigned char *out,const unsigned char *in, const unsigned char *p SET_KEY_BIT(addr,1); SET_BLOCK_BIT(addr,0); - prg_with_counter(key, n, pub_seed, 32, addr); + prg_with_counter(key, n, pub_seed, n, addr); SET_KEY_BIT(addr,0); // Use MSB order - prg_with_counter(bitmask, n, pub_seed, 32, addr); + prg_with_counter(bitmask, n, pub_seed, n, addr); SET_BLOCK_BIT(addr,1); - prg_with_counter(bitmask+n, n, pub_seed, 32, addr); + prg_with_counter(bitmask+n, n, pub_seed, n, addr); for(i=0;i + const unsigned char zero_nonce[12] = {0}; @@ -25,12 +26,30 @@ void prg_with_counter(unsigned char *r, unsigned long long rlen, const unsigned { int i; unsigned char nonce[12]; - for(i = 0; i < 12; i++) + if(key_len == 32){ + for(i = 0; i < 12; i++) + { + nonce[i] = addr[i]; + } + uint32_t counter; + counter = (((uint32_t)addr[12]) << 24)|(((uint32_t)addr[13]) << 16)|(((uint32_t)addr[14]) << 8)|addr[15]; + // TODO: Check address handling. Endianess? + CRYPTO_chacha_20_keystream(r, rlen, key, nonce, counter); + } + else { - nonce[i] = addr[i]; + if(key_len == 64) + { + for(i = 0; i < 12; i++) + { + nonce[i] = addr[i]; + } + uint32_t counter; + counter = (((uint32_t)addr[12]) << 24)|(((uint32_t)addr[13]) << 16)|(((uint32_t)addr[14]) << 8)|addr[15]; + // TODO: WRONG! Uses only 32 byte of key. However, does not compile with HMAC-SHA512 + CRYPTO_chacha_20_keystream(r, rlen, key, nonce, counter); + } else { + fprintf(stderr,"prg.c:: Code only supports 32 byte and 64 byte seeds"); + } } - uint32_t counter; - counter = (addr[12] << 24)|(addr[13] << 16)|(addr[14] << 8)|addr[15]; - // TODO: Check address handling. Endianess? - CRYPTO_chacha_20_keystream(r, rlen, key, nonce, counter); } \ No newline at end of file diff --git a/test/test_chacha b/test/test_chacha index 9a032af9818bbd30d18273b658322a4a537615a8..182a007bd078e8639013df80a98396ff9137f501 100755 GIT binary patch delta 7578 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 delta 6074 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 Y8Q;#`_MMx)65Ir-IVbS9?@We&10d^N*#H0l diff --git a/test/test_xmss b/test/test_xmss index 8c33e0be4342cbb9820d93a3fac89a0d5f07324c..617396f8e545f92a57dd10ff19d6fddbe75647ba 100755 GIT binary patch delta 37831 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 delta 35385 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 Nw%NDfThS%xe*w_*Mj!wH diff --git a/xmss.c b/xmss.c index 48b0245..3303945 100644 --- a/xmss.c +++ b/xmss.c @@ -121,7 +121,7 @@ void xmssmt_set_params(xmssmt_params *params, int m, int n, int h, int d, int w) params->d = d; params->m = m; params->n = n; - params->index_len = ceil(h / 8); + params->index_len = (h + 7) / 8; xmss_params xmss_par; xmss_set_params(&xmss_par, m, n, (h/d), w); params->xmss_par = xmss_par; @@ -748,7 +748,7 @@ int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsig // Extract index for(i = 0; i < idx_len; i++){ - idx |= ((unsigned long long)sig_msg[i]) << 8*(idx_len - 1 - i); + idx |= ((unsigned long long)sig_msg[i]) << (8*(idx_len - 1 - i)); } printf("verify:: idx = %llu\n",idx); sig_msg += idx_len;