diff options
Diffstat (limited to 'xmss_wots.h')
-rw-r--r-- | xmss_wots.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/xmss_wots.h b/xmss_wots.h new file mode 100644 index 000000000..1eebf3b21 --- /dev/null +++ b/xmss_wots.h | |||
@@ -0,0 +1,64 @@ | |||
1 | #ifdef WITH_XMSS | ||
2 | /* $OpenBSD: xmss_wots.h,v 1.3 2018/02/26 12:14:53 dtucker Exp $ */ | ||
3 | /* | ||
4 | wots.h version 20160722 | ||
5 | Andreas Hülsing | ||
6 | Joost Rijneveld | ||
7 | Public domain. | ||
8 | */ | ||
9 | |||
10 | #ifndef WOTS_H | ||
11 | #define WOTS_H | ||
12 | |||
13 | #ifdef HAVE_STDINT_H | ||
14 | #include "stdint.h" | ||
15 | #endif | ||
16 | |||
17 | /** | ||
18 | * WOTS parameter set | ||
19 | * | ||
20 | * Meaning as defined in draft-irtf-cfrg-xmss-hash-based-signatures-02 | ||
21 | */ | ||
22 | typedef struct { | ||
23 | uint32_t len_1; | ||
24 | uint32_t len_2; | ||
25 | uint32_t len; | ||
26 | uint32_t n; | ||
27 | uint32_t w; | ||
28 | uint32_t log_w; | ||
29 | uint32_t keysize; | ||
30 | } wots_params; | ||
31 | |||
32 | /** | ||
33 | * Set the WOTS parameters, | ||
34 | * only m, n, w are required as inputs, | ||
35 | * len, len_1, and len_2 are computed from those. | ||
36 | * | ||
37 | * Assumes w is a power of 2 | ||
38 | */ | ||
39 | void wots_set_params(wots_params *params, int n, int w); | ||
40 | |||
41 | /** | ||
42 | * 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. | ||
43 | * 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 | ||
44 | * | ||
45 | * params, must have been initialized before using wots_set params for params ! This is not done in this function | ||
46 | * | ||
47 | * Places the computed public key at address pk. | ||
48 | */ | ||
49 | void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]); | ||
50 | |||
51 | /** | ||
52 | * Takes a m-byte message and the 32-byte seed for the secret key to compute a signature that is placed at "sig". | ||
53 | * | ||
54 | */ | ||
55 | int 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]); | ||
56 | |||
57 | /** | ||
58 | * Takes a WOTS signature, a m-byte message and computes a WOTS public key that it places at pk. | ||
59 | * | ||
60 | */ | ||
61 | int 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]); | ||
62 | |||
63 | #endif | ||
64 | #endif /* WITH_XMSS */ | ||