Skip to content

Commit

Permalink
move init phase to coresponding files
Browse files Browse the repository at this point in the history
  • Loading branch information
Asmod4n committed Sep 8, 2017
1 parent 1a305f2 commit 52deb13
Show file tree
Hide file tree
Showing 9 changed files with 157 additions and 76 deletions.
4 changes: 2 additions & 2 deletions include/mruby/hydrogen.h
Expand Up @@ -5,8 +5,8 @@

MRB_BEGIN_DECL

#if (MRB_INT_BIT < 32)
#error "MRB_INT16 is to small for mruby-libhydrogen"
#if ((MRB_INT_BIT < 32)||defined(MRB_INT16))
#error "MRB_INT16 is too small for mruby-libhydrogen"
#endif

#define E_HYDRO_ERROR (mrb_class_get_under(mrb, mrb_module_get(mrb, "Hydro"), "Error"))
Expand Down
7 changes: 7 additions & 0 deletions src/mrb_core.h
Expand Up @@ -29,3 +29,10 @@ mrb_hydro_bin2hex(mrb_state *mrb, mrb_value hydro_mod)

return hex;
}

static void
mrb_hydro_gem_init(mrb_state *mrb, struct RClass *hydro_mod)
{
mrb_define_module_function(mrb, hydro_mod, "increment", mrb_hydro_increment, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, hydro_mod, "bin2hex", mrb_hydro_bin2hex, MRB_ARGS_REQ(1));
}
20 changes: 20 additions & 0 deletions src/mrb_hash.h
Expand Up @@ -76,3 +76,23 @@ mrb_hydro_hash_hash(mrb_state *mrb, mrb_value hydro_hash_class)

return out;
}

static void
mrb_hydro_hash_gem_init(mrb_state *mrb, struct RClass *hydro_mod)
{
struct RClass *hydro_hash_cl = mrb_define_class_under(mrb, hydro_mod, "Hash", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_hash_cl, MRB_TT_DATA);
mrb_define_const(mrb, hydro_hash_cl, "BYTES", mrb_fixnum_value(hydro_hash_BYTES));
mrb_define_const(mrb, hydro_hash_cl, "BYTES_MAX", mrb_fixnum_value(hydro_hash_BYTES_MAX));
mrb_define_const(mrb, hydro_hash_cl, "BYTES_MIN", mrb_fixnum_value(hydro_hash_BYTES_MIN));
mrb_define_const(mrb, hydro_hash_cl, "CONTEXTBYTES", mrb_fixnum_value(hydro_hash_CONTEXTBYTES));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES", mrb_fixnum_value(hydro_hash_KEYBYTES));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES_MAX", mrb_fixnum_value(hydro_hash_KEYBYTES_MAX));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES_MIN", mrb_fixnum_value(hydro_hash_KEYBYTES_MIN));
mrb_define_class_method(mrb, hydro_hash_cl, "keygen", mrb_hydro_hash_keygen, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_hash_cl, "initialize", mrb_hydro_hash_init, MRB_ARGS_REQ(2));
mrb_define_method(mrb, hydro_hash_cl, "update", mrb_hydro_hash_update, MRB_ARGS_REQ(1));
mrb_define_alias(mrb, hydro_hash_cl, "<<", "update");
mrb_define_method(mrb, hydro_hash_cl, "final", mrb_hydro_hash_final, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, hydro_hash_cl, "hash", mrb_hydro_hash_hash, MRB_ARGS_ARG(3, 1));
}
12 changes: 12 additions & 0 deletions src/mrb_kdf.h
Expand Up @@ -28,3 +28,15 @@ mrb_hydro_kdf_derive_from_key(mrb_state *mrb, mrb_value hydro_kdf_module)

return subkey;
}

