UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

69 lines 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.supportsZeroByteGCM = exports.supportsSubtleCrypto = exports.supportsSecureRandom = exports.supportsWebCrypto = void 0; var tslib_1 = require("tslib"); var subtleCryptoMethods = [ "decrypt", "digest", "encrypt", "exportKey", "generateKey", "importKey", "sign", "verify" ]; function supportsWebCrypto(window) { if (supportsSecureRandom(window) && typeof window.crypto.subtle === "object") { var subtle = window.crypto.subtle; return supportsSubtleCrypto(subtle); } return false; } exports.supportsWebCrypto = supportsWebCrypto; function supportsSecureRandom(window) { if (typeof window === "object" && typeof window.crypto === "object") { var getRandomValues = window.crypto.getRandomValues; return typeof getRandomValues === "function"; } return false; } exports.supportsSecureRandom = supportsSecureRandom; function supportsSubtleCrypto(subtle) { return (subtle && subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === "function"; })); } exports.supportsSubtleCrypto = supportsSubtleCrypto; function supportsZeroByteGCM(subtle) { return tslib_1.__awaiter(this, void 0, void 0, function () { var key, zeroByteAuthTag, _a; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: if (!supportsSubtleCrypto(subtle)) return [2 /*return*/, false]; _b.label = 1; case 1: _b.trys.push([1, 4, , 5]); return [4 /*yield*/, subtle.generateKey({ name: "AES-GCM", length: 128 }, false, ["encrypt"])]; case 2: key = _b.sent(); return [4 /*yield*/, subtle.encrypt({ name: "AES-GCM", iv: new Uint8Array(Array(12)), additionalData: new Uint8Array(Array(16)), tagLength: 128 }, key, new Uint8Array(0))]; case 3: zeroByteAuthTag = _b.sent(); return [2 /*return*/, zeroByteAuthTag.byteLength === 16]; case 4: _a = _b.sent(); return [2 /*return*/, false]; case 5: return [2 /*return*/]; } }); }); } exports.supportsZeroByteGCM = supportsZeroByteGCM; //# sourceMappingURL=supportsWebCrypto.js.map