#totp #otp #2fa #嵌入式 #无标准库 #默认

无标准库 totp_embed

为嵌入式环境修改的 totp-lite 分支

1 个稳定版本

1.0.5 2022年5月17日

#959身份验证

MIT 许可证

11KB
127

Workflow Status

totp_embed

这是对原始 totp-lite 进行修改的分支,对 API 进行了一些更改,并增加了对 no_std 的支持。

fn totp1_tests() {
    let secret: &[u8] = b"12345678901234567890";
    assert_eq!(20, secret.len());
    let pairs = vec![
        (94287082, 59),
        (07081804, 1111111109),
        (14050471, 1111111111),
        (89005924, 1234567890),
        (69279037, 2000000000),
        (65353130, 20000000000),
    ];
    
    pairs.into_iter().for_each(|(expected, time)| {
        assert_eq!(expected, totp::<Sha1>(secret, time));
    });
}

有关详细信息,请参阅 totp-lite

许可证:MIT


lib.rs:

这是一个简单、正确的 TOTP 库。

基于时间的单次密码(TOTP)是一种有用的客户端认证方法,因为有效的密码在攻击者可能猜测之前就已经过期。此库提供符合其规范 RFC6238 的 TOTP 实现,以及一个简单的接口。

使用方法

totp 函数可能是您需要的。它使用默认的时间步长为 30 秒,并输出 8 位数字。

use std::time::{SystemTime, UNIX_EPOCH};
use totp_embed::{totp, Sha512};

// Negotiated between you and the authenticating service.
let password: &[u8] = b"secret";

// The number of seconds since the Unix Epoch.
let seconds: u64 = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();

// Specify the desired Hash algorithm via a type parameter.
// `Sha1` and `Sha256` are also available.
let result: u64 = totp::<Sha512>(password, seconds);

要完全控制算法的配置,请考虑使用 totp_custom

资源

依赖关系

~545KB
~11K SLoC