UNPKG

verifiablecredentials-crypto-sdk-typescript-keystore

Version:
146 lines 6.87 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const verifiablecredentials_crypto_sdk_typescript_keys_1 = require("verifiablecredentials-crypto-sdk-typescript-keys"); const base64url_1 = __importDefault(require("base64url")); const index_1 = require("../lib/index"); describe('KeyStoreInMemory', () => { it('should list all keys in the store', async () => { const keyStore = new index_1.KeyStoreInMemory(); const key1 = { kty: verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.RSA, kid: 'kid1', e: 'AAEE', n: 'xxxxxxxxx', alg: 'none' }; const key2 = { kty: verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.RSA, kid: 'kid2', e: 'AAEE', n: 'xxxxxxxxx', alg: 'none' }; const key3 = { kty: verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.OKP, kid: 'kid3', crv: 'ed25519', x: 'AAEE', alg: 'EdDSA' }; const key4 = { kty: verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.EC, kid: 'kid4', crv: 'secp256k1', x: 'AAEE', y: 'AAEE', alg: 'ECDSA' }; await keyStore.save(new index_1.KeyReference('1'), key1); await keyStore.save(new index_1.KeyReference('1'), key2); await keyStore.save(new index_1.KeyReference('2'), key3); await keyStore.save(new index_1.KeyReference('3'), key4); let list = await keyStore.list(); // tslint:disable-next-line: no-backbone-get-set-outside-model expect(list['1'].kids.length).toEqual(2); expect(list['1'].kty).toEqual(verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.RSA); expect(list['1'].kids[0]).toEqual('kid1'); expect(list['1'].kids[1]).toEqual('kid2'); // tslint:disable-next-line: no-backbone-get-set-outside-model expect(list['2'].kids.length).toEqual(1); expect(list['2'].kty).toEqual(verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.OKP); expect(list['2'].kids[0]).toEqual('kid3'); let key = await keyStore.get(new index_1.KeyReference('2'), { publicKeyOnly: true }); expect(key.keys[0].kty).toEqual(verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.OKP); expect(key.keys[0].kid).toEqual('kid3'); key = await keyStore.get(new index_1.KeyReference('3'), { publicKeyOnly: true }); expect(key.keys[0].kty).toEqual(verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.EC); expect(key.keys[0].kid).toEqual('kid4'); const rsaKey = { kty: verifiablecredentials_crypto_sdk_typescript_keys_1.KeyType.RSA, kid: 'rsaKey', e: 'AAEE', n: 'xxxxxxxxx', p: 'AAEE', q: 'AAEE', dp: 'AAEE', dq: 'AAEE', qi: 'AAEE', alg: 'none' }; await keyStore.save(new index_1.KeyReference('rsaKey'), rsaKey); key = await keyStore.get(new index_1.KeyReference('rsaKey'), { publicKeyOnly: true }); expect(key.d).toBeUndefined(); expect(key.p).toBeUndefined(); expect(key.q).toBeUndefined(); expect(key.dp).toBeUndefined(); expect(key.dq).toBeUndefined(); expect(key.qi).toBeUndefined(); key = await keyStore.get(new index_1.KeyReference('rsaKey')); expect(key.keys[0].d).toBeUndefined(); expect(key.keys[0].n).toBeDefined(); }); it('should save a string', async () => { const key = 'abcdef'; const keyStore = new index_1.KeyStoreInMemory(); await keyStore.save(new index_1.KeyReference('key'), key); const retrieved = await keyStore.get(new index_1.KeyReference('key'), new index_1.KeyStoreOptions({ publicKeyOnly: false })); expect(retrieved.keys.length).toEqual(1); expect(retrieved.keys[0].k).toEqual(base64url_1.default.encode(key)); }); it('should throw because an oct key does not have a public key', async () => { // Setup registration environment const jwk = new verifiablecredentials_crypto_sdk_typescript_keys_1.OctKey('AAEE'); const keyStore = new index_1.KeyStoreInMemory(); await keyStore.save(new index_1.KeyReference('key'), jwk); let throwCaught = false; const error = await keyStore.get(new index_1.KeyReference('key'), new index_1.KeyStoreOptions({ publicKeyOnly: true })) .catch((err) => { throwCaught = true; expect(err.message).toBe('A secret does not has a public key'); }); expect(error).toBeUndefined(); expect(throwCaught).toBe(true); }); it('should throw because an oct key does not have a public key', async () => { // Setup registration environment const jwk = new verifiablecredentials_crypto_sdk_typescript_keys_1.OctKey('AAEE'); jwk.kty = 'AAA'; // Fail because wrong key type const keyStore = new index_1.KeyStoreInMemory(); await keyStore.save(new index_1.KeyReference('key'), jwk); let throwCaught = false; const error = await keyStore.get(new index_1.KeyReference('key'), new index_1.KeyStoreOptions({ publicKeyOnly: true })) .catch((err) => { throwCaught = true; expect(err.message).toBe('A secret does not has a public key'); }); expect(error).toBeUndefined(); expect(throwCaught).toBe(true); }); it('should throw because the key does not exist', async () => { // Setup registration environment const jwk = { kty: 'oct', use: 'sig', k: 'AAEE' }; const keyStore = new index_1.KeyStoreInMemory(); await keyStore.save(new index_1.KeyReference('key'), jwk); let throwCaught = false; const signature = await keyStore.get(new index_1.KeyReference('key1')) .catch((err) => { throwCaught = true; expect(err.message).toBe('key1 not found'); }); expect(signature).toBeUndefined(); expect(throwCaught).toBe(true); }); }); //# sourceMappingURL=KeyStoreInMemory.spec.js.map