| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -31,7 +31,7 @@ Last update: | |||
| 31 | 31 | - user-timing: https://github.com/web-platform-tests/wpt/tree/df24fb604e/user-timing | |
| 32 | 32 | - wasm/jsapi: https://github.com/web-platform-tests/wpt/tree/d8dbe6990b/wasm/jsapi | |
| 33 | 33 | - 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 | ||
| 35 | 35 | - webidl/ecmascript-binding/es-exceptions: https://github.com/web-platform-tests/wpt/tree/a370aad338/webidl/ecmascript-binding/es-exceptions | |
| 36 | 36 | - webmessaging/broadcastchannel: https://github.com/web-platform-tests/wpt/tree/e97fac4791/webmessaging/broadcastchannel | |
| 37 | 37 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,4 +1,5 @@ | |||
| 1 | 1 | // META: title=WebCryptoAPI: deriveBits() Using ECDH with CFRG Elliptic Curves | |
| 2 | + // META: script=cfrg_curves_bits_fixtures.js | ||
| 2 | 3 | // META: script=cfrg_curves_bits.js | |
| 3 | 4 | ||
| 4 | 5 | // Define subtests from a `promise_test` to ensure the harness does not | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,44 +3,6 @@ function define_tests() { | |||
| 3 | 3 | // May want to test prefixed implementations. | |
| 4 | 4 | var subtle = self.crypto.subtle; | |
| 5 | 5 | ||
| 6 | - var pkcs8 = { | ||
| 7 | - "X25519": new Uint8Array([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": new Uint8Array([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 | - var spki = { | ||
| 12 | - "X25519": new Uint8Array([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": new Uint8Array([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 | - var sizes = { | ||
| 17 | - "X25519": 32, | ||
| 18 | - "X448": 56 | ||
| 19 | - }; | ||
| 20 | - | ||
| 21 | - var derivations = { | ||
| 22 | - "X25519": new Uint8Array([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": new Uint8Array([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 | - var kSmallOrderPoint = { | ||
| 27 | - "X25519": [ | ||
| 28 | - { order: "0", vector : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 : new Uint8Array([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 | - | ||
| 44 | 6 | // Verify the derive functions perform checks against the all-zero value results, | |
| 45 | 7 | // ensuring small-order points are rejected. | |
| 46 | 8 | // https://www.rfc-editor.org/rfc/rfc7748#section-6.1 | |
@@ -50,16 +12,16 @@ function define_tests() { | |||
| 50 | 12 | kSmallOrderPoint[algorithmName].forEach(function(test) { | |
| 51 | 13 | promise_test(async() => { | |
| 52 | 14 | let derived; | |
| 53 | - let privateKey = await subtle.importKey("pkcs8", pkcs8[algorithmName], | ||
| 15 | + let privateKey; | ||
| 16 | + let publicKey; | ||
| 17 | + try { | ||
| 18 | + privateKey = await subtle.importKey("pkcs8", pkcs8[algorithmName], | ||
| 54 | 19 | {name: algorithmName}, | |
| 55 | 20 | false, ["deriveBits", "deriveKey"]); | |
| 56 | - let publicKey = await subtle.importKey("spki", test.vector, | ||
| 21 | + publicKey = await subtle.importKey("spki", test.vector, | ||
| 57 | 22 | {name: algorithmName}, | |
| 58 | 23 | false, []) | |
| 59 | - try { | ||
| 60 | - derived = await subtle.deriveKey({name: algorithmName, public: publicKey}, privateKey, | ||
| 61 | - {name: "HMAC", hash: "SHA-256", length: 256}, true, | ||
| 62 | - ["sign", "verify"]); | ||
| 24 | + derived = await subtle.deriveBits({name: algorithmName, public: publicKey}, privateKey, 8 * sizes[algorithmName]); | ||
| 63 | 25 | } catch (err) { | |
| 64 | 26 | assert_false(privateKey === undefined, "Private key should be valid."); | |
| 65 | 27 | assert_false(publicKey === undefined, "Public key should be valid."); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,4 +1,5 @@ | |||
| 1 | 1 | // META: title=WebCryptoAPI: deriveKey() Using ECDH with CFRG Elliptic Curves | |
| 2 | + // META: script=cfrg_curves_bits_fixtures.js | ||
| 2 | 3 | // META: script=cfrg_curves_keys.js | |
| 3 | 4 | ||
| 4 | 5 | // Define subtests from a `promise_test` to ensure the harness does not | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3,25 +3,36 @@ function define_tests() { | |||
| 3 | 3 | // May want to test prefixed implementations. | |
| 4 | 4 | var subtle = self.crypto.subtle; | |
| 5 | 5 | ||
| 6 | - var pkcs8 = { | ||
| 7 | - "X25519": new Uint8Array([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": new Uint8Array([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 | - var spki = { | ||
| 12 | - "X25519": new Uint8Array([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": new Uint8Array([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 | - var sizes = { | ||
| 17 | - "X25519": 32, | ||
| 18 | - "X448": 56 | ||
| 19 | - }; | ||
| 20 | - | ||
| 21 | - var derivations = { | ||
| 22 | - "X25519": new Uint8Array([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": new Uint8Array([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 | + let derived; | ||
| 15 | + let privateKey; | ||
| 16 | + let publicKey; | ||
| 17 | + try { | ||
| 18 | + privateKey = await subtle.importKey("pkcs8", pkcs8[algorithmName], | ||
| 19 | + {name: algorithmName}, | ||
| 20 | + false, ["deriveBits", "deriveKey"]); | ||
| 21 | + publicKey = await subtle.importKey("spki", test.vector, | ||
| 22 | + {name: algorithmName}, | ||
| 23 | + false, []) | ||
| 24 | + derived = await subtle.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 | + }); | ||
| 25 | 36 | ||
| 26 | 37 | // Ensure the keys generated by each algorithm are valid for key derivation. | |
| 27 | 38 | Object.keys(sizes).forEach(function(algorithmName) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -84,7 +84,7 @@ | |||
| 84 | 84 | "path": "wasm/webapi" | |
| 85 | 85 | }, | |
| 86 | 86 | "WebCryptoAPI": { | |
| 87 | - "commit": "1406b5c0d07b5e8dd08e328c451e42c23f3b96c8", | ||
| 87 | + "commit": "188993d46b95c9c0414ba2cef8751f5e19d3d498", | ||
| 88 | 88 | "path": "WebCryptoAPI" | |
| 89 | 89 | }, | |
| 90 | 90 | "webidl/ecmascript-binding/es-exceptions": { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments