// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. // deno-lint-ignore-file no-var /// /// declare var crypto: Crypto; interface Algorithm { name: string; } interface KeyAlgorithm { name: string; } type AlgorithmIdentifier = string | Algorithm; type HashAlgorithmIdentifier = AlgorithmIdentifier; type KeyType = "private" | "public" | "secret"; type KeyUsage = | "decrypt" | "deriveBits" | "deriveKey" | "encrypt" | "sign" | "unwrapKey" | "verify" | "wrapKey"; type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki"; type NamedCurve = string; interface RsaOtherPrimesInfo { d?: string; r?: string; t?: string; } interface JsonWebKey { alg?: string; crv?: string; d?: string; dp?: string; dq?: string; e?: string; ext?: boolean; k?: string; // deno-lint-ignore camelcase key_ops?: string[]; kty?: string; n?: string; oth?: RsaOtherPrimesInfo[]; p?: string; q?: string; qi?: string; use?: string; x?: string; y?: string; } interface AesCbcParams extends Algorithm { iv: BufferSource; } interface HmacKeyGenParams extends Algorithm { hash: HashAlgorithmIdentifier; length?: number; } interface EcKeyGenParams extends Algorithm { namedCurve: NamedCurve; } interface EcImportParams extends Algorithm { namedCurve: NamedCurve; } interface EcdsaParams extends Algorithm { hash: HashAlgorithmIdentifier; } interface RsaHashedImportParams extends Algorithm { hash: HashAlgorithmIdentifier; } interface RsaHashedKeyGenParams extends RsaKeyGenParams { hash: HashAlgorithmIdentifier; } interface RsaKeyGenParams extends Algorithm { modulusLength: number; publicExponent: Uint8Array; } interface RsaPssParams extends Algorithm { saltLength: number; } interface RsaOaepParams extends Algorithm { label?: Uint8Array; } interface HmacImportParams extends Algorithm { hash: HashAlgorithmIdentifier; length?: number; } interface RsaHashedImportParams extends Algorithm { hash: HashAlgorithmIdentifier; } interface EcKeyAlgorithm extends KeyAlgorithm { namedCurve: NamedCurve; } interface HmacKeyAlgorithm extends KeyAlgorithm { hash: KeyAlgorithm; length: number; } interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { hash: KeyAlgorithm; } interface RsaKeyAlgorithm extends KeyAlgorithm { modulusLength: number; publicExponent: Uint8Array; } interface HkdfParams extends Algorithm { hash: HashAlgorithmIdentifier; info: BufferSource; salt: BufferSource; } interface Pbkdf2Params extends Algorithm { hash: HashAlgorithmIdentifier; iterations: number; salt: BufferSource; } interface AesDerivedKeyParams extends Algorithm { length: number; } interface EcdhKeyDeriveParams extends Algorithm { public: CryptoKey; } interface AesKeyGenParams extends Algorithm { length: number; } interface AesKeyAlgorithm extends KeyAlgorithm { length: number; } /** The CryptoKey dictionary of the Web Crypto API represents a cryptographic key. */ interface CryptoKey { readonly algorithm: KeyAlgorithm; readonly extractable: boolean; readonly type: KeyType; readonly usages: KeyUsage[]; } declare var CryptoKey: { prototype: CryptoKey; new (): CryptoKey; }; /** The CryptoKeyPair dictionary of the Web Crypto API represents a key pair for an asymmetric cryptography algorithm, also known as a public-key algorithm. */ interface CryptoKeyPair { privateKey: CryptoKey; publicKey: CryptoKey; } declare var CryptoKeyPair: { prototype: CryptoKeyPair; new (): CryptoKeyPair; }; /** This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto). */ interface SubtleCrypto { generateKey( algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[], ): Promise; generateKey( algorithm: AesKeyGenParams | HmacKeyGenParams, extractable: boolean, keyUsages: KeyUsage[], ): Promise; generateKey( algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[], ): Promise; importKey( format: "jwk", keyData: JsonWebKey, algorithm: | AlgorithmIdentifier | HmacImportParams | RsaHashedImportParams | EcImportParams, extractable: boolean, keyUsages: KeyUsage[], ): Promise; importKey( format: Exclude, keyData: BufferSource, algorithm: | AlgorithmIdentifier | HmacImportParams | RsaHashedImportParams | EcImportParams, extractable: boolean, keyUsages: KeyUsage[], ): Promise; exportKey(format: "jwk", key: CryptoKey): Promise; exportKey( format: Exclude, key: CryptoKey, ): Promise; sign( algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource, ): Promise; verify( algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource, ): Promise; digest( algorithm: AlgorithmIdentifier, data: BufferSource, ): Promise; encrypt( algorithm: AlgorithmIdentifier | RsaOaepParams | AesCbcParams, key: CryptoKey, data: BufferSource, ): Promise; decrypt( algorithm: AlgorithmIdentifier | RsaOaepParams | AesCbcParams, key: CryptoKey, data: BufferSource, ): Promise; deriveBits( algorithm: | AlgorithmIdentifier | HkdfParams | Pbkdf2Params | EcdhKeyDeriveParams, baseKey: CryptoKey, length: number, ): Promise; deriveKey( algorithm: AlgorithmIdentifier | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: | AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[], ): Promise; wrapKey( format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams, ): Promise; unwrapKey( format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: | AlgorithmIdentifier | RsaOaepParams | AesCbcParams, unwrappedKeyAlgorithm: | AlgorithmIdentifier | RsaHashedImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[], ): Promise; } declare interface Crypto { readonly subtle: SubtleCrypto; getRandomValues< T extends | Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null, >( array: T, ): T; randomUUID(): string; } declare var SubtleCrypto: { prototype: SubtleCrypto; new (): SubtleCrypto; };