25个不稳定版本
0.13.0-pre.4 | 2024年7月26日 |
---|---|
0.13.0-pre.3 | 2024年2月1日 |
0.13.0-pre.2 | 2024年1月17日 |
0.12.4 | 2023年12月13日 |
0.1.0 | 2015年1月3日 |
#10 in 加密学
2,465,512 每月下载量
用于 2,018 个crate(192个直接使用)
175KB
218 行
RustCrypto: HKDF
通用的基于哈希函数的纯Rust实现HMAC-based Extract-and-Expand Key Derivation Function (HKDF)。
使用方法
使用HKDF最常见的方法如下:你提供初始密钥材料(IKM)和一个可选的盐,然后将其扩展(可能多次)为一些与“info”上下文字符串绑定的输出密钥材料(OKM)。
use sha2::Sha256;
use hkdf::Hkdf;
use hex_literal::hex;
let ikm = hex!("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b");
let salt = hex!("000102030405060708090a0b0c");
let info = hex!("f0f1f2f3f4f5f6f7f8f9");
let hk = Hkdf::<Sha256>::new(Some(&salt[..]), &ikm);
let mut okm = [0u8; 42];
hk.expand(&info, &mut okm)
.expect("42 is a valid length for Sha256 to output");
let expected = hex!("
3cb25f25faacd57a90434f64d0362f2a
2d2d0a90cf1a5a4c5db02d56ecc4c5bf
34007208d5b887185865
");
assert_eq!(okm, expected);
通常PRK(伪随机密钥)在HKDF对象中保持隐藏,但如果你需要访问它,请使用Hkdf::extract
而不是Hkdf::new
。
let (prk, hk) = Hkdf::<Sha256>::extract(Some(&salt[..]), &ikm);
let expected = hex!("
077709362c2e32df0ddc3f0dc47bba63
90b6c73bb50f9c3122ec844ad7c2b3e5
");
assert_eq!(prk[..], expected[..]);
如果你已经有了一个可以工作的强密钥(均匀分布且足够长),你可以通过跳过提取步骤来节省一点时间。在这种情况下,你将伪随机密钥(PRK)传递给Hkdf::from_prk
构造函数,然后像通常一样使用生成的Hkdf
对象。
let prk = hex!("
077709362c2e32df0ddc3f0dc47bba63
90b6c73bb50f9c3122ec844ad7c2b3e5
");
let hk = Hkdf::<Sha256>::from_prk(&prk).expect("PRK should be large enough");
let mut okm = [0u8; 42];
hk.expand(&info, &mut okm)
.expect("42 is a valid length for Sha256 to output");
let expected = hex!("
3cb25f25faacd57a90434f64d0362f2a
2d2d0a90cf1a5a4c5db02d56ecc4c5bf
34007208d5b887185865
");
assert_eq!(okm, expected);
最低支持的Rust版本
Rust 1.72 或更高。
最低支持的Rust版本可能会在未来更改,但将以次要版本号的增加来完成。
SemVer策略
- 此库的所有默认功能均受SemVer保护
- 如上所述,MSRV被视为不受SemVer限制
许可证
根据您选择的以下许可证之一授权
任选。
贡献
除非您明确声明,否则您提交给作品以供包含的所有有意贡献,根据Apache-2.0许可证定义,均将按上述方式双许可,不附加任何额外条款或条件。
依赖项
~365–530KB
~11K SLoC