-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathenterkeys.html
More file actions
269 lines (248 loc) · 9.99 KB
/
enterkeys.html
File metadata and controls
269 lines (248 loc) · 9.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Rexchain Wallet</title>
<link rel="stylesheet" type="text/css" href="css/sequentiawallet.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.5/css/uikit.min.css" />
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700,900" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.5/js/uikit.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.5/js/uikit-icons.min.js"></script>
</head>
<body style="background-color: #fff;">
<!-- Main menu -->
<nav class="uk-navbar-container" uk-navbar="boundary-align: true; align: right;">
<div class="uk-navbar-left">
<ul class="uk-navbar-nav">
<li><a class="uk-navbar-item uk-logo" href="index.html"> Rexchain Wallet </a></li>
</ul>
</div>
<div class="uk-navbar-right">
<ul class="uk-navbar-nav">
<li>
<a class="uk-navbar-toggle" uk-navbar-toggle-icon href=""></a>
<div class="uk-navbar-dropdown">
<ul class="uk-nav uk-navbar-dropdown-nav">
<li id="menu_item"><a href="mailto:hola@prescrypto.com?Subject=RexChain-Contact">Contact</a></li>
</ul>
</div>
</li>
</ul>
</div>
</nav>
<!-- Closing Main menu -->
<div class="grey-background" style="padding:10px;">
<div class="uk-grid-medium" align="center" style="padding:0;"> <!--medium size grid-->
<form class="uk-form-horizontal uk-margin-large"> <!--Enterkeys form-->
<!-- Alert Invalid Keys-->
<div id="alert"></div>
<!-- Import keys inputs -->
<div class="uk-margin">
<label class="uk-form-label" for="form-horizontal-text">Import your keys</label>
<div class="js-upload uk-placeholder uk-text-center">
<span uk-icon="icon: cloud-upload"></span>
<span class="uk-text-middle">Attach your Keys from one file by dropping it here or</span>
<div uk-form-custom>
<input id="key_one_file" type="file">
<span id="upload_link" class="uk-link">Select your Key file from computer</span>
</div>
</div>
</div>
<!--Private keys-->
<div class="uk-margin">
<label class="uk-form-label" for="form-horizontal-text">Private Keys</label>
<div class="uk-form-controls">
<textarea id="privkey" name="privkey" class="uk-input" id="form-horizontal-text" type="text" placeholder="Paste keys"></textarea>
</div>
</div>
<!--Public keys-->
<div class="uk-margin">
<label class="uk-form-label" for="form-horizontal-text">Public Keys</label>
<div class="uk-form-controls">
<textarea id="pubkey" name="pubkey" class="uk-input" id="form-horizontal-text" type="text" placeholder="Paste keys"></textarea>
</div>
</div>
</form>
</div> <!--Closing Medium size div-->
</div>
<!--Pin code section-->
<div class="uk-grid-medium" align="center" style="padding:30px 0 20px 0;">
<div id="box_pin_code" class="uk-margin" align="center">
<h2><img style="height:40px;margin-bottom:10px;" src="media/dark-locker.svg" alt=""> PIN</h2>
<p><strong>Enter a 4 digits pin code</strong><br>Make sure you remember it, you’ll need it for all your transactions.</p>
<div class="uk-form-controls">
<input id="pin_code" name="pin_code" class="uk-input" type="password" maxlength="4" pattern="[0-9]*" placeholder="Enter PIN code" required />
</div>
<br>
<div id="success_button" >
<button class="uk-button uk-button-default" id="verify_keys"> Verify Keys</button>
</div>
</div>
</div>
<script src="js/localforage.min.js"></script>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/core-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/sha256.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
<script src="js/jsencrypt.js"></script>
<script src="js/wallet.js"></script>
<script>
// Functions
function hash_string(pin_code){
//This method calculate hash for the value from pin
var pin = CryptoJS.SHA256(pin_code);
var pin_hash = pin.toString(CryptoJS.enc.b64);
return pin_hash
}
function encrypt_privkey(pin){
//Encrypt private key and save in localforage
var privatekey = $('#privkey').val();
//Encrypt private key
var encrypt = CryptoJS.AES.encrypt(privatekey, hash_string(pin));
var encrypt_b64 = encrypt.toString(CryptoJS.enc.b64);
//Input private key in the field privkey
$('#privkey').val(encrypt_b64);
}
function validate_pubkey(pubkey){
// Verify if the field pubkey is empty
if (pubkey.length===0){
return false
}else{
return true
}
}
function validate_privkey(privkey){
// Verify if the field privkey is empty
if(privkey.lengthh===0){
return false
}else{
return true
}
}
function validate_keys(pubkey, privkey){
// Is a small test for validate the keys
var alert_danger_keys = '<div class="uk-alert-danger" uk-alert>\
<a class="uk-alert-close" uk-close></a>\
<p id="alert">Error. You have entered invalid keys; Please try again.</p>\
</div>'
if (validate_privkey(privkey) && validate_pubkey(pubkey)){
// Encrypt with the public key
var encrypt = new JSEncrypt();
var test = 'This a test';
encrypt.setPublicKey(pubkey);
var encrypted = encrypt.encrypt(test);
// Decrypt with the private key
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(privkey);
var uncrypted = decrypt.decrypt(encrypted);
//The keys are valid
if(uncrypted === test){
console.log("Valid Keys");
return true
}
}else{
$('#alert').html(alert_danger_keys);
return false
}
}
function read_key_onefile(e){
/* This method reading and save in input the public key and
private key from one file is necessary that the keys are separated
through "\n".
*/
var file = e.target.files[0]
//Small Validation if file is empty
if (!file) {
return;
}
//Read file
var read = new FileReader();
read.onload = function(e) {
var content = e.target.result;
//Find if file has a public key
var position_pubkey_start = content.search("-----BEGIN PUBLIC KEY-----");
var position_pubkey_end = content.search("-----END PUBLIC KEY-----");
//Take the encrypt private key from file
var position_prikey_start = content.search("-----BEGIN ENCRYPTED PRIVATE KEY-----");
var position_prikey_end = content.search("-----END ENCRYPTED PRIVATE KEY-----");
if (position_pubkey_start > 0 & position_prikey_start > 0){
//Take the public key from file, where "-----END PUBLIC KEY-----".lenght = 24
var public_key = content.substring(position_pubkey_start,position_pubkey_end + 24);
$("#pubkey").html(public_key);
//Take the private key from file
var private_key = content.substring(position_prikey_start + 39, position_prikey_end - 1);
$("#privkey").html(private_key);
}else{
console.log("You file do not contains a keys");
return;
}
};
read.readAsText(file);
}
function decrypt_privkey(pin){
//Encrypt private key and save in localforage
var privatekey = $('#privkey').val();
//Encrypt private key
var decrypt = CryptoJS.AES.decrypt(privatekey, hash_string(pin));
var decrypt_string = null;
try{
var decrypt_string = decrypt.toString(CryptoJS.enc.Utf8);
}catch(err){
alert("PIN CODE invalid");
console.log(err);
}
return decrypt_string
}
function verify_files_keys(){
//Variables
var success_button = '\
<a id="next_button" class="uk-button uk-button-default" href="genometrics.html"> Next </a>'
var alert_success = '<div class="uk-alert-success" uk-alert>\
<a class="uk-alert-close" uk-close></a>\
<p id="alert">';
var alert_error = '<div class="uk-alert-danger" uk-alert>\
<a class="uk-alert-close" uk-close></a>\
<p id="alert">';
var alert_end ='</p></div>';
var pin_code = $('#pin_code').val();
var pubkey = $('#pubkey').val();
if(pin_code.length == 0){
$('#alert').html(alert_success+'Please enter your PIN CODE'+alert_end);
}else{
if (validate_keys(pubkey, $('#privkey').val())){
$('#alert').html(alert_success+'Your private key is not encrypted, we encrypt it with your PIN'+alert_end);
//Symmetric encrypt private key
encrypt_privkey(pin_code);
//Save keys
save_key($("#privkey").val(), $("#pubkey").val());
$('#success_button').html(success_button);
}else{
var privkey = decrypt_privkey(pin_code);
if (validate_keys(pubkey, privkey)){
//Save keys
save_key($("#privkey").val(), $("#pubkey").val());
$('#alert').html(alert_success+'Valid Keys, please give click in button next'+alert_end);
$('#success_button').html(success_button);
}
}
}
}
// Events
$('#verify_keys').on('click', function(e){
e.preventDefault();
verify_files_keys();
});
document.getElementById('key_one_file')
.addEventListener('change', read_key_onefile, false);
//Validation for Pin code
$(function(){
$('#pin_code').keypress(function(e) {
if(isNaN(this.value + String.fromCharCode(e.charCode)))
return false;
})
});
</script>
</body>
</html>