浏览代码

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.
master
Joost Rijneveld 7 年前
父节点
当前提交
42a2e8aa83
找不到此签名对应的密钥 GPG 密钥 ID: A4FE39CF49CBC553
共有 2 个文件被更改,包括 30 次插入34 次删除
  1. +0
    -5
      hash_address.c
  2. +30
    -29
      xmss_core_fast.c

+ 0
- 5
hash_address.c 查看文件

@@ -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)


+ 30
- 29
xmss_core_fast.c 查看文件

@@ -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;


正在加载...
取消
保存