X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fsptps.h;h=f5686f4e8f1ddf2445385b428b3fb09605ebec11;hb=refs%2Fheads%2F1.1;hp=96edc366ab659cd4e837753e6e3ad8c841ded0ca;hpb=2c6b2d70e6640f39563ad7bb0aa0ba87f883848c;p=tinc diff --git a/src/sptps.h b/src/sptps.h index 96edc366..633eb810 100644 --- a/src/sptps.h +++ b/src/sptps.h @@ -47,6 +47,26 @@ typedef enum sptps_state_t { SPTPS_ACK = 4, // Waiting for an ACKnowledgement record } sptps_state_t; +PACKED(struct sptps_kex_t { + uint8_t version; + uint8_t nonce[ECDH_SIZE]; + uint8_t pubkey[ECDH_SIZE]; +}); + +typedef struct sptps_kex_t sptps_kex_t; + +STATIC_ASSERT(sizeof(sptps_kex_t) == 65, "sptps_kex_t has invalid size"); + +typedef union sptps_key_t { + struct { + uint8_t key0[CHACHA_POLY1305_KEYLEN]; + uint8_t key1[CHACHA_POLY1305_KEYLEN]; + }; + uint8_t both[CHACHA_POLY1305_KEYLEN * 2]; +} sptps_key_t; + +STATIC_ASSERT(sizeof(sptps_key_t) == 128, "sptps_key_t has invalid size"); + typedef struct sptps { bool initiator; bool datagram; @@ -72,9 +92,9 @@ typedef struct sptps { ecdsa_t *hiskey; ecdh_t *ecdh; - uint8_t *mykex; - uint8_t *hiskex; - uint8_t *key; + sptps_kex_t *mykex; + sptps_kex_t *hiskex; + sptps_key_t *key; uint8_t *label; size_t labellen; @@ -84,9 +104,9 @@ typedef struct sptps { } sptps_t; extern unsigned int sptps_replaywin; -extern void sptps_log_quiet(sptps_t *s, int s_errno, const char *format, va_list ap); -extern void sptps_log_stderr(sptps_t *s, int s_errno, const char *format, va_list ap); -extern void (*sptps_log)(sptps_t *s, int s_errno, const char *format, va_list ap); +extern void sptps_log_quiet(sptps_t *s, int s_errno, const char *format, va_list ap) ATTR_FORMAT(printf, 3, 0); +extern void sptps_log_stderr(sptps_t *s, int s_errno, const char *format, va_list ap) ATTR_FORMAT(printf, 3, 0); +extern void (*sptps_log)(sptps_t *s, int s_errno, const char *format, va_list ap) ATTR_FORMAT(printf, 3, 0); extern bool sptps_start(sptps_t *s, void *handle, bool initiator, bool datagram, ecdsa_t *mykey, ecdsa_t *hiskey, const void *label, size_t labellen, send_data_t send_data, receive_record_t receive_record); extern bool sptps_stop(sptps_t *s); extern bool sptps_send_record(sptps_t *s, uint8_t type, const void *data, uint16_t len);