/*
Written in the D programming language.
For git maintenance (ensure at least one congruent line with originating C header):
#define crypto_kx_H
*/

module deimos.sodium.crypto_kx;


extern(C) @nogc @trusted :


enum crypto_kx_PUBLICKEYBYTES = 32;

size_t crypto_kx_publickeybytes() pure;

enum crypto_kx_SECRETKEYBYTES = 32;

size_t crypto_kx_secretkeybytes() pure;

enum crypto_kx_SEEDBYTES = 32;

size_t crypto_kx_seedbytes() pure;

enum crypto_kx_SESSIONKEYBYTES = 32;

size_t crypto_kx_sessionkeybytes() pure;

enum crypto_kx_PRIMITIVE = "x25519blake2b";

const(char)* crypto_kx_primitive() pure;

int crypto_kx_seed_keypair(ref ubyte[crypto_kx_PUBLICKEYBYTES] pk,
                           ref ubyte[crypto_kx_SECRETKEYBYTES] sk,
                           ref const(ubyte)[crypto_kx_SEEDBYTES] seed) pure; //  __attribute__ ((nonnull));

int crypto_kx_keypair(ref ubyte[crypto_kx_PUBLICKEYBYTES] pk,
                      ref ubyte[crypto_kx_SECRETKEYBYTES] sk) nothrow; // __attribute__ ((nonnull));

int crypto_kx_client_session_keys(ref ubyte[crypto_kx_SESSIONKEYBYTES] rx,
                                  ref ubyte[crypto_kx_SESSIONKEYBYTES] tx,
                                  ref const(ubyte)[crypto_kx_PUBLICKEYBYTES] client_pk,
                                  ref const(ubyte)[crypto_kx_SECRETKEYBYTES] client_sk,
                                  ref const(ubyte)[crypto_kx_PUBLICKEYBYTES] server_pk) pure nothrow; // __attribute__ ((warn_unused_result))  __attribute__ ((nonnull(3, 4, 5)));

int crypto_kx_server_session_keys(ref ubyte[crypto_kx_SESSIONKEYBYTES] rx,
                                  ref ubyte[crypto_kx_SESSIONKEYBYTES] tx,
                                  ref const(ubyte)[crypto_kx_PUBLICKEYBYTES] server_pk,
                                  ref const(ubyte)[crypto_kx_SECRETKEYBYTES] server_sk,
                                  ref const(ubyte)[crypto_kx_PUBLICKEYBYTES] client_pk) pure nothrow; // __attribute__ ((warn_unused_result))  __attribute__ ((nonnull(3, 4, 5)));