From 3365b3e5afa17edb1c6f095306a00dea56d8b00c Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Tue, 18 Nov 2014 23:35:59 +0100 Subject: [PATCH] Provide a way to get at the typical constants for the public key box. --- c_src/enacl_nif.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/c_src/enacl_nif.c b/c_src/enacl_nif.c index adcbb31..5772d39 100644 --- a/c_src/enacl_nif.c +++ b/c_src/enacl_nif.c @@ -2,11 +2,14 @@ #include +/* Errors */ static ERL_NIF_TERM nacl_error_tuple(ErlNifEnv *env, char *error_atom) { return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_atom(env, error_atom)); } +/* Helper functions (Hashing, String Equality, ...) */ + static ERL_NIF_TERM enif_crypto_hash(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) { ErlNifBinary input; @@ -25,6 +28,22 @@ ERL_NIF_TERM enif_crypto_hash(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[ return enif_make_binary(env, &result); } +/* Public-key cryptography */ +static +ERL_NIF_TERM enif_crypto_box_NONCEBYTES(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) { + return enif_make_int64(env, crypto_box_NONCEBYTES); +} + +static +ERL_NIF_TERM enif_crypto_box_ZEROBYTES(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) { + return enif_make_int64(env, crypto_box_ZEROBYTES); +} + +static +ERL_NIF_TERM enif_crypto_box_BOXZEROBYTES(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) { + return enif_make_int64(env, crypto_box_BOXZEROBYTES); +} + static ERL_NIF_TERM enif_crypto_box_keypair(ErlNifEnv *env, int argc, ERL_NIF_TERM const argv[]) { ErlNifBinary pk, sk; @@ -46,7 +65,11 @@ ERL_NIF_TERM enif_crypto_box_keypair(ErlNifEnv *env, int argc, ERL_NIF_TERM cons return enif_make_tuple3(env, enif_make_atom(env, "ok"), enif_make_binary(env, &pk), enif_make_binary(env, &sk)); } +/* Tie the knot to the Erlang world */ static ErlNifFunc nif_funcs[] = { + {"crypto_box_NONCEBYTES", 0, enif_crypto_box_NONCEBYTES}, + {"crypto_box_ZEROBYTES", 0, enif_crypto_box_ZEROBYTES}, + {"crypto_box_BOXZEROBYTES", 0, enif_crypto_box_BOXZEROBYTES}, {"crypto_box_keypair", 0, enif_crypto_box_keypair}, {"crypto_hash", 1, enif_crypto_hash, ERL_NIF_DIRTY_JOB_CPU_BOUND} };