Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit fc9a60e

Browse filesBrowse files
nodejs-github-botaduh95
authored andcommitted
test: update WPT for WebCryptoAPI to 6a1c545d77
PR-URL: #62187 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 4c12ab8 commit fc9a60e
Copy full SHA for fc9a60e

15 files changed

+1,193-81Lines changed: 1193 additions & 81 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎test/fixtures/wpt/README.md‎

Copy file name to clipboardExpand all lines: test/fixtures/wpt/README.md
+1-1Lines changed: 1 addition & 1 deletion
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Last update:
3434
- wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/cde25e7e3c/wasm/jsapi
3535
- wasm/webapi: https://github.com/web-platform-tests/wpt/tree/fd1b23eeaa/wasm/webapi
3636
- web-locks: https://github.com/web-platform-tests/wpt/tree/10a122a6bc/web-locks
37-
- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/c9e955840a/WebCryptoAPI
37+
- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/6a1c545d77/WebCryptoAPI
3838
- webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/2f96fa1996/webidl/ecmascript-binding/es-exceptions
3939
- webmessaging/broadcastchannel: https://github.com/web-platform-tests/wpt/tree/6495c91853/webmessaging/broadcastchannel
4040
- webstorage: https://github.com/web-platform-tests/wpt/tree/1d2c5fb36a/webstorage
Collapse file

‎test/fixtures/wpt/WebCryptoAPI/digest/cshake.tentative.https.any.js‎

Copy file name to clipboardExpand all lines: test/fixtures/wpt/WebCryptoAPI/digest/cshake.tentative.https.any.js
+38-3Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,17 +195,52 @@ Object.keys(digestedData).forEach(function (alg) {
195195

196196
promise_test(function (test) {
197197
var buffer = new Uint8Array(sourceData[size]);
198-
return crypto.subtle
198+
var promise = crypto.subtle
199199
.digest({ name: alg, length: length }, buffer)
200200
.then(function (result) {
201-
// Alter the buffer after calling digest
202-
buffer[0] = ~buffer[0];
203201
assert_true(
204202
equalBuffers(result, digestedData[alg][length][size]),
205203
'digest matches expected'
206204
);
207205
});
206+
// Alter the buffer after calling digest
207+
buffer[0] = ~buffer[0];
208+
return promise;
208209
}, alg + ' with ' + length + ' bit output and ' + size + ' source data and altered buffer after call');
210+
211+
promise_test(function (test) {
212+
var buffer = new Uint8Array(sourceData[size]);
213+
return crypto.subtle
214+
.digest({
215+
get name() {
216+
// Transfer the buffer while calling digest
217+
buffer.buffer.transfer();
218+
return alg;
219+
},
220+
length
221+
}, buffer)
222+
.then(function (result) {
223+
assert_true(
224+
equalBuffers(result, digestedData[alg][length].empty),
225+
'digest on transferred buffer should match result for empty buffer'
226+
);
227+
});
228+
}, alg + ' with ' + length + ' bit output and ' + size + ' source data and transferred buffer during call');
229+
230+
promise_test(function (test) {
231+
var buffer = new Uint8Array(sourceData[size]);
232+
var promise = crypto.subtle
233+
.digest({ name: alg, length: length }, buffer)
234+
.then(function (result) {
235+
assert_true(
236+
equalBuffers(result, digestedData[alg][length][size]),
237+
'digest matches expected'
238+
);
239+
});
240+
// Transfer the buffer after calling digest
241+
buffer.buffer.transfer();
242+
return promise;
243+
}, alg + ' with ' + length + ' bit output and ' + size + ' source data and transferred buffer after call');
209244
}
210245
});
211246
});
Collapse file

‎test/fixtures/wpt/WebCryptoAPI/digest/digest.https.any.js‎

Copy file name to clipboardExpand all lines: test/fixtures/wpt/WebCryptoAPI/digest/digest.https.any.js
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,30 @@
113113
copiedBuffer[0] = 255 - copiedBuffer[0];
114114
return promise;
115115
}, upCase + " with " + size + " source data and altered buffer after call");
116+
117+
promise_test(function(test) {
118+
var copiedBuffer = copyBuffer(sourceData[size]);
119+
copiedBuffer.buffer.transfer();
120+
return subtle.digest({name: upCase}, copiedBuffer)
121+
.then(function(result) {
122+
assert_true(equalBuffers(result, digestedData[alg].empty), "digest() on transferred buffer should yield result for empty buffer for " + alg + ":" + size);
123+
}, function(err) {
124+
assert_unreached("digest() threw an error for transferred buffer for " + alg + ":" + size + ": " + err.message);
125+
});
126+
}, upCase + " with " + size + " source data and transferred buffer during call");
127+
128+
promise_test(function(test) {
129+
var copiedBuffer = copyBuffer(sourceData[size]);
130+
var promise = subtle.digest({name: upCase}, copiedBuffer)
131+
.then(function(result) {
132+
assert_true(equalBuffers(result, digestedData[alg][size]), "digest() yielded expected result for " + alg + ":" + size);
133+
}, function(err) {
134+
assert_unreached("digest() threw an error for " + alg + ":" + size + " - " + err.message);
135+
});
136+
137+
copiedBuffer.buffer.transfer();
138+
return promise;
139+
}, upCase + " with " + size + " source data and transferred buffer after call");
116140
}
117141
});
118142
});
Collapse file

