Skip to content

Commit 7ef169b

Browse files
panvadanielleadams
authored andcommitted
test,crypto: update WebCryptoAPI WPT
PR-URL: #47222 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 37638e4 commit 7ef169b

7 files changed

Lines changed: 77 additions & 65 deletions

File tree

‎test/fixtures/wpt/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Last update:
3131
- user-timing: https://github.com/web-platform-tests/wpt/tree/df24fb604e/user-timing
3232
- wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/d8dbe6990b/wasm/jsapi
3333
- wasm/webapi: https://github.com/web-platform-tests/wpt/tree/fd1b23eeaa/wasm/webapi
34-
- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/1406b5c0d0/WebCryptoAPI
34+
- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/188993d46b/WebCryptoAPI
3535
- webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/a370aad338/webidl/ecmascript-binding/es-exceptions
3636

3737
[Web Platform Tests]: https://github.com/web-platform-tests/wpt

‎test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.https.any.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// META: title=WebCryptoAPI: deriveBits() Using ECDH with CFRG Elliptic Curves
2+
// META: script=cfrg_curves_bits_fixtures.js
23
// META: script=cfrg_curves_bits.js
34

45
// Define subtests from a `promise_test` to ensure the harness does not

‎test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js‎

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,6 @@ function define_tests() {
33
// May want to test prefixed implementations.
44
varsubtle=self.crypto.subtle;
55

6-
varpkcs8={
7-
"X25519": newUint8Array([48,46,2,1,0,48,5,6,3,43,101,110,4,34,4,32,200,131,142,118,208,87,223,183,216,201,90,105,225,56,22,10,221,99,115,253,113,164,210,118,187,86,227,168,27,100,255,97]),
8-
"X448": newUint8Array([48,70,2,1,0,48,5,6,3,43,101,111,4,58,4,56,88,199,210,154,62,181,25,178,157,0,207,177,145,187,100,252,109,138,66,216,241,113,118,39,43,137,242,39,45,24,25,41,92,101,37,192,130,150,113,176,82,239,7,39,83,15,24,142,49,208,204,83,191,38,146,158])
9-
};
10-
11-
varspki={
12-
"X25519": newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,28,242,177,230,2,46,197,55,55,30,215,245,62,84,250,17,84,216,62,152,235,100,234,81,250,229,179,48,124,254,151,6]),
13-
"X448": newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,182,4,161,209,165,205,29,148,38,213,97,239,99,10,158,177,108,190,105,213,185,202,97,94,220,83,99,62,251,82,234,49,230,230,160,161,219,172,198,231,108,188,230,72,45,126,75,163,213,93,158,128,39,101,206,111])
14-
};
15-
16-
varsizes={
17-
"X25519": 32,
18-
"X448": 56
19-
};
20-
21-
varderivations={
22-
"X25519": newUint8Array([39,104,64,157,250,185,158,194,59,140,137,185,63,245,136,2,149,247,97,118,8,143,137,228,61,254,190,126,161,149,0,8]),
23-
"X448": newUint8Array([240,246,197,241,127,148,244,41,30,171,113,120,134,109,55,236,137,6,221,108,81,65,67,220,133,190,124,242,141,239,243,155,114,110,15,109,207,129,14,181,148,220,169,123,72,130,189,68,196,62,167,220,103,244,154,78])
24-
};
25-
26-
varkSmallOrderPoint={
27-
"X25519": [
28-
{order: "0",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},
29-
{order: "1",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},
30-
{order: "8",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,224,235,122,124,59,65,184,174,22,86,227,250,241,159,196,106,218,9,141,235,156,50,177,253,134,98,5,22,95,73,184,0])},
31-
{order: "p-1 (order 2)",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127])},
32-
{order: "p (=0, order 4)",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,237,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127])},
33-
{order: "p+1 (=1, order 1)",vector : newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127])},
34-
],
35-
"X448": [
36-
{order: "0",vector : newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},
37-
{order: "1",vector : newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},
38-
{order: "p-1 (order 2)",vector : newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255])},
39-
{order: "p (=0, order 4)",vector : newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255])},
40-
{order: "p+1 (=1, order 1)",vector : newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255])},
41-
]
42-
};
43-
446
// Verify the derive functions perform checks against the all-zero value results,
457
// ensuring small-order points are rejected.
468
// https://www.rfc-editor.org/rfc/rfc7748#section-6.1
@@ -50,16 +12,16 @@ function define_tests() {
5012
kSmallOrderPoint[algorithmName].forEach(function(test){
5113
promise_test(async()=>{
5214
letderived;
53-
letprivateKey=awaitsubtle.importKey("pkcs8",pkcs8[algorithmName],
15+
letprivateKey;
16+
letpublicKey;
17+
try{
18+
privateKey=awaitsubtle.importKey("pkcs8",pkcs8[algorithmName],
5419
{name: algorithmName},
5520
false,["deriveBits","deriveKey"]);
56-
letpublicKey=awaitsubtle.importKey("spki",test.vector,
21+
publicKey=awaitsubtle.importKey("spki",test.vector,
5722
{name: algorithmName},
5823
false,[])
59-
try{
60-
derived=awaitsubtle.deriveKey({name: algorithmName,public: publicKey},privateKey,
61-
{name: "HMAC",hash: "SHA-256",length: 256},true,
62-
["sign","verify"]);
24+
derived=awaitsubtle.deriveBits({name: algorithmName,public: publicKey},privateKey,8*sizes[algorithmName]);
6325
}catch(err){
6426
assert_false(privateKey===undefined,"Private key should be valid.");
6527
assert_false(publicKey===undefined,"Public key should be valid.");

‎test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_fixtures.js‎

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.https.any.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// META: title=WebCryptoAPI: deriveKey() Using ECDH with CFRG Elliptic Curves
2+
// META: script=cfrg_curves_bits_fixtures.js
23
// META: script=cfrg_curves_keys.js
34

45
// Define subtests from a `promise_test` to ensure the harness does not

‎test/fixtures/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_keys.js‎

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,36 @@ function define_tests() {
33
// May want to test prefixed implementations.
44
varsubtle=self.crypto.subtle;
55

6-
varpkcs8={
7-
"X25519": newUint8Array([48,46,2,1,0,48,5,6,3,43,101,110,4,34,4,32,200,131,142,118,208,87,223,183,216,201,90,105,225,56,22,10,221,99,115,253,113,164,210,118,187,86,227,168,27,100,255,97]),
8-
"X448": newUint8Array([48,70,2,1,0,48,5,6,3,43,101,111,4,58,4,56,88,199,210,154,62,181,25,178,157,0,207,177,145,187,100,252,109,138,66,216,241,113,118,39,43,137,242,39,45,24,25,41,92,101,37,192,130,150,113,176,82,239,7,39,83,15,24,142,49,208,204,83,191,38,146,158])
9-
};
10-
11-
varspki={
12-
"X25519": newUint8Array([48,42,48,5,6,3,43,101,110,3,33,0,28,242,177,230,2,46,197,55,55,30,215,245,62,84,250,17,84,216,62,152,235,100,234,81,250,229,179,48,124,254,151,6]),
13-
"X448": newUint8Array([48,66,48,5,6,3,43,101,111,3,57,0,182,4,161,209,165,205,29,148,38,213,97,239,99,10,158,177,108,190,105,213,185,202,97,94,220,83,99,62,251,82,234,49,230,230,160,161,219,172,198,231,108,188,230,72,45,126,75,163,213,93,158,128,39,101,206,111])
14-
};
15-
16-
varsizes={
17-
"X25519": 32,
18-
"X448": 56
19-
};
20-
21-
varderivations={
22-
"X25519": newUint8Array([39,104,64,157,250,185,158,194,59,140,137,185,63,245,136,2,149,247,97,118,8,143,137,228,61,254,190,126,161,149,0,8]),
23-
"X448": newUint8Array([240,246,197,241,127,148,244,41,30,171,113,120,134,109,55,236,137,6,221,108,81,65,67,220,133,190,124,242,141,239,243,155,114,110,15,109,207,129,14,181,148,220,169,123,72,130,189,68,196,62,167,220,103,244,154,78])
24-
};
6+
// Verify the derive functions perform checks against the all-zero value results,
7+
// ensuring small-order points are rejected.
8+
// https://www.rfc-editor.org/rfc/rfc7748#section-6.1
9+
// TODO: The spec states that the check must be done on use, but there is discussion about doing it on import.
10+
// https://github.com/WICG/webcrypto-secure-curves/pull/13
11+
Object.keys(kSmallOrderPoint).forEach(function(algorithmName){
12+
kSmallOrderPoint[algorithmName].forEach(function(test){
13+
promise_test(async()=>{
14+
letderived;
15+
letprivateKey;
16+
letpublicKey;
17+
try{
18+
privateKey=awaitsubtle.importKey("pkcs8",pkcs8[algorithmName],
19+
{name: algorithmName},
20+
false,["deriveBits","deriveKey"]);
21+
publicKey=awaitsubtle.importKey("spki",test.vector,
22+
{name: algorithmName},
23+
false,[])
24+
derived=awaitsubtle.deriveKey({name: algorithmName,public: publicKey},privateKey,
25+
{name: "HMAC",hash: "SHA-256",length: 256},true,
26+
["sign","verify"]);
27+
}catch(err){
28+
assert_false(privateKey===undefined,"Private key should be valid.");
29+
assert_false(publicKey===undefined,"Public key should be valid.");
30+
assert_equals(err.name,"OperationError","Should throw correct error, not "+err.name+": "+err.message+".");
31+
}
32+
assert_equals(derived,undefined,"Operation succeeded, but should not have.");
33+
},algorithmName+" deriveBits checks for all-zero value result with a key of order "+test.order);
34+
});
35+
});
2536

2637
// Ensure the keys generated by each algorithm are valid for key derivation.
2738
Object.keys(sizes).forEach(function(algorithmName){

‎test/fixtures/wpt/versions.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
"path": "wasm/webapi"
8585
},
8686
"WebCryptoAPI": {
87-
"commit": "1406b5c0d07b5e8dd08e328c451e42c23f3b96c8",
87+
"commit": "188993d46b95c9c0414ba2cef8751f5e19d3d498",
8888
"path": "WebCryptoAPI"
8989
},
9090
"webidl/ecmascript-binding/es-exceptions": {

0 commit comments

Comments
 (0)