35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
import { deepStrictEqual, throws } from 'assert';
|
|
import { readFileSync } from 'fs';
|
|
import { should, describe } from 'micro-should';
|
|
import { bytesToHex as hex } from '@noble/hashes/utils';
|
|
import { schnorr } from '../secp256k1.js';
|
|
const schCsv = readFileSync('./test/vectors/schnorr.csv', 'utf-8');
|
|
|
|
describe('schnorr.sign()', () => {
|
|
// index,secret key,public key,aux_rand,message,signature,verification result,comment
|
|
const vectors = schCsv
|
|
.split('\n')
|
|
.map((line) => line.split(','))
|
|
.slice(1, -1);
|
|
for (let vec of vectors) {
|
|
const [index, sec, pub, rnd, msg, expSig, passes, comment] = vec;
|
|
should(`${comment || 'vector ' + index}`, () => {
|
|
if (sec) {
|
|
deepStrictEqual(hex(schnorr.getPublicKey(sec)), pub.toLowerCase());
|
|
const sig = schnorr.sign(msg, sec, rnd);
|
|
deepStrictEqual(hex(sig), expSig.toLowerCase());
|
|
deepStrictEqual(schnorr.verify(sig, msg, pub), true);
|
|
} else {
|
|
const passed = schnorr.verify(expSig, msg, pub);
|
|
deepStrictEqual(passed, passes === 'TRUE');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// ESM is broken.
|
|
import url from 'url';
|
|
if (import.meta.url === url.pathToFileURL(process.argv[1]).href) {
|
|
should.run();
|
|
}
|