#ifndef XMSS_PARAMS_H #define XMSS_PARAMS_H #include /* These are merely internal identifiers for the supported hash functions. */ #define XMSS_SHA2 0 #define XMSS_SHAKE 1 /* This is a result of the OID definitions in the draft; needed for parsing. */ #define XMSS_OID_LEN 4 /* This structure will be populated when calling xmss[mt]_parse_oid. */ typedef struct { unsigned int func; unsigned int n; unsigned int padding_len; unsigned int wots_w; unsigned int wots_log_w; unsigned int wots_len1; unsigned int wots_len2; unsigned int wots_len; unsigned int wots_sig_bytes; unsigned int full_height; unsigned int tree_height; unsigned int d; unsigned int index_bytes; unsigned int sig_bytes; unsigned int pk_bytes; unsigned long long sk_bytes; unsigned int bds_k; } xmss_params; /** * Accepts strings such as "XMSS-SHA2_10_256" * and outputs OIDs such as 0x01000001. * Returns -1 when the parameter set is not found, 0 otherwise */ int xmss_str_to_oid(uint32_t *oid, const char *s); /** * Accepts takes strings such as "XMSSMT-SHA2_20/2_256" * and outputs OIDs such as 0x01000001. * Returns -1 when the parameter set is not found, 0 otherwise */ int xmssmt_str_to_oid(uint32_t *oid, const char *s); /** * Accepts OIDs such as 0x01000001, and configures params accordingly. * Returns -1 when the OID is not found, 0 otherwise. */ int xmss_parse_oid(xmss_params *params, const uint32_t oid); /** * Accepts OIDs such as 0x01000001, and configures params accordingly. * Returns -1 when the OID is not found, 0 otherwise. */ int xmssmt_parse_oid(xmss_params *params, const uint32_t oid); /* Given a params struct where the following properties have been initialized; - full_height; the height of the complete (hyper)tree - n; the number of bytes of hash function output - d; the number of layers (d > 1 implies XMSSMT) - func; one of {XMSS_SHA2, XMSS_SHAKE} - wots_w; the Winternitz parameter - optionally, bds_k; the BDS traversal trade-off parameter, this function initializes the remainder of the params structure. */ int xmss_xmssmt_initialize_params(xmss_params *params); #endif