react-native-quick-crypto
Version:
A fast implementation of Node's `crypto` module written in C/C++ JSI
29 lines (28 loc) • 1.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.timingSafeEqual = timingSafeEqual;
var _reactNativeNitroModules = require("react-native-nitro-modules");
var _conversion = require("./conversion");
let utils;
function getNative() {
if (utils == null) {
utils = _reactNativeNitroModules.NitroModules.createHybridObject('Utils');
}
return utils;
}
function timingSafeEqual(a, b) {
// Use binaryLikeToArrayBuffer (not abvToArrayBuffer) so that TypedArray /
// Buffer views are sliced to their `byteOffset`/`byteLength` window. The
// zero-copy `abvToArrayBuffer` returns the entire backing buffer, which
// would (a) compare unrelated bytes and (b) silently fail the byte-length
// check for any view smaller than its backing.
const bufA = (0, _conversion.binaryLikeToArrayBuffer)(a);
const bufB = (0, _conversion.binaryLikeToArrayBuffer)(b);
if (bufA.byteLength !== bufB.byteLength) {
throw new RangeError('Input buffers must have the same byte length');
}
return getNative().timingSafeEqual(bufA, bufB);
}
//# sourceMappingURL=timingSafeEqual.js.map