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) }) })