Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 23 additions & 10 deletions modules/sdk-lib-mpc/test/unit/tss/eddsa/derive.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import assert from 'assert';
import { ed25519 } from '@noble/curves/ed25519';
import { EddsaMPSDsg, MPSUtil } from '../../../../src/tss/eddsa-mps';
import { deriveUnhardenedMps } from '../../../../src/tss/eddsa-mps/derive';
import { generateEdDsaDKGKeyShares, runEdDsaDSG } from './util';
import { generateEdDsaDKGKeyShares } from './util';

const MESSAGE = Buffer.from('The Times 03/Jan/2009 Chancellor on brink of second bailout for banks');

Expand Down Expand Up @@ -63,28 +64,40 @@ describe('deriveUnhardenedMps', function () {
});

describe('DSG signature cross-check against the public key derived by deriveUnhardenedMps', function () {
let sigAtRoot: Buffer;
let sigAtM0: Buffer;
let sigAtM01: Buffer;

before(function () {
const dsgA1 = new EddsaMPSDsg.DSG(0);
MPSUtil.executeTillRound(3, dsgA1, new EddsaMPSDsg.DSG(2), userKeyShare, bitgoKeyShare, MESSAGE, 'm');
sigAtRoot = dsgA1.getSignature();

const dsgA2 = new EddsaMPSDsg.DSG(0);
MPSUtil.executeTillRound(3, dsgA2, new EddsaMPSDsg.DSG(2), userKeyShare, bitgoKeyShare, MESSAGE, 'm/0');
sigAtM0 = dsgA2.getSignature();

const dsgA3 = new EddsaMPSDsg.DSG(0);
MPSUtil.executeTillRound(3, dsgA3, new EddsaMPSDsg.DSG(2), userKeyShare, bitgoKeyShare, MESSAGE, 'm/0/1');
sigAtM01 = dsgA3.getSignature();
});

it('signature from DSG at "m" verifies against the root public key', function () {
const { dsgA } = runEdDsaDSG(userKeyShare, bitgoKeyShare, 0, 2, MESSAGE, 'm');
const sig = dsgA.getSignature();
assert(ed25519.verify(sig, MESSAGE, rootPubKey), 'DSG at "m" should verify against the raw DKG public key');
assert(ed25519.verify(sigAtRoot, MESSAGE, rootPubKey), 'DSG at "m" should verify against the raw DKG public key');
});

it('signature from DSG at "m/0" verifies against deriveUnhardenedMps(commonKeychain, "m/0")', function () {
const derivedPk = Buffer.from(deriveUnhardenedMps(commonKeychain, 'm/0').slice(0, 64), 'hex');
const { dsgA } = runEdDsaDSG(userKeyShare, bitgoKeyShare, 0, 2, MESSAGE, 'm/0');
const sig = dsgA.getSignature();
assert(
ed25519.verify(sig, MESSAGE, derivedPk),
ed25519.verify(sigAtM0, MESSAGE, derivedPk),
'DSG at "m/0" should verify against deriveUnhardenedMps result at "m/0"'
);
});

it('signature from DSG at "m/0/1" verifies against deriveUnhardenedMps(commonKeychain, "m/0/1")', function () {
const derivedPk = Buffer.from(deriveUnhardenedMps(commonKeychain, 'm/0/1').slice(0, 64), 'hex');
const { dsgA } = runEdDsaDSG(userKeyShare, bitgoKeyShare, 0, 2, MESSAGE, 'm/0/1');
const sig = dsgA.getSignature();
assert(
ed25519.verify(sig, MESSAGE, derivedPk),
ed25519.verify(sigAtM01, MESSAGE, derivedPk),
'DSG at "m/0/1" should verify against deriveUnhardenedMps result at "m/0/1"'
);
});
Expand Down
Loading