‎test/fixtures/wpt/WebCryptoAPI/digest/sha3.tentative.https.any.js‎

Copy file name to clipboardExpand all lines: test/fixtures/wpt/WebCryptoAPI/digest/sha3.tentative.https.any.js
+35-3Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,47 @@ Object.keys(sourceData).forEach(function (size) {
132132

133133
promise_test(function (test) {
134134
var buffer = new Uint8Array(sourceData[size]);
135-
return crypto.subtle.digest(alg, buffer).then(function (result) {
136-
// Alter the buffer after calling digest
137-
buffer[0] = ~buffer[0];
135+
var promise = crypto.subtle.digest(alg, buffer).then(function (result) {
138136
assert_true(
139137
equalBuffers(result, digestedData[alg][size]),
140138
'digest matches expected'
141139
);
142140
});
141+
// Alter the buffer after calling digest
142+
buffer[0] = ~buffer[0];
143+
return promise;
143144
}, alg + ' with ' + size + ' source data and altered buffer after call');
145+
146+
promise_test(function (test) {
147+
var buffer = new Uint8Array(sourceData[size]);
148+
return crypto.subtle
149+
.digest({
150+
get name() {
151+
// Transfer the buffer while calling digest
152+
buffer.buffer.transfer();
153+
return alg;
154+
}
155+
}, buffer)
156+
.then(function (result) {
157+
assert_true(
158+
equalBuffers(result, digestedData[alg].empty),
159+
'digest on transferred buffer should match result for empty buffer'
160+
);
161+
});
162+
}, alg + ' with ' + size + ' source data and transferred buffer during call');
163+
164+
promise_test(function (test) {
165+
var buffer = new Uint8Array(sourceData[size]);
166+
var promise = crypto.subtle.digest(alg, buffer).then(function (result) {
167+
assert_true(
168+
equalBuffers(result, digestedData[alg][size]),
169+
'digest matches expected'
170+
);
171+
});
172+
// Transfer the buffer after calling digest
173+
buffer.buffer.transfer();
174+
return promise;
175+
}, alg + ' with ' + size + ' source data and transferred buffer after call');
144176
}
145177
});
146178
});
Collapse file

‎test/fixtures/wpt/WebCryptoAPI/encrypt_decrypt/aes.js‎

Copy file name to clipboardExpand all lines: test/fixtures/wpt/WebCryptoAPI/encrypt_decrypt/aes.js
+126Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,67 @@ function run_test() {
9393
all_promises.push(promise);
9494
});
9595

