Deduplicate XMSS/XMSSMT key generation

This commit is contained in:
Joost Rijneveld 2017-10-24 12:02:42 +02:00
parent d9a9723125
commit d794ae30ee
No known key found for this signature in database
GPG Key ID: A4FE39CF49CBC553

View File

@ -91,25 +91,10 @@ static void treehash(const xmss_params *params,
int xmss_core_keypair(const xmss_params *params, int xmss_core_keypair(const xmss_params *params,
unsigned char *pk, unsigned char *sk) unsigned char *pk, unsigned char *sk)
{ {
/* We do not need the auth path in key generation, but it simplifies the /* The key generation procedure of XMSS and XMSSMT is exactly the same.
code to have just one treehash routine that computes both root and path The only important detail is that the right subtree must be selected;
in one function. */ this requires us to correctly set the d=1 parameter for XMSS. */
unsigned char auth_path[params->tree_height * params->n]; return xmssmt_core_keypair(params, pk, sk);
uint32_t top_tree_addr[8] = {0};
/* Initialize index to 0. */
memset(sk, 0, params->index_len);
sk += 4;
/* Initialize SK_SEED, SK_PRF and PUB_SEED. */
randombytes(sk, 3 * params->n);
memcpy(pk + params->n, sk + 2*params->n, params->n);
/* Compute root node. */
treehash(params, pk, auth_path, sk, pk + params->n, 0, top_tree_addr);
memcpy(sk + 3*params->n, pk, params->n);
return 0;
} }
/** /**