/* * Secure eXtended Message Passing framework * Secure eXtended Transport layer implementation: (libsxt) * - very similar to SSH2/TLS * - using already proven and tested crypto algos * - better than TLS for message passing * * General sxt API and structures * * (c) Alexander Vdolainen 2016 * * libsxmp is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 2.1 of the License, or * (at your option) any later version. * * libsxmp is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see ."; * */ #ifndef __SXT_SXT_H__ #define __SXT_SXT_H__ #define SXT_AUTH_PASSWORD (1 << 1) #define SXT_AUTH_PEERKEY (1 << 2) #define SXT_AUTH_PEERHASH (1 << 3) #define SXTPROTO_VERSION 1 #define SXTBEER_TYPE "lager" typedef struct __sxtlink_type { uint64_t unuuid; uint8_t unique[16]; uint8_t state; /* sets keys */ sxtkey_t *pubkey; sxtkey_t *privkey; /* peer stuff */ ndbuf_t *loginpass_pair; sxtkey_t *peer_pubkey; /* socket */ sxtsocket_t *socket; void *priv; } sxtlink_t; typedef struct __sxtset_type { /* flags for authentification */ uint8_t auth_types; /* timeouts in secs */ uint32_t session_tm; /* timeout for session i.e. secs to forget about session while socket io error */ uint32_t session_lt; /* session life time i.e. when session will be closed, 0 if infinite */ sxtkey_t *pubkey; sxtkey_t *privkey; /* authentification ops */ struct { int (*auth_loginpass_pair)(sxtlink_t *, void *); int (*auth_key_peer)(sxtlink_t *, void *); } auth_ops; /* options */ uint64_t hash; const char *strctx; void *priv; } sxtset_t; typedef struct __sxtsession_type { uint8_t unique[16]; uint8_t state; sxtlink_t *link; sxtset_t *linkset; int sxt_version; uint64_t peer_swhash; sxtsafebuffer_t *peerbeer; /* stats */ uint64_t rcv_pck; uint64_t snd_pck; } sxtsession_t; int sxt_init(void); int sxt_finish(void); int sxt_reseed(void); /* plain text beer exchange :) */ int sxt_scanbeer(sxtsession_t *, const char *, size_t); int sxt_genbeer(sxtsession_t *, sxtsafebuffer_t *); #endif /* __SXT_SXT_H__ */