diff --git a/test/vectors.c b/test/vectors.c index 7573bca..466c0b0 100644 --- a/test/vectors.c +++ b/test/vectors.c @@ -45,7 +45,7 @@ int vectors_xmss(uint32_t oid, int mt) { seed[i] = i; } - xmssmt_core_keypair2(¶ms, pk, sk, seed); + xmssmt_core_seed_keypair(¶ms, pk, sk, seed); ull_to_bytes(sk, params.index_bytes, 1 << (params.full_height - 1)); diff --git a/xmss_core.c b/xmss_core.c index a9a07bf..6e5745b 100644 --- a/xmss_core.c +++ b/xmss_core.c @@ -131,9 +131,9 @@ int xmss_core_sign(const xmss_params *params, * Format sk: [(ceil(h/8) bit) index || SK_SEED || SK_PRF || root || PUB_SEED] * Format pk: [root || PUB_SEED] omitting algorithm OID. */ -int xmssmt_core_keypair2(const xmss_params *params, - unsigned char *pk, unsigned char *sk, - unsigned char *seed) +int xmssmt_core_seed_keypair(const xmss_params *params, + unsigned char *pk, unsigned char *sk, + unsigned char *seed) { /* We do not need the auth path in key generation, but it simplifies the code to have just one treehash routine that computes both root and path @@ -168,27 +168,10 @@ int xmssmt_core_keypair2(const xmss_params *params, int xmssmt_core_keypair(const xmss_params *params, unsigned char *pk, unsigned char *sk) { - /* We do not need the auth path in key generation, but it simplifies the - code to have just one treehash routine that computes both root and path - in one function. */ - unsigned char auth_path[params->tree_height * params->n]; - uint32_t top_tree_addr[8] = {0}; - set_layer_addr(top_tree_addr, params->d - 1); - - /* Initialize index to 0. */ - memset(sk, 0, params->index_bytes); - sk += params->index_bytes; - - /* Initialize SK_SEED and SK_PRF. */ - randombytes(sk, 2 * params->n); + unsigned char seed[3 * params->n]; - /* Initialize PUB_SEED. */ - randombytes(sk + 3 * params->n, params->n); - memcpy(pk + params->n, sk + 3*params->n, params->n); - - /* Compute root node of the top-most subtree. */ - treehash(params, pk, auth_path, sk, pk + params->n, 0, top_tree_addr); - memcpy(sk + 2*params->n, pk, params->n); + randombytes(seed, 3 * params->n); + xmssmt_core_seed_keypair(params, pk, sk, seed); return 0; } diff --git a/xmss_core.h b/xmss_core.h index b3a674c..e83bc7d 100644 --- a/xmss_core.h +++ b/xmss_core.h @@ -52,9 +52,9 @@ int xmssmt_core_keypair(const xmss_params *params, * Format sk: [(ceil(h/8) bit) index || SK_SEED || SK_PRF || root || PUB_SEED] * Format pk: [root || PUB_SEED] omitting algorithm OID. */ -int xmssmt_core_keypair2(const xmss_params *params, - unsigned char *pk, unsigned char *sk, - unsigned char *seed); +int xmssmt_core_seed_keypair(const xmss_params *params, + unsigned char *pk, unsigned char *sk, + unsigned char *seed); /** * Signs a message. Returns an array containing the signature followed by the