| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 1558986 commit adbaf7a
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -839,14 +839,8 @@ function parseJwk(data) { | |||
| 839 | 839 | return key; | |
| 840 | 840 | } | |
| 841 | 841 | ||
| 842 | - function aliasKeyFormat(format) { | ||
| 843 | - switch (format) { | ||
| 844 | - case 'raw-public': | ||
| 845 | - case 'raw-secret': | ||
| 846 | - return 'raw'; | ||
| 847 | - default: | ||
| 848 | - return format; | ||
| 849 | - } | ||
| 842 | + function aliasKeyFormat(format, alias) { | ||
| 843 | + return format === alias ? 'raw' : format; | ||
| 850 | 844 | } | |
| 851 | 845 | ||
| 852 | 846 | function importKeySync(format, keyData, algorithm, extractable, usages) { | |
@@ -857,7 +851,6 @@ function importKeySync(format, keyData, algorithm, extractable, usages) { | |||
| 857 | 851 | case 'RSA-PSS': | |
| 858 | 852 | // Fall through | |
| 859 | 853 | case 'RSA-OAEP': | |
| 860 | - format = aliasKeyFormat(format); | ||
| 861 | 854 | result = require('internal/crypto/rsa') | |
| 862 | 855 | .rsaImportKey( | |
| 863 | 856 | format, | |
@@ -869,7 +862,7 @@ function importKeySync(format, keyData, algorithm, extractable, usages) { | |||
| 869 | 862 | case 'ECDSA': | |
| 870 | 863 | // Fall through | |
| 871 | 864 | case 'ECDH': | |
| 872 | - format = aliasKeyFormat(format); | ||
| 865 | + format = aliasKeyFormat(format, 'raw-public'); | ||
| 873 | 866 | result = require('internal/crypto/ec') | |
| 874 | 867 | .ecImportKey( | |
| 875 | 868 | format, | |
@@ -885,7 +878,7 @@ function importKeySync(format, keyData, algorithm, extractable, usages) { | |||
| 885 | 878 | case 'X25519': | |
| 886 | 879 | // Fall through | |
| 887 | 880 | case 'X448': | |
| 888 | - format = aliasKeyFormat(format); | ||
| 881 | + format = aliasKeyFormat(format, 'raw-public'); | ||
| 889 | 882 | result = require('internal/crypto/cfrg') | |
| 890 | 883 | .cfrgImportKey( | |
| 891 | 884 | format, | |
@@ -936,7 +929,7 @@ function importKeySync(format, keyData, algorithm, extractable, usages) { | |||
| 936 | 929 | case 'HKDF': | |
| 937 | 930 | // Fall through | |
| 938 | 931 | case 'PBKDF2': | |
| 939 | - format = aliasKeyFormat(format); | ||
| 932 | + format = aliasKeyFormat(format, 'raw-secret'); | ||
| 940 | 933 | result = importGenericSecretKey( | |
| 941 | 934 | algorithm, | |
| 942 | 935 | format, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,72 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + const common = require('../common'); | ||
| 4 | + | ||
| 5 | + if (!common.hasCrypto) | ||
| 6 | + common.skip('missing crypto'); | ||
| 7 | + | ||
| 8 | + const assert = require('assert'); | ||
| 9 | + const { subtle } = globalThis.crypto; | ||
| 10 | + | ||
| 11 | + function getAlgorithmName(algorithm) { | ||
| 12 | + return typeof algorithm === 'string' ? algorithm : algorithm.name; | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + function assertImportNotSupported(format, keyData, algorithm, extractable, usages) { | ||
| 16 | + return assert.rejects( | ||
| 17 | + subtle.importKey(format, keyData, algorithm, extractable, usages), | ||
| 18 | + { | ||
| 19 | + name: 'NotSupportedError', | ||
| 20 | + message: `Unable to import ${getAlgorithmName(algorithm)} using ${format} format`, | ||
| 21 | + }); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + async function assertSecretKeyDoesNotAcceptRawPublic(algorithm) { | ||
| 25 | + const keyData = new Uint8Array(32); | ||
| 26 | + await assertImportNotSupported( | ||
| 27 | + 'raw-public', | ||
| 28 | + keyData, | ||
| 29 | + algorithm, | ||
| 30 | + false, | ||
| 31 | + ['deriveBits']); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + async function assertPublicKeyDoesNotAcceptRawSecret( | ||
| 35 | + algorithm, | ||
| 36 | + generateUsages, | ||
| 37 | + importUsages, | ||
| 38 | + ) { | ||
| 39 | + const { publicKey } = await subtle.generateKey( | ||
| 40 | + algorithm, | ||
| 41 | + true, | ||
| 42 | + generateUsages); | ||
| 43 | + const keyData = await subtle.exportKey('raw', publicKey); | ||
| 44 | + | ||
| 45 | + await assertImportNotSupported( | ||
| 46 | + 'raw-secret', | ||
| 47 | + keyData, | ||
| 48 | + algorithm, | ||
| 49 | + true, | ||
| 50 | + importUsages); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + Promise.all([ | ||
| 54 | + assertSecretKeyDoesNotAcceptRawPublic('HKDF'), | ||
| 55 | + assertSecretKeyDoesNotAcceptRawPublic('PBKDF2'), | ||
| 56 | + assertPublicKeyDoesNotAcceptRawSecret( | ||
| 57 | + { name: 'ECDSA', namedCurve: 'P-256' }, | ||
| 58 | + ['sign', 'verify'], | ||
| 59 | + ['verify']), | ||
| 60 | + assertPublicKeyDoesNotAcceptRawSecret( | ||
| 61 | + { name: 'ECDH', namedCurve: 'P-256' }, | ||
| 62 | + ['deriveBits'], | ||
| 63 | + []), | ||
| 64 | + assertPublicKeyDoesNotAcceptRawSecret( | ||
| 65 | + 'Ed25519', | ||
| 66 | + ['sign', 'verify'], | ||
| 67 | + ['verify']), | ||
| 68 | + assertPublicKeyDoesNotAcceptRawSecret( | ||
| 69 | + 'X25519', | ||
| 70 | + ['deriveBits'], | ||
| 71 | + []), | ||
| 72 | + ]).then(common.mustCall()); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments