From 504cfb12899ae81c4ed1b907a4557e498261acef Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Fri, 5 Jul 2024 15:31:40 +0000 Subject: [PATCH] Add keyTypes & make sign and verify configurable. --- test/mock-data.js | 6 ++++ test/sign-verify.spec.js | 74 +++++++++++++++++++++------------------- 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/test/mock-data.js b/test/mock-data.js index b961ce0..c79873e 100644 --- a/test/mock-data.js +++ b/test/mock-data.js @@ -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] +]) diff --git a/test/sign-verify.spec.js b/test/sign-verify.spec.js index 1b12194..2edc650 100644 --- a/test/sign-verify.spec.js +++ b/test/sign-verify.spec.js @@ -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; + }); + }); }); -}); +}