Skip to content

Commit e0272f6

Browse files
Add files via upload
1 parent 059bf01 commit e0272f6

File tree

1 file changed

+284
-0
lines changed

1 file changed

+284
-0
lines changed

bip39.html

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>D++</title>
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<!--link rel="shortcut icon" type="image/jpg" href="taproot.ico"/-->
8+
<base target="_blank"/>
9+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
10+
<script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
11+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
12+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
13+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
14+
<style>
15+
@import url('https://fonts.googleapis.com/css2?family=PT+Sans+Narrow:wght@400;700&family=Roboto:wght@300;400;500&display=swap');
16+
</style>
17+
<script src="files/words.js"></script>
18+
<link rel="stylesheet" href="files/style.css">
19+
</head>
20+
21+
<script>
22+
function binString2buf(string) {
23+
var result = new Uint8Array(32);
24+
for (var i = 0; i < 32; i++) {
25+
// taking 8 bytes and putting it into 8 bits
26+
// console.log("loop #" + i);
27+
result[i] = 0;
28+
for (var c = 0; c < 8; c++) {
29+
if (Number(string[i*8 + c]) === 1) {
30+
result[i] |= 1 << (7 - c);
31+
}
32+
}
33+
// console.log("result[" + i + "] is: " + result[i]);
34+
}
35+
return result;
36+
}
37+
38+
function buf2bin(buffer) {
39+
var view = new Uint8Array(buffer);
40+
var result = "";
41+
for (var i = 0; i < view.length; i++) {
42+
var binary = view[i].toString(2);
43+
binary = "00000000".substr(binary.length) + binary;
44+
result += binary;
45+
}
46+
return result;
47+
}
48+
49+
function buf2hex(buffer) {
50+
// buffer is an ArrayBuffer
51+
return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
52+
}
53+
54+
async function shaMe(inputString) {
55+
console.log("inputstring is " + inputString);
56+
var inputBytes = binString2buf(inputString);
57+
console.log("inputBytes is " + inputBytes);
58+
var hashBytes = await window.crypto.subtle.digest("SHA-256", inputBytes);
59+
60+
// console.log(buf2hex(hashBytes));
61+
// console.log(buf2bin(hashBytes));
62+
return buf2bin(hashBytes);
63+
}
64+
65+
function convertBin() {
66+
var binary = document.getElementById("binary").value;
67+
if (binary == "")
68+
$("#result").html("Please input a binary number.");
69+
else {
70+
binary = parseInt(binary, 2);
71+
console.log(binary);
72+
console.log();
73+
$("#result").html("<center><b>Result:</b><br>" + wordlist[binary] + "<br><br><b>Decimal:</b><br>" + binary + "<br><br>");
74+
}
75+
}
76+
77+
function isNumberKey(evt, element, max) {
78+
var charCode = (evt.which) ? evt.which : event.keyCode;
79+
var len = $(element).val().length;
80+
81+
if (len >= max)
82+
return false;
83+
84+
85+
if (charCode != 48 && charCode != 49)
86+
return false;
87+
}
88+
89+
function searchStringInArray (str, strArray) {
90+
str = str.toLowerCase();
91+
for (var j = 0; j < strArray.length; j++) {
92+
if (strArray[j] == str) {
93+
console.log('we found a match, it is ' + strArray[j]);
94+
return j;
95+
}
96+
}
97+
return -1;
98+
}
99+
100+
function hex2bin(hex){
101+
return ("00000000" + (parseInt(hex, 16)).toString(2)).substr(-8);
102+
}
103+
104+
async function checksum() {
105+
var key = "";
106+
var wallet = "";
107+
108+
var words = document.getElementsByClassName("bip-input");
109+
for (var i = 0; i < words.length; i++) {
110+
var binary = words[i].value;
111+
if (binary == "") {
112+
$("#checksum-result").html("Please enter valid seed words.");
113+
document.getElementById("qrcode-container").style.display = "none";
114+
return false;
115+
}
116+
117+
wallet = wallet + binary + " ";
118+
119+
binary = searchStringInArray(binary, wordlist);
120+
if (binary < 0) {
121+
$("#checksum-result").html("Invalid seed words.");
122+
document.getElementById("qrcode-container").style.display = "none";
123+
return false;
124+
}
125+
binary = binary.toString(2)
126+
binary = "00000000000".substr(binary.length) + binary;
127+
128+
key += binary;
129+
}
130+
console.log("wallet is " + wallet);
131+
if ($('#checksum').val() == "") {
132+
$("#checksum-result").html("Please enter the first three bits of the checksum.");
133+
document.getElementById("qrcode-container").style.display = "none";
134+
return false;
135+
}
136+
137+
// for fun, show all 8 possible checksum words
138+
validChecksums(key);
139+
140+
key += $("#checksum").val();
141+
console.log("key is " + key);
142+
console.log("key length is " + key.length);
143+
var result = await shaMe(key);
144+
145+
var hash = result.substring(0, 8);
146+
hash = Number($('#checksum').val() + hash);
147+
148+
var twentyFour = wordlist[parseInt(hash, 2)];
149+
wallet += twentyFour;
150+
151+
// generateQRCode(wallet);
152+
153+
console.log(wallet);
154+
$("#checksum-result").html("<b>Seed Phrase in Binary:</b><br>" + key + "<br><br><b>SHA-256 Hash of Seed Phrase:</b><br>" + result);
155+
// $("#checksum-result").html("<b>Checksum:</b><br>" + twentyFour + "<br><br><b>Binary:</b><br>" + key + "<br><br><b>Hash:</b><br>" + result + "<br><br><b>Mnemonic:</b><br>" + wallet);
156+
}
157+
158+
async function validChecksums(key) {
159+
var results = "";
160+
161+
// document.getElementById("possible-checksums-result").innerHTML = "<br><b>All Possible Checksums:</b><br>";
162+
for (var i = 0; i < 8; i++) {
163+
var myKey = key;
164+
var binary = i.toString(2);
165+
binary = "000".substr(binary.length) + binary;
166+
console.log("binary for checksum is: " + binary);
167+
168+
myKey += binary;
169+
170+
let result = await shaMe(myKey);
171+
172+
var hash = result.substring(0, 8);
173+
console.log("binary(blurg) here is " + binary);
174+
hash = binary + hash;
175+
console.log("last 11 bits are now: " + hash);
176+
177+
var twentyFour = wordlist[parseInt(hash, 2)];
178+
console.log("possible checksum is " + twentyFour);
179+
results += twentyFour + " ";
180+
console.log("results is now " + results);
181+
}
182+
console.log("all the results are " + results);
183+
// document.getElementById("possible-checksums-result").innerHTML += results;
184+
}
185+
186+
function autofill(word, checksum) {
187+
$(".bip-input").val(word);
188+
$('#checksum').val(checksum);
189+
}
190+
191+
function generateQRCode(string) {
192+
let qrcodeContainer = document.getElementById("qrcode");
193+
qrcodeContainer.innerHTML = "";
194+
new QRCode(qrcodeContainer, string);
195+
document.getElementById("qrcode-container").style.display = "block";
196+
}
197+
</script>
198+
<header>
199+
<!--img src=images/Title.png style="width:500px; max-width:95%"-->
200+
</header>
201+
<br>
202+
<div class="container">
203+
<h3>Convert Binary to BIP 39 Word</h3>
204+
205+
<input class="button-class" placeholder="11 Bit Binary Number" id="binary" onkeypress="return isNumberKey(event,this, 11)"><br>
206+
<button class="button-class" onclick="convertBin()">Convert</button>
207+
<br><br>
208+
209+
<div id="result" style="font-size:17px;"></div>
210+
211+
<br>
212+
213+
<h3>Calculate Hash of Seed Phrase</h3>
214+
215+
<center>
216+
<!--button onclick="autofill('abandon', '000')">Autofill (All Zeros)</button>
217+
<button onclick="autofill('zoo', '111')">Autofill (All Ones)</button><br>
218+
<button onclick="autofill('bacon', '000')" style="margin-top:5px">Autofill (All Bacons)</button>
219+
<br><br-->
220+
221+
<div class="row" style="margin-top:10px">
222+
<div class="col-sm-6 text-center"><span class="number">1.</span><input class="bip-input"></div>
223+
<div class="col-sm-6 text-center"><span class="number">2.</span><input class="bip-input"></div>
224+
</div>
225+
<div class="row">
226+
<div class="col-sm-6 text-center"><span class="number">3.</span><input class="bip-input"></div>
227+
<div class="col-sm-6 text-center"><span class="number">4.</span><input class="bip-input"></div>
228+
</div>
229+
<div class="row">
230+
<div class="col-sm-6 text-center"><span class="number">5.</span><input class="bip-input"></div>
231+
<div class="col-sm-6 text-center"><span class="number">6.</span><input class="bip-input"></div>
232+
</div>
233+
<div class="row">
234+
<div class="col-sm-6 text-center"><span class="number">7.</span><input class="bip-input"></div>
235+
<div class="col-sm-6 text-center"><span class="number">8.</span><input class="bip-input"></div>
236+
</div>
237+
<div class="row">
238+
<div class="col-sm-6 text-center"><span class="number">9.</span><input class="bip-input"></div>
239+
<div class="col-sm-6 text-center"><span class="number">10.</span><input class="bip-input"></div>
240+
</div>
241+
<div class="row">
242+
<div class="col-sm-6 text-center"><span class="number">11.</span><input class="bip-input"></div>
243+
<div class="col-sm-6 text-center"><span class="number">12.</span><input class="bip-input"></div>
244+
</div>
245+
<div class="row">
246+
<div class="col-sm-6 text-center"><span class="number">13.</span><input class="bip-input"></div>
247+
<div class="col-sm-6 text-center"><span class="number">14.</span><input class="bip-input"></div>
248+
</div>
249+
<div class="row">
250+
<div class="col-sm-6 text-center"><span class="number">15.</span><input class="bip-input"></div>
251+
<div class="col-sm-6 text-center"><span class="number">16.</span><input class="bip-input"></div>
252+
</div>
253+
<div class="row">
254+
<div class="col-sm-6 text-center"><span class="number">17.</span><input class="bip-input"></div>
255+
<div class="col-sm-6 text-center"><span class="number">18.</span><input class="bip-input"></div>
256+
</div>
257+
<div class="row">
258+
<div class="col-sm-6 text-center"><span class="number">19.</span><input class="bip-input"></div>
259+
<div class="col-sm-6 text-center"><span class="number">20.</span><input class="bip-input"></div>
260+
</div>
261+
<div class="row">
262+
<div class="col-sm-6 text-center"><span class="number">21.</span><input class="bip-input"></div>
263+
<div class="col-sm-6 text-center"><span class="number">22.</span><input class="bip-input"></div>
264+
</div>
265+
<div class="row">
266+
<div class="col-sm-6 text-center"><span class="number">23.</span><input class="bip-input"></div>
267+
<div class="col-sm-6 text-center"><span class="number">24.</span><input id="checksum" class="input" placeholder="First 3 bits of checksum" onkeypress="return isNumberKey(event,this, 3)"></div>
268+
</div>
269+
270+
<button onclick="checksum()" class="button-class" id="submit-button">Submit</button>
271+
272+
273+
274+
<div id="possible-checksums-result"></div>
275+
276+
<div id="checksum-result"></div>
277+
278+
<div id="qrcode-container" style="margin-top:25px;">
279+
<div id="qrcode" class="qrcode"></div>
280+
</div>
281+
</div> <!-- end container -->
282+
<script src="files/footer.js"></script>
283+
284+
</html>

0 commit comments

Comments
 (0)