static void
mrb_hydro_kdf_gem_init(mrb_state *mrb, struct RClass *hydro_mod)
{
struct RClass *hydro_kdf_mod = mrb_define_class_under(mrb, hydro_mod, "Kdf", mrb->object_class);
mrb_define_const(mrb, hydro_kdf_mod, "CONTEXTBYTES", mrb_fixnum_value(hydro_kdf_CONTEXTBYTES));
mrb_define_const(mrb, hydro_kdf_mod, "KEYBYTES", mrb_fixnum_value(hydro_kdf_KEYBYTES));
mrb_define_const(mrb, hydro_kdf_mod, "BYTES_MAX", mrb_fixnum_value(hydro_kdf_BYTES_MAX));
mrb_define_const(mrb, hydro_kdf_mod, "BYTES_MIN", mrb_fixnum_value(hydro_kdf_BYTES_MIN));
mrb_define_module_function(mrb, hydro_kdf_mod, "keygen", mrb_hydro_kdf_keygen, MRB_ARGS_NONE());
mrb_define_module_function(mrb, hydro_kdf_mod, "derive_from_key", mrb_hydro_kdf_derive_from_key, MRB_ARGS_ARG(3, 1));
}
26 changes: 26 additions & 0 deletions src/mrb_kx.h
Expand Up @@ -164,3 +164,29 @@ mrb_hydro_kx_keypair_sk(mrb_state *mrb, mrb_value self)
{
return mrb_str_new(mrb, (const char *) (DATA_GET_PTR(mrb, self, &mrb_hydro_kx_keypair, hydro_kx_keypair))->sk, hydro_kx_SECRETKEYBYTES);
}

