@microsoft/useragent-sdk
Version:
SDK for building decentralized identity wallets and enterprise agents.
49 lines • 3.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const KeyStoreInMemory_1 = require("../../../src/crypto/keyStore/KeyStoreInMemory");
const SubtleCryptoNode_1 = require("../../../src/crypto/plugin/SubtleCryptoNode");
const SubtleCryptoExtension_1 = require("../../../src/crypto/plugin/SubtleCryptoExtension");
const src_1 = require("../../../src");
const CryptoFactoryNode_1 = require("../../../src/crypto/plugin/CryptoFactoryNode");
const KeyContainer_1 = require("../../../src/crypto/keys/KeyContainer");
describe('SubtleCryptoExtension', () => {
it('should sign a reference message', async () => {
const alg = { name: 'ECDSA', namedCurve: 'P-256K', hash: { name: 'SHA-256' } };
});
it('should sign a message', async () => {
const keyStore = new KeyStoreInMemory_1.default();
const factory = new CryptoFactoryNode_1.default(keyStore, SubtleCryptoNode_1.default.getSubtleCrypto());
const subtle = new SubtleCryptoExtension_1.default(factory);
const alg = { name: 'ECDSA', namedCurve: 'P-256K', hash: { name: 'SHA-256' }, format: 'DER' };
const jwk = new src_1.EcPrivateKey({ "kid": "#signing", "kty": "EC", "use": "sig", "alg": "ES256K", "crv": "P-256K", "x": "7RlJnsuYQuSNdpRAFwejCXZqsAccW_QKWw4dPmABBVA", "y": "nf0vn9ib6ObyLm4WaDWUe8g3gkEwo2jVbthS7R4MsaU", "d": "2PtA4bb6fXprFLfjIJsi5Cer8YAdEDVDomYNYK9ppkU" });
await keyStore.save('key', new KeyContainer_1.default(jwk));
const payload = Buffer.from('test');
let signature = await subtle.signByKeyStore(alg, 'key', payload);
expect(signature.byteLength).toBeGreaterThan(65);
const publicKey = (await keyStore.get('key', true)).getKey();
let result = await subtle.verifyByJwk(alg, publicKey, signature, payload);
expect(result).toBeTruthy();
// without DER
delete alg.format;
signature = await subtle.signByKeyStore(alg, 'key', payload);
expect(signature.byteLength).toBeLessThanOrEqual(64);
result = await subtle.verifyByJwk(alg, publicKey, signature, payload);
expect(result).toBeTruthy();
});
it('should generate an RSA key via the plugin', async () => {
const keyStore = new KeyStoreInMemory_1.default();
const factory = new CryptoFactoryNode_1.default(keyStore, SubtleCryptoNode_1.default.getSubtleCrypto());
const generator = factory.getKeyEncrypter('RSA-OAEP');
const alg = { name: 'RSA-OAEP', hash: 'SHA-256', modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]) };
const key = await generator.generateKey(alg, true, ['encrypt', 'decrypt']);
let jwk = new src_1.RsaPrivateKey(await generator.exportKey('jwk', key.privateKey));
expect(jwk.d).toBeDefined();
expect(jwk.p).toBeDefined();
expect(jwk.q).toBeDefined();
});
});
//# sourceMappingURL=SubtleCryptoExtension.spec.js.map