1 #ifndef crypto_kx_H 2 #define crypto_kx_H 3 4 #include <stddef.h> 5 6 #include "export.h" 7 8 #ifdef __cplusplus 9 # ifdef __GNUC__ 10 # pragma GCC diagnostic ignored "-Wlong-long" 11 # endif 12 extern "C" { 13 #endif 14 15 #define crypto_kx_PUBLICKEYBYTES 32 16 SODIUM_EXPORT 17 size_t crypto_kx_publickeybytes(void); 18 19 #define crypto_kx_SECRETKEYBYTES 32 20 SODIUM_EXPORT 21 size_t crypto_kx_secretkeybytes(void); 22 23 #define crypto_kx_SEEDBYTES 32 24 SODIUM_EXPORT 25 size_t crypto_kx_seedbytes(void); 26 27 #define crypto_kx_SESSIONKEYBYTES 32 28 SODIUM_EXPORT 29 size_t crypto_kx_sessionkeybytes(void); 30 31 #define crypto_kx_PRIMITIVE "x25519blake2b" 32 SODIUM_EXPORT 33 const char *crypto_kx_primitive(void); 34 35 SODIUM_EXPORT 36 int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], 37 unsigned char sk[crypto_kx_SECRETKEYBYTES], 38 const unsigned char seed[crypto_kx_SEEDBYTES]) 39 __attribute__ ((nonnull)); 40 41 SODIUM_EXPORT 42 int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], 43 unsigned char sk[crypto_kx_SECRETKEYBYTES]) 44 __attribute__ ((nonnull)); 45 46 SODIUM_EXPORT 47 int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], 48 unsigned char tx[crypto_kx_SESSIONKEYBYTES], 49 const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], 50 const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], 51 const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) 52 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); 53 54 SODIUM_EXPORT 55 int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], 56 unsigned char tx[crypto_kx_SESSIONKEYBYTES], 57 const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], 58 const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], 59 const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) 60 __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); 61 62 #ifdef __cplusplus 63 } 64 #endif 65 66 #endif 67