Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
it('Can encrypt and decrypt private key for mobile', () => {
// Arrange:
const privateKey = '2a91e1d5c110a8d0105aad4683f962c2a56663a3cad46666b16d243174673d90';
const password = 'TestTest';
// Act:
const result = Crypto.toMobileKey(password, privateKey);
const encrypted = result.encrypted;
const salt = CryptoJS.enc.Hex.parse(result.salt);
const key = CryptoJS.PBKDF2(password, salt, {
keySize: 256 / 32,
iterations: 2000,
});
const iv = encrypted.substring(0, 32);
const encryptedPrvKey = encrypted.substring(32, 128);
const obj = {
ciphertext: CryptoJS.enc.Hex.parse(encryptedPrvKey),
iv: convert.hexToUint8(iv),
key: convert.hexToUint8(key.toString()),
};
const decrypted = Crypto.decrypt(obj);
// Assert:
function passToHash(passObject) {
console.log('# passToHash')
try {
const salt = passObject.salt ? CryptoJS.enc.Hex.parse(passObject.salt) : CryptoJS.lib.WordArray.random(128 / 8);
const hash = CryptoJS.PBKDF2(passObject.password, salt, { keySize: 256 / 32, iterations: 10000 });
const hashedObjetc = {
salt: salt.toString(),
hash: hash.toString()
}
return hashedObjetc;
} catch (error) {
console.log('Error in pass to hash')
throw new Error(error);
}
}
private hashPassword(givenPassword: string): string {
const options = {
keySize: this.password.keysize,
iterations: this.password.iterations
};
return CryptoJS.PBKDF2(givenPassword, this.password.salt, options).toString();
}
CryptoService.prototype.unlock = function (pin, target) {
var saved_hash = localStorage.getItem('simpleos-hash');
var salt = JSON.parse(localStorage.getItem('simpleos-salt'));
var hash = CryptoJS.PBKDF2(pin, salt, { keySize: 512 / 32, iterations: 1000 }).toString();
if (hash === saved_hash) {
this.locked = false;
this.router.navigate(target).catch(function () {
alert('cannot navigate :(');
});
return true;
}
else {
this.locked = true;
return false;
}
};
CryptoService.prototype.storeLedgerAccount = function (pbk, slotNumber) {
function decrypt(transitmessage, pass) {
var keySize = 256;
var ivSize = 128;
var saltSize = 256;
var iterations = 1000;
var hexResult = base64ToHex(transitmessage)
var salt = CryptoJS.enc.Hex.parse(hexResult.substr(0, 64));
var iv = CryptoJS.enc.Hex.parse(hexResult.substr(64, 32));
var encrypted = hexToBase64(hexResult.substring(96));
var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
function derive_key (secret, salt, iterations, keylen) {
var iterations = iterations || 1000;
var keylen = keylen || 32;
var config = {
keySize: keylen / 4,
iterations: iterations,
hasher: crypto.algo.SHA256
}
var key = crypto.PBKDF2(secret, salt, config);
return key.toString(crypto.enc.Base64);
}
SimpleCrypto.prototype.encrypt = function (data) {
if (data == void 0)
throw new Error('No data was attached to be encrypted. Encryption halted.');
var string = typeof data == "object" ? JSON.stringify(data) : typeof data == "string" || typeof data == "number" || typeof data == 'boolean' ? data.toString() : null;
if (null === string)
throw new Error('Only object, string, number and boolean data types that can be encrypted.');
var salt = SimpleCrypto.generateRandom(128, true);
var key = CryptoJS.PBKDF2(this._secret, salt, {
keySize: this._keySize / 32,
iterations: this._iterations
});
var initialVector = SimpleCrypto.generateRandom(128, true);
var encrypted = CryptoJS.AES.encrypt(string, key, {
iv: initialVector,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
var ciphered = salt.toString() + initialVector.toString() + encrypted.toString();
return ciphered;
};
SimpleCrypto.prototype.decrypt = function (ciphered, expectsObject, enc) {