const { describe, it } = require('mocha') const assert = require('assert') const bscriptSig = require('../src/script').signature const Buffer = require('safe-buffer').Buffer const fixtures = require('./fixtures/signature.json') describe('Script Signatures', () => { function fromRaw (signature) { return Buffer.concat([ Buffer.from(signature.r, 'hex'), Buffer.from(signature.s, 'hex') ], 64) } function toRaw (signature) { return { r: signature.slice(0, 32).toString('hex'), s: signature.slice(32, 64).toString('hex') } } describe('encode', () => { fixtures.valid.forEach(f => { it('encodes ' + f.hex, () => { const buffer = bscriptSig.encode(fromRaw(f.raw), f.hashType) assert.strictEqual(buffer.toString('hex'), f.hex) }) }) fixtures.invalid.forEach(f => { if (!f.raw) return it('throws ' + f.exception, () => { const signature = fromRaw(f.raw) assert.throws(() => { bscriptSig.encode(signature, f.hashType) }, new RegExp(f.exception)) }) }) }) describe('decode', () => { fixtures.valid.forEach(f => { it('decodes ' + f.hex, () => { const decode = bscriptSig.decode(Buffer.from(f.hex, 'hex')) assert.deepStrictEqual(toRaw(decode.signature), f.raw) assert.strictEqual(decode.hashType, f.hashType) }) }) fixtures.invalid.forEach(f => { it('throws on ' + f.hex, () => { const buffer = Buffer.from(f.hex, 'hex') assert.throws(() => { bscriptSig.decode(buffer) }, new RegExp(f.exception)) }) }) }) })