Skip to content

Commit

Permalink
Add keyTypes & make sign and verify configurable.
Browse files Browse the repository at this point in the history
  • Loading branch information
aljones15 committed Jul 5, 2024
1 parent 41c5a49 commit 504cfb1
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 35 deletions.
6 changes: 6 additions & 0 deletions test/mock-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,9 @@ export const mockKeyEcdsaSecp521 = {
publicKeyMultibase: 'zDnaeSMnptAKpH4AD41vTkwzjznW7yNetdRh9FJn8bJsbsdbw',
secretKeyMultibase: 'z42twirSb1PULt5Sg6gjgNMsdiLycu6fbA83aX1vVb8e3ncP'
};

export const keyTypes = new Map([
['P-256', mockKeyEcdsaSecp256],
['P-384', mockKeyEcdsaSecp384],
['P-521', mockKeyEcdsaSecp521]
])

Check failure on line 36 in test/mock-data.js

View workflow job for this annotation

GitHub Actions / lint (20.x)

Missing semicolon
74 changes: 39 additions & 35 deletions test/sign-verify.spec.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,51 @@
/*!
* Copyright (c) 2023 Digital Bazaar, Inc. All rights reserved.
* Copyright (c) 2023-2024 Digital Bazaar, Inc.
*/
import chai from 'chai';
import * as EcdsaMultikey from '../lib/index.js';
import {mockKey} from './mock-data.js';
import {keyTypes} from './mock-data.js';
import {stringToUint8Array} from './text-encoder.js';

chai.should();
const {expect} = chai;

const keyPair = await EcdsaMultikey.from({
controller: 'did:example:1234',
...mockKey
});
const signer = keyPair.signer();
const verifier = keyPair.verifier();
for(const [keyType, exportedKey] of keyTypes) {
_testKeyType({keyType, exportedKey});
}

describe('sign and verify', () => {
it('works properly', async () => {
signer.should.have.property(
'id',
'did:example:1234#zDnaeSMnptAKpH4AD41vTkwzjznW7yNetdRh9FJn8bJsbsdbw'
);
verifier.should.have.property(
'id',
'did:example:1234#zDnaeSMnptAKpH4AD41vTkwzjznW7yNetdRh9FJn8bJsbsdbw'
);
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
const result = await verifier.verify({data, signature});
result.should.be.true;
});
function _testKeyType({keyType, exportedKey}) {
describe(keyType, function() {
describe(`sign and verify`, async function() {
const id = `${exportedKey.controller}#${exportedKey.publicMultibase}`;
const keyPair = await EcdsaMultikey.from({
id,
...exportedKey
});
const signer = keyPair.signer();
const verifier = keyPair.verifier();

it('has proper signature format', async () => {
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
expect(signature).to.be.instanceof(Uint8Array);
});
it('works properly', async () => {
signer.should.have.property('id', id);
verifier.should.have.property('id', id);
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
const result = await verifier.verify({data, signature});
result.should.be.true;
});

it('has proper signature format', async () => {
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
expect(signature).to.be.instanceof(Uint8Array);
});

it('fails if signing data is changed', async () => {
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
const changedData = stringToUint8Array('test 4321');
const result = await verifier.verify({data: changedData, signature});
result.should.be.false;
it('fails if signing data is changed', async () => {
const data = stringToUint8Array('test 1234');
const signature = await signer.sign({data});
const changedData = stringToUint8Array('test 4321');
const result = await verifier.verify({data: changedData, signature});
result.should.be.false;
});
});
});
});
}

0 comments on commit 504cfb1

Please sign in to comment.