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)