@yutons/notp
Version:
one-time password generator for javascript
107 lines (106 loc) • 3.33 kB
TypeScript
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;
};
}