#ifndef _DTLS_GLOBAL_H_
#define _DTLS_GLOBAL_H_
#include <stdlib.h>
#include <sys/types.h>
#include "tinydtls.h"
#ifndef DTLSv12
#define DTLSv12 1
#endif
#ifndef WITH_SHA256
#define WITH_SHA256 1
#endif
typedef unsigned char uint8;
typedef unsigned char uint16[2];
typedef unsigned char uint24[3];
typedef unsigned char uint32[4];
typedef unsigned char uint48[6];
#ifndef DTLS_MAX_BUF
#if (defined(WITH_CONTIKI) || defined(RIOT_VERSION))
#ifdef DTLS_ECC
#define DTLS_MAX_BUF 200
#else
#define DTLS_MAX_BUF 120
#endif
#else
#define DTLS_MAX_BUF 1400
#endif
#endif
#if !defined(DTLS_CONSTRAINED_STACK) && \
(defined(WITH_CONTIKI) || defined(RIOT_VERSION)) && \
(DTLS_MAX_BUF > 200)
#define DTLS_CONSTRAINED_STACK 1
#endif
#ifndef DTLS_DEFAULT_MAX_RETRANSMIT
#define DTLS_DEFAULT_MAX_RETRANSMIT 7
#endif
typedef enum {
TLS_NULL_WITH_NULL_NULL = 0x0000,
TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF,
TLS_PSK_WITH_AES_128_CCM = 0xC0A4,
TLS_PSK_WITH_AES_128_CCM_8 = 0xC0A8,
TLS_ECDHE_ECDSA_WITH_AES_128_CCM = 0xC0AC,
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xC0AE,
} dtls_cipher_t;
typedef enum {
TLS_COMPRESSION_NULL = 0x0000
} dtls_compression_t;
#define TLS_EXT_ELLIPTIC_CURVES 10
#define TLS_EXT_EC_POINT_FORMATS 11
#define TLS_EXT_SIG_HASH_ALGO 13
#define TLS_EXT_CLIENT_CERTIFICATE_TYPE 19
#define TLS_EXT_SERVER_CERTIFICATE_TYPE 20
#define TLS_EXT_ENCRYPT_THEN_MAC 22
#define TLS_EXT_EXTENDED_MASTER_SECRET 23
#define TLS_EXT_RENEGOTIATION_INFO 65281
#define TLS_CERT_TYPE_RAW_PUBLIC_KEY 2
#define TLS_EXT_ELLIPTIC_CURVES_SECP256R1 23
#define TLS_EXT_EC_POINT_FORMATS_UNCOMPRESSED 0
#define TLS_EC_CURVE_TYPE_NAMED_CURVE 3
#define TLS_CLIENT_CERTIFICATE_TYPE_ECDSA_SIGN 64
#define TLS_EXT_SIG_HASH_ALGO_SHA256 4
#define TLS_EXT_SIG_HASH_ALGO_ECDSA 3
static inline void
memxor(unsigned char *x, const unsigned char *y, size_t n) {
while(n--) {
*x ^= *y;
x++; y++;
}
}
static inline int
equals(unsigned char *a, unsigned char *b, size_t len) {
int result = 1;
while (len--) {
result &= (*a++ == *b++);
}
return result;
}
#ifdef HAVE_FLS
#define dtls_fls(i) fls(i)
#else
static inline int
dtls_fls(unsigned int i) {
int n;
for (n = 0; i; n++)
i >>= 1;
return n;
}
#endif
#undef uthash_fatal
#define uthash_fatal(msg) return(-1)
#endif