发布 0.3.0 并增加 RSA 签名验证
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { parseSignatureFile } from '../src/lib/signatureVerificationFile'
|
||||
|
||||
const intelHex = ':020000040001F9\n:040000001122334452\n:02001000AABB89\n:00000001FF\n'
|
||||
|
||||
function testFile(name: string, bytes: Uint8Array): File {
|
||||
return {
|
||||
name,
|
||||
size: bytes.length,
|
||||
arrayBuffer: async () => bytes.slice().buffer,
|
||||
text: async () => new TextDecoder().decode(bytes),
|
||||
} as File
|
||||
}
|
||||
|
||||
describe('signature verification file semantics', () => {
|
||||
it('keeps every byte in raw-file mode, including an empty file', async () => {
|
||||
const bytes = new TextEncoder().encode(intelHex)
|
||||
const raw = await parseSignatureFile(testFile('firmware.hex', bytes), 'raw-file')
|
||||
const empty = await parseSignatureFile(testFile('empty.bin', new Uint8Array()), 'raw-file')
|
||||
expect(raw.data).toEqual(bytes)
|
||||
expect(raw.blockCount).toBeUndefined()
|
||||
expect(empty.dataBytes).toBe(0)
|
||||
})
|
||||
|
||||
it('parses and concatenates only Intel HEX effective data without gap filling', async () => {
|
||||
const parsed = await parseSignatureFile(testFile('firmware.hex', new TextEncoder().encode(intelHex)), 'intel-hex')
|
||||
expect(parsed.blockCount).toBe(2)
|
||||
expect(parsed.dataBytes).toBe(6)
|
||||
expect([...parsed.data]).toEqual([0x11, 0x22, 0x33, 0x44, 0xAA, 0xBB])
|
||||
expect(parsed).toMatchObject({ effectiveDataBytes: 6, headerBytes: 0 })
|
||||
})
|
||||
|
||||
it('prepends an 8-byte address and length header to every block', async () => {
|
||||
const file = testFile('firmware.hex', new TextEncoder().encode(intelHex))
|
||||
const bigEndian = await parseSignatureFile(file, 'intel-hex-block-header', 'big-endian')
|
||||
const littleEndian = await parseSignatureFile(file, 'intel-hex-block-header', 'little-endian')
|
||||
|
||||
expect(bigEndian).toMatchObject({ dataBytes: 22, effectiveDataBytes: 6, headerBytes: 16, blockCount: 2 })
|
||||
expect([...bigEndian.data]).toEqual([
|
||||
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x11, 0x22, 0x33, 0x44,
|
||||
0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xBB,
|
||||
])
|
||||
expect([...littleEndian.data]).toEqual([
|
||||
0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44,
|
||||
0x10, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0xAA, 0xBB,
|
||||
])
|
||||
})
|
||||
|
||||
it('rejects invalid modes and malformed Intel HEX', async () => {
|
||||
await expect(parseSignatureFile(testFile('bad.hex', new TextEncoder().encode(':00000001FE\n')), 'intel-hex')).rejects.toThrow()
|
||||
await expect(parseSignatureFile(testFile('data.bin', Uint8Array.from([1])), 'automatic' as never)).rejects.toThrow('文件数据模式无效')
|
||||
await expect(parseSignatureFile(testFile('firmware.hex', new TextEncoder().encode(intelHex)), 'intel-hex-block-header', 'middle-endian' as never)).rejects.toThrow('字节序')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user