1 let cryp = require('crypto-browserify');
2 let scrypt = require('scrypt-js');
4 const scryptDKLen = 32;
7 function encryptKey(key , auth, scryptN, scryptP){
8 let authArray = new Buffer(auth);
9 let salt = cryp.randomBytes(32);
11 let derivedKey = scrypt.syncScrypt(authArray, salt, scryptN, scryptR, scryptP, scryptDKLen);
13 let encryptKey = derivedKey.slice(0, 16);
14 let keyBytes = key.xPrv.xprv;
15 let iv = cryp.randomBytes(16);
18 let cipherText = aesCTRXOR(encryptKey, keyBytes, iv);
25 salt:salt.toString('hex')
28 let mac = cryp.createHash('sha256').update(Buffer.from([...derivedKey.slice(16, 32), ...cipherText])).digest();
36 ciphertext: cipherText.toString('hex'),
38 iv: iv.toString('hex')
40 cipher: 'aes-128-ctr',
43 mac: mac.toString('hex')
48 exports.encryptKey = encryptKey;
50 function aesCTRXOR(key, inText, iv) {
51 let cipher = cryp.createCipheriv('aes-128-ctr', key, iv);
53 var ciphertext = Buffer.from([
54 ...cipher.update(Buffer.from(inText, 'hex')),