<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="../resources/common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>

<script>
description("Tests generateKey() with bad ECDSA parameters.");
jsTestIsAsync = true;

extractable = true;
keyUsages = ['sign', 'verify'];

Promise.resolve(null).then(function() {
    debug("\ngenerateKey() without namedCurve...");
    return crypto.subtle.generateKey({name: 'ECDSA'}, extractable , keyUsages);
}).then(failAndFinishJSTest, function(result) {
    logError(result);

    debug("\ngenerateKey() with namedCurve that is an integer...");
    return crypto.subtle.generateKey({name: 'ECDSA', namedCurve: -1}, extractable , keyUsages);
}).then(failAndFinishJSTest, function(result) {
    logError(result);

    debug("\ngenerateKey() with namedCurve 'p-256' that contains lower case character 'p'...");
    return crypto.subtle.generateKey({name: 'ECDSA', namedCurve: 'p-256'}, extractable , keyUsages);
}).then(failAndFinishJSTest, function(result) {
    logError(result);

    debug("\ngenerateKey() with namedCurve 'P-256aa' that contains trailing characters 'aa'...");
    return crypto.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256aa'}, extractable , keyUsages);
}).then(failAndFinishJSTest, function(result) {
    logError(result);
}).then(finishJSTest, failAndFinishJSTest);

</script>

</body>
</html>
