Index: LayoutTests/crypto/exportKey-deserializedKey.html |
diff --git a/LayoutTests/crypto/exportKey-deserializedKey.html b/LayoutTests/crypto/exportKey-deserializedKey.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2be3b6e58ed7b56ffec53c4e828fc4355dbf2e13 |
--- /dev/null |
+++ b/LayoutTests/crypto/exportKey-deserializedKey.html |
@@ -0,0 +1,103 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../resources/js-test.js"></script> |
+<script src="resources/common.js"></script> |
+</head> |
+<body> |
+<script> |
+ description("Test storing a Raw key in IndexedDB, and retrieving it which has empty key usage."); |
+ |
+ jsTestIsAsync = true; |
+ function setDeserializeKey(algorithm) { |
+ var jwkKey = { |
+ "kty": "oct", |
+ "k": "jnOw99oOZFLIEPMrgJB55WL46tJSLGt7jnOw99oOZFI" |
+ }; |
+ |
+ var keyDesc = { |
+ format: "jwk", |
+ keyData: jwkKey, |
+ algorithm: {name: algorithm}, |
+ extractable: true, |
+ usages: [] |
+ }; |
+ return internals.deserializeBuffer(internals.serializeObject(keyDesc)); |
eroman
2014/12/05 17:16:00
This isn't what I had in mind.
This test is seria
|
+ } |
+ |
+ var aesKey = setDeserializeKey("AES-CBC"); |
+ var hmacKey = setDeserializeKey("HMAC"); |
+ |
+ var openRequest = indexedDB.open("crypto_subtle"); |
+ openRequest.onupgradeneeded = function(event) { |
+ var objectStore = event.target.result.createObjectStore("key-indexeddb"); |
+ } |
+ openRequest.onerror = function(event) { |
+ testFailed("Could not open database: " + event.target.error.name); |
+ finishJSTest(); |
+ } |
+ openRequest.onsuccess = function(event) { |
+ db = event.target.result; |
+ storeKey(aesKey, "myaeskey"); |
+ } |
+ |
+ function storeKey(key, keyname) { |
+ var tx = db.transaction("key-indexeddb", "readwrite"); |
+ var objectStore = tx.objectStore("key-indexeddb"); |
+ var req = objectStore.put(key, keyname); |
+ req.onerror = function(event) { |
+ testFailed("Could not put a key into database: " + event.target.error.name); |
+ finishJSTest(); |
+ } |
+ req.onsuccess = function(event) { |
+ debug("Put key into database successfully"); |
+ } |
+ tx.oncomplete = function() { |
+ keyname == "myaeskey" ? storeKey(hmacKey, "myhmackey") : readKey(); |
+ } |
+ } |
+ |
+ function readKey() { |
+ var objectStore = db.transaction("key-indexeddb").objectStore("key-indexeddb"); |
+ var aesreq = objectStore.get("myaeskey"); |
+ var hmacreq = objectStore.get("myhmackey"); |
+ var counter = 0; |
+ |
+ aesreq.onerror = function(event) { |
+ testFailed("Could not get a key from database: " + event.target.error.name); |
+ finishJSTest(); |
+ } |
+ aesreq.onsuccess = function(event) { |
+ counter++; |
+ debug("Read AES Key"); |
+ window.retrievedKey = event.target.result; |
+ shouldBeEqualToString("retrievedKey.format", "jwk"); |
+ shouldBeEqualToString("retrievedKey.keyData.k", "jnOw99oOZFLIEPMrgJB55WL46tJSLGt7jnOw99oOZFI"); |
+ shouldBe("retrievedKey.extractable", "true"); |
+ shouldBeEqualToString("retrievedKey.algorithm.name", "AES-CBC"); |
+ shouldBe("retrievedKey.usages", "[]"); |
+ if (counter == 2) |
+ finishJSTest(); |
+ |
+ } |
+ hmacreq.onerror = function(event) { |
+ testFailed("Could not get a key from database: " + event.target.error.name); |
+ finishJSTest(); |
+ } |
+ hmacreq.onsuccess = function(event) { |
+ counter++; |
+ debug("Read HMAC Key"); |
+ window.retrievedKey = event.target.result; |
+ shouldBeEqualToString("retrievedKey.format", "jwk"); |
+ shouldBeEqualToString("retrievedKey.keyData.k", "jnOw99oOZFLIEPMrgJB55WL46tJSLGt7jnOw99oOZFI"); |
+ shouldBe("retrievedKey.extractable", "true"); |
+ shouldBeEqualToString("retrievedKey.algorithm.name", "HMAC"); |
+ shouldBe("retrievedKey.usages", "[]"); |
+ if (counter == 2) |
+ finishJSTest(); |
+ } |
+ } |
+</script> |
+</body> |
+</html> |
+ |