UNPKG

bitgo

Version:
118 lines • 16.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("should"); const sdk_core_1 = require("@bitgo/sdk-core"); const sdk_api_1 = require("@bitgo/sdk-api"); describe('decryptKeychainPrivateKey', () => { const bitgo = new sdk_api_1.BitGoAPI(); const prv1 = Math.random().toString(); const password1 = Math.random().toString(); const prv2 = Math.random().toString(); const password2 = Math.random().toString(); it('should decrypt encryptedPrv', () => { const keychain = { encryptedPrv: bitgo.encrypt({ input: prv1, password: password1 }), }; (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, keychain, password1).should.equal(prv1); }); it('should decrypt webauthnDevices encryptedPrv', () => { const keychain = { webauthnDevices: [ { otpDeviceId: '123', authenticatorInfo: { credID: 'credID', fmt: 'packed', publicKey: 'some value', }, prfSalt: '456', encryptedPrv: bitgo.encrypt({ input: prv2, password: password2 }), }, ], }; (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, keychain, password2).should.equal(prv2); }); it('should try and decrypt all encryptedPrvs', () => { const keychain = { encryptedPrv: bitgo.encrypt({ input: prv1, password: password1 }), webauthnDevices: [ { otpDeviceId: '123', authenticatorInfo: { credID: 'credID', fmt: 'packed', publicKey: 'some value', }, prfSalt: '456', encryptedPrv: bitgo.encrypt({ input: prv2, password: password2 }), }, ], }; (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, keychain, password2).should.equal(prv2); }); it('should return undefined if no encryptedPrv can be decrypted', () => { const keychain = { encryptedPrv: bitgo.encrypt({ input: prv1, password: password1 }), webauthnDevices: [ { otpDeviceId: '123', authenticatorInfo: { credID: 'credID', fmt: 'packed', publicKey: 'some value', }, prfSalt: '456', encryptedPrv: bitgo.encrypt({ input: prv2, password: password2 }), }, ], }; ((0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, keychain, Math.random().toString()) === undefined).should.equal(true); }); it('should return undefined if no encryptedPrv is present', () => { ((0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, {}, 'password') === undefined).should.be.true(); }); }); describe('decryptKeychainPrivateKeyAsync', () => { const bitgo = new sdk_api_1.BitGoAPI(); const prv1 = Math.random().toString(); const password1 = Math.random().toString(); const prv2 = Math.random().toString(); const password2 = Math.random().toString(); it('should decrypt encryptedPrv (v1)', async () => { const keychain = { encryptedPrv: bitgo.encrypt({ input: prv1, password: password1 }), }; const result = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, keychain, password1); result.should.equal(prv1); }); it('should decrypt webauthnDevices encryptedPrv (v1)', async () => { const keychain = { webauthnDevices: [ { otpDeviceId: '123', authenticatorInfo: { credID: 'credID', fmt: 'packed', publicKey: 'some value', }, prfSalt: '456', encryptedPrv: bitgo.encrypt({ input: prv2, password: password2 }), }, ], }; const result = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, keychain, password2); result.should.equal(prv2); }); it('should return undefined if no encryptedPrv can be decrypted', async () => { const keychain = { encryptedPrv: bitgo.encrypt({ input: prv1, password: password1 }), }; const result = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, keychain, Math.random().toString()); (result === undefined).should.equal(true); }); it('should return undefined if no encryptedPrv is present', async () => { const result = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, {}, 'password'); (result === undefined).should.be.true(); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdEtleWNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2RlY3J5cHRLZXljaGFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQiw4Q0FJeUI7QUFDekIsNENBQTBDO0FBRTFDLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxrQkFBUSxFQUFFLENBQUM7SUFFN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUUzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNDLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7UUFDckMsTUFBTSxRQUFRLEdBQWlDO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDbEUsQ0FBQztRQUNGLElBQUEsb0NBQXlCLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCxNQUFNLFFBQVEsR0FBaUM7WUFDN0MsZUFBZSxFQUFFO2dCQUNmO29CQUNFLFdBQVcsRUFBRSxLQUFLO29CQUNsQixpQkFBaUIsRUFBRTt3QkFDakIsTUFBTSxF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QUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsTUFBTSxRQUFRLEdBQWlDO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDbEUsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSx5Q0FBOEIsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHlDQUE4QixFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleSxcbiAgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleUFzeW5jLFxuICBPcHRpb25hbEtleWNoYWluRW5jcnlwdGVkS2V5LFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5cbmRlc2NyaWJlKCdkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5JywgKCkgPT4ge1xuICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSgpO1xuXG4gIGNvbnN0IHBydjEgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHBhc3N3b3JkMSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcblxuICBjb25zdCBwcnYyID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygpO1xuICBjb25zdCBwYXNzd29yZDIgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNyeXB0IGVuY3J5cHRlZFBydicsICgpID0+IHtcbiAgICBjb25zdCBrZXljaGFpbjogT3B0aW9uYWxLZXljaGFpbkVuY3J5cHRlZEtleSA9IHtcbiAgICAgIGVuY3J5cHRlZFBydjogYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYxLCBwYXNzd29yZDogcGFzc3dvcmQxIH0pLFxuICAgIH07XG4gICAgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleShiaXRnbywga2V5Y2hhaW4sIHBhc3N3b3JkMSkhLnNob3VsZC5lcXVhbChwcnYxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNyeXB0IHdlYmF1dGhuRGV2aWNlcyBlbmNyeXB0ZWRQcnYnLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5Y2hhaW46IE9wdGlvbmFsS2V5Y2hhaW5FbmNyeXB0ZWRLZXkgPSB7XG4gICAgICB3ZWJhdXRobkRldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG90cERldmljZUlkOiAnMTIzJyxcbiAgICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzoge1xuICAgICAgICAgICAgY3JlZElEOiAnY3JlZElEJyxcbiAgICAgICAgICAgIGZtdDogJ3BhY2tlZCcsXG4gICAgICAgICAgICBwdWJsaWNLZXk6ICdzb21lIHZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZlNhbHQ6ICc0NTYnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYyLCBwYXNzd29yZDogcGFzc3dvcmQyIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIGtleWNoYWluLCBwYXNzd29yZDIpIS5zaG91bGQuZXF1YWwocHJ2Mik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdHJ5IGFuZCBkZWNyeXB0IGFsbCBlbmNyeXB0ZWRQcnZzJywgKCkgPT4ge1xuICAgIGNvbnN0IGtleWNoYWluOiBPcHRpb25hbEtleWNoYWluRW5jcnlwdGVkS2V5ID0ge1xuICAgICAgZW5jcnlwdGVkUHJ2OiBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHBydjEsIHBhc3N3b3JkOiBwYXNzd29yZDEgfSksXG4gICAgICB3ZWJhdXRobkRldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG90cERldmljZUlkOiAnMTIzJyxcbiAgICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzoge1xuICAgICAgICAgICAgY3JlZElEOiAnY3JlZElEJyxcbiAgICAgICAgICAgIGZtdDogJ3BhY2tlZCcsXG4gICAgICAgICAgICBwdWJsaWNLZXk6ICdzb21lIHZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZlNhbHQ6ICc0NTYnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYyLCBwYXNzd29yZDogcGFzc3dvcmQyIH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIGtleWNoYWluLCBwYXNzd29yZDIpIS5zaG91bGQuZXF1YWwocHJ2Mik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBpZiBubyBlbmNyeXB0ZWRQcnYgY2FuIGJlIGRlY3J5cHRlZCcsICgpID0+IHtcbiAgICBjb25zdCBrZXljaGFpbjogT3B0aW9uYWxLZXljaGFpbkVuY3J5cHRlZEtleSA9IHtcbiAgICAgIGVuY3J5cHRlZFBydjogYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYxLCBwYXNzd29yZDogcGFzc3dvcmQxIH0pLFxuICAgICAgd2ViYXV0aG5EZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJzEyMycsXG4gICAgICAgICAgYXV0aGVudGljYXRvckluZm86IHtcbiAgICAgICAgICAgIGNyZWRJRDogJ2NyZWRJRCcsXG4gICAgICAgICAgICBmbXQ6ICdwYWNrZWQnLFxuICAgICAgICAgICAgcHVibGljS2V5OiAnc29tZSB2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmZTYWx0OiAnNDU2JyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2MiwgcGFzc3dvcmQ6IHBhc3N3b3JkMiB9KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICAoZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleShiaXRnbywga2V5Y2hhaW4sIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkgPT09IHVuZGVmaW5lZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgaWYgbm8gZW5jcnlwdGVkUHJ2IGlzIHByZXNlbnQnLCAoKSA9PiB7XG4gICAgKGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIHt9LCAncGFzc3dvcmQnKSA9PT0gdW5kZWZpbmVkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleUFzeW5jJywgKCkgPT4ge1xuICBjb25zdCBiaXRnbyA9IG5ldyBCaXRHb0FQSSgpO1xuXG4gIGNvbnN0IHBydjEgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHBhc3N3b3JkMSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcblxuICBjb25zdCBwcnYyID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygpO1xuICBjb25zdCBwYXNzd29yZDIgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCk7XG5cbiAgaXQoJ3Nob3VsZCBkZWNyeXB0IGVuY3J5cHRlZFBydiAodjEpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGtleWNoYWluOiBPcHRpb25hbEtleWNoYWluRW5jcnlwdGVkS2V5ID0ge1xuICAgICAgZW5jcnlwdGVkUHJ2OiBiaXRnby5lbmNyeXB0KHsgaW5wdXQ6IHBydjEsIHBhc3N3b3JkOiBwYXNzd29yZDEgfSksXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5QXN5bmMoYml0Z28sIGtleWNoYWluLCBwYXNzd29yZDEpO1xuICAgIHJlc3VsdCEuc2hvdWxkLmVxdWFsKHBydjEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY3J5cHQgd2ViYXV0aG5EZXZpY2VzIGVuY3J5cHRlZFBydiAodjEpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGtleWNoYWluOiBPcHRpb25hbEtleWNoYWluRW5jcnlwdGVkS2V5ID0ge1xuICAgICAgd2ViYXV0aG5EZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJzEyMycsXG4gICAgICAgICAgYXV0aGVudGljYXRvckluZm86IHtcbiAgICAgICAgICAgIGNyZWRJRDogJ2NyZWRJRCcsXG4gICAgICAgICAgICBmbXQ6ICdwYWNrZWQnLFxuICAgICAgICAgICAgcHVibGljS2V5OiAnc29tZSB2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmZTYWx0OiAnNDU2JyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2MiwgcGFzc3dvcmQ6IHBhc3N3b3JkMiB9KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5QXN5bmMoYml0Z28sIGtleWNoYWluLCBwYXNzd29yZDIpO1xuICAgIHJlc3VsdCEuc2hvdWxkLmVxdWFsKHBydjIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgaWYgbm8gZW5jcnlwdGVkUHJ2IGNhbiBiZSBkZWNyeXB0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qga2V5Y2hhaW46IE9wdGlvbmFsS2V5Y2hhaW5FbmNyeXB0ZWRLZXkgPSB7XG4gICAgICBlbmNyeXB0ZWRQcnY6IGJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2MSwgcGFzc3dvcmQ6IHBhc3N3b3JkMSB9KSxcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXlBc3luYyhiaXRnbywga2V5Y2hhaW4sIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSk7XG4gICAgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBpZiBubyBlbmNyeXB0ZWRQcnYgaXMgcHJlc2VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5QXN5bmMoYml0Z28sIHt9LCAncGFzc3dvcmQnKTtcbiAgICAocmVzdWx0ID09PSB1bmRlZmluZWQpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG4iXX0=