#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ #define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ #include "third_party/mbedtls/config.h" #include "third_party/mbedtls/ecp.h" COSMOPOLITAN_C_START_ #define MBEDTLS_ECP_TLS_CURVE25519 0x1d #define MBEDTLS_X25519_KEY_SIZE_BYTES 32 typedef enum { MBEDTLS_EVEREST_ECDH_OURS, MBEDTLS_EVEREST_ECDH_THEIRS, } mbedtls_everest_ecdh_side; typedef struct { unsigned char our_secret[MBEDTLS_X25519_KEY_SIZE_BYTES]; unsigned char peer_point[MBEDTLS_X25519_KEY_SIZE_BYTES]; } mbedtls_ecdh_context_everest; int mbedtls_everest_setup(mbedtls_ecdh_context_everest *, int); void mbedtls_everest_free(mbedtls_ecdh_context_everest *); int mbedtls_everest_make_params(mbedtls_ecdh_context_everest *, size_t *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void *); int mbedtls_everest_read_params(mbedtls_ecdh_context_everest *, const unsigned char **, const unsigned char *); int mbedtls_everest_get_params(mbedtls_ecdh_context_everest *, const mbedtls_ecp_keypair *, mbedtls_everest_ecdh_side); int mbedtls_everest_make_public(mbedtls_ecdh_context_everest *, size_t *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void *); int mbedtls_everest_read_public(mbedtls_ecdh_context_everest *, const unsigned char *, size_t); int mbedtls_everest_calc_secret(mbedtls_ecdh_context_everest *, size_t *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void *); COSMOPOLITAN_C_END_ #endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ */