<!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 bad inputs to ECDH's deriveBits()");
jsTestIsAsync = true;
var keyPairs = {
ecdh: {},
ecdsa: {}
};
// Generate some EC keys for ECDSA and ECDH.
function createTestKeys() {
return crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, true, ["deriveBits"]).then(function(result) {
keyPairs.ecdh.p256_1 = result;
return crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, true, ["deriveBits"]);
}).then(function(result) {
keyPairs.ecdh.p256_2 = result;
return crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-384"}, true, ["deriveBits"]);
}).then(function(result) {
keyPairs.ecdh.p384_1 = result;
return crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, true, ["sign"]);
}).then(function(result) {
keyPairs.ecdsa.p256_1 = result;
});
}
createTestKeys().then(function(result) {
debug("\nderiveBits() without algorithm name or public key...");
return crypto.subtle.deriveBits({}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() without public key...");
return crypto.subtle.deriveBits({name: 'ecdh'}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with algorithm that is null...");
return crypto.subtle.deriveBits(null, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with algorithm that is -1...");
return crypto.subtle.deriveBits(-1, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with public key that is null...");
return crypto.subtle.deriveBits({name: 'ecdh', public: null}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with public key that is -1...");
return crypto.subtle.deriveBits({name: 'ecdh', public: -1}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with public key that is a string...");
return crypto.subtle.deriveBits({name: 'ecdh', public: "foo"}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with wrong curve public key...");
return crypto.subtle.deriveBits({name: 'ecdh', public: keyPairs.ecdh.p384_1.publicKey}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with a private key as the 'public' parameter");
return crypto.subtle.deriveBits({name: 'ecdh', public: keyPairs.ecdh.p256_2.privateKey}, keyPairs.ecdh.p256_1.privateKey, 256);
}).then(failAndFinishJSTest, function(result) {
logError(result);
debug("\nderiveBits() with public key that is for ECDSA...");
return crypto.subtle.deriveBits({name: 'ecdh', public: keyPairs.ecdsa.p256_1.publicKey}, keyPairs.ecdh.p256_1.privateKey, {test: 3});
}).then(failAndFinishJSTest, function(result) {
logError(result);
}).then(finishJSTest, failAndFinishJSTest);
</script>
</body>
</html>