普贤教程 › 包参考
totp 包
HOTP / TOTP 一次性口令
| 项 | 值 |
|---|---|
| 包名 | totp |
| 版本 | 0.2.0 |
| 可用版本 | 0.1.0 / 0.2.0 |
| 入口 | totp.px |
| 分类 | 认证与安全 |
| 文件数 / 行数 | 1 / 160 |
安装与引入
bash
pxpkg init # 首次 pxpkg add totp@0.2.0 pxpkg install
px
import totp所属分类教程:认证与安全
公开接口
| 函数 | 参数 |
|---|---|
otp_b32_decode | s |
otp_hotp_raw | key, counter, digits |
otp_hotp | secret_b32, counter, digits |
otp_totp_step | secret_b32, digits, now_sec, step |
otp_totp | secret_b32, digits, now_sec |
otp_verify | secret_b32, code, digits, now_sec, window |
其余 9 个 def(内部与辅助,可直接调用但不属稳定接口)
| 函数 | 参数 |
|---|---|
o_b32_digit | c |
o_b32_decode | s |
o_hmac_sha1 | key, msg |
o_counter_bytes | counter |
o_dynamic_truncate | hs, digits |
o_hotp_code | key, counter, digits |
otp_generate | secret_b32, digits=6, step=30 |
otp_verify_now | secret_b32, code, digits=6, step=30 |
otp_steps_remaining | step=30 |
包内说明(源码头注释)
text
============================================================ 普贤生态库:registry/totp —— HOTP / TOTP 一次性口令 ------------------------------------------------------------ 纯函数库(无 IO、无状态),编译(px build)与解释(px run)双模式一致。 otp_hotp(secret_b32, counter, digits) → Ok(code str) # 基于计数 otp_hotp_raw(key, counter, digits) → Ok(code str) # key 为原始字节(RFC 测试向量用) otp_totp(secret_b32, digits, now_sec) → Ok(code str) # 30 秒步长 otp_totp_step(secret_b32, digits, now_sec, step) → Ok(code str) otp_verify(secret_b32, code, digits, now_sec, window) → bool # ±window 个步长 otp_b32_decode(s) → Ok(bytes) | Err # RFC 4648 base32 解码(公开供复用) 算法:HMAC-SHA1(RFC 4226 默认;动态截断 → 10^digits 取模 → 补零)。 语言面规避(登记 PX-DEF-032/033): - 无 base32 native → 自实现 RFC 4648 解码(to_upper + 5bit 累积) - 无 hmac_sha1 native(只有 hmac_sha256)→ 用 sha1_bytes 纯 .px 拼 HMAC 时间源:调用方传 now_sec(可用原生 now_sec())。 ============================================================