<!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>
