init
This commit is contained in:
commit
2b8870a40e
51 changed files with 5845 additions and 0 deletions
127
utils/otp.test.js
Normal file
127
utils/otp.test.js
Normal file
|
@ -0,0 +1,127 @@
|
|||
/**
|
||||
* 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);
|
Loading…
Add table
Add a link
Reference in a new issue