[BACK]Return to xmss_fast.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Annotation of src/usr.bin/ssh/xmss_fast.h, Revision 1.2

1.2     ! dtucker     1: /* $OpenBSD$ */
1.1       markus      2: /*
                      3: xmss_fast.h version 20160722
                      4: Andreas Hülsing
                      5: Joost Rijneveld
                      6: Public domain.
                      7: */
                      8:
                      9: #include "xmss_wots.h"
                     10:
                     11: #ifndef XMSS_H
                     12: #define XMSS_H
                     13: typedef struct{
                     14:   unsigned int level;
                     15:   unsigned long long subtree;
                     16:   unsigned int subleaf;
                     17: } leafaddr;
                     18:
                     19: typedef struct{
                     20:   wots_params wots_par;
                     21:   unsigned int n;
                     22:   unsigned int h;
                     23:   unsigned int k;
                     24: } xmss_params;
                     25:
                     26: typedef struct{
                     27:   xmss_params xmss_par;
                     28:   unsigned int n;
                     29:   unsigned int h;
                     30:   unsigned int d;
                     31:   unsigned int index_len;
                     32: } xmssmt_params;
                     33:
                     34: typedef struct{
                     35:   unsigned int h;
                     36:   unsigned int next_idx;
                     37:   unsigned int stackusage;
                     38:   unsigned char completed;
                     39:   unsigned char *node;
                     40: } treehash_inst;
                     41:
                     42: typedef struct {
                     43:   unsigned char *stack;
                     44:   unsigned int stackoffset;
                     45:   unsigned char *stacklevels;
                     46:   unsigned char *auth;
                     47:   unsigned char *keep;
                     48:   treehash_inst *treehash;
                     49:   unsigned char *retain;
                     50:   unsigned int next_leaf;
                     51: } bds_state;
                     52:
                     53: /**
                     54:  * Initialize BDS state struct
                     55:  * parameter names are the same as used in the description of the BDS traversal
                     56:  */
                     57: void xmss_set_bds_state(bds_state *state, unsigned char *stack, int stackoffset, unsigned char *stacklevels, unsigned char *auth, unsigned char *keep, treehash_inst *treehash, unsigned char *retain, int next_leaf);
                     58: /**
                     59:  * Initializes parameter set.
                     60:  * Needed, for any of the other methods.
                     61:  */
                     62: int xmss_set_params(xmss_params *params, int n, int h, int w, int k);
                     63: /**
                     64:  * Initialize xmssmt_params struct
                     65:  * parameter names are the same as in the draft
                     66:  *
                     67:  * Especially h is the total tree height, i.e. the XMSS trees have height h/d
                     68:  */
                     69: int xmssmt_set_params(xmssmt_params *params, int n, int h, int d, int w, int k);
                     70: /**
                     71:  * Generates a XMSS key pair for a given parameter set.
                     72:  * Format sk: [(32bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
                     73:  * Format pk: [root || PUB_SEED] omitting algo oid.
                     74:  */
                     75: int xmss_keypair(unsigned char *pk, unsigned char *sk, bds_state *state, xmss_params *params);
                     76: /**
                     77:  * Signs a message.
                     78:  * Returns
                     79:  * 1. an array containing the signature followed by the message AND
                     80:  * 2. an updated secret key!
                     81:  *
                     82:  */
                     83: int xmss_sign(unsigned char *sk, bds_state *state, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg,unsigned long long msglen, const xmss_params *params);
                     84: /**
                     85:  * Verifies a given message signature pair under a given public key.
                     86:  *
                     87:  * Note: msg and msglen are pure outputs which carry the message in case verification succeeds. The (input) message is assumed to be within sig_msg which has the form (sig||msg).
                     88:  */
                     89: int xmss_sign_open(unsigned char *msg,unsigned long long *msglen, const unsigned char *sig_msg,unsigned long long sig_msg_len, const unsigned char *pk, const xmss_params *params);
                     90:
                     91: /*
                     92:  * Generates a XMSSMT key pair for a given parameter set.
                     93:  * Format sk: [(ceil(h/8) bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
                     94:  * Format pk: [root || PUB_SEED] omitting algo oid.
                     95:  */
                     96: int xmssmt_keypair(unsigned char *pk, unsigned char *sk, bds_state *states, unsigned char *wots_sigs, xmssmt_params *params);
                     97: /**
                     98:  * Signs a message.
                     99:  * Returns
                    100:  * 1. an array containing the signature followed by the message AND
                    101:  * 2. an updated secret key!
                    102:  *
                    103:  */
                    104: int xmssmt_sign(unsigned char *sk, bds_state *state, unsigned char *wots_sigs, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmssmt_params *params);
                    105: /**
                    106:  * Verifies a given message signature pair under a given public key.
                    107:  */
                    108: int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmssmt_params *params);
                    109: #endif
                    110: