UNPKG

@transmute/bls12381-key-pair

Version:
51 lines (45 loc) 2 kB
import * as bls from 'noble-bls12-381'; // You can use Uint8Array, or hex string for readability const privateKey = '67d53f170b908cabb9eb326c3c337762d59289a8fec79f7bc9254b584b73265c'; const privateKeys = [ '18f020b98eb798752a50ed0563b079c125b0db5dd0b1060d1c1b47d4a193e1e4', 'ed69a8c50cf8c9836be3b67c7eeff416612d45ba39a5c099d48fa668bf558c9c', '16ae669f3be7a2121e17d0c68c05a8f3d6bef21ec0f2315f1d7aec12484e4cf5', ]; const message = '64726e3da8'; const messages = ['d2', '0d98', '05caf3']; it('can run readme snipper', async () => { const publicKey = bls.getPublicKey(privateKey); const publicKeys = privateKeys.map(bls.getPublicKey); const signature = await bls.sign(message, privateKey); const isCorrect = await bls.verify(signature, message, publicKey); // console.log('key', publicKey); // console.log('signature', signature); // console.log('is correct:', isCorrect); expect(isCorrect).toBe(true); // Sign 1 msg with 3 keys const signatures2 = await Promise.all( privateKeys.map(p => bls.sign(message, p)) ); const aggPubKey2 = bls.aggregatePublicKeys(publicKeys as any); const aggSignature2 = bls.aggregateSignatures(signatures2); const isCorrect2 = await bls.verify(aggSignature2, message, aggPubKey2); // console.log(); // console.log('signatures are', signatures2); // console.log('merged to one signature', aggSignature2); // console.log('is correct:', isCorrect2); expect(isCorrect2).toBe(true); // Sign 3 msgs with 3 keys const signatures3 = await Promise.all( privateKeys.map((p, i) => bls.sign(messages[i], p)) ); const aggSignature3 = bls.aggregateSignatures(signatures3); const isCorrect3 = await bls.verifyBatch(aggSignature3, messages, publicKeys); // console.log(); // console.log('keys', publicKeys); // console.log('signatures', signatures3); // console.log('merged to one signature', aggSignature3); // console.log('is correct:', isCorrect3); expect(isCorrect3).toBe(true); });