verifiablecredentials-crypto-sdk-typescript-keystore
Version:
Package for managing keys in a key store.
146 lines • 6.87 kB
JavaScript
"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