blob: 4899a28ffd68d07448899dffe3d398c20a031210 [file] [log] [blame]
if (self.importScripts) {
importScripts('common.js');
}
function runCloneSymmetricTests(algorithmName, extractable, keyUsages, keyData, hashName, keyHasLength)
{
var importData = hexStringToUint8Array(keyData);
var importAlgorithm = { name: algorithmName };
if (hashName)
importAlgorithm.hash = { name: hashName };
var expectingHash = (algorithmName.toLowerCase() === "hmac");
var results = {};
return crypto.subtle.importKey('raw', importData, importAlgorithm, extractable, keyUsages).then(function(importedKey) {
results.importedKey = importedKey;
importedKey.extraProperty = 'hi';
return cloneKey(importedKey);
}).then(function(clonedKey) {
results.clonedKey = clonedKey;
if (extractable)
return crypto.subtle.exportKey('raw', clonedKey);
return null;
}).then(function(clonedKeyData) {
importedKey = results.importedKey;
clonedKey = results.clonedKey;
shouldEvaluateAs("importedKey.extraProperty", "hi");
shouldEvaluateAs("importedKey.type", "secret");
shouldEvaluateAs("importedKey.extractable", extractable);
shouldEvaluateAs("importedKey.algorithm.name", algorithmName);
if (keyHasLength)
shouldEvaluateAs("importedKey.algorithm.length", importData.length * 8);
if (expectingHash)
shouldEvaluateAs("importedKey.algorithm.hash.name", hashName);
shouldEvaluateAs("importedKey.usages.join(',')", keyUsages.join(","));
shouldNotBe("importedKey", "clonedKey");
shouldBeUndefined("clonedKey.extraProperty");
shouldEvaluateAs("clonedKey.type", "secret");
shouldEvaluateAs("clonedKey.extractable", extractable);
shouldEvaluateAs("clonedKey.algorithm.name", algorithmName);
if (keyHasLength)
shouldEvaluateAs("clonedKey.algorithm.length", importData.length * 8);
if (expectingHash)
shouldEvaluateAs("clonedKey.algorithm.hash.name", hashName);
shouldEvaluateAs("clonedKey.usages.join(',')", keyUsages.join(","));
logSerializedKey(importedKey);
if (extractable)
bytesShouldMatchHexString("Cloned key exported data", keyData, clonedKeyData);
debug("");
});
}
function testCloneSymmetricKeys(algorithmName, possibleHashAlgorithms, possibleExtractable, possibleKeyUsages, possibleKeyData, keyHasLength)
{
var lastPromise = Promise.resolve(null);
possibleHashAlgorithms.forEach(function(hashName) {
possibleExtractable.forEach(function(extractable) {
possibleKeyUsages.forEach(function(keyUsages) {
possibleKeyData.forEach(function(keyData) {
lastPromise = lastPromise.then(runCloneSymmetricTests.bind(null, algorithmName, extractable, keyUsages, keyData, hashName, keyHasLength));
});
});
});
});
return lastPromise;
}