2个不稳定版本
0.2.0 | 2021年6月6日 |
---|---|
0.1.0 | 2019年5月25日 |
#662 在 认证 中
14KB
140 行
此crate提供了RFC 4226的Rust实现,该RFC定义了基于HMAC的一次性密码(HOTP)算法。
lib.rs
:
实现IETF RFC 4226,"HOTP:基于HMAC的一次性密码算法"。
示例
[工作马hotp函数][hotp]返回指定长度的Token][Token]
let key = b"ferris23!@#$%^&*()";
let counter = 9001_u64;
let token: Token<6> = hotp(key, counter).unwrap();
assert_eq!(token, Token(852888));
该crate广泛使用"const generics"来在所有操作中编码令牌长度,迫使消费者明确指定例如"令牌是否等于这个数字?"等含义。这种明确性还使一些很好的功能成为可能,例如自动将令牌填充为零以达到正确的显示长度
let key = b"ferris23!@#$%^&*()";
let counter = 292167_u64;
let token: Token<6> = hotp(key, counter).unwrap();
// Equivalent:
let token = hotp::<_, _, 6>(key, counter).unwrap();
assert_eq!(token.to_string(), "000000");
这种类型级别的编码还用于在编译时确保遵循HOTP规范。
let key = b"ferris23!@#$%^&*()";
let counter = 9001_u64;
// The HOTP spec only allows tokens of length 6–9
let pin: Token<4> = hotp(key, counter).unwrap();
依赖关系
~5.5–7MB
~219K SLoC