diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2021-09-13 02:32:49 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-12 23:02:49 +0200 |
commit | 0520ae62dd2f4e61287315bbfcd548864d46da45 (patch) | |
tree | 41c9ad4bc75d3444051beddbb574579dd6e1fd3d | |
parent | 13991e5995a5bc8a11bcf2bd7d23168a15536c83 (diff) |
fix(ext/crypto): add HkdfParams and Pkdf2Params types (#11991)
-rw-r--r-- | cli/tests/unit/webcrypto_test.ts | 24 | ||||
-rw-r--r-- | ext/crypto/lib.deno_crypto.d.ts | 17 |
2 files changed, 41 insertions, 0 deletions
diff --git a/cli/tests/unit/webcrypto_test.ts b/cli/tests/unit/webcrypto_test.ts index a5de9fa36..57ab051d1 100644 --- a/cli/tests/unit/webcrypto_test.ts +++ b/cli/tests/unit/webcrypto_test.ts @@ -356,3 +356,27 @@ unitTest(async function subtleCryptoHmacImportExport() { const exportedKey2 = await crypto.subtle.exportKey("jwk", key2); assertEquals(exportedKey2, jwk); }); + +unitTest(async function testHkdfDeriveBits() { + const rawKey = await crypto.getRandomValues(new Uint8Array(16)); + const key = await crypto.subtle.importKey( + "raw", + rawKey, + { name: "HKDF", hash: "SHA-256" }, + false, + ["deriveBits"], + ); + const salt = await crypto.getRandomValues(new Uint8Array(16)); + const info = await crypto.getRandomValues(new Uint8Array(16)); + const result = await crypto.subtle.deriveBits( + { + name: "HKDF", + hash: "SHA-256", + salt: salt, + info: info, + }, + key, + 128, + ); + assertEquals(result.byteLength, 128 / 8); +}); diff --git a/ext/crypto/lib.deno_crypto.d.ts b/ext/crypto/lib.deno_crypto.d.ts index a62e69632..5a554015a 100644 --- a/ext/crypto/lib.deno_crypto.d.ts +++ b/ext/crypto/lib.deno_crypto.d.ts @@ -109,6 +109,18 @@ interface RsaKeyAlgorithm extends KeyAlgorithm { publicExponent: Uint8Array; } +interface HkdfParams extends Algorithm { + hash: HashAlgorithmIdentifier; + info: BufferSource; + salt: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + hash: HashAlgorithmIdentifier; + iterations: number; + salt: BufferSource; +} + /** The CryptoKey dictionary of the Web Crypto API represents a cryptographic key. */ interface CryptoKey { readonly algorithm: KeyAlgorithm; @@ -194,6 +206,11 @@ interface SubtleCrypto { key: CryptoKey, data: BufferSource, ): Promise<ArrayBuffer>; + deriveBits( + algorithm: AlgorithmIdentifier | HkdfParams | Pbkdf2Params, + baseKey: CryptoKey, + length: number, + ): Promise<ArrayBuffer>; } declare interface Crypto { |