crypto: remove default encoding from sign/verify
getDefaultEncoding()
always returns 'buffer'
in Node.js 20. It requires some careful justification but the default encoding can be eliminated from sig.js
entirely.
In Sign.prototype.update
, we can safely remove the conditional assignment of getDefaultEncoding()
to encoding
. This is because SignUpdate()
in crypto_sig.cc
internally calls node::crypto::Decode
, which returns UTF8
for falsy encoding
values. In other words, with the conditional assignment, StringBytes::Write()
ultimately receives the encoding BUFFER
, and without the conditional assignment, it receives the encoding UTF8
. However, StringBytes::Write()
treats both encodings identically, so there is no need to deviate from the internal default encoding UTF8
.
In Sign.prototype.sign
, we can also safely remove the conditional assignment of getDefaultEncoding()
to encoding. Whether encoding is falsy or 'buffer'
makes no difference.
In Verify.prototype.verify
, we can also safely remove the conditional assignment of getDefaultEncoding()
to sigEncoding
. This is because the function passes the sigEncoding
to getArrayBufferOrView()
, which passes it to Buffer.from()
. If sigEncoding
is 'buffer'
, getArrayBufferOrView()
instead passes 'utf8'
to Buffer.from()
. Because the default encoding of Buffer.from()
is 'utf8'
, passing a falsy encoding to getArrayBufferOrView()
instead of 'buffer'
results in the same behavior.
This partially addresses: