UNPKG

723 BJavaScriptView Raw
1/* eslint-disable camelcase */
2const assert = require('nanoassert')
3
4module.exports = {
5 crypto_verify_16,
6 crypto_verify_32,
7 sodium_memcmp,
8 sodium_is_zero
9}
10
11function vn (x, xi, y, yi, n) {
12 var d = 0
13 for (let i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i]
14 return (1 & ((d - 1) >>> 8)) - 1
15}
16
17function crypto_verify_16 (x, xi, y, yi) {
18 return vn(x, xi, y, yi, 16)
19}
20
21function crypto_verify_32 (x, xi, y, yi) {
22 return vn(x, xi, y, yi, 32)
23}
24
25function sodium_memcmp (a, b) {
26 assert(a.byteLength === b.byteLength, 'buffers must be the same size')
27
28 return vn(a, 0, b, 0, a.byteLength) === 0
29}
30
31function sodium_is_zero (arr) {
32 var d = 0
33 for (let i = 0; i < arr.length; i++) d |= arr[i]
34 return d === 0
35}