From de29d91816affe991d0c3e586370556c4a14b236 Mon Sep 17 00:00:00 2001 From: Rob Walch Date: Mon, 22 Jan 2024 15:04:40 -0800 Subject: [PATCH] Use WebCrypto by default and only use software as a fallback if enabled (#6015) Fixes use of `enableSoftwareAES` to match the docs and the intended behavior when added in #99 --- src/crypt/decrypter.ts | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/crypt/decrypter.ts b/src/crypt/decrypter.ts index ada612153dc..bd291a9bfd0 100644 --- a/src/crypt/decrypter.ts +++ b/src/crypt/decrypter.ts @@ -19,9 +19,10 @@ export default class Decrypter { private currentIV: ArrayBuffer | null = null; private currentResult: ArrayBuffer | null = null; private useSoftware: boolean; + private enableSoftwareAES: boolean; constructor(config: HlsConfig, { removePKCS7Padding = true } = {}) { - this.useSoftware = config.enableSoftwareAES; + this.enableSoftwareAES = config.enableSoftwareAES; this.removePKCS7Padding = removePKCS7Padding; // built in decryptor expects PKCS7 padding if (removePKCS7Padding) { @@ -36,9 +37,7 @@ export default class Decrypter { /* no-op */ } } - if (this.subtle === null) { - this.useSoftware = true; - } + this.useSoftware = this.subtle === null; } destroy() { @@ -174,14 +173,21 @@ export default class Decrypter { } private onWebCryptoError(data, key, iv): ArrayBuffer | never { - this.useSoftware = true; - this.logEnabled = true; - this.softwareDecrypt(data, key, iv); - const decryptResult = this.flush(); - if (decryptResult) { - return decryptResult.buffer; + const enableSoftwareAES = this.enableSoftwareAES; + if (enableSoftwareAES) { + this.useSoftware = true; + this.logEnabled = true; + this.softwareDecrypt(data, key, iv); + const decryptResult = this.flush(); + if (decryptResult) { + return decryptResult.buffer; + } } - throw new Error('WebCrypto and softwareDecrypt: failed to decrypt data'); + throw new Error( + 'WebCrypto' + + (enableSoftwareAES ? ' and softwareDecrypt' : '') + + ': failed to decrypt data', + ); } private getValidChunk(data: Uint8Array): Uint8Array {