127 lines
No EOL
3.6 KiB
JavaScript
127 lines
No EOL
3.6 KiB
JavaScript
/**
|
|
* OTP功能测试文件
|
|
* 可以在Node.js环境中运行此文件进行测试
|
|
*/
|
|
|
|
const otp = require('./otp.js');
|
|
|
|
/**
|
|
* 测试TOTP功能
|
|
*/
|
|
async function testTOTP() {
|
|
console.log('===== 测试TOTP功能 =====');
|
|
|
|
try {
|
|
// 生成随机密钥
|
|
const secret = otp.generateSecret();
|
|
console.log(`生成的密钥: ${secret}`);
|
|
|
|
// 生成TOTP
|
|
const token = await otp.generateTOTP(secret);
|
|
console.log(`当前TOTP: ${token}`);
|
|
|
|
// 验证TOTP
|
|
const isValid = await otp.verifyTOTP(token, secret);
|
|
console.log(`验证结果: ${isValid ? '通过' : '失败'}`);
|
|
|
|
// 获取剩余时间
|
|
const remaining = otp.getRemainingSeconds();
|
|
console.log(`剩余有效时间: ${remaining}秒`);
|
|
|
|
// 测试不同哈希算法
|
|
console.log('\n不同哈希算法测试:');
|
|
for (const algo of Object.keys(otp.HASH_ALGOS)) {
|
|
const algoToken = await otp.generateTOTP(secret, { algorithm: algo });
|
|
console.log(`${algo}: ${algoToken}`);
|
|
}
|
|
|
|
// 测试不同位数
|
|
console.log('\n不同位数测试:');
|
|
for (const digits of [6, 7, 8]) {
|
|
const digitToken = await otp.generateTOTP(secret, { digits });
|
|
console.log(`${digits}位: ${digitToken}`);
|
|
}
|
|
|
|
// 测试不同时间窗口
|
|
console.log('\n不同时间窗口测试:');
|
|
for (const period of [30, 60, 90]) {
|
|
const periodToken = await otp.generateTOTP(secret, { period });
|
|
console.log(`${period}秒: ${periodToken}`);
|
|
}
|
|
|
|
// 生成URI
|
|
const uri = otp.generateTOTPUri(secret, 'test@example.com', 'TestApp');
|
|
console.log(`\nTOTP URI: ${uri}`);
|
|
|
|
// 解析URI
|
|
const parsedUri = otp.parseOTPUri(uri);
|
|
console.log('解析URI结果:', parsedUri);
|
|
|
|
// 测试Steam令牌
|
|
const steamToken = await otp.generateSteamToken(secret);
|
|
console.log(`\nSteam令牌: ${steamToken}`);
|
|
|
|
console.log('\nTOTP测试完成');
|
|
} catch (error) {
|
|
console.error('TOTP测试失败:', error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试HOTP功能
|
|
*/
|
|
async function testHOTP() {
|
|
console.log('\n===== 测试HOTP功能 =====');
|
|
|
|
try {
|
|
// 生成随机密钥
|
|
const secret = otp.generateSecret();
|
|
console.log(`生成的密钥: ${secret}`);
|
|
|
|
// 测试不同计数器值
|
|
console.log('\n不同计数器值测试:');
|
|
for (let counter = 0; counter < 5; counter++) {
|
|
const token = await otp.generateHOTP(secret, counter);
|
|
console.log(`计数器 ${counter}: ${token}`);
|
|
|
|
// 验证HOTP
|
|
const result = await otp.verifyHOTP(token, secret, counter);
|
|
console.log(`验证结果: ${result !== false ? '通过' : '失败'}`);
|
|
}
|
|
|
|
// 测试窗口验证
|
|
console.log('\n窗口验证测试:');
|
|
const token = await otp.generateHOTP(secret, 5);
|
|
for (let counter = 3; counter <= 7; counter++) {
|
|
const result = await otp.verifyHOTP(token, secret, counter, { window: 2 });
|
|
console.log(`计数器 ${counter} 验证结果: ${result !== false ? `通过,匹配计数器 ${result}` : '失败'}`);
|
|
}
|
|
|
|
// 生成URI
|
|
const uri = otp.generateHOTPUri(secret, 'test@example.com', 'TestApp', 0);
|
|
console.log(`\nHOTP URI: ${uri}`);
|
|
|
|
// 解析URI
|
|
const parsedUri = otp.parseOTPUri(uri);
|
|
console.log('解析URI结果:', parsedUri);
|
|
|
|
console.log('\nHOTP测试完成');
|
|
} catch (error) {
|
|
console.error('HOTP测试失败:', error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 运行所有测试
|
|
*/
|
|
async function runTests() {
|
|
console.log('开始OTP功能测试...\n');
|
|
|
|
await testTOTP();
|
|
await testHOTP();
|
|
|
|
console.log('\n所有测试完成');
|
|
}
|
|
|
|
// 执行测试
|
|
runTests().catch(console.error); |