crypto: use byteLength in timingSafeEqual
PR-URL: https://github.com/nodejs/node/pull/29657 Co-authored-by: ZaneHannanAU <ZaneHannanAU@users.noreply.github.com> Co-authored-by: Rich Trott <rtrott@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
This commit is contained in:
parent
7333c7163a
commit
61743063cc
@ -78,7 +78,7 @@ function timingSafeEqual(buf1, buf2) {
|
|||||||
throw new ERR_INVALID_ARG_TYPE('buf2',
|
throw new ERR_INVALID_ARG_TYPE('buf2',
|
||||||
['Buffer', 'TypedArray', 'DataView'], buf2);
|
['Buffer', 'TypedArray', 'DataView'], buf2);
|
||||||
}
|
}
|
||||||
if (buf1.length !== buf2.length) {
|
if (buf1.byteLength !== buf2.byteLength) {
|
||||||
throw new ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH();
|
throw new ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH();
|
||||||
}
|
}
|
||||||
return _timingSafeEqual(buf1, buf2);
|
return _timingSafeEqual(buf1, buf2);
|
||||||
|
@ -755,7 +755,7 @@ E('ERR_CRYPTO_SCRYPT_NOT_SUPPORTED', 'Scrypt algorithm not supported', Error);
|
|||||||
// Switch to TypeError. The current implementation does not seem right.
|
// Switch to TypeError. The current implementation does not seem right.
|
||||||
E('ERR_CRYPTO_SIGN_KEY_REQUIRED', 'No key provided to sign', Error);
|
E('ERR_CRYPTO_SIGN_KEY_REQUIRED', 'No key provided to sign', Error);
|
||||||
E('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH',
|
E('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH',
|
||||||
'Input buffers must have the same length', RangeError);
|
'Input buffers must have the same byte length', RangeError);
|
||||||
E('ERR_DNS_SET_SERVERS_FAILED', 'c-ares failed to set servers: "%s" [%s]',
|
E('ERR_DNS_SET_SERVERS_FAILED', 'c-ares failed to set servers: "%s" [%s]',
|
||||||
Error);
|
Error);
|
||||||
E('ERR_DOMAIN_CALLBACK_NOT_AVAILABLE',
|
E('ERR_DOMAIN_CALLBACK_NOT_AVAILABLE',
|
||||||
|
@ -18,12 +18,26 @@ assert.strictEqual(
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
{
|
||||||
|
// Test TypedArrays with different lengths but equal byteLengths.
|
||||||
|
const buf = crypto.randomBytes(16).buffer;
|
||||||
|
const a1 = new Uint8Array(buf);
|
||||||
|
const a2 = new Uint16Array(buf);
|
||||||
|
const a3 = new Uint32Array(buf);
|
||||||
|
|
||||||
|
for (const left of [a1, a2, a3]) {
|
||||||
|
for (const right of [a1, a2, a3]) {
|
||||||
|
assert.strictEqual(crypto.timingSafeEqual(left, right), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
common.expectsError(
|
common.expectsError(
|
||||||
() => crypto.timingSafeEqual(Buffer.from([1, 2, 3]), Buffer.from([1, 2])),
|
() => crypto.timingSafeEqual(Buffer.from([1, 2, 3]), Buffer.from([1, 2])),
|
||||||
{
|
{
|
||||||
code: 'ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH',
|
code: 'ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH',
|
||||||
type: RangeError,
|
type: RangeError,
|
||||||
message: 'Input buffers must have the same length'
|
message: 'Input buffers must have the same byte length'
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user