/*---
includes: [compatFs.js, compatBuffer.js, compatWebcrypto.js, runTsuite.js, webCryptoUtils.js]
flags: [async]
---*/

async function test(params) {
    let digest = await crypto.subtle.digest(params.name, params.data);
    digest = Buffer.from(digest).toString("hex");

    if (params.expected != digest) {
        throw Error(`${params.name} digest failed expected: "${params.expected}" vs "${digest}"`);
    }

    return 'SUCCESS';
}

function p(args) {
    let params = Object.assign({}, args);
    params.data = Buffer.from(params.data, "hex");
    return params;
}

let digest_tsuite = {
    name: "SHA digest",
    skip: () => (!has_buffer() || !has_webcrypto()),
    T: test,
    prepare_args: p,

    tests: [
        { name: "XXX", data: "",
          exception: "TypeError: unknown hash name: \"XXX\"" },
        { name: "SHA-256", data: "",
          expected: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" },
        { name: "SHA-256", data: "aabbccdd",
          expected: "8d70d691c822d55638b6e7fd54cd94170c87d19eb1f628b757506ede5688d297" },
        { name: "SHA-256", data: "aabbccdd".repeat(4096),
          expected: "25077ac2e5ba760f015ef34b93bc2b4682b6b48a94d65e21aaf2c8a3a62f6368" },
        { name: "SHA-384", data: "",
          expected: "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b" },
        { name: "SHA-384", data: "aabbccdd",
          expected: "f9616ef3495efbae2f6af1a754620f3034487e9c60f3a9ef8138b5ed55cdd8d18ad9565653a5d68f678bd34cfa6f4490" },
        { name: "SHA-384", data: "aabbccdd".repeat(4096),
          expected: "50502d6e89bc34ecc826e0d56ccba0e010eff7b2b532e3bd627f4c828f6c741bf518fc834559360ccf7770f1b4d655d8" },
        { name: "SHA-512", data: "",
          expected: "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" },
        { name: "SHA-512", data: "aabbccdd",
          expected: "48e218b30d4ea16305096fe35e84002a0d262eb3853131309423492228980c60238f9eed238285036f22e37c4662e40c80a461000a7aa9a03fb3cb6e4223e83b" },
        { name: "SHA-512", data: "aabbccdd".repeat(4096),
          expected: "9fcd0bd297646e207a2d655feb4ed4473e07ff24560a1e180a5eb2a67824f68affd9c7b5a8f747b9c39201f5f86a0085bb636c6fc34c216d9c10b4d728be096a" },
        { name: "SHA-1", data: "",
          expected: "da39a3ee5e6b4b0d3255bfef95601890afd80709" },
        { name: "SHA-1", data: "aabbccdd",
          expected: "a7b7e9592daa0896db0517bf8ad53e56b1246923" },
        { name: "SHA-1", data: "aabbccdd".repeat(4096),
          expected: "cdea58919606ea9ae078f7595b192b84446f2189" },
]};

run([digest_tsuite])
.then($DONE, $DONE);
