GeezerVison is showing github.com — test,crypto: update WebCryptoAPI WPT · nodejs/node@aebf676
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file 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 number | Diff line number | Diff line change |
|---|
@@ -32,7 +32,7 @@ Last update: | 32 | 32 | - user-timing: https://github.com/web-platform-tests/wpt/tree/5ae85bf826/user-timing | 33 | 33 | - wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/cde25e7e3c/wasm/jsapi | 34 | 34 | - wasm/webapi: https://github.com/web-platform-tests/wpt/tree/fd1b23eeaa/wasm/webapi | 35 | | -- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/75db68b054/WebCryptoAPI | | 35 | +- WebCryptoAPI: https://github.com/web-platform-tests/wpt/tree/5f0f4ac1af/WebCryptoAPI | 36 | 36 | - webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/a370aad338/webidl/ecmascript-binding/es-exceptions | 37 | 37 | - webmessaging/broadcastchannel: https://github.com/web-platform-tests/wpt/tree/6495c91853/webmessaging/broadcastchannel | 38 | 38 | - webstorage: https://github.com/web-platform-tests/wpt/tree/9dafa89214/webstorage | |
Collapse file Copy file name to clipboard +9Lines changed: 9 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +// META: title=WebCryptoAPI: deriveKey() Using HKDF and PBKDF2 from an ECDH key | | 2 | +// META: script=derive_key_and_encrypt.js | | 3 | +// META: script=../util/helpers.js | | 4 | + | | 5 | +// Test imported from WebKit's source, defined to check the impact of the | | 6 | +// 'Get Key Length' behavior of HKDF and PBKDF2, which should return 'null' | | 7 | +// in both cases, in the 'deriveKey' operation. | | 8 | +// https://bugs.webkit.org/show_bug.cgi?id=282096 | | 9 | +promise_test(define_tests, 'setup - define tests'); |
Collapse file Copy file name to clipboard +49Lines changed: 49 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +let iv = new Uint8Array(Array(12).keys()); | | 2 | +let salt = new Uint8Array(Array(10).keys()); | | 3 | +let plaintext = new Uint8Array(Array(100).keys()); | | 4 | + | | 5 | +function define_tests() { | | 6 | + importKeys().then((keys) => { | | 7 | + // Make sure that ecdh produces the same shared secret and the same encryption results using a key derived from that secret. | | 8 | + keys.forEach(keyData => { | | 9 | + promise_test(async() => { | | 10 | + let hkdfKey = await crypto.subtle.deriveKey({name: "ECDH", public: keyData.publicKey }, keyData.privateKey, { name: "HKDF", hash: "" , salt: new Uint8Array(), info: new Uint8Array() }, false, ["deriveKey"]); | | 11 | + let aesKey = await crypto.subtle.deriveKey({name: "HKDF", hash: "SHA-256", salt: salt, info: plaintext}, hkdfKey, {name:"AES-GCM", length: 256}, true, ["encrypt", "decrypt"]); | | 12 | + let result = await crypto.subtle.encrypt({ name: "AES-GCM", iv: iv }, aesKey, plaintext); | | 13 | + assert_equals(bytesToHexString(result), "a6280c522670eaf82f6564afbeb20a5b3f2d4e13c5596f6df3dcff8c34cb2118d2770fb24d83cfac5079c323118485bb01170292ee41eb82b07208f4840478fea3771d8922785c476ba06c2a0b933fc1661431419530a916ad4468545d1af5004a1149fea241c2ff1582ee58a8b7d79935de5def"); | | 14 | + }, "HKDF derivation of a ECDH key " + keyData.test); | | 15 | + promise_test(async() => { | | 16 | + let pkdf2Key = await crypto.subtle.deriveKey({name: "ECDH", public: keyData.publicKey }, keyData.privateKey, { name: "PBKDF2", hash: "" , salt: new Uint8Array(), iterations: 32 }, false, ["deriveKey"]); | | 17 | + let aesKey = await crypto.subtle.deriveKey({name: "PBKDF2", hash: "SHA-256", salt: salt, iterations: 32 }, pkdf2Key, { name:"AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]); | | 18 | + let result = await crypto.subtle.encrypt({ name: "AES-GCM", iv: iv }, aesKey, plaintext); | | 19 | + assert_equals(bytesToHexString(result), "c6201dfbb6fa92c1c246f6ce52f8f1c037f087efde41bac7f6485a2a8207623d2d3825b9cbe8ef864a90378667ed25544ce44cd2904bd96c19f0eeb611d626185165a8afb4e52f95700d7880f83939a42712fc4e377f198c01a61b397b76c3a4b93d932c321084bbef33332169dea09458b27df3"); | | 20 | + }, "PBKDF2 derivation of a ECDH key " + keyData.test); | | 21 | + }); | | 22 | + }, (e) => { | | 23 | + assert_unreached("Setup failed: " + e.message); | | 24 | + }); | | 25 | + | | 26 | + return Promise.resolve("define_tests"); | | 27 | +} | | 28 | + | | 29 | +async function importKeys() { | | 30 | + // "ECDSA" with a 'P-256' curve | | 31 | + let keyData = [ | | 32 | + hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b0201010420fe77a808a7109ba5ceb93ebebad2c84a714d864ad29b62d6537e1969035c0079a144034200042684c752eef1c927a80c74e8b02ce459f848b5977f37fd878b36dae632be9a6cadd56126e404a4f75c535e5769d95b49fb1106f784f3d231b776d1f4d57927ce"), | | 33 | + hexStringToUint8Array("042684c752eef1c927a80c74e8b02ce459f848b5977f37fd878b36dae632be9a6cadd56126e404a4f75c535e5769d95b49fb1106f784f3d231b776d1f4d57927ce"), | | 34 | + hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b020101042067521ccd1f85516118182bca3394c273bab9ce5cd6265105559e325e01f2df1ca144034200043042d8698882f2b59de972390d3fc9277e2e677a6c560148017c9475218fda1b38f76f7645fbcaf3d03e6259d080204fbafb04731b6ad53cb25c3d35d95b7c73"), | | 35 | + hexStringToUint8Array("043042d8698882f2b59de972390d3fc9277e2e677a6c560148017c9475218fda1b38f76f7645fbcaf3d03e6259d080204fbafb04731b6ad53cb25c3d35d95b7c73"), | | 36 | + ]; | | 37 | + let extractable = true; | | 38 | + var allKeys = await Promise.all([ | | 39 | + crypto.subtle.importKey("pkcs8", keyData[0], {name: "ECDH", namedCurve: "P-256"}, extractable, ["deriveKey", 'deriveBits']), | | 40 | + crypto.subtle.importKey("raw", keyData[1], {name: "ECDH", namedCurve: "P-256"}, extractable, []), | | 41 | + crypto.subtle.importKey("pkcs8", keyData[2], {name: "ECDH", namedCurve: "P-256"}, extractable, ["deriveKey", 'deriveBits']), | | 42 | + crypto.subtle.importKey("raw", keyData[3], {name: "ECDH", namedCurve: "P-256"}, extractable, []), | | 43 | + ]); | | 44 | + // Test cases defined combining public and private keys of each key-pair. | | 45 | + return [ | | 46 | + { test: 1, publicKey: allKeys[3], privateKey: allKeys[0] }, | | 47 | + { test: 2, publicKey: allKeys[1], privateKey: allKeys[2] } | | 48 | + ]; | | 49 | +} |
Collapse file Copy file name to clipboardExpand all lines: test/fixtures/wpt/WebCryptoAPI/util/helpers.js +38Lines changed: 38 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -259,3 +259,41 @@ function allNameVariants(name, slowTest) { | 259 | 259 | if (slowTest) return [mixedCaseName]; | 260 | 260 | return unique([upCaseName, lowCaseName, mixedCaseName]); | 261 | 261 | } | | 262 | + | | 263 | +// Builds a hex string representation for an array-like input. | | 264 | +// "bytes" can be an Array of bytes, an ArrayBuffer, or any TypedArray. | | 265 | +// The output looks like this: | | 266 | +// ab034c99 | | 267 | +function bytesToHexString(bytes) | | 268 | +{ | | 269 | + if (!bytes) | | 270 | + return null; | | 271 | + | | 272 | + bytes = new Uint8Array(bytes); | | 273 | + var hexBytes = []; | | 274 | + | | 275 | + for (var i = 0; i < bytes.length; ++i) { | | 276 | + var byteString = bytes[i].toString(16); | | 277 | + if (byteString.length < 2) | | 278 | + byteString = "0" + byteString; | | 279 | + hexBytes.push(byteString); | | 280 | + } | | 281 | + | | 282 | + return hexBytes.join(""); | | 283 | +} | | 284 | + | | 285 | +function hexStringToUint8Array(hexString) | | 286 | +{ | | 287 | + if (hexString.length % 2 != 0) | | 288 | + throw "Invalid hexString"; | | 289 | + var arrayBuffer = new Uint8Array(hexString.length / 2); | | 290 | + | | 291 | + for (var i = 0; i < hexString.length; i += 2) { | | 292 | + var byteValue = parseInt(hexString.substr(i, 2), 16); | | 293 | + if (byteValue == NaN) | | 294 | + throw "Invalid hexString"; | | 295 | + arrayBuffer[i/2] = byteValue; | | 296 | + } | | 297 | + | | 298 | + return arrayBuffer; | | 299 | +} |
Collapse file Copy file name to clipboardExpand all lines: test/fixtures/wpt/versions.json +1-1Lines changed: 1 addition & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 88 | 88 | "path": "wasm/webapi" | 89 | 89 | }, | 90 | 90 | "WebCryptoAPI": { | 91 | | - "commit": "75db68b05454e7f3a81e063373defd094c176a16", | | 91 | + "commit": "5f0f4ac1af4848480406621fac99163c8ba0e242", | 92 | 92 | "path": "WebCryptoAPI" | 93 | 93 | }, | 94 | 94 | "webidl/ecmascript-binding/es-exceptions": { | |
|