summaryrefslogtreecommitdiff
path: root/code/core.h
diff options
context:
space:
mode:
Diffstat (limited to 'code/core.h')
-rw-r--r--code/core.h321
1 files changed, 0 insertions, 321 deletions
diff --git a/code/core.h b/code/core.h
deleted file mode 100644
index 33dd6d2..0000000
--- a/code/core.h
+++ /dev/null
@@ -1,321 +0,0 @@
-#define ECP_OK 0
-#define ECP_ERR -1
-#define ECP_ERR_TIMEOUT -2
-#define ECP_ERR_ALLOC -3
-
-#define ECP_ERR_MAX_SOCK_CONN -10
-#define ECP_ERR_MAX_CTYPE -11
-#define ECP_ERR_MAX_MTYPE -12
-#define ECP_ERR_MIN_PKT -13
-#define ECP_ERR_MAX_PLD -14
-#define ECP_ERR_MIN_MSG -15
-#define ECP_ERR_MAX_MSG -16
-#define ECP_ERR_NET_ADDR -17
-
-#define ECP_ERR_CONN_NOT_FOUND -20
-#define ECP_ERR_ECDH_KEY_DUP -21
-#define ECP_ERR_ECDH_IDX -22
-#define ECP_ERR_ECDH_IDX_LOCAL -23
-#define ECP_ERR_ECDH_IDX_REMOTE -24
-#define ECP_ERR_RNG -25
-#define ECP_ERR_ENCRYPT -26
-#define ECP_ERR_DECRYPT -27
-#define ECP_ERR_SEND -28
-#define ECP_ERR_RECV -29
-#define ECP_ERR_SEQ -30
-#define ECP_ERR_CLOSED -31
-#define ECP_ERR_HANDLE -32
-#define ECP_ERR_NOT_IMPLEMENTED -99
-
-#define ECP_SIZE_PROTO 2
-#define ECP_SIZE_SEQ 4
-
-#define ECP_MAX_SOCK_CONN 16
-#define ECP_MAX_SOCK_KEY 8
-#define ECP_MAX_CONN_KEY 2
-#define ECP_MAX_NODE_KEY 2
-#define ECP_MAX_CTYPE 8
-#define ECP_MAX_MTYPE 16
-
-#define ECP_SIZE_PKT_HDR (ECP_SIZE_PROTO+1+ECP_ECDH_SIZE_KEY+ECP_AEAD_SIZE_NONCE)
-#define ECP_SIZE_PLD_HDR (ECP_SIZE_SEQ)
-#define ECP_SIZE_MSG_HDR (ECP_SIZE_PLD_HDR+1)
-
-#define ECP_MAX_PKT 1412
-#define ECP_MAX_PLD (ECP_MAX_PKT-ECP_SIZE_PKT_HDR-ECP_AEAD_SIZE_TAG)
-#define ECP_MAX_MSG (ECP_MAX_PLD-ECP_SIZE_MSG_HDR)
-
-#define ECP_MIN_MSG 8
-#define ECP_MIN_PLD (ECP_SIZE_MSG_HDR+ECP_MIN_MSG)
-#define ECP_MIN_PKT (ECP_SIZE_PKT_HDR+ECP_MIN_PLD+ECP_AEAD_SIZE_TAG)
-
-#define ECP_POLL_TIMEOUT 500
-#define ECP_ECDH_IDX_INV 0xFF
-#define ECP_ECDH_IDX_PERMA 0x0F
-
-#define ECP_MTYPE_OPEN 0x00
-#define ECP_MTYPE_KGET 0x01
-#define ECP_MTYPE_KPUT 0x02
-#define ECP_MTYPE_EXEC 0x03
-
-#define ECP_SIZE_PLD(X) ((X) < ECP_MIN_MSG ? ECP_MIN_MSG + ECP_SIZE_MSG_HDR : (X) + ECP_SIZE_MSG_HDR)
-#define ECP_SIZE_PKT(X) ((X) < ECP_MIN_MSG ? ECP_MIN_MSG + ECP_SIZE_PKT_HDR+ECP_SIZE_MSG_HDR+ECP_AEAD_SIZE_TAG : (X) + ECP_SIZE_PKT_HDR+ECP_SIZE_MSG_HDR+ECP_AEAD_SIZE_TAG)
-
-#define ECP_CONN_FLAG_REG 0x01
-#define ECP_CONN_FLAG_OPEN 0x02
-
-#define ecp_conn_is_reg(conn) ((conn->flags) & ECP_CONN_FLAG_REG)
-#define ecp_conn_is_open(conn) ((conn->flags) & ECP_CONN_FLAG_OPEN)
-
-#include "config.h"
-
-#include <stddef.h>
-typedef long ssize_t;
-
-#ifdef ECP_WITH_PTHREAD
-#include <pthread.h>
-#endif
-
-#include "posix/transport.h"
-#include "crypto/crypto.h"
-#include "timer.h"
-
-#ifdef ECP_WITH_PTHREAD
-#include "msgq.h"
-#endif
-
-#ifdef ECP_DEBUG
-#include <stdio.h>
-#define DPRINT(cnd, format, ...) { if (cnd) { fprintf (stderr, format, __VA_ARGS__); } }
-#else
-#define DPRINT(cnd, format, ...) {}
-#endif
-
-struct ECPContext;
-struct ECPSocket;
-struct ECPConnection;
-
-typedef int ecp_rng_t (void *, size_t);
-
-typedef int ecp_conn_handler_new_t (struct ECPSocket *s, struct ECPConnection **c, struct ECPConnection *p, unsigned char s_idx, unsigned char c_idx, unsigned char *pub, ecp_aead_key_t *sh, unsigned char *msg, size_t sz);
-typedef ssize_t ecp_conn_handler_msg_t (struct ECPConnection *c, unsigned char t, unsigned char *msg, ssize_t sz);
-
-typedef struct ECPConnection * ecp_conn_alloc_t (unsigned char t);
-typedef void ecp_conn_free_t (struct ECPConnection *c);
-typedef int ecp_conn_create_t (struct ECPConnection *c, unsigned char *msg, size_t sz);
-typedef void ecp_conn_destroy_t (struct ECPConnection *c);
-typedef ssize_t ecp_conn_open_t (struct ECPConnection *c);
-
-typedef struct ECPCryptoIface {
- int init;
- int (*dh_mkpair) (ecp_dh_public_t *p, ecp_dh_private_t *s, ecp_rng_t *rb);
- int (*dh_shsec) (ecp_aead_key_t *sh, ecp_dh_public_t *p, ecp_dh_private_t *s);
- unsigned char *(*dh_pub_get_buf) (ecp_dh_public_t *p);
- void (*dh_pub_to_buf) (unsigned char *b, ecp_dh_public_t *p);
- void (*dh_pub_from_buf) (ecp_dh_public_t *p, unsigned char *b);
- int (*dh_pub_eq) (unsigned char *p1, ecp_dh_public_t *p2);
- unsigned int (*dh_pub_hash_fn) (unsigned char *p);
- int (*dh_pub_hash_eq) (unsigned char *p1, unsigned char *p2);
-
- ssize_t (*aead_enc) (unsigned char *ct, size_t cl, unsigned char *pt, size_t pl, ecp_aead_key_t *k, unsigned char *n);
- ssize_t (*aead_dec) (unsigned char *pt, size_t pl, unsigned char *ct, size_t cl, ecp_aead_key_t *k, unsigned char *n);
- int (*dsa_mkpair) (ecp_dsa_public_t *p, ecp_dsa_private_t *s, ecp_rng_t *rb);
- int (*dsa_sign) (unsigned char *sig, unsigned char *m, size_t ml, ecp_dsa_public_t *p, ecp_dsa_private_t *s);
- int (*dsa_verify) (unsigned char *m, size_t ml, unsigned char *sig, ecp_dsa_public_t *p);
-} ECPCryptoIface;
-
-typedef struct ECPHTableIface {
- int init;
- void *(*create) (struct ECPContext *c);
- void (*destroy) (void *t);
- int (*insert) (void *t, unsigned char *k, struct ECPConnection *v);
- struct ECPConnection *(*remove) (void *t, unsigned char *k);
- struct ECPConnection *(*search) (void *t, unsigned char *k);
-} ECPHTableIface;
-
-typedef struct ECPTransportIface {
- int init;
- int (*open) (ECPNetSock *, void *addr);
- void (*close) (ECPNetSock *);
- int (*poll) (ECPNetSock *, int);
- ssize_t (*send) (ECPNetSock *, void *, size_t, ECPNetAddr *);
- ssize_t (*recv) (ECPNetSock *, void *, size_t, ECPNetAddr *);
- int (*addr_eq) (ECPNetAddr *, ECPNetAddr *);
- int (*addr_set) (ECPNetAddr *, void *addr);
-} ECPTransportIface;
-
-typedef struct ECPTimeIface {
- int init;
- unsigned int (*abstime_ms) (unsigned int);
- void (*sleep_ms) (unsigned int);
-} ECPTimeIface;
-
-typedef struct ECPProxyIface {
- int init;
- ssize_t (*pack) (struct ECPConnection *conn, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, unsigned char *payload, size_t payload_size);
- ssize_t (*pack_raw) (struct ECPConnection *proxy, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, ecp_dh_public_t *public, ecp_aead_key_t *shsec, unsigned char *nonce, unsigned char *seq, unsigned char *payload, size_t payload_size);
-} ECPProxyIface;
-
-typedef struct ECPDHKey {
- ecp_dh_public_t public;
- ecp_dh_private_t private;
- unsigned char valid;
-} ECPDHKey;
-
-typedef struct ECPDHRKey {
- unsigned char idx;
- ecp_dh_public_t public;
-} ECPDHRKey;
-
-typedef struct ECPDHShared {
- ecp_aead_key_t secret;
- unsigned char valid;
-} ECPDHShared;
-
-typedef struct ECPDHRKeyBucket {
- ECPDHRKey key[ECP_MAX_NODE_KEY];
- unsigned char key_curr;
- unsigned char key_idx_map[ECP_MAX_SOCK_KEY];
-} ECPDHRKeyBucket;
-
-typedef struct ECPNode {
- ECPNetAddr addr;
- ecp_dh_public_t public;
-} ECPNode;
-
-typedef struct ECPConnHandler {
- ecp_conn_handler_msg_t *msg[ECP_MAX_MTYPE];
- ecp_conn_create_t *conn_create;
- ecp_conn_destroy_t *conn_destroy;
- ecp_conn_open_t *conn_open;
-} ECPConnHandler;
-
-typedef struct ECPSockCTable {
- struct ECPConnection *array[ECP_MAX_SOCK_CONN];
- unsigned short size;
- void *htable;
-#ifdef ECP_WITH_PTHREAD
- pthread_mutex_t mutex;
-#endif
-} ECPSockCTable;
-
-typedef struct ECPContext {
- ecp_rng_t *rng;
- ecp_conn_alloc_t *conn_alloc;
- ecp_conn_free_t *conn_free;
- ECPCryptoIface cr;
- ECPHTableIface ht;
- ECPTransportIface tr;
- ECPTimeIface tm;
- ECPProxyIface pr;
- ECPConnHandler *handler[ECP_MAX_CTYPE];
-} ECPContext;
-
-typedef struct ECPSocket {
- ECPContext *ctx;
- unsigned char running;
- unsigned int poll_timeout;
- ECPNetSock sock;
- ECPDHKey key_perma;
- ECPDHKey key[ECP_MAX_SOCK_KEY];
- unsigned char key_curr;
- ECPSockCTable conn;
- ECPTimer timer;
- ecp_conn_handler_new_t *conn_new;
- ecp_conn_create_t *conn_create;
- ecp_conn_destroy_t *conn_destroy;
-#ifdef ECP_WITH_PTHREAD
- pthread_t rcvr_thd;
- pthread_mutex_t mutex;
-#endif
-} ECPSocket;
-
-typedef struct ECPConnection {
- unsigned char type;
- unsigned char out;
- unsigned char flags;
- unsigned short refcount;
- uint32_t seq_out;
- uint32_t seq_in;
- uint32_t seq_in_bitmap;
- ECPSocket *sock;
- ECPNode node;
- ECPDHRKeyBucket remote;
- ECPDHKey key[ECP_MAX_CONN_KEY];
- unsigned char key_curr;
- unsigned char key_idx[ECP_MAX_NODE_KEY];
- unsigned char key_idx_curr;
- unsigned char key_idx_map[ECP_MAX_SOCK_KEY];
- ECPDHShared shared[ECP_MAX_NODE_KEY][ECP_MAX_NODE_KEY];
- unsigned char nonce[ECP_AEAD_SIZE_NONCE];
-#ifdef ECP_WITH_PTHREAD
- ECPConnMsgQ msgq;
- pthread_mutex_t mutex;
-#endif
- struct ECPConnection *proxy;
- void *conn_data;
-} ECPConnection;
-
-int ecp_init(ECPContext *ctx);
-int ecp_crypto_init(ECPCryptoIface *t);
-int ecp_htable_init(ECPHTableIface *h);
-int ecp_transport_init(ECPTransportIface *t);
-int ecp_time_init(ECPTimeIface *t);
-
-int ecp_dhkey_generate(ECPContext *ctx, ECPDHKey *key);
-int ecp_node_init(ECPContext *ctx, ECPNode *node, void *addr, ecp_dh_public_t *public);
-
-int ecp_ctx_create(ECPContext *ctx);
-int ecp_ctx_destroy(ECPContext *ctx);
-
-int ecp_sock_create(ECPSocket *sock, ECPContext *ctx, ECPDHKey *key);
-void ecp_sock_destroy(ECPSocket *sock);
-int ecp_sock_open(ECPSocket *sock, void *myaddr);
-void ecp_sock_close(ECPSocket *sock);
-int ecp_sock_dhkey_get_curr(ECPSocket *sock, unsigned char *idx, unsigned char *public);
-int ecp_sock_dhkey_new(ECPSocket *sock);
-
-int ecp_conn_create(ECPConnection *conn, ECPSocket *sock, unsigned char ctype);
-void ecp_conn_destroy(ECPConnection *conn);
-int ecp_conn_register(ECPConnection *conn);
-void ecp_conn_unregister(ECPConnection *conn);
-
-int ecp_conn_init(ECPConnection *conn, ECPNode *node);
-int ecp_conn_open(ECPConnection *conn, ECPNode *node);
-int ecp_conn_close(ECPConnection *conn, unsigned int timeout);
-
-int ecp_conn_handler_init(ECPConnHandler *handler);
-ssize_t ecp_conn_send_open(ECPConnection *conn);
-int ecp_conn_handle_new(ECPSocket *sock, ECPConnection **_conn, ECPConnection *proxy, unsigned char s_idx, unsigned char c_idx, unsigned char *c_public, ecp_aead_key_t *shsec, unsigned char *payload, size_t payload_size);
-ssize_t ecp_conn_handle_open(ECPConnection *conn, unsigned char mtype, unsigned char *msg, ssize_t size);
-ssize_t ecp_conn_handle_kget(ECPConnection *conn, unsigned char mtype, unsigned char *msg, ssize_t size);
-ssize_t ecp_conn_handle_kput(ECPConnection *conn, unsigned char mtype, unsigned char *msg, ssize_t size);
-ssize_t ecp_conn_handle_exec(ECPConnection *conn, unsigned char mtype, unsigned char *msg, ssize_t size);
-
-int ecp_conn_dhkey_new(ECPConnection *conn);
-int ecp_conn_dhkey_new_pub(ECPConnection *conn, unsigned char idx, unsigned char *public);
-int ecp_conn_dhkey_get_curr(ECPConnection *conn, unsigned char *idx, unsigned char *public);
-
-ssize_t ecp_pack(ECPContext *ctx, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, ecp_dh_public_t *public, ecp_aead_key_t *shsec, unsigned char *nonce, unsigned char *seq, unsigned char *payload, size_t payload_size);
-ssize_t ecp_conn_pack(ECPConnection *conn, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, unsigned char *payload, size_t payload_size);
-ssize_t ecp_proxy_pack(ECPConnection *conn, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, unsigned char *payload, size_t payload_size);
-ssize_t ecp_proxy_pack_raw(ECPSocket *sock, ECPConnection *proxy, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size, unsigned char s_idx, unsigned char c_idx, ecp_dh_public_t *public, ecp_aead_key_t *shsec, unsigned char *nonce, unsigned char *seq, unsigned char *payload, size_t payload_size);
-
-ssize_t ecp_pkt_handle(ECPSocket *sock, ECPNetAddr *addr, ECPConnection *proxy, unsigned char *packet, size_t pkt_size);
-ssize_t ecp_pkt_send(ECPSocket *sock, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size);
-ssize_t ecp_pkt_recv(ECPSocket *sock, ECPNetAddr *addr, unsigned char *packet, size_t pkt_size);
-
-ssize_t ecp_msg_handle(ECPConnection *conn, unsigned char *msg, size_t msg_size);
-unsigned char *ecp_pld_get_buf(unsigned char *payload);
-void ecp_pld_set_type(unsigned char *payload, unsigned char mtype);
-unsigned char ecp_pld_get_type(unsigned char *payload);
-ssize_t ecp_pld_send(ECPConnection *conn, unsigned char *payload, size_t payload_size);
-ssize_t ecp_pld_send_wkey(ECPConnection *conn, unsigned char s_idx, unsigned char c_idx, unsigned char *payload, size_t payload_size);
-ssize_t ecp_pld_send_raw(ECPSocket *sock, ECPConnection *proxy, ECPNetAddr *addr, unsigned char s_idx, unsigned char c_idx, ecp_dh_public_t *public, ecp_aead_key_t *shsec, unsigned char *nonce, unsigned char *seq, unsigned char *payload, size_t payload_size);
-
-ssize_t ecp_send(ECPConnection *conn, unsigned char *payload, size_t payload_size);
-ssize_t ecp_receive(ECPConnection *conn, unsigned char mtype, unsigned char *msg, size_t msg_size, unsigned int timeout);
-
-int ecp_receiver(ECPSocket *sock);
-int ecp_start_receiver(ECPSocket *sock);
-int ecp_stop_receiver(ECPSocket *sock);