Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ultraviolet
GitHub Repository: ultraviolet/bitaddress.org
Path: blob/master/src/ninja.seeder.js
248 views
1
ninja.seeder = {
2
init: (function () {
3
document.getElementById("generatekeyinput").value = "";
4
})(),
5
6
// number of mouse movements to wait for
7
seedLimit: (function () {
8
var num = Crypto.util.randomBytes(12)[11];
9
return 200 + Math.floor(num);
10
})(),
11
12
seedCount: 0, // counter
13
lastInputTime: new Date().getTime(),
14
seedPoints: [],
15
isStillSeeding: true,
16
seederDependentWallets: ["singlewallet", "paperwallet", "bulkwallet", "vanitywallet", "splitwallet"],
17
18
// seed function exists to wait for mouse movement to add more entropy before generating an address
19
seed: function (evt) {
20
if (!evt) var evt = window.event;
21
var timeStamp = new Date().getTime();
22
// seeding is over now we generate and display the address
23
if (ninja.seeder.seedCount == ninja.seeder.seedLimit) {
24
ninja.seeder.seedCount++;
25
ninja.seeder.seedingOver();
26
}
27
// seed mouse position X and Y when mouse movements are greater than 40ms apart.
28
else if ((ninja.seeder.seedCount < ninja.seeder.seedLimit) && evt && (timeStamp - ninja.seeder.lastInputTime) > 40) {
29
SecureRandom.seedTime();
30
SecureRandom.seedInt16((evt.clientX * evt.clientY));
31
ninja.seeder.showPoint(evt.clientX, evt.clientY);
32
ninja.seeder.seedCount++;
33
ninja.seeder.lastInputTime = new Date().getTime();
34
ninja.seeder.showPool();
35
}
36
},
37
38
// seed function exists to wait for mouse movement to add more entropy before generating an address
39
seedKeyPress: function (evt) {
40
if (!evt) var evt = window.event;
41
// seeding is over now we generate and display the address
42
if (ninja.seeder.seedCount == ninja.seeder.seedLimit) {
43
ninja.seeder.seedCount++;
44
ninja.seeder.seedingOver();
45
}
46
// seed key press character
47
else if ((ninja.seeder.seedCount < ninja.seeder.seedLimit) && evt.which) {
48
var timeStamp = new Date().getTime();
49
// seed a bunch (minimum seedLimit) of times
50
SecureRandom.seedTime();
51
SecureRandom.seedInt8(evt.which);
52
var keyPressTimeDiff = timeStamp - ninja.seeder.lastInputTime;
53
SecureRandom.seedInt8(keyPressTimeDiff);
54
ninja.seeder.seedCount++;
55
ninja.seeder.lastInputTime = new Date().getTime();
56
ninja.seeder.showPool();
57
}
58
},
59
60
showPool: function () {
61
var poolHex;
62
if (SecureRandom.poolCopyOnInit != null) {
63
poolHex = Crypto.util.bytesToHex(SecureRandom.poolCopyOnInit);
64
document.getElementById("seedpool").innerHTML = poolHex;
65
document.getElementById("seedpooldisplay").innerHTML = poolHex;
66
}
67
else {
68
poolHex = Crypto.util.bytesToHex(SecureRandom.pool);
69
document.getElementById("seedpool").innerHTML = poolHex;
70
document.getElementById("seedpooldisplay").innerHTML = poolHex;
71
}
72
var percentSeeded = Math.round((ninja.seeder.seedCount / ninja.seeder.seedLimit) * 100) + "%";
73
document.getElementById("mousemovelimit").innerHTML = percentSeeded;
74
for (var wIndex in ninja.seeder.seederDependentWallets) {
75
document.getElementById(ninja.seeder.seederDependentWallets[wIndex]).innerHTML = percentSeeded;
76
}
77
},
78
79
showPoint: function (x, y) {
80
var div = document.createElement("div");
81
div.setAttribute("class", "seedpoint");
82
div.style.top = y + "px";
83
div.style.left = x + "px";
84
document.body.appendChild(div);
85
ninja.seeder.seedPoints.push(div);
86
},
87
88
removePoints: function () {
89
for (var i = 0; i < ninja.seeder.seedPoints.length; i++) {
90
document.body.removeChild(ninja.seeder.seedPoints[i]);
91
}
92
ninja.seeder.seedPoints = [];
93
},
94
95
seedingOver: function () {
96
ninja.seeder.isStillSeeding = false;
97
// run sync unit tests
98
ninja.status.unitTests();
99
// open selected tab
100
var walletType = ninja.tab.whichIsOpen();
101
if (walletType == null) {
102
ninja.tab.select("singlewallet");
103
} else {
104
ninja.tab.select(walletType)
105
}
106
document.getElementById("generate").style.display = "none";
107
// update labels for dependent wallets
108
var culture = (ninja.getQueryString()["culture"] == null ? "en" : ninja.getQueryString()["culture"]);
109
ninja.translator.translate(culture);
110
ninja.seeder.removePoints();
111
}
112
};
113
114