77 lines
2.7 KiB
TypeScript
77 lines
2.7 KiB
TypeScript
import { sm3Digest, sm3Hmac } from '../../utils/algorithm/sm3'
|
|
|
|
// UTF8 转 Hex
|
|
const utf8ToHex = (utf8: string): string => {
|
|
const bytes = new TextEncoder().encode(utf8)
|
|
return Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('')
|
|
}
|
|
|
|
describe('SM3 算法测试', () => {
|
|
test('计算 SM3 哈希', () => {
|
|
const originalMessage = '测试消息'
|
|
const messageHex = utf8ToHex(originalMessage)
|
|
const result = sm3Digest(messageHex)
|
|
expect(result).toBeTruthy()
|
|
expect(result.length).toBe(64) // SM3 哈希结果为 256 位,即 64 个十六进制字符
|
|
})
|
|
|
|
test('相同消息应该产生相同的哈希', () => {
|
|
const originalMessage = '测试消息'
|
|
const messageHex = utf8ToHex(originalMessage)
|
|
const result1 = sm3Digest(messageHex)
|
|
const result2 = sm3Digest(messageHex)
|
|
expect(result1).toBe(result2)
|
|
})
|
|
|
|
test('不同消息应该产生不同的哈希', () => {
|
|
const originalMessage1 = '测试消息1'
|
|
const originalMessage2 = '测试消息2'
|
|
const messageHex1 = utf8ToHex(originalMessage1)
|
|
const messageHex2 = utf8ToHex(originalMessage2)
|
|
const result1 = sm3Digest(messageHex1)
|
|
const result2 = sm3Digest(messageHex2)
|
|
expect(result1).not.toBe(result2)
|
|
})
|
|
})
|
|
|
|
describe('SM3 HMAC 算法测试', () => {
|
|
test('计算 SM3 HMAC', () => {
|
|
const key = '0123456789abcdef'
|
|
const originalMessage = '测试消息'
|
|
const messageHex = utf8ToHex(originalMessage)
|
|
const result = sm3Hmac(key, messageHex)
|
|
expect(result).toBeTruthy()
|
|
expect(result.length).toBe(64) // SM3 HMAC 结果为 256 位,即 64 个十六进制字符
|
|
})
|
|
|
|
test('相同 key 和消息应该产生相同的 HMAC', () => {
|
|
const key = '0123456789abcdef'
|
|
const originalMessage = '测试消息'
|
|
const messageHex = utf8ToHex(originalMessage)
|
|
const result1 = sm3Hmac(key, messageHex)
|
|
const result2 = sm3Hmac(key, messageHex)
|
|
expect(result1).toBe(result2)
|
|
})
|
|
|
|
test('不同消息应该产生不同的 HMAC', () => {
|
|
const key = '0123456789abcdef'
|
|
const originalMessage1 = '测试消息1'
|
|
const originalMessage2 = '测试消息2'
|
|
const messageHex1 = utf8ToHex(originalMessage1)
|
|
const messageHex2 = utf8ToHex(originalMessage2)
|
|
const result1 = sm3Hmac(key, messageHex1)
|
|
const result2 = sm3Hmac(key, messageHex2)
|
|
expect(result1).not.toBe(result2)
|
|
})
|
|
|
|
test('不同 key 应该产生不同的 HMAC', () => {
|
|
const key1 = '0123456789abcdef'
|
|
const key2 = 'fedcba9876543210'
|
|
const originalMessage = '测试消息'
|
|
const messageHex = utf8ToHex(originalMessage)
|
|
const result1 = sm3Hmac(key1, messageHex)
|
|
const result2 = sm3Hmac(key2, messageHex)
|
|
expect(result1).not.toBe(result2)
|
|
})
|
|
})
|