Skip to content

Commit 50037e2

Browse files
committed
Simple ISAAC test case
1 parent 4d5ccff commit 50037e2

5 files changed

Lines changed: 55 additions & 69 deletions

File tree

dist/bcrypt-isaac.js

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/*
22
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
3-
Copyright (c) 2012 Yves-Marie K. Rinquin
43
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
54
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
65
@@ -1201,8 +1200,8 @@
12011200

12021201
/* 32-bit integer safe adder */
12031202
function add(x, y) {
1204-
var lsb = (x & 0xffff) + (y & 0xffff);
1205-
var msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
1203+
var lsb = (x & 0xffff) + (y & 0xffff),
1204+
msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
12061205
return (msb << 16) | (lsb & 0xffff);
12071206
}
12081207

@@ -1219,17 +1218,15 @@
12191218
var a, b, c, d, e, f, g, h, i;
12201219

12211220
/* seeding the seeds of love */
1222-
a = b = c = d =
1223-
e = f = g = h = 0x9e3779b9; /* the golden ratio */
1221+
a = b = c = d = e = f = g = h = 0x9e3779b9; /* the golden ratio */
12241222

1225-
if(s && typeof(s) === 'number') {
1223+
if (s && typeof(s) === 'number')
12261224
s = [s];
1227-
}
12281225

1229-
if(s instanceof Array) {
1226+
if (s instanceof Array) {
12301227
reset();
1231-
for(i = 0; i < s.length; i++)
1232-
r[i & 0xff] += (typeof(s[i]) === 'number') ? s[i] : 0;
1228+
for(i = 0; i < s.length; ++i)
1229+
r[i & 0xff] += typeof(s[i]) === 'number' ? s[i] : 0;
12331230
}
12341231

12351232
/* private: seed mixer */
@@ -1248,46 +1245,38 @@
12481245
seed_mix();
12491246

12501247
for(i = 0; i < 256; i += 8) {
1251-
if(s) { /* use all the information in the seed */
1252-
a = add(a, r[i + 0]); b = add(b, r[i + 1]);
1253-
c = add(c, r[i + 2]); d = add(d, r[i + 3]);
1254-
e = add(e, r[i + 4]); f = add(f, r[i + 5]);
1255-
g = add(g, r[i + 6]); h = add(h, r[i + 7]);
1256-
}
1248+
if (s) /* use all the information in the seed */
1249+
a = add(a, r[i + 0]), b = add(b, r[i + 1]),
1250+
c = add(c, r[i + 2]), d = add(d, r[i + 3]),
1251+
e = add(e, r[i + 4]), f = add(f, r[i + 5]),
1252+
g = add(g, r[i + 6]), h = add(h, r[i + 7]);
12571253
seed_mix();
12581254
/* fill in m[] with messy stuff */
12591255
m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
12601256
m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
12611257
}
1262-
if(s) {
1258+
if(s)
12631259
/* do a second pass to make all of the seed affect all of m[] */
1264-
for(i = 0; i < 256; i += 8) {
1265-
a = add(a, m[i + 0]); b = add(b, m[i + 1]);
1266-
c = add(c, m[i + 2]); d = add(d, m[i + 3]);
1267-
e = add(e, m[i + 4]); f = add(f, m[i + 5]);
1268-
g = add(g, m[i + 6]); h = add(h, m[i + 7]);
1269-
seed_mix();
1260+
for(i = 0; i < 256; i += 8)
1261+
a = add(a, m[i + 0]), b = add(b, m[i + 1]),
1262+
c = add(c, m[i + 2]), d = add(d, m[i + 3]),
1263+
e = add(e, m[i + 4]), f = add(f, m[i + 5]),
1264+
g = add(g, m[i + 6]), h = add(h, m[i + 7]),
1265+
seed_mix(),
12701266
/* fill in m[] with messy stuff (again) */
1271-
m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
1272-
m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
1273-
}
1274-
}
1275-
1267+
m[i + 0] = a, m[i + 1] = b, m[i + 2] = c, m[i + 3] = d,
1268+
m[i + 4] = e, m[i + 5] = f, m[i + 6] = g, m[i + 7] = h;
12761269
prng(); /* fill in the first set of results */
12771270
gnt = 256; /* prepare to use the first set of results */;
12781271
}
12791272

