| // META: title=WebCryptoAPI: BufferSource arguments and members reject shared buffers |
| |
| // None of the BufferSource arguments of SubtleCrypto, or of the dictionaries it |
| // takes, are [AllowShared], so a SharedArrayBuffer, or a view onto one, has to |
| // throw a TypeError. |
| // |
| // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`. |
| const sharedBuffer = new WebAssembly.Memory({ shared: true, initial: 1, maximum: 1 }).buffer; |
| |
| function generateAesGcmKey() { |
| return crypto.subtle.generateKey({ name: "AES-GCM", length: 128 }, false, ["encrypt"]); |
| } |
| |
| for (const [kind, buffer] of [["SharedArrayBuffer", sharedBuffer], |
| ["Uint8Array(SharedArrayBuffer)", new Uint8Array(sharedBuffer)]]) { |
| promise_test(t => { |
| return promise_rejects_js(t, TypeError, crypto.subtle.digest("SHA-256", buffer)); |
| }, `digest() data is a ${kind}`); |
| |
| promise_test(async t => { |
| const key = await generateAesGcmKey(); |
| await promise_rejects_js(t, TypeError, |
| crypto.subtle.encrypt({ name: "AES-GCM", iv: new Uint8Array(12) }, key, buffer)); |
| }, `encrypt() data is a ${kind}`); |
| |
| promise_test(async t => { |
| const key = await generateAesGcmKey(); |
| await promise_rejects_js(t, TypeError, |
| crypto.subtle.encrypt({ name: "AES-GCM", iv: buffer }, key, new Uint8Array(1))); |
| }, `encrypt() AesGcmParams.iv is a ${kind}`); |
| |
| promise_test(async t => { |
| const key = await generateAesGcmKey(); |
| await promise_rejects_js(t, TypeError, |
| crypto.subtle.encrypt({ name: "AES-GCM", iv: new Uint8Array(12), additionalData: buffer }, |
| key, new Uint8Array(1))); |
| }, `encrypt() AesGcmParams.additionalData is a ${kind}`); |
| } |