blob: e2d8dc9b889e081e816c5cab28d8ac746587bda8 [file] [log] [blame]
importScripts('../../../../resources/js-test-pre.js');
description("Test generating an AES key using AES-CBC algorithm in workers.");
jsTestIsAsync = true;
const jwkKey = { kty: "oct", k: "YWJjZGVmZ2gxMjM0NTY3OA", alg: "A128CBC", use: "enc", key_ops: ['decrypt', 'encrypt', 'unwrapKey', 'wrapKey'], ext: true };
debug("Importing a key...");
crypto.subtle.importKey("jwk", jwkKey, "aes-cbc", true, ["encrypt", "decrypt", "wrapKey", "unwrapKey"]).then(function(key) {
const openRequest = indexedDB.open("crypto_subtle");
openRequest.onupgradeneeded = function(event) {
event.target.result.createObjectStore("aes-indexeddb");
};
openRequest.onerror = function(event) {
testFailed("Could not open database: " + event.target.error.name);
finishJSTest();
};
openRequest.onsuccess = function(event) {
db = event.target.result;
storeKey();
};
function storeKey() {
const objectStore = db.transaction("aes-indexeddb", "readwrite").objectStore("aes-indexeddb");
const req = objectStore.put(key, "myKey");
req.onerror = function(event) {
testFailed("Could not put a key into database: " + event.target.error.name);
finishJSTest();
};
req.onsuccess = function() { readKey(); }
}
function readKey() {
const objectStore = db.transaction("aes-indexeddb").objectStore("aes-indexeddb");
const req = objectStore.get("myKey");
req.onerror = function(event) {
testFailed("Could not get a key from database: " + event.target.error.name);
finishJSTest();
};
req.onsuccess = function(event) {
retrievedKey = event.target.result;
shouldBe("retrievedKey.type", "'secret'");
shouldBe("retrievedKey.extractable", "true");
shouldBe("retrievedKey.algorithm.name", "'AES-CBC'");
shouldBe("retrievedKey.algorithm.length", "128");
shouldBe("retrievedKey.usages", "['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']");
finishJSTest();
}
}
});