<!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 aesCtrParams14 = {
    name: "aes-ctr",
    counter: asciiToUint8Array("jnOw99oOZFLIEPMr"),
    length: 33,
}
var aesCtrParams15 = {
    name: "aes-ctr",
    counter: asciiToUint8Array("jnOw99oOZFLIEPMr"),
    length: 63,
}

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");

    debug("Length = 33");
    return crypto.subtle.encrypt(aesCtrParams14, key, plainText);
}).then(function(result) {
    cipherText = result;

    shouldBe("bytesToHexString(cipherText)", "expectedCipherText");

    debug("Length = 63");
    return crypto.subtle.encrypt(aesCtrParams15, key, plainText);
}).then(function(result) {
    cipherText = result;

    shouldBe("bytesToHexString(cipherText)", "expectedCipherText");

    finishJSTest();
});

</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
