px普贤教程PuXian
普贤教程 › 包参考

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_decodes
otp_hotp_rawkey, counter, digits
otp_hotpsecret_b32, counter, digits
otp_totp_stepsecret_b32, digits, now_sec, step
otp_totpsecret_b32, digits, now_sec
otp_verifysecret_b32, code, digits, now_sec, window
其余 9 个 def(内部与辅助,可直接调用但不属稳定接口)
函数参数
o_b32_digitc
o_b32_decodes
o_hmac_sha1key, msg
o_counter_bytescounter
o_dynamic_truncatehs, digits
o_hotp_codekey, counter, digits
otp_generatesecret_b32, digits=6, step=30
otp_verify_nowsecret_b32, code, digits=6, step=30
otp_steps_remainingstep=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())。
============================================================