diff --git a/lib/internal/crypto/keys.js b/lib/internal/crypto/keys.js index 4303dc44fe60d7..5e4ab819af5b3d 100644 --- a/lib/internal/crypto/keys.js +++ b/lib/internal/crypto/keys.js @@ -4,6 +4,7 @@ const { ArrayFrom, ArrayPrototypeSlice, ObjectDefineProperty, + ObjectDefineProperties, ObjectSetPrototypeOf, Symbol, Uint8Array, @@ -38,6 +39,7 @@ const { ERR_ILLEGAL_CONSTRUCTOR, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, + ERR_INVALID_THIS, } } = require('internal/errors'); @@ -61,6 +63,7 @@ const { const { customInspectSymbol: kInspect, + kEnumerableProperty, } = require('internal/util'); const { inspect } = require('internal/util/inspect'); @@ -657,18 +660,26 @@ class CryptoKey extends JSTransferable { } get type() { + if (!(this instanceof CryptoKey)) + throw new ERR_INVALID_THIS('CryptoKey'); return this[kKeyObject].type; } get extractable() { + if (!(this instanceof CryptoKey)) + throw new ERR_INVALID_THIS('CryptoKey'); return this[kExtractable]; } get algorithm() { + if (!(this instanceof CryptoKey)) + throw new ERR_INVALID_THIS('CryptoKey'); return this[kAlgorithm]; } get usages() { + if (!(this instanceof CryptoKey)) + throw new ERR_INVALID_THIS('CryptoKey'); return ArrayFrom(this[kKeyUsages]); } @@ -697,6 +708,13 @@ class CryptoKey extends JSTransferable { } } +ObjectDefineProperties(CryptoKey.prototype, { + type: kEnumerableProperty, + extractable: kEnumerableProperty, + algorithm: kEnumerableProperty, + usages: kEnumerableProperty, +}); + // All internal code must use new InternalCryptoKey to create // CryptoKey instances. The CryptoKey class is exposed to end // user code but is not permitted to be constructed directly.