sodium-javascript/crypto_verify.js
Christophe Diederichs 2214a59711 export sodium_memcmp
2020-06-17 13:07:28 +02:00

28 lines
548 B
JavaScript

const assert = require('nanoassert')
module.exports = {
crypto_verify_16,
crypto_verify_32,
sodium_memcmp
}
function vn (x, xi, y, yi, n) {
var i, d = 0
for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i]
return (1 & ((d - 1) >>> 8)) - 1
}
function crypto_verify_16(x, xi, y, yi) {
return vn(x, xi, y, yi, 16)
}
function crypto_verify_32(x, xi, y, yi) {
return vn(x, xi, y, yi, 32)
}
function sodium_memcmp (a, b) {
assert(a.byteLength = b.byteLength, 'buffers must be the same size')
return vn(a, 0, b, 0, a.byteLength)
}