From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/digest/sha2/sha2init.c | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 jni/ruby/ext/digest/sha2/sha2init.c (limited to 'jni/ruby/ext/digest/sha2/sha2init.c') diff --git a/jni/ruby/ext/digest/sha2/sha2init.c b/jni/ruby/ext/digest/sha2/sha2init.c new file mode 100644 index 0000000..a48a967 --- /dev/null +++ b/jni/ruby/ext/digest/sha2/sha2init.c @@ -0,0 +1,58 @@ +/* $RoughId: sha2init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */ +/* $Id: sha2init.c 47745 2014-09-30 08:29:02Z nobu $ */ + +#include "digest.h" +#if defined(SHA2_USE_OPENSSL) +#include "sha2ossl.h" +#else +#include "sha2.h" +#endif + +#define FOREACH_BITLEN(func) func(256) func(384) func(512) + +#define DEFINE_ALGO_METADATA(bitlen) \ +static const rb_digest_metadata_t sha##bitlen = { \ + RUBY_DIGEST_API_VERSION, \ + SHA##bitlen##_DIGEST_LENGTH, \ + SHA##bitlen##_BLOCK_LENGTH, \ + sizeof(SHA##bitlen##_CTX), \ + (rb_digest_hash_init_func_t)SHA##bitlen##_Init, \ + (rb_digest_hash_update_func_t)SHA##bitlen##_Update, \ + (rb_digest_hash_finish_func_t)SHA##bitlen##_Finish, \ +}; + +FOREACH_BITLEN(DEFINE_ALGO_METADATA) + +/* + * Classes for calculating message digests using the SHA-256/384/512 + * Secure Hash Algorithm(s) by NIST (the US' National Institute of + * Standards and Technology), described in FIPS PUB 180-2. + */ +void +Init_sha2(void) +{ + VALUE mDigest, cDigest_Base; + ID id_metadata; + +#define DECLARE_ALGO_CLASS(bitlen) \ + VALUE cDigest_SHA##bitlen; + + FOREACH_BITLEN(DECLARE_ALGO_CLASS) + + rb_require("digest"); + + id_metadata = rb_intern("metadata"); + + mDigest = rb_path2class("Digest"); + cDigest_Base = rb_path2class("Digest::Base"); + +#define DEFINE_ALGO_CLASS(bitlen) \ + cDigest_SHA##bitlen = rb_define_class_under(mDigest, "SHA" #bitlen, cDigest_Base); \ +\ + rb_ivar_set(cDigest_SHA##bitlen, id_metadata, \ + Data_Wrap_Struct(0, 0, 0, (void *)&sha##bitlen)); + +#undef RUBY_UNTYPED_DATA_WARNING +#define RUBY_UNTYPED_DATA_WARNING 0 + FOREACH_BITLEN(DEFINE_ALGO_CLASS) +} -- cgit v1.2.3