Skip to content

Commit 824ec11

Browse files
panvaaduh95
authored andcommitted
crypto: refactor keyObject.toCryptoKey() and SubtleCrypto.getPublicKey()
Move KeyObject.prototype.toCryptoKey() onto the base KeyObject class and dispatch from the cached native key type. Both secret and asymmetric conversions now pass a KeyObjectHandle through the Web Crypto import paths. Expose KeyObjectHandle.prototype.getKeyType() so asymmetric importers can validate public/private usages without wrapping the handle back into a KeyObject. Secret importers likewise consume KeyObjectHandle directly. Use the shared asymmetric conversion helper to derive public CryptoKeys for SubtleCrypto.getPublicKey(), avoiding the temporary PrivateKeyObject/createPublicKey round trip while keeping usage validation in the import path. Update getPublicKey and KeyObject.toCryptoKey tests to be driven from the Web Crypto supported-algorithm registry so new algorithms require either coverage or an explicit skip. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #63622 Backport-PR-URL: #64629 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 73aba92 commit 824ec11

14 files changed

Lines changed: 630 additions & 392 deletions

‎lib/internal/crypto/aes.js‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ const {
4040
InternalCryptoKey,
4141
getCryptoKeyAlgorithm,
4242
getCryptoKeyHandle,
43-
getKeyObjectHandle,
44-
getKeyObjectSymmetricKeySize,
4543
}=require('internal/crypto/keys');
4644

4745
const{
@@ -223,10 +221,10 @@ function aesImportKey(
223221
lethandle;
224222
letlength;
225223
switch(format){
226-
case'KeyObject': {
227-
length=getKeyObjectSymmetricKeySize(keyData)*8;
224+
case'KeyObjectHandle': {
225+
length=keyData.getSymmetricKeySize()*8;
228226
validateKeyLength(length);
229-
handle=getKeyObjectHandle(keyData);
227+
handle=keyData;
230228
break;
231229
}
232230
case'raw-secret':

‎lib/internal/crypto/cfrg.js‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const {
1313
kCryptoJobWebCrypto,
1414
kKeyFormatDER,
1515
kKeyFormatRawPublic,
16+
kKeyTypePublic,
1617
kSignJobModeSign,
1718
kSignJobModeVerify,
1819
kWebCryptoKeyFormatPKCS8,
@@ -39,8 +40,6 @@ const {
3940
const{
4041
getCryptoKeyHandle,
4142
getCryptoKeyType,
42-
getKeyObjectHandle,
43-
getKeyObjectType,
4443
InternalCryptoKey,
4544
}=require('internal/crypto/keys');
4645

@@ -178,12 +177,11 @@ function cfrgImportKey(
178177
lethandle;
179178
constusagesSet=newSafeSet(usages);
180179
switch(format){
181-
case'KeyObject': {
180+
case'KeyObjectHandle':
182181
verifyAcceptableCfrgKeyUse(
183-
name,getKeyObjectType(keyData)==='public',usagesSet);
184-
handle=getKeyObjectHandle(keyData);
182+
name,keyData.getKeyType()===kKeyTypePublic,usagesSet);
183+
handle=keyData;
185184
break;
186-
}
187185
case'spki': {
188186
verifyAcceptableCfrgKeyUse(name,true,usagesSet);
189187
handle=importDerKey(keyData,true);

‎lib/internal/crypto/chacha20_poly1305.js‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ const {
2323
const{
2424
InternalCryptoKey,
2525
getCryptoKeyHandle,
26-
getKeyObjectHandle,
2726
}=require('internal/crypto/keys');
2827

2928
const{
@@ -90,8 +89,8 @@ function c20pImportKey(
9089

9190
lethandle;
9291
switch(format){
93-
case'KeyObject': {
94-
handle=getKeyObjectHandle(keyData);
92+
case'KeyObjectHandle': {
93+
handle=keyData;
9594
break;
9695
}
9796
case'raw-secret': {

‎lib/internal/crypto/ec.js‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ const {
4646
getCryptoKeyAlgorithm,
4747
getCryptoKeyHandle,
4848
getCryptoKeyType,
49-
getKeyObjectHandle,
50-
getKeyObjectType,
5149
}=require('internal/crypto/keys');
5250

5351
const{
@@ -185,12 +183,11 @@ function ecImportKey(
185183
lethandle;
186184
constusagesSet=newSafeSet(usages);
187185
switch(format){
188-
case'KeyObject': {
186+
case'KeyObjectHandle':
189187
verifyAcceptableEcKeyUse(
190-
name,getKeyObjectType(keyData)==='public',usagesSet);
191-
handle=getKeyObjectHandle(keyData);
188+
name,keyData.getKeyType()===kKeyTypePublic,usagesSet);
189+
handle=keyData;
192190
break;
193-
}
194191
case'spki': {
195192
verifyAcceptableEcKeyUse(name,true,usagesSet);
196193
handle=importDerKey(keyData,true);

0 commit comments

Comments
 (0)