/
command-line.js
70 lines (46 loc) · 1.44 KB
/
command-line.js
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
var cryptico = require('./cryptico');
var sjcl = require('./sjcl');
var fs = require('fs');
var path = require('path');
var dir_name = '.kanso';
var file_name = 'keystore';
var password = process.argv[2];
var storage_dir = findStorageDir(process.env);
if (isKeyStored(storage_dir)) {
console.log('key already exists in ' + storage_dir);
} else {
var keystoreFile = generateKeystore(password);
store(keystoreFile, storage_dir);
}
function generateKeystore(passphrase) {
var Bits = 1024;
var RSAkey = cryptico.generateRSAKey(passphrase, Bits, true);
var PublicKeyString = cryptico.publicKeyString(RSAkey);
console.log('Public Key:');
console.log(PublicKeyString);
var keystore = sjcl.encrypt(passphrase, cryptico.rsa_key_to_string(RSAkey), {adata: PublicKeyString} );
return keystore;
}
function findStorageDir(env) {
var home = env.HOME;
if (!home) home = __dirname;
return path.join(home, dir_name);
}
function isKeyStored(dir) {
var stored = false;
if (path.existsSync(dir)) {
if (path.existsSync(path.join(dir, file_name))) {
stored = true;
}
}
return stored;
}
function store(keystore, dir) {
fs.mkdir(dir, 0700, function(err){
var location = path.join(dir, file_name)
fs.writeFile(location, keystore, function (err) {
if (err) throw err;
console.log('Private key saved at ' + location);
});
});
}