Skip to content

Commit 341947e

Browse files
panvaaduh95
authored andcommitted
crypto: reject unintended raw key format string input
Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #62974 Backport-PR-URL: #63173 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 28a7874 commit 341947e

2 files changed

Lines changed: 45 additions & 1 deletion

File tree

‎lib/internal/crypto/keys.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ function getKeyObjectHandleFromJwk(key, ctx) {
765765

766766

767767
functiongetKeyObjectHandleFromRaw(options,data,format){
768-
if(!isStringOrBuffer(data)){
768+
if(!isArrayBufferView(data)&&!isAnyArrayBuffer(data)){
769769
thrownewERR_INVALID_ARG_TYPE(
770770
'key.key',
771771
['ArrayBuffer','Buffer','TypedArray','DataView'],

‎test/parallel/test-crypto-key-objects-raw.js‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,50 @@ const { hasOpenSSL } = require('../common/crypto');
3232
}
3333
}
3434

35+
// Raw key imports do not support strings.
36+
{
37+
constpubKeyObj=crypto.createPublicKey(
38+
fixtures.readKey('ed25519_public.pem','ascii'));
39+
constprivKeyObj=crypto.createPrivateKey(
40+
fixtures.readKey('ed25519_private.pem','ascii'));
41+
42+
constrawPub=pubKeyObj.export({format: 'raw-public'});
43+
constrawPriv=privKeyObj.export({format: 'raw-private'});
44+
45+
for(constencodingof['hex','base64','utf8','latin1','ascii']){
46+
assert.throws(()=>crypto.createPublicKey({
47+
key: rawPub.toString(encoding),
48+
encoding,
49+
format: 'raw-public',
50+
asymmetricKeyType: 'ed25519',
51+
}),{code: 'ERR_INVALID_ARG_TYPE'});
52+
53+
assert.throws(()=>crypto.createPrivateKey({
54+
key: rawPriv.toString(encoding),
55+
encoding,
56+
format: 'raw-private',
57+
asymmetricKeyType: 'ed25519',
58+
}),{code: 'ERR_INVALID_ARG_TYPE'});
59+
}
60+
}
61+
62+
// Raw seed imports do not support strings.
63+
if(hasOpenSSL(3,5)){
64+
constprivKeyObj=crypto.createPrivateKey(
65+
fixtures.readKey('ml_dsa_44_private.pem','ascii'));
66+
67+
constrawSeed=privKeyObj.export({format: 'raw-seed'});
68+
69+
for(constencodingof['hex','base64']){
70+
assert.throws(()=>crypto.createPrivateKey({
71+
key: rawSeed.toString(encoding),
72+
encoding,
73+
format: 'raw-seed',
74+
asymmetricKeyType: 'ml-dsa-44',
75+
}),{code: 'ERR_INVALID_ARG_TYPE'});
76+
}
77+
}
78+
3579
// Key types that don't support raw-* formats
3680
{
3781
for(const[type,pub,priv]of[

0 commit comments

Comments
 (0)