/*******************************************************************************

    D language bindings for libsodium's crypto_scalarmult.h

    License: ISC (see LICENSE.txt)

*******************************************************************************/

module libsodium.crypto_scalarmult;

@nogc nothrow:

import libsodium.export_;
import libsodium.crypto_scalarmult_curve25519;

extern (C):

enum crypto_scalarmult_BYTES = crypto_scalarmult_curve25519_BYTES;
size_t crypto_scalarmult_bytes ();

enum crypto_scalarmult_SCALARBYTES = crypto_scalarmult_curve25519_SCALARBYTES;
size_t crypto_scalarmult_scalarbytes ();

enum crypto_scalarmult_PRIMITIVE = "curve25519";
const(char)* crypto_scalarmult_primitive ();

int crypto_scalarmult_base (ubyte* q, const(ubyte)* n);

/*
 * NOTE: Do not use the result of this function directly for key exchange.
 *
 * Hash the result with the public keys in order to compute a shared
 * secret key: H(q || client_pk || server_pk)
 *
 * Or unless this is not an option, use the crypto_kx() API instead.
 */
int crypto_scalarmult (ubyte* q, const(ubyte)* n, const(ubyte)* p);