From bbbb95e869d8554cb66da787ab2e076caa680137 Mon Sep 17 00:00:00 2001 From: Joost Rijneveld Date: Tue, 24 Oct 2017 17:21:16 +0200 Subject: [PATCH] Fix erroneous index length for XMSSMT This produced repeated indices when reaching 2^32 signatures. This was introduced in 9b35b00d98d26feb3b58bcbc2c17c057d95efbda with the re-introduction of runtime parameters. Compile-time parameters did not contain this error. --- params.c | 3 ++- xmss_core.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/params.c b/params.c index f947e70..4e0f484 100644 --- a/params.c +++ b/params.c @@ -456,7 +456,8 @@ int xmssmt_parse_oid(xmss_params *params, const uint32_t oid) params->wots_len2 = 3; params->wots_len = params->wots_len1 + params->wots_len2; params->wots_keysize = params->wots_len * params->n; - params->index_len = 4; + /* Round index_len up to nearest byte. */ + params->index_len = (params->full_height + 7) / 8; params->bytes = (params->index_len + params->n + params->d*params->wots_keysize + params->full_height *params->n); params->publickey_bytes = 2*params->n; diff --git a/xmss_core.c b/xmss_core.c index d996233..2410d57 100644 --- a/xmss_core.c +++ b/xmss_core.c @@ -176,7 +176,7 @@ int xmssmt_core_keypair(const xmss_params *params, /* Initialize index to 0. */ memset(sk, 0, params->index_len); - sk += 4; + sk += params->index_len; /* Initialize SK_SEED, SK_PRF and PUB_SEED. */ randombytes(sk, 3 * params->n);