locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
21 lines (20 loc) • 770 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConstantTimeEq = ConstantTimeEq;
function ConstantTimeEq(x, y) {
// discuss at: https://locutus.io/golang/ConstantTimeEq
// parity verified: Go 1.23
// original by: Kevin van Zonneveld (https://kvz.io)
// note 1: Mirrors Go subtle.ConstantTimeEq bitwise semantics on 32-bit integer values.
// example 1: ConstantTimeEq(42, 42)
// returns 1: 1
// example 2: ConstantTimeEq(42, 7)
// returns 2: 0
// example 3: ConstantTimeEq(-1, -1)
// returns 3: 1
const left = x | 0;
const right = y | 0;
const diff = left ^ right;
const sign = (diff | -diff) >>> 31;
return sign ^ 1;
}