1224ba2bdSOllivier Robert /* 2224ba2bdSOllivier Robert * ntp_crypto.h - definitions for cryptographic operations 3224ba2bdSOllivier Robert */ 4224ba2bdSOllivier Robert #ifdef AUTOKEY 5224ba2bdSOllivier Robert #include "global.h" 6224ba2bdSOllivier Robert #include "md5.h" 7224ba2bdSOllivier Robert #ifdef RSAREF 8224ba2bdSOllivier Robert #include "rsaref.h" 9224ba2bdSOllivier Robert #include "rsa.h" 10224ba2bdSOllivier Robert 11224ba2bdSOllivier Robert #define EVP_SignInit(a, b) R_SignInit(a, b) 12224ba2bdSOllivier Robert #define EVP_SignUpdate(a, b, c) R_SignUpdate(a, b, c); 13224ba2bdSOllivier Robert #define EVP_SignFinal(a, b, c, d) R_SignFinal(a, b, c, d); 14224ba2bdSOllivier Robert #define EVP_VerifyInit(a, b) R_VerifyInit(a, b) 15224ba2bdSOllivier Robert #define EVP_VerifyUpdate(a, b, c) R_VerifyUpdate(a, b, c); 16224ba2bdSOllivier Robert #define EVP_VerifyFinal(a, b, c, d) R_VerifyFinal(a, b, c, d); 17224ba2bdSOllivier Robert 18224ba2bdSOllivier Robert #endif /* RSAREF */ 19224ba2bdSOllivier Robert 20224ba2bdSOllivier Robert /* 21224ba2bdSOllivier Robert * Cryptostatus word 22224ba2bdSOllivier Robert */ 23224ba2bdSOllivier Robert #define CRYPTO_FLAG_ENAB 0x01 /* crypto enable */ 24224ba2bdSOllivier Robert #define CRYPTO_FLAG_RSA 0x02 /* public/private keys */ 25224ba2bdSOllivier Robert #define CRYPTO_FLAG_CERT 0x04 /* certificate */ 26224ba2bdSOllivier Robert #define CRYPTO_FLAG_DH 0x08 /* agreement parameters */ 27224ba2bdSOllivier Robert #define CRYPTO_FLAG_TAI 0x10 /* leapseconds table */ 28224ba2bdSOllivier Robert 29224ba2bdSOllivier Robert /* 30224ba2bdSOllivier Robert * Extension field definitions 31224ba2bdSOllivier Robert */ 32224ba2bdSOllivier Robert #define CRYPTO_VN 1 /* current protocol version number */ 33224ba2bdSOllivier Robert 34224ba2bdSOllivier Robert #define CRYPTO_NULL ((CRYPTO_VN << 8) | 0) /* no operation */ 35224ba2bdSOllivier Robert #define CRYPTO_STAT ((CRYPTO_VN << 8) | 1) /* status */ 36224ba2bdSOllivier Robert #define CRYPTO_ASSOC ((CRYPTO_VN << 8) | 2) /* association ID */ 37224ba2bdSOllivier Robert #define CRYPTO_AUTO ((CRYPTO_VN << 8) | 3) /* autokey values */ 38224ba2bdSOllivier Robert #define CRYPTO_PRIV ((CRYPTO_VN << 8) | 4) /* cookie value */ 39224ba2bdSOllivier Robert #define CRYPTO_DHPAR ((CRYPTO_VN << 8) | 5) /* agreement params */ 40224ba2bdSOllivier Robert #define CRYPTO_DH ((CRYPTO_VN << 8) | 6) /* public value */ 41224ba2bdSOllivier Robert #define CRYPTO_NAME ((CRYPTO_VN << 8) | 7) /* host name/pub key */ 42224ba2bdSOllivier Robert #define CRYPTO_CERT ((CRYPTO_VN << 8) | 8) /* PKI certificate */ 43224ba2bdSOllivier Robert #define CRYPTO_TAI ((CRYPTO_VN << 8) | 9) /* leapseconds table */ 44224ba2bdSOllivier Robert #define CRYPTO_RESP 0x8000 /* response */ 45224ba2bdSOllivier Robert #define CRYPTO_ERROR 0x4000 /* error */ 46224ba2bdSOllivier Robert 47224ba2bdSOllivier Robert #ifdef PUBKEY 48224ba2bdSOllivier Robert /* 49224ba2bdSOllivier Robert * Configuration codes 50224ba2bdSOllivier Robert */ 51224ba2bdSOllivier Robert #define CRYPTO_CONF_NONE 0 /* nothing doing */ 52224ba2bdSOllivier Robert #define CRYPTO_CONF_FLAGS 1 /* initialize flags */ 53224ba2bdSOllivier Robert #define CRYPTO_CONF_PRIV 2 /* load private key from file */ 54224ba2bdSOllivier Robert #define CRYPTO_CONF_PUBL 3 /* load public key from file */ 55224ba2bdSOllivier Robert #define CRYPTO_CONF_DH 4 /* load Diffie_Hellman pars from file */ 56224ba2bdSOllivier Robert #define CRYPTO_CONF_LEAP 5 /* load leapsecond table */ 57224ba2bdSOllivier Robert #define CRYPTO_CONF_KEYS 6 /* set keys directory path */ 58224ba2bdSOllivier Robert #define CRYPTO_CONF_CERT 7 /* load PKI certificate from file */ 59224ba2bdSOllivier Robert #endif /* PUBKEY */ 60224ba2bdSOllivier Robert 61224ba2bdSOllivier Robert /* 62224ba2bdSOllivier Robert * Function prototypes 63224ba2bdSOllivier Robert */ 64224ba2bdSOllivier Robert extern void crypto_recv P((struct peer *, struct recvbuf *)); 65224ba2bdSOllivier Robert extern int crypto_xmit P((u_int32 *, int, u_int, keyid_t, 66224ba2bdSOllivier Robert u_int)); 67224ba2bdSOllivier Robert extern keyid_t session_key P((struct sockaddr_in *, struct 68224ba2bdSOllivier Robert sockaddr_in *, keyid_t, keyid_t, 69224ba2bdSOllivier Robert u_long)); 70224ba2bdSOllivier Robert extern void make_keylist P((struct peer *, struct interface *)); 71224ba2bdSOllivier Robert extern void key_expire P((struct peer *)); 72224ba2bdSOllivier Robert extern void crypto_agree P((void)); 73224ba2bdSOllivier Robert #ifdef PUBKEY 74224ba2bdSOllivier Robert extern void crypto_config P((int, char *)); 75224ba2bdSOllivier Robert extern void crypto_setup P((void)); 76224ba2bdSOllivier Robert extern int crypto_public P((struct peer *, u_char *, u_int)); 77224ba2bdSOllivier Robert #endif /* PUBKEY */ 78224ba2bdSOllivier Robert 79224ba2bdSOllivier Robert /* 80224ba2bdSOllivier Robert * Cryptographic values 81224ba2bdSOllivier Robert */ 82224ba2bdSOllivier Robert extern u_int crypto_flags; /* status word */ 83224ba2bdSOllivier Robert #ifdef PUBKEY 84224ba2bdSOllivier Robert extern R_DH_PARAMS dh_params; 85224ba2bdSOllivier Robert extern struct value host; /* host name/public key */ 86224ba2bdSOllivier Robert extern struct value certif; /* certificate */ 87224ba2bdSOllivier Robert extern struct value dhparam; /* agreement parameters */ 88224ba2bdSOllivier Robert extern struct value dhpub; /* public value */ 89224ba2bdSOllivier Robert extern struct value tai_leap; /* leapseconds table */ 90224ba2bdSOllivier Robert extern u_int crypto_flags; /* status word */ 91224ba2bdSOllivier Robert extern u_int sys_tai; /* current UTC offset from TAI */ 92224ba2bdSOllivier Robert #endif /* PUBKEY */ 93224ba2bdSOllivier Robert #endif /* AUTOKEY */ 94