6 #if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)
7 # include <openssl/kdf.h>
10 static VALUE mKDF, eKDF;
40 VALUE pass, salt, opts, kwargs[4],
str;
41 static ID kwargs_ids[4];
46 kwargs_ids[0] = rb_intern_const(
"salt");
47 kwargs_ids[1] = rb_intern_const(
"iterations");
48 kwargs_ids[2] = rb_intern_const(
"length");
49 kwargs_ids[3] = rb_intern_const(
"hash");
61 if (!PKCS5_PBKDF2_HMAC(
RSTRING_PTR(pass), RSTRING_LENINT(pass),
63 RSTRING_LENINT(salt), iters, md,
len,
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]) {
112 kwargs_ids[0] = rb_intern_const(
"salt");
113 kwargs_ids[1] = rb_intern_const(
"N");
114 kwargs_ids[2] = rb_intern_const(
"r");
115 kwargs_ids[3] = rb_intern_const(
"p");
116 kwargs_ids[4] = rb_intern_const(
"length");
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)
178 VALUE ikm, salt, info, opts, kwargs[4],
str;
179 static ID kwargs_ids[4];
180 int saltlen, ikmlen, infolen;
185 if (!kwargs_ids[0]) {
186 kwargs_ids[0] = rb_intern_const(
"salt");
187 kwargs_ids[1] = rb_intern_const(
"info");
188 kwargs_ids[2] = rb_intern_const(
"length");
189 kwargs_ids[3] = rb_intern_const(
"hash");
195 ikmlen = RSTRING_LENINT(ikm);
197 saltlen = RSTRING_LENINT(salt);
199 infolen = RSTRING_LENINT(info);
206 pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF,
NULL);
209 if (EVP_PKEY_derive_init(pctx) <= 0) {
210 EVP_PKEY_CTX_free(pctx);
213 if (EVP_PKEY_CTX_set_hkdf_md(pctx, md) <= 0) {
214 EVP_PKEY_CTX_free(pctx);
217 if (EVP_PKEY_CTX_set1_hkdf_salt(pctx, (
unsigned char *)
RSTRING_PTR(salt),
219 EVP_PKEY_CTX_free(pctx);
220 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_salt");
222 if (EVP_PKEY_CTX_set1_hkdf_key(pctx, (
unsigned char *)
RSTRING_PTR(ikm),
224 EVP_PKEY_CTX_free(pctx);
225 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_key");
227 if (EVP_PKEY_CTX_add1_hkdf_info(pctx, (
unsigned char *)
RSTRING_PTR(info),
229 EVP_PKEY_CTX_free(pctx);
230 ossl_raise(eKDF,
"EVP_PKEY_CTX_set_hkdf_info");
233 EVP_PKEY_CTX_free(pctx);
237 EVP_PKEY_CTX_free(pctx);
305 #if defined(HAVE_EVP_PBE_SCRYPT)
308 #if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER)