Skip to content

Commit e5017a5

Browse files
panvaRafaelGSS
authored andcommitted
crypto: update CryptoKey symbol properties
PR-URL: #50897 Reviewed-By: Antoine du Hamel <[email protected]>
1 parent 3f4fd6e commit e5017a5

File tree

1 file changed

+65
-19
lines changed

1 file changed

+65
-19
lines changed

‎lib/internal/crypto/keys.js‎

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -703,32 +703,81 @@ ObjectDefineProperties(CryptoKey.prototype,{
703703
},
704704
});
705705

706+
/**
707+
* @param{InternalCryptoKey} key
708+
* @param{KeyObject} keyObject
709+
* @param{object} algorithm
710+
* @param{boolean} extractable
711+
* @param{Set<string>} keyUsages
712+
*/
713+
functiondefineCryptoKeyProperties(
714+
key,
715+
keyObject,
716+
algorithm,
717+
extractable,
718+
keyUsages,
719+
){
720+
// Using symbol properties here currently instead of private
721+
// properties because (for now) the performance penalty of
722+
// private fields is still too high.
723+
ObjectDefineProperties(key,{
724+
[kKeyObject]: {
725+
__proto__: null,
726+
value: keyObject,
727+
enumerable: false,
728+
configurable: false,
729+
writable: false,
730+
},
731+
[kAlgorithm]: {
732+
__proto__: null,
733+
value: algorithm,
734+
enumerable: false,
735+
configurable: false,
736+
writable: false,
737+
},
738+
[kExtractable]: {
739+
__proto__: null,
740+
value: extractable,
741+
enumerable: false,
742+
configurable: false,
743+
writable: false,
744+
},
745+
[kKeyUsages]: {
746+
__proto__: null,
747+
value: keyUsages,
748+
enumerable: false,
749+
configurable: false,
750+
writable: false,
751+
},
752+
});
753+
}
754+
706755
// All internal code must use new InternalCryptoKey to create
707756
// CryptoKey instances. The CryptoKey class is exposed to end
708757
// user code but is not permitted to be constructed directly.
709758
// Using markTransferMode also allows the CryptoKey to be
710759
// cloned to Workers.
711760
classInternalCryptoKey{
712-
constructor(
713-
keyObject,
714-
algorithm,
715-
keyUsages,
716-
extractable){
761+
constructor(keyObject,algorithm,keyUsages,extractable){
717762
markTransferMode(this,true,false);
718-
// Using symbol properties here currently instead of private
719-
// properties because (for now) the performance penalty of
720-
// private fields is still too high.
721-
this[kKeyObject]=keyObject;
722-
this[kAlgorithm]=algorithm;
723-
this[kExtractable]=extractable;
724-
this[kKeyUsages]=keyUsages;
763+
// When constructed during transfer the properties get assigned
764+
// in the kDeserialize call.
765+
if(keyObject){
766+
defineCryptoKeyProperties(
767+
this,
768+
keyObject,
769+
algorithm,
770+
extractable,
771+
keyUsages,
772+
);
773+
}
725774
}
726775

727776
[kClone](){
728777
constkeyObject=this[kKeyObject];
729-
constalgorithm=this.algorithm;
730-
constextractable=this.extractable;
731-
constusages=this.usages;
778+
constalgorithm=this[kAlgorithm];
779+
constextractable=this[kExtractable];
780+
constusages=this[kKeyUsages];
732781

733782
return{
734783
data: {
@@ -742,10 +791,7 @@ class InternalCryptoKey{
742791
}
743792

744793
[kDeserialize]({ keyObject, algorithm, usages, extractable }){
745-
this[kKeyObject]=keyObject;
746-
this[kAlgorithm]=algorithm;
747-
this[kKeyUsages]=usages;
748-
this[kExtractable]=extractable;
794+
defineCryptoKeyProperties(this,keyObject,algorithm,extractable,usages);
749795
}
750796
}
751797
InternalCryptoKey.prototype.constructor=CryptoKey;

0 commit comments

Comments
(0)