blob: 9fbc7e00fa5f266c803219b4ddf575380c3b31bc [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="../resources/common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test encrypting using AES-CTR with an imported 128bit key");
jsTestIsAsync = true;
var extractable = false;
var plainText = asciiToUint8Array("Hello, World!Hello, World!Hello, World!Hello, World!");
var aesCtrParams1 = {
name: "aes-ctr",
counter: asciiToUint8Array("jnOw99oOZFLIEPMr"),
length: 8,
}
var aesCtrParams2 = {
name: "aes-ctr",
counter: asciiToUint8Array("jnOw99oOZFLIEPMr"),
length: 64,
}
var aesCtrParams3 = {
name: "aes-ctr",
counter: asciiToUint8Array("jnOw99oOZFLIEPMr"),
length: 65,
}
var aesCtrParams4= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4f5a464c4945504dff"),
length: 2,
}
var aesCtrParams5= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4f5a464c4945504dfe"),
length: 2,
}
var aesCtrParams6= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4f5a464c4945504dff"),
length: 8,
}
var aesCtrParams7= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4f5a464c4945504dfe"),
length: 8,
}
var aesCtrParams8= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4fffffffffffffffff"),
length: 64,
}
var aesCtrParams9= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f4ffffffffffffffffe"),
length: 64,
}
var aesCtrParams10= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f7fffffffffffffffff"),
length: 66,
}
var aesCtrParams11= {
name: "aes-ctr",
counter: hexStringToUint8Array("6a6e4f7739396f7ffffffffffffffffe"),
length: 66,
}
var aesCtrParams12= {
name: "aes-ctr",
counter: hexStringToUint8Array("ffffffffffffffffffffffffffffffff"),
length: 128,
}
var aesCtrParams13= {
name: "aes-ctr",
counter: hexStringToUint8Array("fffffffffffffffffffffffffffffffe"),
length: 128,
}
var rawKey = asciiToUint8Array("jnOw99oOZFLIEPMr");
var expectedCipherText = "a5f940e93406d4bd9b7318e653d4cb9d1af497f52fcbb659a038e711e8bd61fb4863931d25911e2e9ff30cf37ec27dd813a62830";
var expectedCipherText4 = "6a461eb3f64ef4c466597ba877a9512b5ab41b4338edc2822d1f0dfac0cec07149766e189fa426d5ea30fe541018362088db2117";
var expectedCipherText5 = "b2d2295a2fa06ef570752c7d1bc08fc64e4c5effce0da6ff6d0a5fa93a8d5b6b168c581103e691a62c5229f08082f8321b4d654b";
var expectedCipherText6 = "6a461eb3f64ef4c466597ba877a9512bf224051c88ae885c565a7ada56843f3b84ec7596df67cbfdcfbeb275768f4d7270ce7ddf";
var expectedCipherText7 = "b2d2295a2fa06ef570752c7d1bc08fc64e4c5effce0da6ff6d0a5fa93a8d5b6bbe1c464eb3a5db7857175ed016c80778d6d77ec5";
var expectedCipherText8 = "3c37c5ea017d201bf608f86b0225c0d616d0e4f0ddd7aba96d4bb4ee3b829832b5ab2c2963d1d6b32ef3db59956bc15245b101c9";
var expectedCipherText9 = "86253252027d2b6fd6c95d7849f51abc183d85a6393e7220fd5bdc6a4f01ca965ae8a7a2e6dcf88d6c0690e47bcea071e790277a";
var expectedCipherText10 = "be0615c8485e2e7adc4e547b6aea98f59095547d42f9b1471edfe464152b1294f565b32c9ed385042291bec3e4ae312c3f32080b";
var expectedCipherText11 = "48eef2dfe7c2d41d93747a2c9f5a50ad9a0c5584701d7c41d71d707a27ce92b5dcad172f79f2e2631f92c06e55672ad7a75eb87f";
var expectedCipherText12 = "1065c7107fd33a3f1e05627238d30955055274f507c82716ccfb77f609446c07b1f07b80fc989b97be49007133953ad173a11cd7";
var expectedCipherText13 = "b936426686f9d79bf53cf9bb6a810997346f875c479068041556467375f70315496a37a73cc37432cdb653fc49085444e3cb70d3";
crypto.subtle.importKey("raw", rawKey, "aes-ctr", extractable, ["encrypt"]).then(function(result) {
key = result;
debug("Length < 64");
return crypto.subtle.encrypt(aesCtrParams1, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText");
debug("Length = 64");
return crypto.subtle.encrypt(aesCtrParams2, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText");
debug("Length = 65");
return crypto.subtle.encrypt(aesCtrParams3, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText");
debug("Length = 2, overflow");
return crypto.subtle.encrypt(aesCtrParams4, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText4");
debug("Length = 2, overflow");
return crypto.subtle.encrypt(aesCtrParams5, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText5");
debug("Length = 8, overflow");
return crypto.subtle.encrypt(aesCtrParams6, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText6");
debug("Length = 8, overflow");
return crypto.subtle.encrypt(aesCtrParams7, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText7");
debug("Length = 64, overflow");
return crypto.subtle.encrypt(aesCtrParams8, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText8");
debug("Length = 64, overflow");
return crypto.subtle.encrypt(aesCtrParams9, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText9");
debug("Length = 66, overflow");
return crypto.subtle.encrypt(aesCtrParams10, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText10");
debug("Length = 66, overflow");
return crypto.subtle.encrypt(aesCtrParams11, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText11");
debug("Length = 128, overflow");
return crypto.subtle.encrypt(aesCtrParams12, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText12");
debug("Length = 128, overflow");
return crypto.subtle.encrypt(aesCtrParams13, key, plainText);
}).then(function(result) {
cipherText = result;
shouldBe("bytesToHexString(cipherText)", "expectedCipherText13");
finishJSTest();
});
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>