@transmute/bls12381-key-pair
Version:
``` npm i @transmute/bls12381-key-pair@latest --save ```
51 lines (45 loc) • 2 kB
text/typescript
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);
});