Browse Source

Unify keypair and seed_keypair

master
Joost Rijneveld 4 years ago
parent
commit
feed976315
No known key found for this signature in database GPG Key ID: A4FE39CF49CBC553
3 changed files with 10 additions and 27 deletions
  1. +1
    -1
      test/vectors.c
  2. +6
    -23
      xmss_core.c
  3. +3
    -3
      xmss_core.h

+ 1
- 1
test/vectors.c View File

@@ -45,7 +45,7 @@ int vectors_xmss(uint32_t oid, int mt) {
seed[i] = i; seed[i] = i;
} }


xmssmt_core_keypair2(&params, pk, sk, seed);
xmssmt_core_seed_keypair(&params, pk, sk, seed);


ull_to_bytes(sk, params.index_bytes, 1 << (params.full_height - 1)); ull_to_bytes(sk, params.index_bytes, 1 << (params.full_height - 1));




+ 6
- 23
xmss_core.c View File

@@ -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 sk: [(ceil(h/8) bit) index || SK_SEED || SK_PRF || root || PUB_SEED]
* Format pk: [root || PUB_SEED] omitting algorithm OID. * 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 /* 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 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, int xmssmt_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
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; return 0;
} }


+ 3
- 3
xmss_core.h View File

@@ -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 sk: [(ceil(h/8) bit) index || SK_SEED || SK_PRF || root || PUB_SEED]
* Format pk: [root || PUB_SEED] omitting algorithm OID. * 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 * Signs a message. Returns an array containing the signature followed by the


Loading…
Cancel
Save