Skip to content

Commit

Permalink
Upgrade to next sodium
Browse files Browse the repository at this point in the history
  • Loading branch information
emilbayes committed May 27, 2020
1 parent 9648c9b commit 6c902a4
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 16 deletions.
10 changes: 5 additions & 5 deletions bigint.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var assert = require('nanoassert')
var sodium = require('sodium-universal')

module.exports = function (limit) {
assert.ok(limit > 0n, 'limit must be larger than 0')
assert.ok(limit > 0n, 'limit must be larger than 0')
for (var width = 0n, n = limit; n > 0n; width++) {
n >>= 64n
}
Expand All @@ -15,11 +15,11 @@ module.exports = function (limit) {

var min = max - (max % limit)

var n = 0n
var sample = 0n
do {
sodium.randombytes_buf(buf)
n = buf.reduce((s, n) => s << 64n | n, 0n)
} while (n >= min)
sample = buf.reduce((s, n) => s << 64n | n, 0n)
} while (sample >= min)

return n % limit
return sample % limit
}
6 changes: 3 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ var buf = new Uint8Array(7)
var MAX = Number.MAX_SAFE_INTEGER
module.exports = function secureRandom (limit) {
assert.ok(Number.isInteger(limit), 'limit must be integer')
assert.ok(limit > 0, 'limit must be larger than 0')
assert.ok(limit > 0, 'limit must be larger than 0')
assert.ok(limit <= MAX, 'limit must be at most 2^53 - 1')

// Edge cases:
Expand All @@ -19,8 +19,8 @@ module.exports = function secureRandom (limit) {
do {
sodium.randombytes_buf(buf)
// Returns number in [0, 2^53)
n = ((((buf[6] & 0b00011111) << 16) | (buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000 // 21 bits, shifted left 32 bits
+ (((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0) // 32 bits
n = ((((buf[6] & 0b00011111) << 16) | (buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000 + // 21 bits, shifted left 32 bits
(((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0) // 32 bits
} while (n >= min)

return n % limit
Expand Down
2 changes: 1 addition & 1 deletion statistic-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ while (true) {
var s = template.slice()
var r = template.slice()

for (var i = 0; i < 1e7; i++) {
for (i = 0; i < 1e7; i++) {
r[rand(len)]++
s[sodium.randombytes_uniform(len)]++
}
Expand Down
5 changes: 5 additions & 0 deletions test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const rand = require('.')

for (var i = 0; i < 1e6; i++) {
console.log(rand(2971215073))
}
14 changes: 7 additions & 7 deletions verify-readle.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
var sodium = require('sodium-universal')
var sodium = require('sodium-native')
var buf = Buffer.alloc(8).fill(0xff)

var max = ((((buf[6] & 0b00011111) << 16) | (buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000 // 21 bits, shifted left 32 bits
+ (((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0) // 32 bits
var max = ((((buf[6] & 0b00011111) << 16) | (buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000 + // 21 bits, shifted left 32 bits
(((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0) // 32 bits

if(max !== Number.MAX_SAFE_INTEGER) {
if (max !== Number.MAX_SAFE_INTEGER) {
console.log('0b' + max.toString(2), max)
console.log('0b' + Number.MAX_SAFE_INTEGER.toString(2), Number.MAX_SAFE_INTEGER)
process.exit(1)
Expand All @@ -14,10 +14,10 @@ var a, b
while (true) {
sodium.randombytes_buf(buf)
b = buf.readUIntLE(0, 6)
a = (((buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000
+ (((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0)
a = (((buf[5] << 8) | (buf[4])) >>> 0) * 0x100000000 +
(((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | (buf[0])) >>> 0)

if(a !== b) {
if (a !== b) {
console.log('0x' + a.toString(16), a)
console.log('0x' + b.toString(16), b)
process.exit(1)
Expand Down

0 comments on commit 6c902a4

Please sign in to comment.