in xmss_fast.c [345:377]
static char bds_treehash_update(bds_state *state, unsigned int updates, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, const uint32_t addr[8]) {
uint32_t i, j;
unsigned int level, l_min, low;
unsigned int h = params->h;
unsigned int k = params->k;
unsigned int used = 0;
for (j = 0; j < updates; j++) {
l_min = h;
level = h - k;
for (i = 0; i < h - k; i++) {
if (state->treehash[i].completed) {
low = h;
}
else if (state->treehash[i].stackusage == 0) {
low = i;
}
else {
low = treehash_minheight_on_stack(state, params, &(state->treehash[i]));
}
if (low < l_min) {
level = i;
l_min = low;
}
}
if (level == h - k) {
break;
}
treehash_update(&(state->treehash[level]), state, sk_seed, params, pub_seed, addr);
used++;
}
return updates - used;
}