查看源代码 加密发布说明
本文档描述了对 Crypto 应用程序所做的更改。
Crypto 5.5.2
已修复的错误和故障
crypto:strong_rand_bytes/2
修复后可在安装了 FIPS 支持的 Ubuntu Pro 上运行。修复了在使用 OpenSSL 3.4 或更高版本时,摘要类型为
shake128
和shake256
的crypto:hash_final/1
的问题。
Crypto 5.5.1
已修复的错误和故障
使用
--enable-fips
构建的 crypto 现在将接受没有 fips 提供程序的 OpenSSL 3 库,只要不启用 fips 模式。自有 ID:OTP-19212 辅助 ID:GH-8562
改进和新功能
在文档中添加了一条警告,以避免调用
crypto:start/0
,因为它不适用于 FIPS 模式。请改用application:start(crypto)
。自有 ID:OTP-19143
已撤销对 RSA 加密函数的弃用,因为仍然存在 PKCS-1 以外的其他填充模式的合法用例。
虽然在某些版本的加密库中使用 PCKS-1 填充可以认为是安全的,但我们仍然建议使用其他对 oracle 攻击不那么敏感的算法。
自有 ID:OTP-19163
一些已删除函数的编译器警告已更正,以指出正确的替换函数。
自有 ID:OTP-19186 辅助 ID:PR-8709
Crypto 5.5
改进和新功能
文档已迁移为使用 Markdown 和 ExDoc。
自有 ID:OTP-18955 辅助 ID:PR-8026
删除了自 OTP 25 起标记为已弃用的函数
crypto_dyn_iv_init/3
和crypto_dyn_iv_update/3
。自有 ID:OTP-18973
添加了对 sm3 哈希和 hmac 的支持。
自有 ID:OTP-18975 辅助 ID:PR-6658
当清除
crypto
时,会调用OPENSSL_thread_stop
以防止泄露线程特定数据。自有 ID:OTP-18978 辅助 ID:PR-7809
根据 GB/T 32907-2016 添加了 SM4 分组密码实现。
自有 ID:OTP-19005 辅助 ID:PR-8168
现有函数
ssl:key_exporter_materials/4
现在已记录并受支持。潜在的不兼容性
自有 ID:OTP-19016 辅助 ID:PR-8233
由于对 PKCS #1 v1.5 填充的另一次攻击,称为 Marvin 攻击,我们收到了来自 Red Hat 的 Hubert Kario 的警报。您可以在 https://people.redhat.com/~hkario/marvin/ 找到有关此攻击的更多详细信息。现在不建议使用可能容易受到攻击的函数。
请注意,您可以使用适当版本的 OpenSSL 和我们的软件来缓解此问题,但我们建议根本不要使用它们。
还要避免使用 TLS-1.2 之前的 TLS 版本(默认情况下不受支持),并且不要启用 RSA 密钥交换密码套件(默认情况下不受支持)。
潜在的不兼容性
自有 ID:OTP-19075
Crypto 5.4.2.3
已修复的错误和故障
修复了如果多个 Erlang 进程第一次调用
crypto:supports(curves)
时可能导致阻塞调度程序线程的错误。此错误仅存在于 OTP-26.2.5.4 中。自有 ID:OTP-19316 辅助 ID:GH-8971, PR-8979
修复了在使用 OpenSSL 3.4 或更高版本时,摘要类型为
shake128
和shake256
的crypto:hash_final/1
的问题。自有 ID:OTP-19329 辅助 ID:GH-8997, PR-9002
Crypto 5.4.2.2
已修复的错误和故障
使用
--enable-fips
构建的 crypto 现在将接受没有 fips 提供程序的 OpenSSL 3 库,只要不启用 fips 模式。自有 ID:OTP-19212 辅助 ID:GH-8562, PR-8762
crypto:strong_rand_bytes/2
修复后可在安装了 FIPS 支持的 Ubuntu Pro 上运行。自有 ID:OTP-19223 辅助 ID:PR-8800, GH-8769
Crypto 5.4.2.1
改进和新功能
在文档中添加警告以避免使用
crypto:start/0
,因为它不适用于 FIPS 模式。请改用application:start(crypto)
。自有 ID:OTP-19143
Crypto 5.4.2
已修复的错误和故障
修复了在 MacOS 上使用 OpenSSL 3 和
--enable-fips
构建的问题。自有 ID:OTP-19038 辅助 ID:GH-8271, PR-8277
Crypto 5.4.1
已修复的错误和故障
修复了定义 OPENSSL_NO_DES 时的编译错误。
自有 ID:OTP-18921
函数
crypto:pbkdf2_hmac
将不再阻塞主调度程序。如果迭代计数或块大小参数导致该函数可能需要很长时间才能执行,则该函数将被调度在脏 CPU 调度程序上运行。自有 ID:OTP-18996 辅助 ID:PR-8173, PR-8174
Crypto 5.4
已修复的错误和故障
修复了 Windows 上的一些良性编译警告。
自有 ID:OTP-18895
改进和新功能
为 OpenSSL 3 版本启用引擎支持。
自有 ID:OTP-18832 辅助 ID:PR-7763
Crypto 5.3
已修复的错误和故障
修复了在具有 musl libc 的操作系统(例如 Alpine linux)上,由于
crypto being
被清除并重新加载(例如通过 init:restart)而导致的 VM 崩溃。自有 ID:OTP-18670 辅助 ID:GH-7436, PR-7450
改进了对 LibreSSL 版本的理解。支持 LibreSSL 3.7 的 chacha20 和 chacha20_poly1305。反映了 LibreSSL 2.6.1 中完成的对 DSS/DSA 算法的支持的删除。
自有 ID:OTP-18758 辅助 ID:PR-7209
改进和新功能
crypto
支持 OpenSSL 3.0.* 和 3.1.* 的 FIPS。自有 ID:OTP-18666 辅助 ID:PR-7392
Crypto 5.2
已修复的错误和故障
修复了 LibreSSL 的 cmac_update aes_128_cbc。
自有 ID:OTP-18571
改进和新功能
添加了对 SHAKE128 和 SHAKE256 的支持。
自有 ID:OTP-18204 辅助 ID:PR-6203
使
-DOPENSSL_API_COMPAT
标志在没有警告的情况下工作。自有 ID:OTP-18206 辅助 ID:PR-6167
将 size/1 替换为 tuple_size/1 或 byte_size/1
size/1
BIF 没有被 JIT 优化,它的使用可能会导致 Dialyzer 的类型更差。当已知被测试的值必须是元组时,应始终首选
tuple_size/1
。当已知被测试的值必须是二进制时,应首选
byte_size/1
。但是,byte_size/1
也接受位字符串(将大小向上舍入为整数个字节),因此必须确保在调用byte_size/
之前调用is_binary/1
,以确保位字符串被拒绝。请注意,编译器会删除对is_binary/1
的冗余调用,因此如果不确定之前的代码是否已确保参数是二进制的,则在调用byte_size/1
之前添加is_binary/1
测试不会造成任何损害。自有 ID:OTP-18405 辅助 ID:GH-6672,PR-6702,PR-6768,PR-6700,PR-6769,PR-6812,PR-6814
通过在嵌入模式的引导顺序中添加一个额外的步骤来改进引导期间
on_load
模块的处理,该步骤运行所有on_load
处理程序,而不是依赖于稍后在内核监督树启动时显式调用它们。这主要是一个代码改进和 OTP 内部简化,以避免未来的错误并简化代码维护。
自有 ID:OTP-18447
Crypto 5.1.4.3
已修复的错误和故障
修复了在 MacOS 上使用 OpenSSL 3 和
--enable-fips
构建的问题。自有 ID:OTP-19038 辅助 ID:GH-8271, PR-8277
Crypto 5.1.4.2
已修复的错误和故障
函数
crypto:pbkdf2_hmac
将不再阻塞主调度程序。如果迭代计数或块大小参数导致该函数可能需要很长时间才能执行,则该函数将被调度在脏 CPU 调度程序上运行。自有 ID:OTP-18996 辅助 ID:PR-8173, PR-8174
Crypto 5.1.4.1
已修复的错误和故障
修复了在具有 musl libc 的操作系统(例如 Alpine linux)上,由于
crypto being
被清除并重新加载(例如通过 init:restart)而导致的 VM 崩溃。自有 ID:OTP-18670 辅助 ID:GH-7436, PR-7450
Crypto 5.1.4
修复的错误和故障
通过此更改,修复了使用 OpenSSL 3 的 crypto:generate_key 调用中的随机错误。
内部 ID:OTP-18555
Crypto 5.1.3
修复的错误和故障
使用
--with-ssl-rpath=<PATHS>
配置的用户定义的运行时库路径可能无法启用。内部 ID:OTP-18384 辅助 ID:PR-6596
确保如果用户已传递用户定义的运行时库路径但无法设置,则
configure
会失败。内部 ID:OTP-18408
Crypto 5.1.2
修复的错误和故障
修复 Windows 上使用
--with-ssl
和--disable-dynamic-ssl-lib
的配置。内部 ID:OTP-18147 辅助 ID:GH-6024, PR-6056
如果引擎句柄未显式卸载,则在垃圾回收中正确删除所有引用。
内部 ID:OTP-18152
更改了引擎加载/卸载函数的行为
引擎加载/卸载函数已更改语义,以获得更一致的行为并在变量被垃圾回收时正确工作。
现在,加载函数不会注册要替换的引擎的方法。如果需要,现在将使用新的函数 engine_register/engine_unregister 来处理。
一些函数已从文档中删除,因此也从 API 中删除,但为了兼容性,它们保留在代码中。
- engine_load/4:现在与 engine_load/3 相同
- engine_unload/2:现在与 engine_unload/1 相同
- ensure_engine_loaded/3:现在与 ensure_engine_loaded/2 相同
- ensure_engine_unloaded/1, ensure_engine_unloaded/2:现在与 engine_unload/1 相同
* 可能的不兼容性 *
内部 ID:OTP-18172 辅助 ID:ERIERL-826
修复了与 OpenSSL 3.0 cryptolib 链接时 AES-CFB 和 Blowfish-CFB/OFB 的命名错误。
内部 ID:OTP-18200
对于 eddsa,签名/验证现在的行为与 OTP-24 及更早版本相同。
内部 ID:OTP-18205 辅助 ID:GH-6219
改进和新特性
将椭圆曲线名称从 crypto.erl 传递到 crypto 的 nif。
内部 ID:OTP-18037
删除了配置选项
--disable-deprecated-warnings
。在 OpenSSL 3.0 的支持未完成的一些版本中使用过它。在 OTP 25 中不需要它。内部 ID:OTP-18133
现在认为 Crypto 可以与 OpenSSL 3.0 cryptolib 一起用于生产代码。
ENGINE 和 FIPS 尚未完全正常工作。
内部 ID:OTP-18153
如果 libcrypto 3.0 中缺少旧版提供程序,则不退出。
内部 ID:OTP-18217
Crypto 5.1.1
修复的错误和故障
在文档中注明,如果调用
crypto:generate_key/2
指定的密钥长度太小,则 MODP (rfc3526) 组和 OpenSSL 3.0 可能会产生错误。内部 ID:OTP-18046
改进和新特性
cmac 现在仅使用 3.0 API
内部 ID:OTP-18010
文档现在已更新,其中包含当前测试 OTP 的 OpenSSL cryptolib 版本。
内部 ID:OTP-18132
Crypto 5.1
修复的错误和故障
修复 ensure_engine_loaded 中的定时错误
当并行完成两个 ensure_engine_loaded() 调用时,可能会发生以下情况:一个加密库函数被两者而不是其中一个调用,从而导致错误。通过将实现从 erlang 移到 NIF 函数中来解决此问题,该函数使用互斥锁来保护敏感部分。
内部 ID:OTP-17858 辅助 ID:ERIERL-728
删除错误的类型
run_time_error()
和descriptive_error()
。内部 ID:OTP-17984
改进和新特性
针对
autoconf
2.71 调整了configure
脚本的输入。内部 ID:OTP-17414 辅助 ID:PR-4967
添加 crypto:hash_equals/2
内部 ID:OTP-17471 辅助 ID:PR-4750
将 /opt/homebrew/opt/openssl 添加到搜索 OpenSSL cryptolib 的标准位置。
内部 ID:OTP-17561
crypto_dyn_iv_init/3
和crypto_dyn_iv_update/3
已弃用。内部 ID:OTP-17870
错误消息中的信息已增加。
以前,错误是用错误类异常
badarg
、notsup
或error
以及其他一些方式(如其他异常或非标准化格式的返回值)发出信号。现在它是错误类异常
{notsup|badarg|error, InfoFromCfile, Description::string()}
。InfoFromCfile
是一个术语,其中包含发现错误的 C 文件名称和行号。这主要供加密维护人员或高级用户查找复杂错误的原因(可能在加密本身中)。该术语的内容可能会在将来更改。Description
是一个描述错误的纯文本字符串。对于badarg
和notsup
,其目的是帮助用户查找原因(例如“密钥大小错误”)。特别是对于一些不太可能的error
,如果不深入了解底层加密库,则可能无法理解该字符串。此类消息旨在供加密维护人员使用。调用堆栈上的第一个元素(
try ... catch error:E:S .... end
中的S
)提供了更多信息,例如在加密调用中的实际参数列表以及在加密内部调用 NIF 中的参数编号(如果可能)。受此更改影响的加密函数包括
sign/4, sign/5, verify/5, verify/6,
generate_key/2, generate_key/3, compute_key/4,
hash/2, hash/4, hash_init/1, hash_update/4, hash_final/1,
mac/3,4, mac_init/3, mac_update/2, mac_final/2,
pbkdf2_hmac/5,
public_encrypt/4, private_decrypt/4, private_encrypt/4, public_decrypt/4
此模式在早期已引入
crypto_init/3, crypto_init/4, crypto_update/2, crypto_final/1, crypto_get_data/1,
crypto_one_time/4, crypto_one_time/5, crypto_one_time_aead/6, crypto_one_time_aead/7
* 可能的不兼容性 *
内部 ID:OTP-17965
添加了对密钥大小为 128、192 和 256 位的 AES 加密/解密的输出反馈模式 (OFB) 支持。
内部 ID:OTP-18067 辅助 ID:PR-5866
OpenSSL 3.0 中弃用的加密库 API 现在不再使用,以下列出一些例外情况。
虽然 OpenSSL 3.0.x 本身是稳定的,但它在 OTP/crypto 中的使用仍不应被认为适合生产代码。
使用 3.0 时,默认情况下仍禁用 ENGINE 的使用。
弃用的函数仍在 otp_test_engine.c(仅在测试中使用)、mac.c (EVP_PKEY_new_CMAC_key) 和 ec.c 中五个函数调用(EVP_PKEY_assign、EC_KEY_get_conv_form、EVP_PKEY_get1_EC_KEY、EC_KEY_get0_group 和 EC_KEY_set_public_key)中调用。
内部 ID:OTP-18086 辅助 ID:OTP-16282、OTP-16643、OTP-16644、OTP-17701、OTP-17702、OTP-17704
Crypto 5.0.6.5
修复的错误和故障
函数
crypto:pbkdf2_hmac
将不再阻塞主调度程序。如果迭代计数或块大小参数导致该函数可能需要很长时间才能执行,则该函数将被调度在脏 CPU 调度程序上运行。自有 ID:OTP-18996 辅助 ID:PR-8173, PR-8174
Crypto 5.0.6.4
修复的错误和故障
修复了在具有 musl libc 的操作系统(例如 Alpine linux)上,由于
crypto being
被清除并重新加载(例如通过 init:restart)而导致的 VM 崩溃。自有 ID:OTP-18670 辅助 ID:GH-7436, PR-7450
Crypto 5.0.6.3
修复的错误和故障
更改了引擎加载/卸载函数的行为
引擎加载/卸载函数已更改语义,以获得更一致的行为并在变量被垃圾回收时正确工作。
现在,加载函数不会注册要替换的引擎的方法。如果需要,现在将使用新的函数 engine_register/engine_unregister 来处理。
一些函数已从文档中删除,因此也从 API 中删除,但为了兼容性,它们保留在代码中。
- engine_load/4:现在与 engine_load/3 相同
- engine_unload/2:现在与 engine_unload/1 相同
- ensure_engine_loaded/3:现在与 ensure_engine_loaded/2 相同
- ensure_engine_unloaded/1, ensure_engine_unloaded/2:现在与 engine_unload/1 相同
* 可能的不兼容性 *
内部 ID:OTP-18172 辅助 ID:ERIERL-826
Crypto 5.0.6.2
修复的错误和故障
修复 Windows 上使用
--with-ssl
和--disable-dynamic-ssl-lib
的配置。内部 ID:OTP-18147 辅助 ID:GH-6024, PR-6056
Crypto 5.0.6.1
修复的错误和故障
修复 ensure_engine_loaded 中的定时错误
当并行完成两个 ensure_engine_loaded() 调用时,可能会发生以下情况:一个加密库函数被两者而不是其中一个调用,从而导致错误。通过将实现从 erlang 移到 NIF 函数中来解决此问题,该函数使用互斥锁来保护敏感部分。
内部 ID:OTP-17858 辅助 ID:ERIERL-728
Crypto 5.0.6
改进和新特性
自 OTP-24.2 起,OTP 中的 crypto 应用程序可以使用新的 OpenSSL 3.0 加密库进行编译、链接和使用。
crypto 应用程序的 3.0 支持已得到改进,但**仍然不建议**用于实验和 alpha 测试以外的其他用途。目前无法保证它能够正常工作,甚至无法与其他 OTP 应用程序(例如 SSL 和 SSH)一起使用,尽管没有已知错误。
自上一个版本 OTP-24.2 以来,已完成以下改进
- 它几乎在 OTP 实验室的每次夜间测试中都进行了测试
- 使用 OpenSSL 3.0 启用了哈希算法
md4
和ripemd160
。- OpenSSL 3.0 已启用
blowfish_cbc
、blowfish_ecb
、des_cbc
、des_cfb
、des_ecb
、rc2_cbc
和rc4
密码。OpenSSL 3.0 仍然禁用或不支持以下功能:
- ENGINE 支持
- FIPS 模式
- 除了内置提供程序之外的其他提供程序
- 在兼容模式下(例如,表现得像 1.1.1)使用 OpenSSL 3.0 加密库进行编译和链接
此外,不支持
blowfish_cfb64
和blowfish_ofb64
密码,并且将来也不会支持。OpenSSL 3.0 加密库中已弃用的函数不得禁用,因为 OTP/crypto 仍使用一些已弃用的 API 函数。设置 gcc 标志
-Wno-deprecated-declarations
是为了防止在编译时打印弃用警告。自有 ID:OTP-17812 辅助 ID:OTP-16646,OTP-16282
Crypto 已在 OpenBSD 上适配 LibreSSL 3.5.0。
自有 ID:OTP-17941 辅助 ID:OTP-17942
新的配置选项(
--disable-otp-test-engine
)用于禁止构建某些测试套件中使用的 OTP 测试引擎。原因是测试引擎在 LibreSSL 3.5.0 上可能难以编译。对于该特定的加密库版本(或更高版本),此配置选项会自动设置。
自有 ID:OTP-17942 辅助 ID:OTP-17941
Crypto 5.0.5
修复的错误和故障
修复了使用早期 LibreSSL 版本编译时出现的 C 警告“隐式声明函数 'OpenSSL_version_num'”。
自有 ID:OTP-17637
未正确检查 AEAD 密码的 FIPS 可用性。
自有 ID:OTP-17740
修复了即使缺少别名密码(如 aes_128_cbc、aes_256_cbc 等),也可能存在密码别名(如 aes_cbc 等)的问题。
自有 ID:OTP-17741
改进和新功能
OTP 中的 crypto 应用现在可以使用新的 OpenSSL 3.0 加密库进行编译、链接和使用。
它尚未经过广泛测试,因此在此版本中**不建议**用于实验和 alpha 测试之外的用途。目前无法保证它可以工作,即使与其他 OTP 应用程序(例如 SSL 和 SSH)一起使用,尽管没有已知错误。
未测试在兼容模式下(例如,表现得像 1.1.1)使用 OpenSSL 3.0 加密库进行编译和链接。未测试外部提供程序。
FIPS 模式的支持尚未工作,在用 OpenSSL 3.0 编译时禁用。
OpenSSL 3.0 加密库中已弃用的函数不得禁用,因为 OTP/crypto 仍使用一些已弃用的 API 函数。设置 gcc 标志
-Wno-deprecated-declarations
是为了防止在编译时打印弃用警告。使用 OpenSSL 3.0 编译时,哈希算法
md4
和ripemd160
暂时禁用。使用 OpenSSL 3.0 编译时,密码
blowfish_cbc
、blowfish_cfb64
、blowfish_ecb
、blowfish_ofb64
、des_cbc
、des_cfb
、des_ecb
、rc2_cbc
和rc4
暂时禁用。自有 ID:OTP-16646 辅助 ID:OTP-16282
crypto 中的错误处理部分已使用新的错误报告支持进行重构。之前像异常一样传播的错误仍然如此,但是当从终端调用失败的函数(例如在故障查找期间)时,会生成更具描述性的文本。
自有 ID:OTP-17241
添加了一个新函数
crypto:info/0
,用于显示有关 crypto NIF 的编译和链接的一些数据。自有 ID:OTP-17603
将
pbkdf2_hmac/5
函数添加到 crypto 模块。它调用
PKCS5_PBKDF2_HMAC
函数,该函数以高效的方式实现带有 HMAC 的 PBKD2。自有 ID:OTP-17808 辅助 ID:PR-5421
Crypto 5.0.4
修复的错误和故障
修复了
crypto
模块清除时的轻微内存泄漏。自有 ID:OTP-17668 辅助 ID:PR-5245
修复了在链接某些加密库时,FIPS 模式中可能出现的不一致问题。
自有 ID:OTP-17672
Crypto 5.0.3
修复的错误和故障
修复了
crypto:ensure_engine_unloaded
中的错误。还修复了与引擎卸载相关的轻微内存泄漏。自有 ID:OTP-17593 辅助 ID:ERIERL-679
修复了在 Windows 上启用和禁用(或反之)FIPS 有时会导致进程退出时出现核心转储的问题。
自有 ID:OTP-17618 辅助 ID:PR-5126,GH-4920
改进和新功能
如果 cryptolib < 1.0.1 且 OTP/crypto 配置为 --enable-fips,则禁用 fips
否则,旧的 OpenSSL 版本可能会出现编译或加载问题。
自有 ID:OTP-17389
Crypto 5.0.2
修复的错误和故障
现在,如果需要,EC 密钥将零填充到预期长度。
自有 ID:OTP-17442 辅助 ID:GH-4861
Crypto 5.0.1
修复的错误和故障
消除核心转储的风险。
自有 ID:OTP-17391 辅助 ID:GH-4810
修复并记录了
$ERL_TOP/HOWTO/INSTALL.md
中的DED_LDFLAGS_CONFTEST
配置变量。自有 ID:OTP-17419 辅助 ID:GH-4821
提交生成的
configure
脚本。自有 ID:OTP-17420 辅助 ID:OTP-17398,GH-4821
Crypto 5.0
修复的错误和故障
将
/usr/local/opt/openssl
添加到 openssl 配置搜索路径。此路径是 OS X 上某些工具放置 openssl 的位置。自有 ID:OTP-16882
修复了 clang 编译器产生的编译器警告。
自有 ID:OTP-17105 辅助 ID:PR-2872
如果无法启用请求的功能,则
crypto
和erts
中的configure
脚本现在将失败。crypto
的configure
脚本的大部分已重写,进行了各种改进和错误修复。它现在可以更好地找到可用的 OpenSSL 库,但在以下情况下,它将无法检测到 OpenSSL 库,而在以前,它有时会偶然检测到这些库include
目录和lib
目录部分安装在不同基本目录中的 OpenSSL 安装。为了在此更改后检测此类安装,用户必须使用--with-ssl=<path>
和--with-ssl-incl=<path>
configure
命令行参数显式指定位置。- 在 Debian 衍生产品上使用旧的
gcc
编译器或其他编译器在lib
目录下构建具有多架构目录时。为了在此更改后检测此类安装,用户必须使用--with-ssl-lib-subdir=lib/<multiarch-dir>
configure
命令行参数显式指定多架构目录名称。
自有 ID:OTP-17254 辅助 ID:ERIERL-618,GH-4230
在 crypto:sign/4 和 crypto:verify/6 的规范中缺少值“none”。
自有 ID:OTP-17312 辅助 ID:PR-4723
改进和新功能
现在已删除 OTP-23.0 中已弃用的函数和密码名称。
* 可能的不兼容性 *
自有 ID:OTP-16656
删除了包含多余目标文件的已安装目录 priv/obj/。
自有 ID:OTP-17001 辅助 ID:PR-2852
TLS 连接现在支持 EdDSA 证书。
自有 ID:OTP-17142 辅助 ID:PR-4756,GH-4637,GH-4650
添加 prop_aead 属性以从 crypto:cipher_info/1 映射。
自有 ID:OTP-17313 辅助 ID:PR-4686
Crypto 4.9.0.4
修复的错误和故障
更改了引擎加载/卸载函数的行为
引擎加载/卸载函数已更改语义,以获得更一致的行为并在变量被垃圾回收时正确工作。
现在,加载函数不会注册要替换的引擎的方法。如果需要,现在将使用新的函数 engine_register/engine_unregister 来处理。
一些函数已从文档中删除,因此也从 API 中删除,但为了兼容性,它们保留在代码中。
- engine_load/4:现在与 engine_load/3 相同
- engine_unload/2:现在与 engine_unload/1 相同
- ensure_engine_loaded/3:现在与 ensure_engine_loaded/2 相同
- ensure_engine_unloaded/1, ensure_engine_unloaded/2:现在与 engine_unload/1 相同
* 可能的不兼容性 *
内部 ID:OTP-18172 辅助 ID:ERIERL-826
Crypto 4.9.0.3
修复的错误和故障
修复 ensure_engine_loaded 中的定时错误
当并行完成两个 ensure_engine_loaded() 调用时,可能会发生以下情况:一个加密库函数被两者而不是其中一个调用,从而导致错误。通过将实现从 erlang 移到 NIF 函数中来解决此问题,该函数使用互斥锁来保护敏感部分。
内部 ID:OTP-17858 辅助 ID:ERIERL-728
如果引擎句柄未显式卸载,则在垃圾回收中正确删除所有引用。
内部 ID:OTP-18152
Crypto 4.9.0.2
修复的错误和故障
现在,如果需要,EC 密钥将零填充到预期长度。
自有 ID:OTP-17442 辅助 ID:GH-4861
Crypto 4.9.0.1
修复的错误和故障
消除核心转储的风险。
自有 ID:OTP-17391 辅助 ID:GH-4810
提交生成的
configure
脚本。自有 ID:OTP-17420 辅助 ID:OTP-17398,GH-4821
Crypto 4.9
修复的错误和故障
修复了 crypto ENGINE 中的轻微内存泄漏,并增强了代码的健壮性。
自有 ID:OTP-17212
如果在 OpenSSL 配置中设置了 NO_EC*,则 otp_test_engine 不再失败。
自有 ID:OTP-17256 辅助 ID:PR-4580,GH-4573
改进和新功能
各种地址消毒器支持。
自有 ID:OTP-16959 辅助 ID:PR-2965
现在,对于 1.0.2 及更早版本的 OpenSSL 加密库版本,已禁用 EVP。
自有 ID:OTP-17116 辅助 ID:PR-2972
删除了未使用 C 函数的警告
自有 ID:OTP-17145 辅助 ID:OTP-17105,PR-2872
Crypto 4.8.3
修复的错误和故障
在 SRP 中的 BN 调用中添加了缺失的标志。
自有 ID:OTP-17107
Crypto 4.8.2
修复的错误和故障
修复了 configure 脚本源中
AC_CONFIG_AUX_DIRS()
宏的使用。自有 ID:OTP-17093 辅助 ID:ERL-1447,PR-2948
Crypto 4.8.1
修复的错误和故障
无论如何加载 crypto,都在加载 crypto 时在 NIF 中构建支持的曲线缓存。
这可以防止不同的进程同时启动 crypto 应用程序时可能出现的问题。
自有 ID:OTP-16819 辅助 ID:PR-2720
现在可以使用 crypto 和 openssl 构建并启用 gprof,并将它们静态链接到 VM 中。
自身 ID: OTP-17029
改进和新特性
修复了由于互斥锁问题,在使用较旧的 OpenSSL 时 HMAC 性能下降的问题。
实现了一个变通方法,允许从使用 EVP API 进行 HMAC 操作时回退。在某些架构上,这可能会提高性能,特别是对于旧版本的 OpenSSL。对于 1.0.2 之前的 openssl 版本,始终启用此回退到低级函数的功能。
自身 ID: OTP-17025 辅助 ID: ERL-1400, PR-2877
Crypto 4.8
修复的 Bug 和故障
修复了 crypto 中 crypto_init 和 crypto:one_time 的类型规范错误
自身 ID: OTP-16658 辅助 ID: OTP-15884, ERL-1257
crypto:rand_uniform/2 的弃用消息指示了一个不存在的函数。现在建议使用正确的函数 (rand:uniform/1)。
自身 ID: OTP-16846 辅助 ID: PR-2741
改进和新特性
实现了一个变通方法,允许从使用 EVP API 进行 Diffie-Hellman 密钥生成时回退
自身 ID: OTP-16771 辅助 ID: ERIERL-509
用于密钥生成的内部 Diffie-Hellman 高级 API 在旧的且现在不受 OpenSSL 支持的加密库版本(1.0.1 及更早版本)中速度很慢。
如果无论如何使用了这样的加密库,则会在 crypto 应用程序内部使用低级 API。
自身 ID: OTP-16774
Crypto 4.7
修复的 Bug 和故障
Crypto 报告了不支持的椭圆曲线,例如在 Fedora 发行版上作为受支持的曲线。
自身 ID: OTP-16579 辅助 ID: ERL-825
改进和新特性
添加了对 ed25519 和 ed448 的支持到
crypto:generate_key
。自身 ID: OTP-15967 辅助 ID: PR-2329
新的 crypto 函数 API(crypto_init、crypto_update 和 crypto_one_time)已更新。
现在有一个函数
crypto_final/1
,并且可以在crypto_init/3
和crypto_init/4
中设置选项。有关详细信息,请参阅手册。自身 ID: OTP-16160
正如在 OTP 22.0 中宣布的那样,在 CRYPTO 中引入了新的 API。有关更多信息和建议的替换函数,请参阅 CRYPTO 用户指南中的 新旧 API 章节。
旧 API 现在已在 OTP-23.0 中弃用,并将会在 OTP-24.0 中移除。
此弃用包括密码名称。请参阅 crypto 用户指南中已弃用的密码名称部分,该部分位于旧 API章节。
自身 ID: OTP-16232
修复了在没有已弃用的 OpenSSL 加密库 API 的情况下进行 C 编译的问题
自身 ID: OTP-16369 辅助 ID: PR-2474
重构了对已弃用和已删除函数的内部处理。
自身 ID: OTP-16469
将缺少的 'eddh' 添加到 crypto:supports(public_keys)。
自身 ID: OTP-16583
Crypto 4.6.5.4
修复的 Bug 和故障
现在,如果需要,EC 密钥将零填充到预期长度。
自有 ID:OTP-17442 辅助 ID:GH-4861
Crypto 4.6.5.3
修复的 Bug 和故障
消除核心转储的风险。
自有 ID:OTP-17391 辅助 ID:GH-4810
提交生成的
configure
脚本。自有 ID:OTP-17420 辅助 ID:OTP-17398,GH-4821
Crypto 4.6.5.2
修复的 Bug 和故障
在 SRP 中的 BN 调用中添加了缺失的标志。
自有 ID:OTP-17107
Crypto 4.6.5.1
改进和新特性
实现了一个变通方法,允许从使用 EVP API 进行 Diffie-Hellman 密钥生成时回退
自身 ID: OTP-16771 辅助 ID: ERIERL-509
Crypto 4.6.5
修复的 Bug 和故障
修复了涉及调用 crypto ng_api 的潜在内存泄漏。
自身 ID: OTP-16428 辅助 ID: PR-2511
Crypto 4.6.4
修复的 Bug 和故障
添加了常数时间比较。
自身 ID: OTP-16376
Crypto 4.6.3
改进和新特性
密码 aes_cfb8 和 aes_cfb128 现在使用 EVP 接口。支持的密钥长度为 128、192 和 256 位。
自身 ID: OTP-16133 辅助 ID: PR-2407
密码 aes_cfb8 和 aes_cfb128 现在在启用 FIPS 模式下可用。
自身 ID: OTP-16134 辅助 ID: PR-2407
Crypto 4.6.2
修复的 Bug 和故障
以前在解密 chacha20_poly1305 时未检查 AEAD 标记
自身 ID: OTP-16242 辅助 ID: ERL-1078
Crypto 4.6.1
修复的 Bug 和故障
修复了如果 erlang 模拟器链接了非常旧的加密库版本(1.0.1 或更早版本)时的错误。
如果 crypto 函数中使用了未知的密码名称,则现在修复的 bug 可能会触发核心转储。
自身 ID: OTP-16202
Crypto 4.6
修复的 Bug 和故障
crypto_one_time/4
的实现已调整为与类型规范匹配。该函数的规范和黑盒行为保持不变。一些细节:规范和实现分别来看都是正确的。但是,当两者同时与
crypto_one_time/5
(由crypto_one_time/4
的实现调用)结合使用时,Dialyzer 检测到了一个(明显的)错误,其检查比平常更彻底。自身 ID: OTP-15884 辅助 ID: ERL-974
当启用 FIPS 模式使用 crypto 时,摘要未被正确处理。
自身 ID: OTP-15911
修复了
ng_crypto_init_nif
中错误处理代码中的内存泄漏。自身 ID: OTP-15924
修复了 crypto nif 的静态构建损坏的问题
自身 ID: OTP-15928 辅助 ID: PR-2296
改进和新特性
消息验证码 (MAC) CMAC、HMAC 和 Poly1305 在新的 Crypto API 中统一为通用函数。请参阅 CRYPTO 手册。
自身 ID: OTP-13872
Crypto 4.5.1
修复的 Bug 和故障
在 crypto:supports 中,对于 1.0.1 之前的加密库,密码 aes-ctr 被错误地禁用。但是,它在加密和解密函数中有效。
自身 ID: OTP-15829
Crypto 4.5
修复的 Bug 和故障
修复了
crypto:poly1305/2
错误返回中的一个 bug。它返回原子notsup
而不是异常notsup
。* 可能的不兼容性 *
自身 ID: OTP-15677
密码 chacha20 是在 OpenSSL 1.1.0 中引入的。但是,在非常奇怪的情况下,它可能会在低于 OpenSSL 1.1.0d 的版本上失败。因此,它对于这些版本被禁用。
* 可能的不兼容性 *
自身 ID: OTP-15678
改进和新特性
实现了一种新的
rand
模块算法exro928ss
(Xoroshiro928**)。它具有非常长的周期和良好的所有输出位的统计质量,同时仍然仅比默认算法慢约 50%。相同的生成器也用作新的
crypto
插件中用于rand
模块的长周期计数器,该插件的算法为crypto_aes
。此插件使用 AES-256 对计数器进行加扰,从而掩盖任何可检测到的统计伪影。加扰以块为单位完成,这些块被缓存以获得良好的摊销速度(约为默认算法的一半)。自身 ID: OTP-14461 辅助 ID: PR-1857
Crypto 的单个 C 文件被拆分为多个文件。不同部分中的不同编码风格被统一为单一风格。
自身 ID: OTP-14732 辅助 ID: PR-2068, PR-2095
crypto
应用程序的构建配置已从erts
应用程序移动到crypto
应用程序中。自身 ID: OTP-15129
添加了两个哈希函数
blake2b
和blake2s
(分别为 64 位哈希和 32 位哈希)。这些是现代且标准的哈希函数,用于区块链和加密通信协议。自 1.1.1 版本以来,这些哈希函数在 OpenSSL 中可用。自身 ID: OTP-15564 辅助 ID: PR-2129
在 crypto 中实现了一个新的 API。有关更多信息,请参阅 CRYPTO 用户指南,新旧 API 章节。
带有
crypto:block_*
和crypto:stream_*
接口的旧 API 为了兼容性而保留,但是使用新 API 实现。请注意,由于错误检查更加彻底,因此可能存在参数(例如错误的长度)不再被接受的情况。* 可能的不兼容性 *
自身 ID: OTP-15644 辅助 ID: OTP-14732, OTP-15451, PR-1857, PR-2068, PR-2095
新的 hash_info/1 和 cipher_info/1 函数返回带有关于参数中哈希或密码信息的 map。
自身 ID: OTP-15655 辅助 ID: PR-2173, ERL-864, PR-2186
在编译 CRYPTO 应用程序的 C 部分时,遵守额外的 OpenSSL 配置标志:
no-bf
、no-blake2
、no-chacha
、no-cmac
、no-dh
、no-dsa
、no-md4
、no-poly1305
、no-rc2
、no-rc4
和no-rmd160
。自身 ID: OTP-15683
引入了一个新函数
crypto:supports/1
。单个参数采用一个原子作为参数:hashes
、public_keys
、ciphers
、macs
、curves
或rsa_opts
。返回值是支持的算法列表。除了参数和返回值外,与现有的
crypto:supports/0
的区别在于,旧函数报告旧 api 支持的内容,而新函数报告新 api 中的算法。自身 ID: OTP-15771
Crypto 4.4.2.3
修复的错误和故障
在 SRP 中的 BN 调用中添加了缺失的标志。
自有 ID:OTP-17107
Crypto 4.4.2.2
修复的错误和故障
添加了常数时间比较。
自身 ID: OTP-16376
Crypto 4.4.2.1
改进和新特性
密码 aes_cfb8 和 aes_cfb128 现在使用 EVP 接口。支持的密钥长度为 128、192 和 256 位。
自身 ID: OTP-16133 辅助 ID: PR-2407
密码 aes_cfb8 和 aes_cfb128 现在在启用 FIPS 模式下可用。
自身 ID: OTP-16134 辅助 ID: PR-2407
Crypto 4.4.2
修复的错误和故障
修复了 Windows 上的构建链接错误。未解析的符号 'bcmp'。
自有 ID:OTP-15750 辅助 ID:ERL-905
Crypto 4.4.1
修复的错误和故障
修复了一个导致
crypto:sign
和crypto:verify
在一种情况下返回错误消息badarg
而不是notsup
的错误。这种情况是在使用 eddsa 密钥(即 ed15519 或 ed448)进行签名或验证时,但仅当 FIPS 受支持且启用时。自有 ID:OTP-15634
改进和新特性
添加了一个加密基准测试套件。
自有 ID:OTP-15447
Crypto 4.4
修复的错误和故障
更新了加密应用程序的 C 代码、文档和测试中的 RSA 选项部分。
自有 ID:OTP-15302
改进和新特性
添加了 ed25519 和 ed448 签名/验证。
需要 OpenSSL 1.1.1 或更高版本作为 OTP 应用程序
crypto
下的加密库。自有 ID:OTP-15419 辅助 ID:OTP-15094
修复了 valgrind 警告。
自有 ID:OTP-15467
Crypto 4.3.3
修复的错误和故障
RSA 选项
rsa_mgf1_md
、rsa_oaep_md
和rsa_oaep_label
始终处于禁用状态。现在,当使用合适的加密库时,它们将被启用。它们仍然是实验性的,可能会在没有事先通知的情况下更改。
自有 ID:OTP-15212 辅助 ID:ERL-675、PR1899、PR838
密码
aes_ige256
和blowfish_cbc
在crypto:next_iv/2
中存在命名问题。自有 ID:OTP-15283
如果使用 LibreSSL 作为加密库,则
RSA_SSLV23_PADDING
将被禁用。这是由于编译问题。将来将对此进行进一步调查。
自有 ID:OTP-15303
改进和新特性
现在,在
crypto:supports/0
中,支持的命名椭圆曲线在一个新的条目中,以'curves'
标记。函数
crypto:ec_curves/0
为了兼容性而保留。自有 ID:OTP-14717 辅助 ID:OTP-15244
CRYPTO 和 PUBLIC_KEY 应用程序中的类型已重做,并纠正了一些错误。
文档现在从类型生成,并进行了一些澄清。
CRYPTO 用户指南中添加了一个关于算法细节(如密钥大小和可用性)的新章节。
自有 ID:OTP-15134
如果使用 OpenSSL 1.1.1 或更高版本作为加密库,则现在可以使用 SHA3 作为单独的哈希和 HMAC。
可用长度在
crypto:supports/0
中的'hashs'
条目中报告为sha3_*
。自有 ID:OTP-15153
如果使用 OpenSSL 1.1.1 或更高版本作为加密库,则现在支持 mac 算法
poly1305
和密码算法chacha20
。自有 ID:OTP-15164 辅助 ID:OTP-15209
如果使用 OpenSSL 1.1.1 或更高版本作为加密库,则现在支持密钥交换 Edward 曲线
x25519
和x448
。自有 ID:OTP-15240 辅助 ID:OTP-15133
现在,在
crypto:supports/0
中,签名/验证和加密/解密的支持 RSA 选项在一个以 'rsa_opts
' 标记的新条目中报告。确切的集合仍然是实验性的,可能会在没有事先通知的情况下更改。
自有 ID:OTP-15260
添加了密码
aes_ccm
。自有 ID:OTP-15286
Crypto 4.3.2
修复的错误和故障
更新了加密引擎函数以处理引擎的多次加载。
engine_load/3/4
已更新,因此它不会将引擎 ID 添加到 OpenSSL 的内部引擎列表中,这使得如果引擎不包含全局数据,则可以多次运行 engine_load。添加了
ensure_engine_loaded/2/3
,以保证引擎只加载一次,并且后续调用只返回对其的引用。这是通过将 ID 添加到内部 OpenSSL 列表,并在调用函数时检查它是否已注册来完成的。添加了
ensure_engine_unloaded/1/2
以卸载使用 ensure_engine_loaded 加载的引擎。然后添加了一些更多实用程序函数。
engine_add/1
,将引擎添加到 OpenSSL 内部列表engine_remove/1
,从 OpenSSL 内部列表删除引擎engine_get_id/1
,获取引擎的 IDengine_get_name/1
,获取引擎名称自有 ID:OTP-15233
Crypto 4.3.1
修复的错误和故障
修复了在传递错误类型的 Others 参数时,
crypto:compute_key(ecdh, ...)
中发生的节点崩溃。自有 ID:OTP-15194 辅助 ID:ERL-673
Crypto 4.3
修复的错误和故障
删除了两个未记录且错误的函数(
crypto:dh_generate_parameters/2
和crypto:dh_check/1
)。自有 ID:OTP-14956 辅助 ID:ERL-579
修复了如果针对早于 0.9.8h 的 OpenSSL 构建的加密模块进行运行时升级而导致 VM 崩溃的错误。该错误自 OTP-20.2 以来存在。
自有 ID:OTP-15088
改进和新特性
在
crypto
中实现了一个新的rand
插件算法:crypto_cache
。它使用强大的随机字节作为随机源并缓存它们以获得良好的速度。请参阅crypto:rand_seed_alg/1
。自有 ID:OTP-13370 辅助 ID:PR-1573
Diffie-Hellman 密钥函数使用 EVP_PKEY api 重写。
自有 ID:OTP-14864
Crypto 4.2.2.4
修复的错误和故障
添加了常数时间比较。
自身 ID: OTP-16376
Crypto 4.2.2.3
改进和新特性
密码 aes_cfb8 和 aes_cfb128 现在使用 EVP 接口。支持的密钥长度为 128、192 和 256 位。
自身 ID: OTP-16133 辅助 ID: PR-2407
Crypto 4.2.2.1
修复的错误和故障
修复了在传递错误类型的 Others 参数时,
crypto:compute_key(ecdh, ...)
中发生的节点崩溃。自有 ID:OTP-15194 辅助 ID:ERL-673
Crypto 4.2.2
修复的错误和故障
如果设置了 OPENSSL_NO_EC,则加密 nif 的编译失败。
自有 ID:OTP-15073
修复了 LibreSSL 2.7.0 - 2.7.2 的 C 编译错误
自有 ID:OTP-15074 辅助 ID:ERL-618
Crypto 4.2.1
修复的错误和故障
修复了由 LibreSSL >= 2.6.1 中删除的 RSA 填充函数引起的构建错误
自有 ID:OTP-14873
Crypto 4.2
修复的错误和故障
兼容性函数
crypto.c
中的void HMAC_CTX_free
错误地尝试返回一个值。自有 ID:OTP-14720
改进和新特性
使用 EVP API 重写公钥和私钥的编码/解码。添加了新的 RSA 填充选项。这是 PR-838 的修改过的一半。
自有 ID:OTP-14446
扩展了加密 API,以使用存储在引擎中的私钥/公钥进行签名/验证或加密/解密操作。
ssl 应用程序提供了一个 API,用于在 TLS 中使用这个新的引擎概念。
自有 ID:OTP-14448
添加了对插入 OpenSSL 引擎 API 支持的某些或所有加密操作的替代实现的支持。当配置正确时,OpenSSL 会调用引擎的这些操作实现,而不是调用自己的实现。
自有 ID:OTP-14567
替换了
crypto.c
中对 OpenSSL 弃用函数DH_generate_parameters
的调用。自有 ID:OTP-14639
添加了关于如何使用存储在引擎中的密钥的文档。
自有 ID:OTP-14735 辅助 ID:OTP-14448
在加密中添加了 engine_ctrl_cmd_string/3,4 OpenSSL 引擎支持。
自有 ID:OTP-14801
Crypto 4.1
修复的错误和故障
在 macOS 上,如果
observer
在crypto
之前启动,crypto
会崩溃。在 macOS 10.13 (High Sierra) 的 beta 版本上,crypto
会崩溃。这两个错误都已修复。自有 Id: OTP-14499 辅助 Id: ERL-251 ERL-439
改进和新功能
扩展 crypto:sign、crypto:verify、public_key:sign 和 public_key:verify,增加:
* 支持 RSASSA-PS 填充签名和 saltlength 设置
* X9.31 RSA 填充。
* NIST SP 800-57 第 1 部分中提到的用于 dss 签名的 sha、sha224、sha256、sha384 和 sha512。
* 用于 rsa 签名的 ripemd160。这是手动合并 potatosalad 在 2015 年 9 月的 pull request 838 的一半。
自有 Id: OTP-13704 辅助 Id: PR838
crypto:supports/0
中的新元组报告支持的 MAC 算法。自有 Id: OTP-14504
Crypto 4.0
修复的错误和故障
现在,现代化的 crypto 应用可以使用 LibreSSL。
自有 Id: OTP-14247
在带有
on_load
指令的模块中添加编译选项-compile(no_native)
,该指令 HiPE 尚不支持。自有 Id: OTP-14316 辅助 Id: PR-1390
修复了 GitHub pull request #1393 中引入的 aes cfb128 函数中的一个错误。
自有 Id: OTP-14435 辅助 Id: PR-1462, PR-1393, OTP-14313
改进和新功能
添加对 CMAC 的基本支持
自有 Id: OTP-13779 辅助 Id: ERL-82 PR-1138
移除 crypto-3.0 中已弃用的函数,该版本首次在 OTP-R16B01 中发布
* 可能的不兼容性 *
自有 Id: OTP-13873
crypto
应用现在支持 OpenSSL 1.1。自有 Id: OTP-13900
允许 Erlang/OTP 在 FIPS-140 模式下使用 OpenSSL,以满足特定的安全要求(主要来自美国联邦政府的不同部门)。
请参阅新的 crypto 用户指南“FIPS 模式”章节,了解有关构建和使用默认禁用的 FIPS 支持的信息。
(感谢 dszoboszlay 和 legoscia)
自有 Id: OTP-13921 辅助 Id: PR-1180
为 OpenSSL >= 1.1 启用了 RFC 7539 中的 Crypto chacha20-poly1305。
感谢 mururu。
自有 Id: OTP-14092 辅助 Id: PR-1291
RSA 密钥生成已添加到
crypto:generate_key/2
。感谢 wiml。接口也已添加到
public_key:generate_key/1
。自有 Id: OTP-14140 辅助 Id: ERL-165, PR-1299
将 OpenSSL 版本的最低要求提高到 OpenSSL-0.9.8.c,尽管我们建议使用更高的版本,即 OpenSSL 项目仍然官方维护的版本。请注意,使用如此旧的版本可能会限制支持的加密算法。
* 可能的不兼容性 *
自有 Id: OTP-14171
弃用 crypto:rand_uniform/2,因为它在密码学上不强
自有 Id: OTP-14274
Crypto 应用程序现在支持生成密码学上强大的随机数(浮点数 < 1.0 和整数任意范围),作为 'rand' 模块的插件。
自有 Id: OTP-14317 辅助 Id: PR-1372
这会将 AES、CMAC 和 GCM 密码的硬编码测试值替换为 NIST 的 CAVP 程序的完整验证集。
自有 Id: OTP-14436 辅助 Id: PR-1396
Crypto 3.7.4
修复的错误和故障
修复了 192 位和 256 位密钥的 AES CFB 128 中的一个错误。感谢 kellymclaughlin!
自有 Id: OTP-14313 辅助 Id: PR-1393
Crypto 3.7.3
改进和新功能
对密钥交换算法 diffie-hellman-group-exchange-sha* 进行了优化,最慢(=最大和最安全)的组大小的性能提高了 11 倍。
自有 Id: OTP-14169 辅助 Id: seq-13261
Crypto 3.7.2
修复的错误和故障
crypto 应用程序已修复,不会针对禁用 RC2 构建的 OpenSSL 使用 RC2。
自有 Id: OTP-13895 辅助 Id: PR-1163
crypto 应用程序已修复,不会针对禁用 RC4 构建的 OpenSSL 使用 RC4。
自有 Id: OTP-13896 辅助 Id: PR-1169
改进和新功能
为了便于故障排除,
erlang:load_nif/2
现在在错误元组的文本部分包含加载/重新加载/升级失败调用的返回值。crypto
NIF 通过返回初始化失败的源行(如果存在)来利用此功能。自有 Id: OTP-13951
Crypto 3.7.1
修复的错误和故障
Crypto 已修复,可针对禁用 DES 密码的 OpenSSL 版本工作。引入了密码算法 'des3_cfb' 的正确拼写;之前的拼写错误仍然有效。
自有 Id: OTP-13783 辅助 Id: ERL-203
crypto 中内部数组的大小已修复,当拥有所有可能的密码时不会出现段错误。 Duncan Overbruck 的错误修复。
自有 Id: OTP-13789 辅助 Id: PR-1140
Crypto 3.7
改进和新功能
重构
crypto
以使用 OpenSSL 的 EVP 接口,这是推荐的接口,也可以访问某些操作的硬件加速。自有 Id: OTP-12217
为
aes_cbc
密码添加对 192 位密钥的支持。自有 Id: OTP-13206 辅助 Id: pr 832
为
aes_ecb
添加对 192 位密钥的支持。自有 Id: OTP-13207 辅助 Id: pr829
弃用函数
crypto:rand_bytes
并确保在所有密码学上重要的位置都使用crypto:strong_rand_bytes
。自有 Id: OTP-13214
启用 AES-GCM 加密/解密以更改 1 到 16 个字节之间的标签长度。
自有 Id: OTP-13483 辅助 Id: PR-998
Crypto 3.6.3
修复的错误和故障
修复了数据大于 16 个字节时
aes_ecb
块密码的错误。自有 Id: OTP-13249
提高 Crypto 和 SSL 中 ECC 测试对于“异构”OpenSSL 版本的可移植性。
自有 Id: OTP-13311
Crypto 3.6.2
修复的错误和故障
小的文档修复
自有 Id: OTP-13017
Crypto 3.6.1
修复的错误和故障
如果根本不支持椭圆曲线,则使
crypto:ec_curves/0
返回空列表。自有 Id: OTP-12944
Crypto 3.6
修复的错误和故障
增强 crypto:generate_key 以从私钥计算 ECC 公钥。
自有 Id: OTP-12394
修复了
crypto:generate_key
中ecdh
的一个错误,该错误可能导致 VM 因错误的输入而崩溃。自有 Id: OTP-12733
改进和新功能
将 EVP API 用于 AES-CBC 加密,以在较新的 Intel CPU (AES-NI) 和其他平台上启用 AES-CBC 加密的硬件加速。
自有 Id: OTP-12380
添加 AES ECB 块加密。
自有 Id: OTP-12403
Crypto 3.5
改进和新功能
扩展 aes_cfb8 和 aes_cfb128 的 block_encrypt/decrypt 以接受长度为 128、192 和 256 位的密钥。之前只接受 128 位密钥。
自有 Id: OTP-12467
Crypto 3.4.2
改进和新功能
添加配置选项 --with-ssl-incl=PATH 以支持标头和库位于不同位置的 OpenSSL 安装。
自有 Id: OTP-12215 辅助 Id: seq12700
添加配置选项 --with-ssl-rpath 来控制用于 OpenSSL 动态链接的运行时库路径。
内部 ID:OTP-12316 辅助 ID:seq12753
Crypto 3.4.1
已修复的错误和故障
使
crypto
验证 OpenSSL 头文件和运行时库的主版本号。如果版本不匹配,则crypto
的加载将会失败。内部 ID:OTP-12146 辅助 ID:seq12700
Crypto 3.4
已修复的错误和故障
修复了
crypto:hmac_init/upgrade/final
函数在所有数据情况下的内存泄漏,以及crypto:hmac/3/4
函数在数据大于 20000 字节时的内存泄漏。此错误自 OTP 17.0 版本起存在。内部 ID:OTP-11953
修复了
crypto
模块中椭圆曲线的内存泄漏问题。内部 ID:OTP-11999
改进和新特性
在
crypto:block_encrypt
和block_decrypt
中添加aes_cfb8
密码。内部 ID:OTP-11911
Crypto 3.3
已修复的错误和故障
修复了在传递错误参数时
mod_pow
、mod_exp
和generate_key(srp,...)
中的内存泄漏和无效的内存释放问题。(感谢 Florian Zumbiehi)内部 ID:OTP-11550
更正了整个文档中 “ChipherText” 一词的拼写错误(感谢 Andrew Tunnell-Jones)
内部 ID:OTP-11609
修复了在多次调用
hmac_update
或hmac_final
时使用相同的 hmac 上下文变量会导致的严重错误。重用 hmac 上下文一直不起作用,因为底层的 OpenSSL 实现不支持此操作。现在已将其记录为具有未定义的行为,但它不会再导致崩溃或破坏 VM。内部 ID:OTP-11724
Crypto 现在可以通过控制的终止来处理内存不足的情况,而不是崩溃/破坏。(感谢 Florian Zumbiehi)
内部 ID:OTP-11725
以下应用程序的应用程序升级 (appup) 文件已更正:
asn1、common_test、compiler、crypto、debugger、dialyzer、edoc、eldap、erl_docgen、et、eunit、gs、hipe、inets、observer、odbc、os_mon、otp_mibs、parsetools、percept、public_key、reltool、runtime_tools、ssh、syntax_tools、test_server、tools、typer、webtool、wx、xmerl
向 test_server 添加了一个新的用于测试 appup 文件的测试实用程序。现在 OTP 中的大多数应用程序都使用此实用程序。
(感谢 Tobias Schlager)
内部 ID:OTP-11744
改进和新特性
通过在配置时添加 --enable-static-{nifs,drivers} 选项,现在可以将 nifs 和驱动程序静态链接到主 Erlang VM 二进制文件中。目前,只有 Erlang/OTP 的 asn1 和 crypto nifs 已经准备好进行静态链接。有关更多详细信息,请参阅系统文档中的安装指南。
内部 ID:OTP-11258
在 crypto 中添加 AES 密码的 IGE 模式(感谢 Yura Beznos)。
内部 ID:OTP-11522
将椭圆曲线定义从 crypto NIF/OpenSSL 移到 Erlang 代码中,添加了 RFC-5639 brainpool 曲线,并使 TLS 使用它们 (RFC-7027)。
感谢 Andreas Schultz
内部 ID:OTP-11578
从 crypto 中删除所有过时的应用程序进程,并将其变成一个纯库应用程序。
内部 ID:OTP-11619
Crypto 3.2
已修复的错误和故障
修复了 crypto 中的未初始化指针问题(感谢 Anthony Ramine)
内部 ID:OTP-11510
Crypto 3.1
改进和新特性
重构 ecdsa 密码,以简化代码并提高性能。
内部 ID:OTP-11320
Crypto 3.0
改进和新特性
整合 Andreas Schultz 的椭圆曲线贡献
为了能够在 SSL/TLS 中支持椭圆曲线密码套件,已向 public_key 和 crypto 添加了处理椭圆曲线基础结构的功能。
这也导致了 crypto API 的重写,以获得一致性并消除不必要的开销。所有使用 crypto 的 OTP 应用程序都已更新以使用新的 API。
影响:椭圆曲线密码学 (ECC) 提供了与较小密钥大小相当的安全级别,而其他公钥算法则需要更大的密钥大小。较小的密钥大小可以节省功耗、内存、带宽和计算成本,这使得 ECC 对于受限环境特别有吸引力。
内部 ID:OTP-11009
修复了 crypto 文档中的拼写错误。感谢 Klaus Trainer
内部 ID:OTP-11058
已知错误和问题
通过在输入非常大时进行分块并在 nifs 中增加约简次数,使 crypto 函数可中断。
尚未为 block_encrypt|decrypt/4 实现
影响:对 crypto 函数的单个调用可能需要更长的时间,但整体系统性能应该会提高,因为 crypto 调用不会成为吞吐量瓶颈。
内部 ID:OTP-11142
Crypto 2.3
改进和新特性
支持 crypto 的运行时升级,包括 crypto 使用的 OpenSSL 库。
内部 ID:OTP-10596
改进了 crypto 中 hmac 函数的文档和测试。感谢 Daniel White
内部 ID:OTP-10640
为 crypto 添加了 ripemd160 支持。感谢 Michael Loftis
内部 ID:OTP-10667
Crypto 2.2
已修复的错误和故障
从 crypto NIF 库中删除对 libssl 的不必要依赖项。此依赖项是 R14B04 中意外引入的。
内部 ID:OTP-10064
改进和新特性
为哈希函数 SHA224、SHA256、SHA384 和 SHA512 以及使用这些哈希函数的 hmac 和 rsa_sign/verify 添加了 crypto 和 public_key 支持。感谢 Andreas Schultz 制作原型。
内部 ID:OTP-9908
优化了
crypto
和public_key
中的 RSA 私钥处理。内部 ID:OTP-10065
使
crypto:aes_cfb_128_encrypt
和crypto:aes_cfb_128_decrypt
可以处理任意长度的数据和密码。(感谢 Stefan Zegenhagen)内部 ID:OTP-10136
Crypto 2.1
改进和新特性
public_key、ssl 和 crypto 现在支持 PKCS-8
内部 ID:OTP-9312
现在,如果您限制作业数量(例如使用“
make -j6
”或“make -j10
”),则可以使用并行 make 构建 Erlang/OTP。“make -j
”目前不起作用,因为缺少一些依赖项。内部 ID:OTP-9451
向
crypto
添加了 DES 和三重 DES 密码反馈 (CFB) 模式函数。(感谢 Paul Guyot)内部 ID:OTP-9640
为
crypto:rsa_verify
添加了 sha256、sha384 和 sha512 支持。内部 ID:OTP-9778
Crypto 2.0.4
已修复的错误和故障
crypto:rand_uniform
可以正确处理负整数。对于无效范围(当Hi =< Lo
时)会抛出badarg
异常,而不是返回不正确的输出。内部 ID:OTP-9526
修复了 win32 OpenSSL 静态链接问题(感谢 Dave Cottlehuber)
内部 ID:OTP-9532
Crypto 2.0.3
已修复的错误和故障
各种小文档修复(感谢 Bernard Duggan)
内部 ID:OTP-9172
改进和新特性
新的
crypto
支持 AES CTR 和 HMAC 流。(感谢 Travis Jensen)内部 ID:OTP-9275
由于 OpenSSL 和 Erlang/OTP 版本之间的标准库 DLL 不匹配,OpenSSL 现在静态链接到 Windows 上的 crypto 驱动程序。这修复了在所有 Windows 版本上将 Erlang 作为服务运行时启动 crypto 时出现的问题。
内部 ID:OTP-9280
Crypto 2.0.2.2
改进和新特性
加强了随机数生成。(感谢 Geoff Cant)
内部 ID:OTP-9225
Crypto 2.0.2.1
改进和新特性
杂项更新。
内部 ID:OTP-9132
Crypto 2.0.2
改进和新特性
crypto
中支持 AES CTR 加密。内部 ID:OTP-8752 辅助 ID:seq11642
Crypto 2.0.1
已修复的错误和故障
md5_mac 和 sha_mac 中的 Crypto dialyzer 类型错误。
内部 ID:OTP-8718
RC4 流密码不起作用。这是因为
crypto-2.0
中引入的crypto:rc4_encrypt_with_state/2
的新 NIF 实现没有返回更新的状态。(感谢 Paul Guyot)内部 ID:OTP-8781
修复了 crypto NIF 库中的一些内存泄漏。
内部 ID:OTP-8810
改进和新功能
添加了 erlang:system_info(build_type),可以更容易地根据运行时系统的构建类型选择驱动程序、NIF 库等。
现在可以为 valgrind 和/或 debug 构建单独的 crypto NIF 库,如果运行时系统已使用匹配的构建类型构建,则会自动加载这些库。
自有 ID:OTP-8760
Crypto 2.0
改进和新功能
crypto 应用程序已更改为使用 NIF 而不是驱动程序。
自有 ID:OTP-8333
crypto 模块中已添加 des_ecb_encrypt/2 和 des_ecb_decrypt/2。 crypto:md4/1 函数已加入文档。
自有 ID:OTP-8551
已删除未记录、不支持和已弃用的函数
lists:flat_length/1
。自有 ID:OTP-8584
crypto:dss_sign
和crypto:dss_verify
的新变体,带有额外的参数来控制摘要的计算方式。自有 ID:OTP-8700
Crypto 1.6.4
改进和新功能
交叉编译改进和其他构建系统改进。
最值得注意的是
- 大量的交叉编译改进。旧的交叉编译支持或多或少是不存在的,并且是损坏的。请注意,交叉编译支持仍应被视为实验性的。另请注意,旧的交叉编译配置在不进行修改的情况下无法使用。有关交叉编译 Erlang/OTP 的更多信息,请参阅
$ERL_TOP/INSTALL-CROSS.md
文件。 - 支持使用 DESTDIR 的分阶段安装。旧的损坏的
INSTALL_PREFIX
也已修复。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。 - 顶层
Makefile
的release
目标的文档。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。 - 现在默认情况下,
make install
创建相对符号链接而不是绝对符号链接。有关更多信息,请参阅$ERL_TOP/INSTALL.md
文件。 $ERL_TOP/configure --help=recursive
现在可以工作,并打印所有带有configure
脚本的应用程序的帮助信息。- 直接在
make all
之后执行make install
或make release
不再触发其他重新构建。 - 在没有预先执行
make all
的情况下执行make install
或make release
时,现在使用现有的引导系统。 - 当动态链接到
libssl.so
和libcrypto.so
时,crypto
和ssl
应用程序使用相同的运行时库路径。运行时库搜索路径也已扩展。 erl_interface
和odbc
的configure
脚本现在以与 ERTS 相同的方式搜索线程库和线程库怪癖。- 现在,当在 64 位系统上构建时,
odbc
应用程序的configure
脚本还在lib64
和lib/64
目录中查找 odbc 库。 erl_interface
应用程序中的config.h.in
文件现在是自动生成的,而不是静态更新的,这降低了configure
测试无效的风险。
(感谢 Henrik Riomar 的建议和测试)
(感谢 Winston Smith 的 AVR32-Linux 交叉配置和测试)
* 可能的不兼容性 *
自有 ID:OTP-8323
- 大量的交叉编译改进。旧的交叉编译支持或多或少是不存在的,并且是损坏的。请注意,交叉编译支持仍应被视为实验性的。另请注意,旧的交叉编译配置在不进行修改的情况下无法使用。有关交叉编译 Erlang/OTP 的更多信息,请参阅
现在,crypto 模块支持 ECB、CBC 和 OFB 模式下的 Blowfish。(感谢 Paul Oliver。)
自有 ID:OTP-8331
在修复了一些错误并在文档构建过程中添加了一些功能后,现在可以在开源环境中构建文档。
- 更新了 arity 计算。
- 在生成的链接中删除了 bif 函数名称中使用的模块前缀,因此链接将类似于“https://erlang.ac.cn/doc/man/erlang.html#append_element-2” 而不是 “https://erlang.ac.cn/doc/man/erlang.html#erlang:append_element-2”。
- 加强了加载新页面时 html 文档中的菜单定位。
- 对 man 页面的生成进行了一些更正(感谢 Sergei Golovan)
- 法律声明取自 xml 书籍文件,因此 OTP 的构建过程可用于非 OTP 应用程序。
自有 ID:OTP-8343
Crypto 1.6.3
修复的错误和故障
抑制了由 libcrypto 使用未初始化数据作为熵引起的错误的 valgrind 错误。
自有 ID:OTP-8200
改进和新功能
现在,文档是使用大多数平台上都存在的开源工具(xsltproc 和 fop)构建的。一个明显的变化是删除了框架。
自有 ID:OTP-8201
当 crypto 应用程序无法加载 OpenSSL/LibEAY 共享对象时,错误指示很稀少。现在,更具体的错误消息会发送到错误记录器。
自有 ID:OTP-8281
Crypto 1.6.2
修复的错误和故障
修复了 crypto 使用无法处理大文件描述符的旧 openssl 版本导致的仿真器崩溃问题。
自有 ID:OTP-8261 辅助 ID:seq11434
Crypto 1.6.1
修复的错误和故障
已更新
Makefile.in
以使用 LDFLAGS 环境变量(如果设置)。(感谢 Davide Pesavento。)自有 ID:OTP-8157
改进和新功能
向
crypto
添加了对 Blowfish cfb64 的支持。自有 ID:OTP-8096
新函数
crypto:aes_cbc_ivec
自有 ID:OTP-8141
Crypto 1.6
修复的错误和故障
dh_compute_key
有时会返回大小不正确的 SharedSecret。自有 ID:OTP-7674
改进和新功能
通过直接在进程堆上创建小型二进制文件来优化驱动程序。
自有 ID:OTP-7762
Crypto 1.5.3
改进和新功能
添加了新函数:dss_verify/3、rsa_verify/3、rsa_verify/4、dss_sign/2、rsa_sign/2、rsa_sign/3、rsa_public_encrypt、rsa_private_decrypt/3、rsa_private_encrypt/3、rsa_public_decrypt/3、dh_generate_key/1、dh_generate_key/2、dh_compute_key/3。
自有 ID:OTP-7545
Crypto 1.5.2.1
改进和新功能
次要的性能优化。
自有 ID:OTP-7521
Crypto 1.5.2
修复的错误和故障
改进了 ./configure 以查找 64 位 OpenSSL 库。
自有 ID:OTP-7270
改进和新功能
改进了 crypto 和 zlib 驱动程序以允许并发 smp 访问。
自有 ID:OTP-7262
Crypto 1.5.1.1
改进和新功能
现在,crypto 应用程序的链接驱动程序是静态链接到 OpenSSL 库的,以避免与 OpenSSL 库位置相关的安装和运行时问题。
自有 ID:OTP-6680
次要的 Makefile 更改。
自有 ID:OTP-6689
Crypto 1.5
改进和新功能
现在,在启动时会显式检查是否已正确加载 crypto 驱动程序(感谢 Claes Wikstrom)。
自有 ID:OTP-6109
Crypto 1.4
改进和新功能
已更新并记录了以前未记录和不受支持的
ssh
应用程序。 此版本的ssh
应用程序仍被视为测试版,并且(如有必要)在达到 1.0 版本之前,其 API 仍可能会发生更改。此外,
crypto
应用程序中添加了更多加密算法。* 可能的不兼容性 *
自有 ID:OTP-5631
Crypto 1.3
改进和新功能
- 在 SNMP 基于用户的安全模型中添加了对 RFC 3826 - 高级加密标准 (AES) 密码算法的支持。
Martin Björklund
Crypto 1.2.3
修复的错误和故障
当模拟器启用线程支持时,在 Unix 上,crypto 和 asn1 应用中链接的驱动程序现在使用 -D_THREAD_SAFE 和 -D_REENTRANT 开关进行编译。
在 MacOSX 上链接的驱动程序不再使用未公开的 -lbundle1.o 开关进行编译。感谢 Sean Hinde 发送的补丁。
现在,crypto 中链接的驱动程序和 ssl 中的 port 程序可以在 OSF1 上编译。
runtime_tools 中的次要 makefile 改进。
自有 ID:OTP-5346
Crypto 1.2.2
改进和新功能
纠正了错误处理。如果 crypto 使用的端口意外关闭(这在 crypto 的正常操作期间不应发生),crypto 将立即终止(而不是在下次使用 crypto 时崩溃)。 还纠正了 Mac OS X 上的构建问题。
自有 ID:OTP-5279
Crypto 1.2.1
修复的错误和故障
在 R9 中,无法重新链接 crypto 驱动程序。缺少对象文件以及示例 makefile。crypto 驱动程序对象文件现在随应用程序一起发布(安装在 priv/obj 中)。示例 makefile 也已添加到 priv/obj 目录中。该 makefile 作为如何在 Unix (crypto_drv.so) 或 Windows (crypto_drv.dll) 上重新链接驱动程序的示例。
自有 ID:OTP-4828 辅助 ID:seq8193
Crypto 1.2
改进和新功能
- 以前版本的 Crypto 都是基于 SSLeay 的静态链接二进制文件交付的。现在情况不再如此。当前版本的 Crypto 需要用户安装动态链接的 OpenSSL 库。所需的库是
libcrypto.so
(Unix) 或libeay32.[lib|dll]
(Win32)。有关详细信息,请参阅 crypto(6) 应用程序手册页。 - 此版本的 Crypto 使用 OpenSSL 0.9.7 的新 DES 接口,该接口与早期版本的 OpenSSL 不向后兼容。
- 函数
des_ede3_cbc_encrypt/5
和des_ede3_cbc_decrypt/5
已分别重命名为des3_cbc_encrypt/5
和des3_cbc_decrypt/5
。旧函数已保留(它们已弃用,并且未在 crypto(3) 手册页中列出)。
报告的已修复错误和故障
由于错误地添加了 DES3 算法,导致 crypto 在 Windows 上启动失败。
自有 ID:OTP-4684
辅助 ID:seq7864
Crypto 1.1.3
报告的已修复错误和故障
- 为了与旧的 SSLeay 包以及早期版本的 OpenSSL 兼容,宏 OPENSSL_DES_LIBDES_COMPATIBILITY 已添加到
crypto_drv.c
。这仅对开源版本的 Crypto 具有重要意义。
Crypto 1.1.2
报告的已修复错误和故障
在手册页
crypto
中,函数名md5_finish
和sha_finish
已更改为md5_final
和sha_final
,以正确记录实现。自有 ID:OTP-3409
Crypto 1.1.1
支持运行时代码替换。可以从 1.1 版升级,也可以降级到 1.1 版。
改进和新功能
- Crypto 应用程序的驱动程序部分已更新为使用 erl_driver 头文件。1.1.1 版本需要 4.9.1 或更高版本的模拟器。
Crypto 1.1
报告的已修复错误和故障
在 Windows 上,crypto_drv 错误地链接到静态运行时库,而不是动态运行时库。
自有 ID:OTP-3240
Crypto 1.0
新应用程序。