Make addr type switching not zero out remainder

This behavior was completely unpredictable from the function name,
in particular when comparing it to other set_*_addr functions.
This commit is contained in:
Joost Rijneveld 2017-11-01 16:48:15 +01:00
parent 51790b9d57
commit 42a2e8aa83
No known key found for this signature in database
GPG Key ID: A4FE39CF49CBC553
2 changed files with 30 additions and 34 deletions

View File

@ -13,12 +13,7 @@ void set_tree_addr(uint32_t addr[8], uint64_t tree)
void set_type(uint32_t addr[8], uint32_t type)
{
int i;
addr[3] = type;
for (i = 4; i < 8; i++) {
addr[i] = 0;
}
}
void set_key_and_mask(uint32_t addr[8], uint32_t key_and_mask)

View File

@ -218,16 +218,16 @@ static void treehash_init(const xmss_params *params,
{
unsigned int idx = index;
// use three different addresses because at this point we use all three formats in parallel
uint32_t ots_addr[8];
uint32_t ltree_addr[8];
uint32_t node_addr[8];
uint32_t ots_addr[8] = {0};
uint32_t ltree_addr[8] = {0};
uint32_t node_addr[8] = {0};
// only copy layer and tree address parts
memcpy(ots_addr, addr, 12);
copy_subtree_addr(ots_addr, addr);
// type = ots
set_type(ots_addr, 0);
memcpy(ltree_addr, addr, 12);
copy_subtree_addr(ltree_addr, addr);
set_type(ltree_addr, 1);
memcpy(node_addr, addr, 12);
copy_subtree_addr(node_addr, addr);
set_type(node_addr, 2);
uint32_t lastnode, i;
@ -287,16 +287,16 @@ static void treehash_update(const xmss_params *params,
const unsigned char *pub_seed,
const uint32_t addr[8])
{
uint32_t ots_addr[8];
uint32_t ltree_addr[8];
uint32_t node_addr[8];
uint32_t ots_addr[8] = {0};
uint32_t ltree_addr[8] = {0};
uint32_t node_addr[8] = {0};
// only copy layer and tree address parts
memcpy(ots_addr, addr, 12);
copy_subtree_addr(ots_addr, addr);
// type = ots
set_type(ots_addr, 0);
memcpy(ltree_addr, addr, 12);
copy_subtree_addr(ltree_addr, addr);
set_type(ltree_addr, 1);
memcpy(node_addr, addr, 12);
copy_subtree_addr(node_addr, addr);
set_type(node_addr, 2);
set_ltree_addr(ltree_addr, treehash->next_idx);
@ -378,9 +378,9 @@ static char bds_state_update(const xmss_params *params,
const unsigned char *pub_seed,
const uint32_t addr[8])
{
uint32_t ltree_addr[8];
uint32_t node_addr[8];
uint32_t ots_addr[8];
uint32_t ltree_addr[8] = {0};
uint32_t node_addr[8] = {0};
uint32_t ots_addr[8] = {0};
unsigned int nodeh;
int idx = state->next_leaf;
@ -389,12 +389,12 @@ static char bds_state_update(const xmss_params *params,
}
// only copy layer and tree address parts
memcpy(ots_addr, addr, 12);
copy_subtree_addr(ots_addr, addr);
// type = ots
set_type(ots_addr, 0);
memcpy(ltree_addr, addr, 12);
copy_subtree_addr(ltree_addr, addr);
set_type(ltree_addr, 1);
memcpy(node_addr, addr, 12);
copy_subtree_addr(node_addr, addr);
set_type(node_addr, 2);
set_ots_addr(ots_addr, idx);
@ -447,16 +447,17 @@ static void bds_round(const xmss_params *params,
unsigned int offset, rowidx;
unsigned char buf[2 * params->n];
uint32_t ots_addr[8];
uint32_t ltree_addr[8];
uint32_t node_addr[8];
uint32_t ots_addr[8] = {0};
uint32_t ltree_addr[8] = {0};
uint32_t node_addr[8] = {0};
// only copy layer and tree address parts
memcpy(ots_addr, addr, 12);
copy_subtree_addr(ots_addr, addr);
// type = ots
set_type(ots_addr, 0);
memcpy(ltree_addr, addr, 12);
copy_subtree_addr(ltree_addr, addr);
set_type(ltree_addr, 1);
memcpy(node_addr, addr, 12);
copy_subtree_addr(node_addr, addr);
set_type(node_addr, 2);
for (i = 0; i < params->tree_height; i++) {
@ -524,7 +525,7 @@ unsigned long long xmss_core_sk_bytes(const xmss_params *params)
int xmss_core_keypair(const xmss_params *params,
unsigned char *pk, unsigned char *sk)
{
uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint32_t addr[8] = {0};
// TODO refactor BDS state not to need separate treehash instances
bds_state state;
@ -607,7 +608,7 @@ int xmss_core_sign(const xmss_params *params,
unsigned char R[params->n];
unsigned char msg_h[params->n];
unsigned char ots_seed[params->n];
uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint32_t ots_addr[8] = {0};
// ---------------------------------
// Message Hashing
@ -712,7 +713,7 @@ int xmssmt_core_keypair(const xmss_params *params,
unsigned char *pk, unsigned char *sk)
{
unsigned char ots_seed[params->n];
uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint32_t addr[8] = {0};
unsigned int i;
unsigned char *wots_sigs;
@ -785,8 +786,8 @@ int xmssmt_core_sign(const xmss_params *params,
unsigned char R[params->n];
unsigned char msg_h[params->n];
unsigned char ots_seed[params->n];
uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint32_t addr[8] = {0};
uint32_t ots_addr[8] = {0};
unsigned char idx_bytes_32[32];
unsigned char *wots_sigs;