blob: 8bcb44e04a116f8610a4d373e6721389ac60730d [file] [log] [blame]
markus@openbsd.org1b11ea72018-02-23 15:58:37 +00001/*
2wots.h version 20160722
3Andreas Hülsing
4Joost Rijneveld
5Public domain.
6*/
7
8#ifndef WOTS_H
9#define WOTS_H
10
Darren Tuckerc7ef4a32018-02-26 17:42:56 +110011#ifdef HAVE_STDINT_H
markus@openbsd.org1b11ea72018-02-23 15:58:37 +000012#include "stdint.h"
Darren Tuckerc7ef4a32018-02-26 17:42:56 +110013#endif
markus@openbsd.org1b11ea72018-02-23 15:58:37 +000014
15/**
16 * WOTS parameter set
17 *
18 * Meaning as defined in draft-irtf-cfrg-xmss-hash-based-signatures-02
19 */
20typedef struct {
21 uint32_t len_1;
22 uint32_t len_2;
23 uint32_t len;
24 uint32_t n;
25 uint32_t w;
26 uint32_t log_w;
27 uint32_t keysize;
28} wots_params;
29
30/**
31 * Set the WOTS parameters,
32 * only m, n, w are required as inputs,
33 * len, len_1, and len_2 are computed from those.
34 *
35 * Assumes w is a power of 2
36 */
37void wots_set_params(wots_params *params, int n, int w);
38
39/**
40 * WOTS key generation. Takes a 32byte seed for the secret key, expands it to a full WOTS secret key and computes the corresponding public key.
41 * For this it takes the seed pub_seed which is used to generate bitmasks and hash keys and the address of this WOTS key pair addr
42 *
43 * params, must have been initialized before using wots_set params for params ! This is not done in this function
44 *
45 * Places the computed public key at address pk.
46 */
47void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
48
49/**
50 * Takes a m-byte message and the 32-byte seed for the secret key to compute a signature that is placed at "sig".
51 *
52 */
53int wots_sign(unsigned char *sig, const unsigned char *msg, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
54
55/**
56 * Takes a WOTS signature, a m-byte message and computes a WOTS public key that it places at pk.
57 *
58 */
59int wots_pkFromSig(unsigned char *pk, const unsigned char *sig, const unsigned char *msg, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
60
61#endif