lcr/crypt.h

174 lines
5.5 KiB
C

/*****************************************************************************\
** **
** PBX4Linux **
** **
**---------------------------------------------------------------------------**
** Copyright: Andreas Eversberg **
** **
** crypt header file **
** **
\*****************************************************************************/
enum { /* enpoint's user states */
CRYPT_OFF, /* no encryption */
CRYPT_KWAIT, /* wait for key-exchange mehtod */
CRYPT_SWAIT, /* wait for shared secret method */
CRYPT_ON, /* crypting */
CRYPT_RELEASE, /* wait for deactivation */
};
#define CM_TO_IDENT 10 /* timeout for identifying remote peer */
#define CM_TO_PUBKEY 60 /* timeout for public key generation */
#define CM_TO_CSKEY 5 /* timeout for crypting session key */
enum { /* crypt manager states */
CM_ST_NULL, /* no encryption used */
CM_ST_IDENT, /* find the remote pary */
CM_ST_KEYGEN, /* generating public/private key */
CM_ST_KEYWAIT, /* waiting for public key */
CM_ST_CSKEY, /* generate crypted session key */
CM_ST_CSWAIT, /* wait for CSKey */
CM_ST_SESSION, /* wait for session key decryption */
CM_ST_WAIT_DELAY, /* wait sone time until the cskey is transferred */
CM_ST_WAIT_CRYPT, /* wait for encryption from session engine */
CM_ST_ACTIVE, /* done with encryption */
CM_ST_RELEASE, /* wait until key engine has finished, after abort */
CM_ST_SWAIT, /* wait for share key establishment */
CM_ST_SACTIVE, /* shared key established */
};
#define CM_ST_NAMES \
static const char *cm_st_name[] = { \
"NULL", \
"IDENT", \
"KEYGEN", \
"KEYWAIT", \
"CSKEY", \
"CSWAIT", \
"SESSION", \
"WAIT_DELAY", \
"WAIT_CRYPT", \
"ACTIVE", \
"RELEASE", \
"SWAIT", \
"SACTIVE", \
}; \
int cm_st_num = sizeof(cm_st_name) / sizeof(char *);
enum { /* messages */
/* messages to/from peer */
CP_IDENT, /* send random number, cpu power */
CP_SLAVE, /* tell remote to be slave */
CP_MASTER, /* tell remote to be master */
CP_LOOPED, /* tell remote (us) that the call is looped */
CP_PUBKEY, /* send public key */
CP_CSKEY, /* send encrypted session key */
CP_ABORT, /* send abort message */
/* messages to/from "key engine" */
CK_GENRSA_REQ, /* generate rsa key */
CK_GENRSA_CONF, /* rsa key result */
CK_CPTRSA_REQ, /* crypt session key */
CK_CPTRSA_CONF, /* session key result */
CK_DECRSA_REQ, /* decode session key */
CK_DECRSA_CONF, /* session key result */
CK_ERROR_IND, /* error of engine */
/* messages to/from "crypt engine" */
CC_ACTBF_REQ, /* activate blowfish */
CC_ACTBF_CONF, /* blowfish activated */
CC_ERROR_IND, /* failed to activate session encryption */
CC_DACT_REQ, /* deactivate session encryption */
/* messages to/from user interface */
CU_ACTK_REQ, /* request encryption with key exchange */
CU_ACTK_CONF, /* encryption now active */
CU_ACTS_REQ, /* request shared key encryption */
CU_ACTS_CONF, /* encryption now active */
CU_ERROR_IND, /* encryption failed */
CU_INFO_REQ, /* info reques */
CU_INFO_CONF, /* info to the user*/
CU_INFO_IND, /* info to the user*/
CU_DACT_REQ, /* deactivate encryption */
CU_DACT_CONF, /* encryption now inactive */
CU_DACT_IND, /* encryption now inactive */
/* messages to/from message transponder */
CR_LISTEN_REQ, /* start listening to messages */
CR_UNLISTEN_REQ, /* stop listening to messages */
CR_MESSAGE_REQ, /* send message */
CR_MESSAGE_IND, /* receive message */
/* messages from ISDN */
CI_DISCONNECT_IND, /* call is disconnected */
/* message timeout */
CT_TIMEOUT, /* current state timed out */
};
#define CM_MSG_NAMES \
static const char *cm_msg_name[] = { \
"CP_IDENT", \
"CP_SLAVE", \
"CP_MASTER", \
"CP_LOOPED", \
"CP_PUBKEY", \
"CP_CSKEY", \
"CP_ABORT", \
"CK_GENRSA_REQ", \
"CK_GENRSA_CONF", \
"CK_CPTRSA_REQ", \
"CK_CPTRSA_CONF", \
"CK_DECRSA_REQ", \
"CK_DECRSA_CONF", \
"CK_ERROR_IND", \
"CC_ACTBF_REQ", \
"CC_ACTBF_CONF", \
"CC_ERROR_IND", \
"CC_DACT_REQ", \
"CU_ACTK_REQ", \
"CU_ACTK_CONF", \
"CU_ACTS_REQ", \
"CU_ACTS_CONF", \
"CU_ERROR_IND", \
"CU_INFO_REQ", \
"CU_INFO_CONF", \
"CU_INFO_IND", \
"CU_DACT_REQ", \
"CU_DACT_CONF", \
"CU_DACT_IND", \
"CR_LISTEN_REQ", \
"CR_UNLISTEN_REQ", \
"CR_MESSAGE_REQ", \
"CR_MESSAGE_IND", \
"CI_DISCONNECT_IND", \
"CT_TIMEOUT", \
}; \
int cm_msg_num = sizeof(cm_msg_name) / sizeof(char *);
/* peer2peer messages */
#define CMSG_IDENT 0x01
#define CMSG_MASTER 0x11
#define CMSG_SLAVE 0x12
#define CMSG_LOOPED 0x13
#define CMSG_PUBKEY 0x21
#define CMSG_CSKEY 0x22
#define CMSG_ABORT 0x81
/* peer2peer info elements */
#define CM_INFO_MESSAGE 0x01
#define CM_INFO_RANDOM 0x10
#define CM_INFO_BOGOMIPS 0x11
#define CM_INFO_PUBKEY 0x12
#define CM_INFO_PUBEXPONENT 0x13
#define CM_INFO_CSKEY 0x14
#define CM_ADDINF(a, b, c) \
cryptman_addinf(buf, sizeof(buf), a, b, c);
#define CM_SIZEOFINF(a) \
cryptman_sizeofinf(param, a);
#define CM_GETINF(a, b) \
cryptman_getinf(param, a, b);
void crc_init(void);
unsigned int crc32(unsigned char *data, int len);
int cryptman_encode_bch(unsigned char *data, int len, unsigned char *buf, int buf_len);
int crypt_handler(struct lcr_timer *timer, void *instance, int index);