current commit
260922.1 · test: update WPT for WebCryptoAPI to a6a0a0292a
// 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}`);
}