96+
// Check for encryption of an empty value if the buffer is transferred while calling encrypt.
97+
passingVectors.forEach(function(vector) {
98+
var plaintext = copyBuffer(vector.plaintext);
99+
var promise = importVectorKey(vector, ["encrypt", "decrypt"])
100+
.then(function(vector) {
101+
promise_test(function(test) {
102+
var operation = subtle.encrypt({
103+
...vector.algorithm,
104+
get name() {
105+
plaintext.buffer.transfer();
106+
return vector.algorithm.name;
107+
}
108+
}, vector.key, plaintext)
109+
.then(function(result) {
110+
var expectedLength =
111+
["AES-GCM", "AES-OCB"].includes(vector.algorithm.name) ? vector.algorithm.tagLength / 8 :
112+
vector.algorithm.name === "AES-CBC" ? 16 :
113+
0;
114+
assert_equals(result.byteLength, expectedLength, "Transferred plaintext yields an empty ciphertext");
115+
}, function(err) {
116+
assert_unreached("encrypt error for test " + vector.name + ": " + err.message);
117+
});
118+
return operation;
119+
}, vector.name + " with transferred plaintext during call");
120+
}, function(err) {
121+
// We need a failed test if the importVectorKey operation fails, so
122+
// we know we never tested encryption
123+
promise_test(function(test) {
124+
assert_unreached("importKey failed for " + vector.name);
125+
}, "importKey step: " + vector.name + " with transferred plaintext during call");
126+
});
127+
128+
all_promises.push(promise);
129+
});
130+
131+
// Check for successful encryption even if the buffer is transferred after calling encrypt.
132+
passingVectors.forEach(function(vector) {
133+
var plaintext = copyBuffer(vector.plaintext);
134+
var promise = importVectorKey(vector, ["encrypt", "decrypt"])
135+
.then(function(vector) {
136+
promise_test(function(test) {
137+
var operation = subtle.encrypt(vector.algorithm, vector.key, plaintext)
138+
.then(function(result) {
139+
assert_true(equalBuffers(result, vector.result), "Should return expected result");
140+
}, function(err) {
141+
assert_unreached("encrypt error for test " + vector.name + ": " + err.message);
142+
});
143+
plaintext.buffer.transfer();
144+
return operation;
145+
}, vector.name + " with transferred plaintext after call");
146+
}, function(err) {
147+
// We need a failed test if the importVectorKey operation fails, so
148+
// we know we never tested encryption
149+
promise_test(function(test) {
150+
assert_unreached("importKey failed for " + vector.name);
151+
}, "importKey step: " + vector.name + " with transferred plaintext after call");
152+
});
153+
154+
all_promises.push(promise);
155+
});
156+
96157
// Check for successful decryption.
97158
passingVectors.forEach(function(vector) {
98159
var promise = importVectorKey(vector, ["encrypt", "decrypt"])
@@ -174,6 +235,71 @@ function run_test() {
174235
all_promises.push(promise);
175236
});
176237

238+
// Check for decryption when ciphertext is transferred while calling decrypt.
239+
passingVectors.forEach(function(vector) {
240+
var ciphertext = copyBuffer(vector.result);
241+
var promise = importVectorKey(vector, ["encrypt", "decrypt"])
242+
.then(function(vector) {
243+
promise_test(function(test) {
244+
var operation = subtle.decrypt({
245+
...vector.algorithm,
246+
get name() {
247+
ciphertext.buffer.transfer();
248+
return vector.algorithm.name;
249+
}
250+
}, vector.key, ciphertext)
251+
.then(function(result) {
252+
if (vector.algorithm.name === "AES-CTR") {
253+
assert_equals(result.byteLength, 0, "Transferred ciphertext yields empty plaintext");
254+
} else {
255+
assert_unreached("decrypt should not have succeeded for " + vector.name);
256+
}
257+
}, function(err) {
258+
if (vector.algorithm.name === "AES-CTR") {
259+
assert_unreached("decrypt error for test " + vector.name + ": " + err.message);
260+
} else {
261+
assert_equals(err.name, "OperationError", "Should throw an OperationError instead of " + err.message);
262+
}
263+
});
264+
return operation;
265+
}, vector.name + " decryption with transferred ciphertext during call");
266+
}, function(err) {
267+
// We need a failed test if the importVectorKey operation fails, so
268+
// we know we never tested encryption
269+
promise_test(function(test) {
270+
assert_unreached("importKey failed for " + vector.name);
271+
}, "importKey step for decryption: " + vector.name + " with transferred ciphertext during call");
272+
});
273+
274+
all_promises.push(promise);
275+
});
276+
277+
// Check for successful decryption even if ciphertext is transferred after calling encrypt.
278+
passingVectors.forEach(function(vector) {
279+
var ciphertext = copyBuffer(vector.result);
280+
var promise = importVectorKey(vector, ["encrypt", "decrypt"])
281+
.then(function(vector) {
282+
promise_test(function(test) {
283+
var operation = subtle.decrypt(vector.algorithm, vector.key, ciphertext)
284+
.then(function(result) {
285+
assert_true(equalBuffers(result, vector.plaintext), "Should return expected result");
286+
}, function(err) {
287+
assert_unreached("decrypt error for test " + vector.name + ": " + err.message);
288+
});
289+
ciphertext.buffer.transfer();
290+
return operation;
291+
}, vector.name + " decryption with transferred ciphertext after call");
292+
}, function(err) {
293+
// We need a failed test if the importVectorKey operation fails, so
294+
// we know we never tested encryption
295+
promise_test(function(test) {
296+
assert_unreached("importKey failed for " + vector.name);
297+
}, "importKey step for decryption: " + vector.name + " with transferred ciphertext after call");
298+
});
299+
300+
all_promises.push(promise);
301+
});
302+
177303
// Everything that succeeded should fail if no "encrypt" usage.
178304
passingVectors.forEach(function(vector) {
179305
// Don't want to overwrite key being used for success tests!

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.