-
Notifications
You must be signed in to change notification settings - Fork 10
/
encrypt.js
38 lines (32 loc) · 1.08 KB
/
encrypt.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
const pbkdf2 = require('pbkdf2')
const aesjs = require('aes-js')
const cryptoRandomString = require('crypto-random-string');
module.exports = function encrypt(account, password) {
const options = {
c: 8192,
dklen: 32,
prf: 'sha512',
salt: cryptoRandomString({ length: 64 }),
}
const key = pbkdf2.pbkdf2Sync(password, options.salt, options.c, options.dklen, options.prf)
const counter = generateRandomNumber();
const aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(counter));
const encryptedBytes = aesCtr.encrypt(account.secretKey);
const encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
const keystore = {
publicKey: account.publicKey.toString(),
Crypto: {
cipher: 'aes-128-ctr',
ciphertext: encryptedHex,
cipherparams: {
counter: counter
},
kdf: 'pbkdf2',
kdfparams: options
},
}
return keystore;
}
function generateRandomNumber() {
return Math.floor(100000 + Math.random() * 900000);
}