mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
crypto: fix default encoding of LazyTransform
PullRequest #5522 and #5500 described the change of the default encoding into UTF8 in crypto functions. This however was only changed for the non-streaming API. The streaming API still used binary as the default encoding. This commit will change the default streaming API encoding to UTF8 to make both APIs behave the same. It will also add tests to validate the behavior. Refs: https://github.com/nodejs/node/pull/5522 Refs: https://github.com/nodejs/node/pull/5500 PR-URL: https://github.com/nodejs/node/pull/8611 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
1 parent
c67207731f
commit
443691a5ae
2 files changed
+45
-1
No files matched your search
@@ -5,6 +5,7 @@
|
||||
|
||||
const stream = require('stream');
|
||||
const util = require('util');
|
||||
const crypto = require('crypto');
|
||||
|
||||
module.exports = LazyTransform;
|
||||
|
||||
@@ -22,7 +23,11 @@ util.inherits(LazyTransform, stream.Transform);
|
||||
get: function() {
|
||||
stream.Transform.call(this, this._options);
|
||||
this._writableState.decodeStrings = false;
|
||||
this._writableState.defaultEncoding = 'latin1';
|
||||
|
||||
if (!this._options || !this._options.defaultEncoding) {
|
||||
this._writableState.defaultEncoding = crypto.DEFAULT_ENCODING;
|
||||
}
|
||||
|
||||
return this[prop];
|
||||
},
|
||||
set: function(val) {
|
||||
|
||||
@@ -189,3 +189,42 @@ console.log(crypto.randomBytes(16));
|
||||
assert.throws(function() {
|
||||
tls.createSecureContext({ crl: 'not a CRL' });
|
||||
}, /^Error: Failed to parse CRL$/);
|
||||
|
||||
/**
|
||||
* Check if the stream function uses utf8 as a default encoding.
|
||||
**/
|
||||
|
||||
function testEncoding(options, assertionHash) {
|
||||
const hash = crypto.createHash('sha256', options);
|
||||
let hashValue = '';
|
||||
|
||||
hash.on('data', (data) => {
|
||||
hashValue += data.toString('hex');
|
||||
});
|
||||
|
||||
hash.on('end', common.mustCall(() => {
|
||||
assert.strictEqual(hashValue, assertionHash);
|
||||
}));
|
||||
|
||||
hash.write('öäü');
|
||||
hash.end();
|
||||
}
|
||||
|
||||
// Hash of "öäü" in utf8 format
|
||||
const assertionHashUtf8 =
|
||||
'4f53d15bee524f082380e6d7247cc541e7cb0d10c64efdcc935ceeb1e7ea345c';
|
||||
|
||||
// Hash of "öäü" in latin1 format
|
||||
const assertionHashLatin1 =
|
||||
'cd37bccd5786e2e76d9b18c871e919e6eb11cc12d868f5ae41c40ccff8e44830';
|
||||
|
||||
testEncoding(undefined, assertionHashUtf8);
|
||||
testEncoding({}, assertionHashUtf8);
|
||||
|
||||
testEncoding({
|
||||
defaultEncoding: 'utf8'
|
||||
}, assertionHashUtf8);
|
||||
|
||||
testEncoding({
|
||||
defaultEncoding: 'latin1'
|
||||
}, assertionHashLatin1);
|
||||
Reference in new issue
Block a user