static void
mrb_hydro_kx_gem_init(mrb_state *mrb, struct RClass *hydro_mod, struct RClass *hydro_error_cl)
{
struct RClass *hydro_kx_cl = mrb_define_class_under(mrb, hydro_mod, "Kx", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_kx_cl, MRB_TT_DATA);
mrb_define_class_under(mrb, hydro_kx_cl, "Error", hydro_error_cl);
mrb_define_const(mrb, hydro_kx_cl, "SESSIONKEYBYTES", mrb_fixnum_value(hydro_kx_SESSIONKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "PUBLICKEYBYTES", mrb_fixnum_value(hydro_kx_PUBLICKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "SECRETKEYBYTES", mrb_fixnum_value(hydro_kx_SECRETKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "PSKBYTES", mrb_fixnum_value(hydro_kx_PSKBYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE1BYTES", mrb_fixnum_value(hydro_kx_RESPONSE1BYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE2BYTES", mrb_fixnum_value(hydro_kx_RESPONSE2BYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE3BYTES", mrb_fixnum_value(hydro_kx_RESPONSE3BYTES));
mrb_define_method(mrb, hydro_kx_cl, "initialize", mrb_hydro_kx_state_new, MRB_ARGS_NONE());
mrb_define_method(mrb, hydro_kx_cl, "xx_1", mrb_hydro_kx_xx_1, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_kx_cl, "xx_2", mrb_hydro_kx_xx_2, MRB_ARGS_ARG(2, 1));
mrb_define_method(mrb, hydro_kx_cl, "xx_3", mrb_hydro_kx_xx_3, MRB_ARGS_ARG(2, 1));
mrb_define_method(mrb, hydro_kx_cl, "xx_4", mrb_hydro_kx_xx_4, MRB_ARGS_ARG(1, 1));

struct RClass *hydro_kx_keypair_cl = mrb_define_class_under(mrb, hydro_kx_cl, "Keypair", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_kx_keypair_cl, MRB_TT_DATA);
mrb_define_method(mrb, hydro_kx_keypair_cl, "initialize", mrb_hydro_kx_keygen, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_kx_keypair_cl, "pk", mrb_hydro_kx_keypair_pk, MRB_ARGS_NONE());
mrb_define_method(mrb, hydro_kx_keypair_cl, "sk", mrb_hydro_kx_keypair_sk, MRB_ARGS_NONE());
}
83 changes: 9 additions & 74 deletions src/mrb_libhydrogen.c
Expand Up @@ -6,6 +6,7 @@
#include "mrb_kx.h"
#include "mrb_random.h"
#include "mrb_secretbox.h"
#include "mrb_sign.h"

void
mrb_mruby_libhydrogen_gem_init(mrb_state* mrb)
Expand All @@ -15,83 +16,17 @@ mrb_mruby_libhydrogen_gem_init(mrb_state* mrb)
mrb_sys_fail(mrb, "hydro_init");
}

struct RClass *randombytes_mod, *hydro_mod, *hydro_error_cl, *hydro_hash_cl, *hydro_secretbox_mod, *hydro_kdf_mod, *hydro_sign_cl, *hydro_kx_cl, *hydro_kx_keypair_cl;

randombytes_mod = mrb_define_module(mrb, "RandomBytes");
mrb_define_const(mrb, randombytes_mod, "SEEDBYTES", mrb_fixnum_value(randombytes_SEEDBYTES));
mrb_define_module_function(mrb, randombytes_mod, "random", mrb_randombytes_random, MRB_ARGS_NONE());
mrb_define_module_function(mrb, randombytes_mod, "uniform", mrb_randombytes_uniform, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, randombytes_mod, "buf", mrb_randombytes_buf, MRB_ARGS_ARG(1, 1));
mrb_define_module_function(mrb, randombytes_mod, "buf_deterministic", mrb_randombytes_buf_deterministic, MRB_ARGS_ARG(2, 1));

struct RClass *hydro_mod, *hydro_error_cl;
hydro_mod = mrb_define_module(mrb, "Hydro");
hydro_error_cl = mrb_define_class_under(mrb, hydro_mod, "Error", E_RUNTIME_ERROR);
mrb_define_module_function(mrb, hydro_mod, "increment", mrb_hydro_increment, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, hydro_mod, "bin2hex", mrb_hydro_bin2hex, MRB_ARGS_REQ(1));

hydro_hash_cl = mrb_define_class_under(mrb, hydro_mod, "Hash", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_hash_cl, MRB_TT_DATA);
mrb_define_const(mrb, hydro_hash_cl, "BYTES", mrb_fixnum_value(hydro_hash_BYTES));
mrb_define_const(mrb, hydro_hash_cl, "BYTES_MAX", mrb_fixnum_value(hydro_hash_BYTES_MAX));
mrb_define_const(mrb, hydro_hash_cl, "BYTES_MIN", mrb_fixnum_value(hydro_hash_BYTES_MIN));
mrb_define_const(mrb, hydro_hash_cl, "CONTEXTBYTES", mrb_fixnum_value(hydro_hash_CONTEXTBYTES));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES", mrb_fixnum_value(hydro_hash_KEYBYTES));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES_MAX", mrb_fixnum_value(hydro_hash_KEYBYTES_MAX));
mrb_define_const(mrb, hydro_hash_cl, "KEYBYTES_MIN", mrb_fixnum_value(hydro_hash_KEYBYTES_MIN));
mrb_define_class_method(mrb, hydro_hash_cl, "keygen", mrb_hydro_hash_keygen, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_hash_cl, "initialize", mrb_hydro_hash_init, MRB_ARGS_REQ(2));
mrb_define_method(mrb, hydro_hash_cl, "update", mrb_hydro_hash_update, MRB_ARGS_REQ(1));
mrb_define_alias(mrb, hydro_hash_cl, "<<", "update");
mrb_define_method(mrb, hydro_hash_cl, "final", mrb_hydro_hash_final, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, hydro_hash_cl, "hash", mrb_hydro_hash_hash, MRB_ARGS_ARG(3, 1));

hydro_secretbox_mod = mrb_define_module_under(mrb, hydro_mod, "SecretBox");
mrb_define_const(mrb, hydro_secretbox_mod, "CONTEXTBYTES", mrb_fixnum_value(hydro_secretbox_CONTEXTBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "HEADERBYTES", mrb_fixnum_value(hydro_secretbox_HEADERBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "KEYBYTES", mrb_fixnum_value(hydro_secretbox_KEYBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "PROBEBYTES", mrb_fixnum_value(hydro_secretbox_PROBEBYTES));
mrb_define_module_function(mrb, hydro_secretbox_mod, "keygen", mrb_hydro_secretbox_keygen, MRB_ARGS_NONE());
mrb_define_module_function(mrb, hydro_secretbox_mod, "encrypt", mrb_hydro_secretbox_encrypt, MRB_ARGS_ARG(3, 1));
mrb_define_module_function(mrb, hydro_secretbox_mod, "decrypt", mrb_hydro_secretbox_decrypt, MRB_ARGS_ARG(3, 1));

hydro_kdf_mod = mrb_define_class_under(mrb, hydro_mod, "Kdf", mrb->object_class);
mrb_define_const(mrb, hydro_kdf_mod, "CONTEXTBYTES", mrb_fixnum_value(hydro_kdf_CONTEXTBYTES));
mrb_define_const(mrb, hydro_kdf_mod, "KEYBYTES", mrb_fixnum_value(hydro_kdf_KEYBYTES));
mrb_define_const(mrb, hydro_kdf_mod, "BYTES_MAX", mrb_fixnum_value(hydro_kdf_BYTES_MAX));
mrb_define_const(mrb, hydro_kdf_mod, "BYTES_MIN", mrb_fixnum_value(hydro_kdf_BYTES_MIN));
mrb_define_module_function(mrb, hydro_kdf_mod, "keygen", mrb_hydro_kdf_keygen, MRB_ARGS_NONE());
mrb_define_module_function(mrb, hydro_kdf_mod, "derive_from_key", mrb_hydro_kdf_derive_from_key, MRB_ARGS_ARG(3, 1));

hydro_sign_cl = mrb_define_class_under(mrb, hydro_mod, "Sign", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_sign_cl, MRB_TT_DATA);
mrb_define_const(mrb, hydro_sign_cl, "BYTES", mrb_fixnum_value(hydro_sign_BYTES));
mrb_define_const(mrb, hydro_sign_cl, "CONTEXTBYTES", mrb_fixnum_value(hydro_sign_CONTEXTBYTES));
mrb_define_const(mrb, hydro_sign_cl, "PUBLICKEYBYTES", mrb_fixnum_value(hydro_sign_PUBLICKEYBYTES));
mrb_define_const(mrb, hydro_sign_cl, "SECRETKEYBYTES", mrb_fixnum_value(hydro_sign_SECRETKEYBYTES));
mrb_define_const(mrb, hydro_sign_cl, "SEEDBYTES", mrb_fixnum_value(hydro_sign_SEEDBYTES));

hydro_kx_cl = mrb_define_class_under(mrb, hydro_mod, "Kx", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_kx_cl, MRB_TT_DATA);
mrb_define_class_under(mrb, hydro_kx_cl, "Error", hydro_error_cl);
mrb_define_const(mrb, hydro_kx_cl, "SESSIONKEYBYTES", mrb_fixnum_value(hydro_kx_SESSIONKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "PUBLICKEYBYTES", mrb_fixnum_value(hydro_kx_PUBLICKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "SECRETKEYBYTES", mrb_fixnum_value(hydro_kx_SECRETKEYBYTES));
mrb_define_const(mrb, hydro_kx_cl, "PSKBYTES", mrb_fixnum_value(hydro_kx_PSKBYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE1BYTES", mrb_fixnum_value(hydro_kx_RESPONSE1BYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE2BYTES", mrb_fixnum_value(hydro_kx_RESPONSE2BYTES));
mrb_define_const(mrb, hydro_kx_cl, "RESPONSE3BYTES", mrb_fixnum_value(hydro_kx_RESPONSE3BYTES));
mrb_define_method(mrb, hydro_kx_cl, "initialize", mrb_hydro_kx_state_new, MRB_ARGS_NONE());
mrb_define_method(mrb, hydro_kx_cl, "xx_1", mrb_hydro_kx_xx_1, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_kx_cl, "xx_2", mrb_hydro_kx_xx_2, MRB_ARGS_ARG(2, 1));
mrb_define_method(mrb, hydro_kx_cl, "xx_3", mrb_hydro_kx_xx_3, MRB_ARGS_ARG(2, 1));
mrb_define_method(mrb, hydro_kx_cl, "xx_4", mrb_hydro_kx_xx_4, MRB_ARGS_ARG(1, 1));

hydro_kx_keypair_cl = mrb_define_class_under(mrb, hydro_kx_cl, "Keypair", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_kx_keypair_cl, MRB_TT_DATA);
mrb_define_method(mrb, hydro_kx_keypair_cl, "initialize", mrb_hydro_kx_keygen, MRB_ARGS_OPT(1));
mrb_define_method(mrb, hydro_kx_keypair_cl, "pk", mrb_hydro_kx_keypair_pk, MRB_ARGS_NONE());
mrb_define_method(mrb, hydro_kx_keypair_cl, "sk", mrb_hydro_kx_keypair_sk, MRB_ARGS_NONE());

mrb_randombytes_gem_init(mrb);
mrb_hydro_gem_init(mrb, hydro_mod);
mrb_hydro_secretbox_gem_init(mrb, hydro_mod);
mrb_hydro_hash_gem_init(mrb, hydro_mod);
mrb_hydro_kdf_gem_init(mrb, hydro_mod);
mrb_hydro_kx_gem_init(mrb, hydro_mod, hydro_error_cl);
mrb_hydro_sign_gem_init(mrb, hydro_mod);
}

void mrb_mruby_libhydrogen_gem_final(mrb_state* mrb) {}
11 changes: 11 additions & 0 deletions src/mrb_random.h
Expand Up @@ -45,3 +45,14 @@ mrb_randombytes_buf_deterministic(mrb_state *mrb, mrb_value randombytes_module)

return buf;
}

static void
mrb_randombytes_gem_init(mrb_state *mrb)
{
struct RClass *randombytes_mod = mrb_define_module(mrb, "RandomBytes");
mrb_define_const(mrb, randombytes_mod, "SEEDBYTES", mrb_fixnum_value(randombytes_SEEDBYTES));
mrb_define_module_function(mrb, randombytes_mod, "random", mrb_randombytes_random, MRB_ARGS_NONE());
mrb_define_module_function(mrb, randombytes_mod, "uniform", mrb_randombytes_uniform, MRB_ARGS_REQ(1));
mrb_define_module_function(mrb, randombytes_mod, "buf", mrb_randombytes_buf, MRB_ARGS_ARG(1, 1));
mrb_define_module_function(mrb, randombytes_mod, "buf_deterministic", mrb_randombytes_buf_deterministic, MRB_ARGS_ARG(2, 1));
}
59 changes: 59 additions & 0 deletions src/mrb_secretbox.h
Expand Up @@ -61,3 +61,62 @@ mrb_hydro_secretbox_decrypt(mrb_state *mrb, mrb_value hydro_secretbox_module)

return m;
}

static mrb_value
mrb_hydro_secretbox_probe_create(mrb_state *mrb, mrb_value hydro_secretbox_module)
{
mrb_value c;
const char *ctx;
mrb_value key;
mrb_get_args(mrb, "SzS", &c, &ctx, &key);
if (RSTRING_LEN(c) < hydro_secretbox_HEADERBYTES) {
mrb_raise(mrb, E_RANGE_ERROR, "ciphertext is too short");
}
mrb_hydro_check_length(mrb, strlen(ctx), hydro_secretbox_CONTEXTBYTES, "ctx");
mrb_hydro_check_length(mrb, RSTRING_LEN(key), hydro_secretbox_KEYBYTES, "key");
mrb_value probe = mrb_str_new(mrb, NULL, hydro_secretbox_PROBEBYTES);

hydro_secretbox_probe_create((uint8_t *) RSTRING_PTR(probe),
(const uint8_t *) RSTRING_PTR(c), RSTRING_LEN(c),
ctx,
(const uint8_t *) RSTRING_PTR(key));

return probe;
}

static mrb_value
mrb_hydro_secretbox_probe_verify(mrb_state *mrb, mrb_value hydro_secretbox_module)
{
mrb_value probe, c;
const char *ctx;
mrb_value key;
mrb_get_args(mrb, "SzS", &probe, &ctx, &key);
mrb_hydro_check_length(mrb, RSTRING_LEN(probe), hydro_secretbox_PROBEBYTES, "probe");
if (RSTRING_LEN(c) < hydro_secretbox_HEADERBYTES) {
mrb_raise(mrb, E_RANGE_ERROR, "ciphertext is too short");
}
mrb_hydro_check_length(mrb, strlen(ctx), hydro_secretbox_CONTEXTBYTES, "ctx");
mrb_hydro_check_length(mrb, RSTRING_LEN(key), hydro_secretbox_KEYBYTES, "key");

int rc = hydro_secretbox_probe_verify((const uint8_t *) RSTRING_PTR(probe),
(const uint8_t *) RSTRING_PTR(c), RSTRING_LEN(c),
ctx,
(const uint8_t *) RSTRING_PTR(key));

return mrb_bool_value(rc == 0);
}

static void
mrb_hydro_secretbox_gem_init(mrb_state *mrb, struct RClass *hydro_mod)
{
struct RClass *hydro_secretbox_mod = mrb_define_module_under(mrb, hydro_mod, "SecretBox");
mrb_define_const(mrb, hydro_secretbox_mod, "CONTEXTBYTES", mrb_fixnum_value(hydro_secretbox_CONTEXTBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "HEADERBYTES", mrb_fixnum_value(hydro_secretbox_HEADERBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "KEYBYTES", mrb_fixnum_value(hydro_secretbox_KEYBYTES));
mrb_define_const(mrb, hydro_secretbox_mod, "PROBEBYTES", mrb_fixnum_value(hydro_secretbox_PROBEBYTES));
mrb_define_module_function(mrb, hydro_secretbox_mod, "keygen", mrb_hydro_secretbox_keygen, MRB_ARGS_NONE());
mrb_define_module_function(mrb, hydro_secretbox_mod, "encrypt", mrb_hydro_secretbox_encrypt, MRB_ARGS_ARG(3, 1));
mrb_define_module_function(mrb, hydro_secretbox_mod, "decrypt", mrb_hydro_secretbox_decrypt, MRB_ARGS_ARG(3, 1));
mrb_define_module_function(mrb, hydro_secretbox_mod, "probe_create", mrb_hydro_secretbox_probe_create, MRB_ARGS_REQ(3));
mrb_define_module_function(mrb, hydro_secretbox_mod, "probe_verify", mrb_hydro_secretbox_probe_verify, MRB_ARGS_REQ(3));
}
11 changes: 11 additions & 0 deletions src/mrb_sign.h
@@ -0,0 +1,11 @@
static void
mrb_hydro_sign_gem_init(mrb_state *mrb, struct RClass *hydro_mod)
{
struct RClass *hydro_sign_cl = mrb_define_class_under(mrb, hydro_mod, "Sign", mrb->object_class);
MRB_SET_INSTANCE_TT(hydro_sign_cl, MRB_TT_DATA);
mrb_define_const(mrb, hydro_sign_cl, "BYTES", mrb_fixnum_value(hydro_sign_BYTES));
mrb_define_const(mrb, hydro_sign_cl, "CONTEXTBYTES", mrb_fixnum_value(hydro_sign_CONTEXTBYTES));
mrb_define_const(mrb, hydro_sign_cl, "PUBLICKEYBYTES", mrb_fixnum_value(hydro_sign_PUBLICKEYBYTES));
mrb_define_const(mrb, hydro_sign_cl, "SECRETKEYBYTES", mrb_fixnum_value(hydro_sign_SECRETKEYBYTES));
mrb_define_const(mrb, hydro_sign_cl, "SEEDBYTES", mrb_fixnum_value(hydro_sign_SEEDBYTES));
}

0 comments on commit 52deb13

Please sign in to comment.