blob: 45f4b4dbd50bdce42089f4565b2a36e2144ae9c8 [file] [edit]
// 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}`);
}