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