6#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)
7# include <openssl/kdf.h>
10static VALUE mKDF, eKDF;
40 VALUE pass, salt, opts, kwargs[4],
str;
41 static ID kwargs_ids[4];
70#if defined(HAVE_EVP_PBE_SCRYPT)
106 VALUE pass, salt, opts, kwargs[5],
str;
107 static ID kwargs_ids[5];
111 if (!kwargs_ids[0]) {
123 N = NUM2UINT64T(kwargs[1]);
124 r = NUM2UINT64T(kwargs[2]);
125 p = NUM2UINT64T(kwargs[3]);
144#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)
170 VALUE ikm, salt, info, opts, kwargs[4],
str;
171 static ID kwargs_ids[4];
172 int saltlen, ikmlen, infolen;
177 if (!kwargs_ids[0]) {
198 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF,
NULL);
201 if (EVP_PKEY_derive_init(pctx) <= 0) {
202 EVP_PKEY_CTX_free(pctx);
205 if (EVP_PKEY_CTX_set_hkdf_md(pctx, md) <= 0) {
206 EVP_PKEY_CTX_free(pctx);
209 if (EVP_PKEY_CTX_set1_hkdf_salt(pctx, (
unsigned char *)
RSTRING_PTR(salt),
211 EVP_PKEY_CTX_free(pctx);
212 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_salt");
214 if (EVP_PKEY_CTX_set1_hkdf_key(pctx, (
unsigned char *)
RSTRING_PTR(ikm),
216 EVP_PKEY_CTX_free(pctx);
217 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_key");
219 if (EVP_PKEY_CTX_add1_hkdf_info(pctx, (
unsigned char *)
RSTRING_PTR(info),
221 EVP_PKEY_CTX_free(pctx);
222 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_info");
225 EVP_PKEY_CTX_free(pctx);
229 EVP_PKEY_CTX_free(pctx);
313#if defined(HAVE_EVP_PBE_SCRYPT)
316#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)
char str[HTML_ESCAPE_MAX_LEN+1]
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
VALUE rb_define_module(const char *)
VALUE rb_define_module_under(VALUE, const char *)
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *)
void rb_raise(VALUE exc, const char *fmt,...)
void ossl_raise(VALUE exc, const char *fmt,...)
const EVP_MD * ossl_evp_get_digestbyname(VALUE obj)