Annotation of embedaddon/ntp/include/ntp_crypto.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * ntp_crypto.h - definitions for cryptographic operations
                      3:  */
                      4: #ifndef NTP_CRYPTO_H
                      5: #define NTP_CRYPTO_H
                      6: 
                      7: /*
                      8:  * Configuration codes (also needed for parser without OPENSSL)
                      9:  */
                     10: #define CRYPTO_CONF_NONE  0    /* nothing doing */
                     11: #define CRYPTO_CONF_PRIV  1    /* host keys file name */
                     12: #define CRYPTO_CONF_SIGN  2    /* signature keys file name */
                     13: #define CRYPTO_CONF_CERT  3    /* certificate file name */
                     14: #define CRYPTO_CONF_RAND  4    /* random seed file name */
                     15: #define CRYPTO_CONF_IFFPAR 5   /* IFF parameters file name */
                     16: #define CRYPTO_CONF_GQPAR 6    /* GQ parameters file name */
                     17: #define        CRYPTO_CONF_MVPAR 7     /* MV parameters file name */
                     18: #define CRYPTO_CONF_PW   8     /* private key password */
                     19: #define        CRYPTO_CONF_IDENT 9     /* specify identity scheme */
                     20: #define        CRYPTO_CONF_NID   10    /* specify digest name */
                     21: 
                     22: #ifdef OPENSSL
                     23: #include "openssl/evp.h"
                     24: 
                     25: /*
                     26:  * The following bits are set by the CRYPTO_ASSOC message from
                     27:  * the server and are not modified by the client.
                     28:  */
                     29: #define CRYPTO_FLAG_ENAB  0x0001 /* crypto enable */
                     30: #define CRYPTO_FLAG_TAI   0x0002 /* leapseconds table */
                     31: 
                     32: #define CRYPTO_FLAG_PRIV  0x0010 /* PC identity scheme */
                     33: #define CRYPTO_FLAG_IFF   0x0020 /* IFF identity scheme */
                     34: #define CRYPTO_FLAG_GQ   0x0040 /* GQ identity scheme */
                     35: #define        CRYPTO_FLAG_MV    0x0080 /* MV identity scheme */
                     36: #define CRYPTO_FLAG_MASK  0x00f0 /* identity scheme mask */
                     37:        
                     38: /*
                     39:  * The following bits are used by the client during the protocol
                     40:  * exchange.
                     41:  */
                     42: #define CRYPTO_FLAG_CERT  0x0100 /* public key verified */
                     43: #define CRYPTO_FLAG_VRFY  0x0200 /* identity verified */
                     44: #define CRYPTO_FLAG_PROV  0x0400 /* signature verified */
                     45: #define CRYPTO_FLAG_COOK  0x0800 /* cookie verifed */
                     46: #define CRYPTO_FLAG_AUTO  0x1000 /* autokey verified */
                     47: #define CRYPTO_FLAG_SIGN  0x2000 /* certificate signed */
                     48: #define CRYPTO_FLAG_LEAP  0x4000 /* leapsecond values verified */
                     49: #define        CRYPTO_FLAG_ALL   0x7f00 /* all mask */
                     50: 
                     51: /*
                     52:  * Flags used for certificate management
                     53:  */
                     54: #define        CERT_TRUST      0x01    /* certificate is trusted */
                     55: #define CERT_SIGN      0x02    /* certificate is signed */
                     56: #define CERT_VALID     0x04    /* certificate is valid */
                     57: #define CERT_PRIV      0x08    /* certificate is private */
                     58: #define CERT_ERROR     0x80    /* certificate has errors */
                     59: 
                     60: /*
                     61:  * Extension field definitions
                     62:  */
                     63: #define        CRYPTO_MAXLEN   1024    /* max extension field length */
                     64: #define CRYPTO_VN      2       /* current protocol version number */
                     65: #define CRYPTO_CMD(x)  (((CRYPTO_VN << 8) | (x)) << 16)
                     66: #define CRYPTO_NULL    CRYPTO_CMD(0) /* no operation */
                     67: #define CRYPTO_ASSOC   CRYPTO_CMD(1) /* association */
                     68: #define CRYPTO_CERT    CRYPTO_CMD(2) /* certificate */
                     69: #define CRYPTO_COOK    CRYPTO_CMD(3) /* cookie value */
                     70: #define CRYPTO_AUTO    CRYPTO_CMD(4) /* autokey values */
                     71: #define CRYPTO_LEAP    CRYPTO_CMD(5) /* leapsecond values */
                     72: #define        CRYPTO_SIGN     CRYPTO_CMD(6) /* certificate sign */
                     73: #define CRYPTO_IFF     CRYPTO_CMD(7) /* IFF identity scheme */
                     74: #define CRYPTO_GQ      CRYPTO_CMD(8) /* GQ identity scheme */
                     75: #define        CRYPTO_MV       CRYPTO_CMD(9) /* MV identity scheme */
                     76: #define CRYPTO_RESP    0x80000000 /* response */
                     77: #define CRYPTO_ERROR   0x40000000 /* error */
                     78: 
                     79: /*
                     80:  * Autokey event codes
                     81:  */
                     82: #define XEVNT_CMD(x)   (CRPT_EVENT | (x))
                     83: #define XEVNT_OK       XEVNT_CMD(0) /* success */
                     84: #define XEVNT_LEN      XEVNT_CMD(1) /* bad field format or length */
                     85: #define XEVNT_TSP      XEVNT_CMD(2) /* bad timestamp */
                     86: #define XEVNT_FSP      XEVNT_CMD(3) /* bad filestamp */
                     87: #define XEVNT_PUB      XEVNT_CMD(4) /* bad or missing public key */
                     88: #define XEVNT_MD       XEVNT_CMD(5) /* unsupported digest type */
                     89: #define XEVNT_KEY      XEVNT_CMD(6) /* unsupported identity type */
                     90: #define XEVNT_SGL      XEVNT_CMD(7) /* bad signature length */
                     91: #define XEVNT_SIG      XEVNT_CMD(8) /* signature not verified */
                     92: #define XEVNT_VFY      XEVNT_CMD(9) /* certificate not verified */
                     93: #define XEVNT_PER      XEVNT_CMD(10) /* host certificate expired */
                     94: #define XEVNT_CKY      XEVNT_CMD(11) /* bad or missing cookie */
                     95: #define XEVNT_DAT      XEVNT_CMD(12) /* bad or missing leapseconds */
                     96: #define XEVNT_CRT      XEVNT_CMD(13) /* bad or missing certificate */
                     97: #define XEVNT_ID       XEVNT_CMD(14) /* bad or missing group key */
                     98: #define        XEVNT_ERR       XEVNT_CMD(15) /* protocol error */
                     99: 
                    100: /*
                    101:  * Miscellaneous crypto stuff
                    102:  */
                    103: #define NTP_MAXSESSION 100     /* maximum session key list entries */
                    104: #define        NTP_MAXEXTEN    2048    /* maximum extension field size */
                    105: #define        NTP_AUTOMAX     12      /* default key list timeout (log2 s) */
                    106: #define        KEY_REVOKE      17      /* default key revoke timeout (log2 s) */
                    107: #define        NTP_REFRESH     19      /* default restart timeout (log2 s) */
                    108: #define        NTP_MAXKEY      65535   /* maximum symmetric key ID */
                    109: 
                    110: /*
                    111:  * The autokey structure holds the values used to authenticate key IDs.
                    112:  */
                    113: struct autokey {               /* network byte order */
                    114:        keyid_t key;            /* key ID */
                    115:        int32   seq;            /* key number */
                    116: };
                    117: 
                    118: /*
                    119:  * The value structure holds variable length data such as public
                    120:  * key, agreement parameters, public valule and leapsecond table.
                    121:  * They are in network byte order.
                    122:  */
                    123: struct value {                 /* network byte order */
                    124:        tstamp_t tstamp;        /* timestamp */
                    125:        tstamp_t fstamp;        /* filestamp */
                    126:        u_int32 vallen;         /* value length */
                    127:        u_char  *ptr;           /* data pointer (various) */
                    128:        u_int32 siglen;         /* signature length */
                    129:        u_char  *sig;           /* signature */
                    130: };
                    131: 
                    132: /*
                    133:  * The packet extension field structures are used to hold values
                    134:  * and signatures in network byte order.
                    135:  */
                    136: struct exten {
                    137:        u_int32 opcode;         /* opcode */
                    138:        u_int32 associd;        /* association ID */
                    139:        u_int32 tstamp;         /* timestamp */
                    140:        u_int32 fstamp;         /* filestamp */
                    141:        u_int32 vallen;         /* value length */
                    142:        u_int32 pkt[1];         /* start of value field */
                    143: };
                    144: 
                    145: /*
                    146:  * The certificate info/value structure
                    147:  */
                    148: struct cert_info {
                    149:        struct cert_info *link; /* forward link */
                    150:        u_int   flags;          /* flags that wave */
                    151:        EVP_PKEY *pkey;         /* generic key */
                    152:        long    version;        /* X509 version */
                    153:        int     nid;            /* signature/digest ID */
                    154:        const EVP_MD *digest;   /* message digest algorithm */
                    155:        u_long  serial;         /* serial number */
                    156:        tstamp_t first;         /* not valid before */
                    157:        tstamp_t last;          /* not valid after */
                    158:        char    *subject;       /* subject common name */
                    159:        char    *issuer;        /* issuer common name */
                    160:        BIGNUM  *grpkey;        /* GQ group key */
                    161:        struct value cert;      /* certificate/value */
                    162: };
                    163: 
                    164: /*
                    165:  * The keys info/value structure
                    166:  */
                    167: struct pkey_info {
                    168:        struct pkey_info *link; /* forward link */
                    169:        EVP_PKEY *pkey;         /* generic key */
                    170:        char    *name;          /* file name */
                    171:        tstamp_t fstamp;        /* filestamp */
                    172: };
                    173: 
                    174: /*
                    175:  * Cryptographic values
                    176:  */
                    177: extern u_int   crypto_flags;   /* status word */
                    178: extern int     crypto_nid;     /* digest nid */
                    179: extern struct value hostval;   /* host name/value */
                    180: extern struct cert_info *cinfo; /* host certificate information */
                    181: extern struct value tai_leap;  /* leapseconds table */
                    182: #endif /* OPENSSL */
                    183: #endif /* NTP_CRYPTO_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>