4 <script src=
"../../../resources/js-test.js"></script>
5 <script src=
"../resources/common.js"></script>
8 <p id=
"description"></p>
9 <div id=
"console"></div>
12 description("Tests deriveKey() with various bad parameters for PBKDF2");
22 derived_key_full_length
: "0c60c80f961f0e71f3a9b524af6012062fe037a6"
25 function importPbkdf2Key() {
28 debug("Importing the password...");
30 var algorithm
= {name
: 'PBKDF2'};
32 var password
= asciiToUint8Array(testCase
.password
);
33 var usages
= ['deriveBits', 'deriveKey'];
34 var extractable
= false;
36 // (1) Import the password
37 return crypto
.subtle
.importKey('raw', password
, algorithm
, extractable
, usages
).then(function(result
) {
47 salt
: asciiToUint8Array(testCase
.salt
),
48 iterations
: testCase
.c
,
49 hash
: {name
: testCase
.hash
}
51 importPbkdf2Key().then(function(result
) {
54 debug("\nDeriving an AES key with no length...");
55 var derivedAlgorithm
= {name
: 'aes-cbc'};
56 var extractable
= true;
57 var usages
= ['encrypt'];
59 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
60 }).then(failAndFinishJSTest
, function(result
) {
63 debug("\nDeriving an AES key with bad length...");
64 var derivedAlgorithm
= {name
: 'aes-cbc', length
: 120};
65 var extractable
= true;
66 var usages
= ['encrypt'];
68 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
69 }).then(failAndFinishJSTest
, function(result
) {
72 debug("\nDeriving an AES key with unsupported length...");
73 var derivedAlgorithm
= {name
: 'aes-cbc', length
: 192};
74 var extractable
= true;
75 var usages
= ['encrypt'];
77 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
78 }).then(failAndFinishJSTest
, function(result
) {
81 debug("\nDeriving an AES-CBC key with unsupported usage (sign)...");
82 var derivedAlgorithm
= {name
: 'aes-cbc', length
: 128};
83 var extractable
= true;
84 var usages
= ['sign']; // Not valid for AES-CBC.
86 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
87 }).then(failAndFinishJSTest
, function(result
) {
90 debug("\nDeriving a zero-length HMAC key...");
91 var derivedAlgorithm
= {name
: 'HMAC', hash
: "sha-1", length
: 0};
92 var extractable
= true;
93 var usages
= ['sign'];
95 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
96 }).then(failAndFinishJSTest
, function(result
) {
99 debug("\nDeriving an ECDH key...");
100 var derivedAlgorithm
= {name
: 'ECDH', namedCurve
: "P-256"};
101 var extractable
= true;
102 var usages
= ['deriveBits'];
104 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
105 }).then(failAndFinishJSTest
, function(result
) {
108 debug("\nDeriving an RSA-OAEP key...");
109 var derivedAlgorithm
= {name
: 'RSA-OAEP', hash
: "sha-1"};
110 var extractable
= true;
111 var usages
= ['encrypt'];
113 return crypto
.subtle
.deriveKey(params
, pbkdf2Key
, derivedAlgorithm
, extractable
, usages
);
114 }).then(failAndFinishJSTest
, function(result
) {
118 }).then(finishJSTest
, failAndFinishJSTest
);