UNPKG

@yutons/notp

Version:

one-time password generator for javascript

107 lines (106 loc) 3.33 kB
import { Algorithm } from "./default"; /** * TOTP (Time-based One-Time Password) 算法实现 * 基于 HOTP,使用时间戳作为计数器 * 遵循 RFC 6238 标准 */ export declare class TOTP { private _hotp; private _period; private _timestamp; private _algorithm; /** * 构造函数 * @param secret - 共享密钥 (通常为 Base32 编码) * @param period - 时间步长(周期),单位为秒,默认为 30 秒 * @param digits - 生成的一次性密码的位数,默认为 6 * @param algorithm - HMAC 哈希算法,默认为 'sha1' */ constructor(secret: string, period?: number, digits?: number, algorithm?: Algorithm); /** * 获取当前共享密钥 */ get secret(): string; /** * 设置共享密钥 * @param value - 新的共享密钥 */ set secret(value: string); /** * 获取当前时间步长(周期) */ get period(): number; /** * 设置时间步长(周期) * @param value - 新的周期(秒) */ set period(value: number); /** * 获取生成密码的位数 */ get digits(): number; /** * 设置生成密码的位数 * @param value - 新的位数 (通常为 6, 7, 8) */ set digits(value: number); /** * 获取当前使用的哈希算法 */ get algorithm(): Algorithm; /** * 设置哈希算法 * @param value - 新的算法 ('sha1', 'sha256', 'sha512', 'sm3') */ set algorithm(value: Algorithm); /** * 获取当前用于计算的模拟时间戳(毫秒) * 返回 null 表示使用系统当前时间 */ get timestamp(): number | null; /** * 设置用于计算的模拟时间戳(毫秒) * 设置为 null 时,将使用系统当前时间 * @param value - 模拟的时间戳(毫秒),或 null */ set timestamp(value: number | null); /** * 计算基于当前时间(或模拟时间)的计数器值 * @returns 计数器值 */ private getTimeCounter; /** * 生成当前时间窗口的一次性密码 * @returns 生成的一次性密码 (字符串) */ generate(): string; /** * 验证提供的 OTP 是否有效 * 为了容忍客户端和服务器之间的时间偏差,通常会检查当前时间窗口前后几个窗口 * @param otp - 要验证的 OTP (字符串) * @param window - 允许的时间窗口偏差(向前和向后),默认为 1 * 例如 window=1 会检查 T-1, T, T+1 三个时间窗口 * @returns 验证结果 (true 或 false) */ verify(otp: string, window?: number): boolean; /** * 获取当前时间窗口的剩余有效时间(秒) * @returns 剩余有效时间(秒),如果为负数表示已过期 */ timeRemaining(): number; /** * 获取当前时间窗口的开始时间(Unix 时间戳,秒) * @returns 当前时间窗口的开始时间 */ currentPeriodStart(): number; /** * 获取当前配置的摘要信息 */ getConfiguration(): { secret: string; period: number; digits: number; algorithm: 'sha1' | 'sha256' | 'sha512' | 'sm3'; timestamp: number | null; }; }