我正在尝试在 Cygwin 上的 OpenSSL 1.1.0 中启用 scrypt 算法。我使用了配置选项enable-scrypt
,但它不起作用。
构建 OpenSSL 的命令:
perl configure Cygwin-x86_64 --prefix="C:/OpenSSL/x64/" no-shared -static enable-scrypt
如何在 OpenSSL 中激活 scrypt 算法?
在 OpenSSL 中启用 scrypt 算法...
看起来您启用了它,但似乎 scrypt 仅作为 PBE 设备的一部分提供。它本身没有单独的 EVP 算法。也就是说,您不能要求EVP_scrypt
哈希算法。
以下是在 Master 中使用 1.1.0 的 Linux(不是 Windows)。它使用了您使用的相同标志。
$ nm -D libcrypto.a 2>/dev/null | grep -i scrypt
p5_scrypt.o:
scrypt.o:
$ nm crypto/evp/scrypt.o
U CRYPTO_clear_free
U CRYPTO_malloc
U ERR_put_error
00000000000004d0 T EVP_PBE_scrypt
U EVP_sha256
U OPENSSL_cleanse
U PKCS5_PBKDF2_HMAC
0000000000000000 t scryptBlockMix
$ cat include/openssl/evp.h | grep -i scrypt
#ifndef OPENSSL_NO_SCRYPT
int EVP_PBE_scrypt(const char *pass, size_t passlen,
int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass,
您可以验证未定义OPENSSL_NO_SCRYPT
为:
$ cat include/openssl/opensslconf.h | grep OPENSSL_NO_SCRYPT
$
基于上述,您的两个选择是EVP_PBE_scrypt
和PKCS5_v2_scrypt_keyivgen
。有了那个立足点,似乎没有手册页:
openssl$ grep -R EVP_PBE_scrypt doc/
openssl$
openssl$ grep -R PKCS5_v2_scrypt_keyivgen doc/
openssl$
你一定喜欢自我记录的代码:)
以下是来自 的更多信息p5_scrypt.o
,但它看起来不像scrypt.o
. 忽略所有带有U
. 剩下的唯一看起来有点有趣的是T PKCS5_pbe2_set_scrypt
(和朋友),它似乎设置了一个上下文选项。
$ nm crypto/asn1/p5_scrypt.o
U ASN1_INTEGER_get_uint64
U ASN1_INTEGER_it
U ASN1_INTEGER_new
U ASN1_INTEGER_set_int64
U ASN1_INTEGER_set_uint64
U ASN1_OCTET_STRING_it
U ASN1_STRING_set
U ASN1_TYPE_new
U ASN1_TYPE_pack_sequence
U ASN1_TYPE_unpack_sequence
U ASN1_item_d2i
U ASN1_item_free
U ASN1_item_i2d
U ASN1_item_new
U ERR_put_error
U EVP_CIPHER_CTX_cipher
U EVP_CIPHER_CTX_free
U EVP_CIPHER_CTX_key_length
U EVP_CIPHER_CTX_new
U EVP_CIPHER_iv_length
U EVP_CIPHER_key_length
U EVP_CIPHER_param_to_asn1
U EVP_CIPHER_type
U EVP_CipherInit_ex
U EVP_PBE_scrypt
U OBJ_nid2obj
U OPENSSL_cleanse
U PBE2PARAM_free
U PBE2PARAM_it
U PBE2PARAM_new
0000000000000030 T PKCS5_pbe2_set_scrypt
00000000000003f4 T PKCS5_v2_scrypt_keyivgen
U RAND_bytes
0000000000000024 T SCRYPT_PARAMS_free
0000000000000000 R SCRYPT_PARAMS_it
0000000000000018 T SCRYPT_PARAMS_new
0000000000000038 r SCRYPT_PARAMS_seq_tt
U X509_ALGOR_free
U X509_ALGOR_new
0000000000000000 T d2i_SCRYPT_PARAMS
000000000000000c T i2d_SCRYPT_PARAMS
U memcpy