2014-10-21 20:14:48 -07:00
|
|
|
/**
|
2014-10-24 05:36:28 -07:00
|
|
|
* Small module for some helpers that wrap sjcl with some good practices.
|
2014-10-21 20:14:48 -07:00
|
|
|
*/
|
2014-10-27 05:44:41 -07:00
|
|
|
var sjcl = require('../../lib/sjcl');
|
2014-10-21 20:14:48 -07:00
|
|
|
var log = require('../log.js');
|
2014-10-25 15:57:12 -07:00
|
|
|
var _ = require('lodash');
|
2014-10-21 20:14:48 -07:00
|
|
|
|
|
|
|
var SALT = 'copay random string NWRlNmExMTE4NzIzYzYyYWMwODU1MTdkN';
|
|
|
|
var SEPARATOR = '&';
|
|
|
|
var defaultOptions = {
|
|
|
|
adata: '',
|
|
|
|
cipher: 'aes',
|
|
|
|
ks: 128,
|
|
|
|
iter: 2000,
|
|
|
|
mode: 'ccm',
|
|
|
|
ts: 64
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
|
|
kdf: function(value1, value2) {
|
|
|
|
return sjcl.codec.base64.fromBits(sjcl.misc.pbkdf2(value1 + value2, SALT));
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Encrypts symmetrically using a passphrase
|
|
|
|
*/
|
|
|
|
encrypt: function(key, message) {
|
2014-10-24 08:24:44 -07:00
|
|
|
if (!_.isString(message)) {
|
|
|
|
message = JSON.stringify(message);
|
|
|
|
}
|
2014-10-21 20:14:48 -07:00
|
|
|
return sjcl.encrypt(key, message);
|
|
|
|
},
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Decrypts symmetrically using a passphrase
|
|
|
|
*/
|
|
|
|
decrypt: function(key, cypher) {
|
|
|
|
var output = {};
|
|
|
|
try {
|
|
|
|
return sjcl.decrypt(key, cypher);
|
|
|
|
} catch (e) {
|
|
|
|
log.error('Decryption failed due to error: ' + e.message);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|