2个不稳定版本

0.2.0 2021年6月6日
0.1.0 2019年5月25日

#662认证

MIT/Apache

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