// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. // @ts-check /// /// "use strict"; ((window) => { const webidl = window.__bootstrap.webidl; const { CryptoKey } = window.__bootstrap.crypto; const { ArrayBufferIsView, ArrayBuffer } = window.__bootstrap.primordials; webidl.converters.AlgorithmIdentifier = (V, opts) => { // Union for (object or DOMString) if (webidl.type(V) == "Object") { return webidl.converters.object(V, opts); } return webidl.converters.DOMString(V, opts); }; webidl.converters["BufferSource or JsonWebKey"] = (V, opts) => { // Union for (BufferSource or JsonWebKey) if (ArrayBufferIsView(V) || V instanceof ArrayBuffer) { return webidl.converters.BufferSource(V, opts); } return webidl.converters.JsonWebKey(V, opts); }; webidl.converters.KeyType = webidl.createEnumConverter("KeyType", [ "public", "private", "secret", ]); webidl.converters.KeyFormat = webidl.createEnumConverter("KeyFormat", [ "raw", "pkcs8", "spki", "jwk", ]); webidl.converters.KeyUsage = webidl.createEnumConverter("KeyUsage", [ "encrypt", "decrypt", "sign", "verify", "deriveKey", "deriveBits", "wrapKey", "unwrapKey", ]); webidl.converters["sequence"] = webidl.createSequenceConverter( webidl.converters.KeyUsage, ); webidl.converters.HashAlgorithmIdentifier = webidl.converters.AlgorithmIdentifier; /** @type {__bootstrap.webidl.Dictionary} */ const dictAlgorithm = [{ key: "name", converter: webidl.converters.DOMString, required: true, }]; webidl.converters.Algorithm = webidl .createDictionaryConverter("Algorithm", dictAlgorithm); webidl.converters.BigInteger = webidl.converters.Uint8Array; /** @type {__bootstrap.webidl.Dictionary} */ const dictRsaKeyGenParams = [ ...dictAlgorithm, { key: "modulusLength", converter: (V, opts) => webidl.converters["unsigned long"](V, { ...opts, enforceRange: true }), required: true, }, { key: "publicExponent", converter: webidl.converters.BigInteger, required: true, }, ]; webidl.converters.RsaKeyGenParams = webidl .createDictionaryConverter("RsaKeyGenParams", dictRsaKeyGenParams); const dictRsaHashedKeyGenParams = [ ...dictRsaKeyGenParams, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, ]; webidl.converters.RsaHashedKeyGenParams = webidl.createDictionaryConverter( "RsaHashedKeyGenParams", dictRsaHashedKeyGenParams, ); webidl.converters.NamedCurve = webidl.converters.DOMString; const dictEcKeyGenParams = [ ...dictAlgorithm, { key: "namedCurve", converter: webidl.converters.NamedCurve, required: true, }, ]; webidl.converters.EcKeyGenParams = webidl .createDictionaryConverter("EcKeyGenParams", dictEcKeyGenParams); const dictAesKeyGenParams = [ ...dictAlgorithm, { key: "length", converter: (V, opts) => webidl.converters["unsigned short"](V, { ...opts, enforceRange: true }), required: true, }, ]; webidl.converters.AesKeyGenParams = webidl .createDictionaryConverter("AesKeyGenParams", dictAesKeyGenParams); const dictHmacKeyGenParams = [ ...dictAlgorithm, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, { key: "length", converter: (V, opts) => webidl.converters["unsigned long"](V, { ...opts, enforceRange: true }), }, ]; webidl.converters.HmacKeyGenParams = webidl .createDictionaryConverter("HmacKeyGenParams", dictHmacKeyGenParams); const dictRsaPssParams = [ ...dictAlgorithm, { key: "saltLength", converter: (V, opts) => webidl.converters["unsigned long"](V, { ...opts, enforceRange: true }), required: true, }, ]; webidl.converters.RsaPssParams = webidl .createDictionaryConverter("RsaPssParams", dictRsaPssParams); const dictRsaOaepParams = [ ...dictAlgorithm, { key: "label", converter: webidl.converters["BufferSource"], }, ]; webidl.converters.RsaOaepParams = webidl .createDictionaryConverter("RsaOaepParams", dictRsaOaepParams); const dictEcdsaParams = [ ...dictAlgorithm, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, ]; webidl.converters["EcdsaParams"] = webidl .createDictionaryConverter("EcdsaParams", dictEcdsaParams); const dictHmacImportParams = [ ...dictAlgorithm, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, { key: "length", converter: (V, opts) => webidl.converters["unsigned long"](V, { ...opts, enforceRange: true }), }, ]; webidl.converters.HmacImportParams = webidl .createDictionaryConverter("HmacImportParams", dictHmacImportParams); const dictRsaOtherPrimesInfo = [ { key: "r", converter: webidl.converters["DOMString"], }, { key: "d", converter: webidl.converters["DOMString"], }, { key: "t", converter: webidl.converters["DOMString"], }, ]; webidl.converters.RsaOtherPrimesInfo = webidl.createDictionaryConverter( "RsaOtherPrimesInfo", dictRsaOtherPrimesInfo, ); webidl.converters["sequence"] = webidl .createSequenceConverter( webidl.converters.RsaOtherPrimesInfo, ); const dictJsonWebKey = [ // Sections 4.2 and 4.3 of RFC7517. // https://datatracker.ietf.org/doc/html/rfc7517#section-4 { key: "kty", converter: webidl.converters["DOMString"], }, { key: "use", converter: webidl.converters["DOMString"], }, { key: "key_ops", converter: webidl.converters["sequence"], }, { key: "alg", converter: webidl.converters["DOMString"], }, // JSON Web Key Parameters Registration { key: "ext", converter: webidl.converters["boolean"], }, // Section 6 of RFC7518 JSON Web Algorithms // https://datatracker.ietf.org/doc/html/rfc7518#section-6 { key: "crv", converter: webidl.converters["DOMString"], }, { key: "x", converter: webidl.converters["DOMString"], }, { key: "y", converter: webidl.converters["DOMString"], }, { key: "d", converter: webidl.converters["DOMString"], }, { key: "n", converter: webidl.converters["DOMString"], }, { key: "e", converter: webidl.converters["DOMString"], }, { key: "p", converter: webidl.converters["DOMString"], }, { key: "q", converter: webidl.converters["DOMString"], }, { key: "dp", converter: webidl.converters["DOMString"], }, { key: "dq", converter: webidl.converters["DOMString"], }, { key: "qi", converter: webidl.converters["DOMString"], }, { key: "oth", converter: webidl.converters["sequence"], }, { key: "k", converter: webidl.converters["DOMString"], }, ]; webidl.converters.JsonWebKey = webidl.createDictionaryConverter( "JsonWebKey", dictJsonWebKey, ); const dictHkdfParams = [ ...dictAlgorithm, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, { key: "salt", converter: webidl.converters["BufferSource"], required: true, }, { key: "info", converter: webidl.converters["BufferSource"], required: true, }, ]; webidl.converters.HkdfParams = webidl .createDictionaryConverter("HkdfParams", dictHkdfParams); const dictPbkdf2Params = [ ...dictAlgorithm, { key: "hash", converter: webidl.converters.HashAlgorithmIdentifier, required: true, }, { key: "iterations", converter: (V, opts) => webidl.converters["unsigned long"](V, { ...opts, enforceRange: true }), required: true, }, { key: "salt", converter: webidl.converters["BufferSource"], required: true, }, ]; webidl.converters.Pbkdf2Params = webidl .createDictionaryConverter("Pbkdf2Params", dictPbkdf2Params); webidl.converters.CryptoKey = webidl.createInterfaceConverter( "CryptoKey", CryptoKey, ); const dictCryptoKeyPair = [ { key: "publicKey", converter: webidl.converters.CryptoKey, }, { key: "privateKey", converter: webidl.converters.CryptoKey, }, ]; webidl.converters.CryptoKeyPair = webidl .createDictionaryConverter("CryptoKeyPair", dictCryptoKeyPair); })(this);