12801273
/* isaac generator, n = number of run */
12811274
function prng(n){
12821275
var i, x, y;
1283-
1284-
n = (n && typeof(n) === 'number')
1285-
? Math.abs(Math.floor(n)) : 1;
1286-
1276+
n = n && typeof(n) === 'number' ? Math.abs(Math.floor(n)) : 1;
12871277
while(n--) {
12881278
cnt = add(cnt, 1);
12891279
brs = add(brs, cnt);
1290-
12911280
for(i = 0; i < 256; i++) {
12921281
switch(i & 3) {
12931282
case 0: acc ^= acc << 13; break;

dist/bcrypt-isaac.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/bcrypt.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//? if (typeof ISAAC === 'undefined') ISAAC = false;
22
/*
33
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
4-
//? if (ISAAC)
5-
Copyright (c) 2012 Yves-Marie K. Rinquin
64
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
75
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
86

src/bcrypt/prng/isaac.js

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ var isaac = (function(){
3636

3737
/* 32-bit integer safe adder */
3838
function add(x, y) {
39-
var lsb = (x & 0xffff) + (y & 0xffff);
40-
var msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
39+
var lsb = (x & 0xffff) + (y & 0xffff),
40+
msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
4141
return (msb << 16) | (lsb & 0xffff);
4242
}
4343

@@ -54,17 +54,15 @@ var isaac = (function(){
5454
var a, b, c, d, e, f, g, h, i;
5555

5656
/* seeding the seeds of love */
57-
a = b = c = d =
58-
e = f = g = h = 0x9e3779b9; /* the golden ratio */
57+
a = b = c = d = e = f = g = h = 0x9e3779b9; /* the golden ratio */
5958

60-
if(s && typeof(s) === 'number') {
59+
if (s && typeof(s) === 'number')
6160
s = [s];
62-
}
6361

64-
if(s instanceof Array) {
62+
if (s instanceof Array) {
6563
reset();
66-
for(i = 0; i < s.length; i++)
67-
r[i & 0xff] += (typeof(s[i]) === 'number') ? s[i] : 0;
64+
for(i = 0; i < s.length; ++i)
65+
r[i & 0xff] += typeof(s[i]) === 'number' ? s[i] : 0;
6866
}
6967

7068
/* private: seed mixer */
@@ -83,46 +81,38 @@ var isaac = (function(){
8381
seed_mix();
8482

8583
for(i = 0; i < 256; i += 8) {
86-
if(s) { /* use all the information in the seed */
87-
a = add(a, r[i + 0]); b = add(b, r[i + 1]);
88-
c = add(c, r[i + 2]); d = add(d, r[i + 3]);
89-
e = add(e, r[i + 4]); f = add(f, r[i + 5]);
90-
g = add(g, r[i + 6]); h = add(h, r[i + 7]);
91-
}
84+
if (s) /* use all the information in the seed */
85+
a = add(a, r[i + 0]), b = add(b, r[i + 1]),
86+
c = add(c, r[i + 2]), d = add(d, r[i + 3]),
87+
e = add(e, r[i + 4]), f = add(f, r[i + 5]),
88+
g = add(g, r[i + 6]), h = add(h, r[i + 7]);
9289
seed_mix();
9390
/* fill in m[] with messy stuff */
9491
m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
9592
m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
9693
}
97-
if(s) {
94+
if(s)
9895
/* do a second pass to make all of the seed affect all of m[] */
99-
for(i = 0; i < 256; i += 8) {
100-
a = add(a, m[i + 0]); b = add(b, m[i + 1]);
101-
c = add(c, m[i + 2]); d = add(d, m[i + 3]);
102-
e = add(e, m[i + 4]); f = add(f, m[i + 5]);
103-
g = add(g, m[i + 6]); h = add(h, m[i + 7]);
104-
seed_mix();
96+
for(i = 0; i < 256; i += 8)
97+
a = add(a, m[i + 0]), b = add(b, m[i + 1]),
98+
c = add(c, m[i + 2]), d = add(d, m[i + 3]),
99+
e = add(e, m[i + 4]), f = add(f, m[i + 5]),
100+
g = add(g, m[i + 6]), h = add(h, m[i + 7]),
101+
seed_mix(),
105102
/* fill in m[] with messy stuff (again) */
106-
m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
107-
m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
108-
}
109-
}
110-
103+
m[i + 0] = a, m[i + 1] = b, m[i + 2] = c, m[i + 3] = d,
104+
m[i + 4] = e, m[i + 5] = f, m[i + 6] = g, m[i + 7] = h;
111105
prng(); /* fill in the first set of results */
112106
gnt = 256; /* prepare to use the first set of results */;
113107
}
114108

115109
/* isaac generator, n = number of run */
116110
function prng(n){
117111
var i, x, y;
118-
119-
n = (n && typeof(n) === 'number')
120-
? Math.abs(Math.floor(n)) : 1;
121-
112+
n = n && typeof(n) === 'number' ? Math.abs(Math.floor(n)) : 1;
122113
while(n--) {
123114
cnt = add(cnt, 1);
124115
brs = add(brs, cnt);
125-
126116
for(i = 0; i < 256; i++) {
127117
switch(i & 3) {
128118
case 0: acc ^= acc << 13; break;

tests/suite.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
var path = require("path"),
22
fs = require("fs"),
33
binding = require("bcrypt"),
4-
bcrypt = require(path.join(__dirname, '..', 'index.js'));
4+
bcrypt = require(path.join(__dirname, '..', 'index.js')),
5+
isaac = eval(fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "isaac.js"))+" isaac");
56

67
module.exports = {
78

@@ -116,5 +117,13 @@ module.exports = {
116117
progress.push(n);
117118
});
118119
});
120+
},
121+
122+
"isaac": function(test) {
123+
for (var i= 0, n; i<999999; ++i) {
124+
n = ((0.5 + isaac() * 2.3283064365386963e-10) * 256) | 0;
125+
test.ok(n >= 0 && n < 256);
126+
}
127+
test.done();
119128
}
120129
};

0 commit comments

Comments
 (0)