diff --git a/xmss_fast.c b/xmss_fast.c index 9b436c9..0a28935 100644 --- a/xmss_fast.c +++ b/xmss_fast.c @@ -948,8 +948,10 @@ int xmssmt_sign(unsigned char *sk, bds_state *states, unsigned char *wots_sigs, SET_LAYER_ADDRESS(addr, 0); SET_TREE_ADDRESS(addr, (idx_tree + 1)); - // mandatory update for NEXT_0 (does not count towards h-k/2) - bds_state_update(&states[params->d], sk_seed, &(params->xmss_par), pub_seed, addr); + // mandatory update for NEXT_0 (does not count towards h-k/2) if NEXT_0 exists + if ((1 + idx_tree) * (1 << tree_h) + idx_leaf < (1UL << h)) { + bds_state_update(&states[params->d], sk_seed, &(params->xmss_par), pub_seed, addr); + } for (i = 0; i < params->d; i++) { // check if we're not at the end of a tree