33const {
44 ObjectSetPrototypeOf,
55 ReflectApply,
6+ StringPrototypeReplace,
67 StringPrototypeToLowerCase,
78 Symbol,
89} = primordials ;
@@ -33,6 +34,8 @@ const {
3334 lazyDOMException,
3435 normalizeEncoding,
3536 encodingsMap,
37+ isPendingDeprecation,
38+ getDeprecationWarningEmitter,
3639} = require ( 'internal/util' ) ;
3740
3841const {
@@ -63,6 +66,25 @@ const LazyTransform = require('internal/streams/lazy_transform');
6366const kState = Symbol ( 'kState' ) ;
6467const kFinalized = Symbol ( 'kFinalized' ) ;
6568
69+ /**
70+ * @param {string } name
71+ */
72+ function normalizeAlgorithm ( name ) {
73+ return StringPrototypeReplace ( StringPrototypeToLowerCase ( name ) , '-' , '' ) ;
74+ }
75+
76+ const maybeEmitDeprecationWarning = getDeprecationWarningEmitter (
77+ 'DEP0198' ,
78+ 'Creating SHAKE128/256 digests without an explicit options.outputLength is deprecated.' ,
79+ undefined ,
80+ false ,
81+ ( algorithm ) => {
82+ if ( ! isPendingDeprecation ( ) ) return false ;
83+ const normalized = normalizeAlgorithm ( algorithm ) ;
84+ return normalized === 'shake128' || normalized === 'shake256' ;
85+ } ,
86+ ) ;
87+
6688function Hash ( algorithm , options ) {
6789 if ( ! new . target )
6890 return new Hash ( algorithm , options ) ;
@@ -80,6 +102,9 @@ function Hash(algorithm, options) {
80102 this [ kState ] = {
81103 [ kFinalized ] : false ,
82104 } ;
105+ if ( ! isCopy && xofLen === undefined ) {
106+ maybeEmitDeprecationWarning ( algorithm ) ;
107+ }
83108 ReflectApply ( LazyTransform , this , [ options ] ) ;
84109}
85110
@@ -213,6 +238,12 @@ function hash(algorithm, input, outputEncoding = 'hex') {
213238 }
214239 }
215240 }
241+ // TODO: ideally we have to ship https://github.com/nodejs/node/pull/58121 so
242+ // that a proper DEP0198 deprecation can be done here as well.
243+ const normalizedAlgorithm = normalizeAlgorithm ( algorithm ) ;
244+ if ( normalizedAlgorithm === 'shake128' || normalizedAlgorithm === 'shake256' ) {
245+ return new Hash ( algorithm ) . update ( input ) . digest ( normalized ) ;
246+ }
216247 return oneShotDigest ( algorithm , getCachedHashId ( algorithm ) , getHashCache ( ) ,
217248 input , normalized , encodingsMap [ normalized ] ) ;
218249}
0 commit comments