use 15k iterations in PBKDF2 in backward compatible way

v1 v1.4.3
robinmoisson 2023-04-19 15:17:44 +02:00
rodzic b797d780c3
commit 54cd15a1ab
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 9419716500078583
6 zmienionych plików z 391 dodań i 373 usunięć

Wyświetl plik

@ -70,15 +70,20 @@ try{
* Salt and encrypt a msg with a password. * Salt and encrypt a msg with a password.
* Inspired by https://github.com/adonespitogo * Inspired by https://github.com/adonespitogo
*/ */
var keySize = 256; var pbkdf2Parameters = {
var iterations = 1000; keySize: 256/32,
iterations: 1000,
};
if (isTemplateSupporting15kIterations()) {
pbkdf2Parameters.iterations = 15000;
pbkdf2Parameters.hasher = CryptoJS.algo.SHA256;
}
function encrypt (msg, password) { function encrypt (msg, password) {
var salt = CryptoJS.lib.WordArray.random(128/8); var salt = CryptoJS.lib.WordArray.random(128/8);
var key = CryptoJS.PBKDF2(password, salt, { var key = CryptoJS.PBKDF2(password, salt, pbkdf2Parameters);
keySize: keySize/32,
iterations: iterations
});
var iv = CryptoJS.lib.WordArray.random(128/8); var iv = CryptoJS.lib.WordArray.random(128/8);
@ -90,7 +95,7 @@ function encrypt (msg, password) {
// salt, iv will be hex 32 in length // salt, iv will be hex 32 in length
// append them to the ciphertext for use in decryption // append them to the ciphertext for use in decryption
var encryptedMsg = salt.toString()+ iv.toString() + encrypted.toString(); var encryptedMsg = salt.toString() + iv.toString() + encrypted.toString();
return encryptedMsg; return encryptedMsg;
} }
@ -123,6 +128,18 @@ var data = {
genFile(data); genFile(data);
function isTemplateSupporting15kIterations() {
return getTemplateContent().includes("// STATICRYPT VERSION: >= 1.4.3");
}
function getTemplateContent() {
try {
return FileSystem.readFileSync(namedArgs.f, 'utf8');
} catch (e) {
console.log("Failure: could not read template!");
process.exit(1);
}
}
/** /**
* Fill the template with provided data and writes it to output file. * Fill the template with provided data and writes it to output file.
@ -130,12 +147,7 @@ genFile(data);
* @param data * @param data
*/ */
function genFile(data){ function genFile(data){
try{ var templateContents = getTemplateContent();
var templateContents = FileSystem.readFileSync(namedArgs.f, 'utf8');
}catch(e){
console.log("Failure: could not read template!");
process.exit(1);
}
var renderedTemplate = render(templateContents, data); var renderedTemplate = render(templateContents, data);

2
cli/package-lock.json wygenerowano
Wyświetl plik

@ -1,6 +1,6 @@
{ {
"name": "staticrypt", "name": "staticrypt",
"version": "1.4.2", "version": "1.4.3",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

Wyświetl plik

@ -1,6 +1,6 @@
{ {
"name": "staticrypt", "name": "staticrypt",
"version": "1.4.2", "version": "1.4.3",
"description": "Based on the [crypto-js](https://github.com/brix/crypto-js) library, StatiCrypt uses AES-256 to encrypt your input with your passphrase and put it in a HTML file with a password prompt that can decrypted in-browser (client side).", "description": "Based on the [crypto-js](https://github.com/brix/crypto-js) library, StatiCrypt uses AES-256 to encrypt your input with your passphrase and put it in a HTML file with a password prompt that can decrypted in-browser (client side).",
"main": "index.js", "main": "index.js",
"bin": { "bin": {

Wyświetl plik

@ -143,12 +143,14 @@
{crypto_tag} {crypto_tag}
<script> <script>
// STATICRYPT VERSION: >= 1.4.3
/** /**
* Decrypt a salted msg using a password. * Decrypt a salted msg using a password.
* Inspired by https://github.com/adonespitogo * Inspired by https://github.com/adonespitogo
*/ */
var keySize = 256; var keySize = 256;
var iterations = 1000; var iterations = 15000;
function decrypt (encryptedMsg, pass) { function decrypt (encryptedMsg, pass) {
var salt = CryptoJS.enc.Hex.parse(encryptedMsg.substr(0, 32)); var salt = CryptoJS.enc.Hex.parse(encryptedMsg.substr(0, 32));
var iv = CryptoJS.enc.Hex.parse(encryptedMsg.substr(32, 32)) var iv = CryptoJS.enc.Hex.parse(encryptedMsg.substr(32, 32))
@ -156,7 +158,8 @@
var key = CryptoJS.PBKDF2(pass, salt, { var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize/32, keySize: keySize/32,
iterations: iterations iterations: iterations,
hasher: CryptoJS.algo.SHA256,
}); });
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { var decrypted = CryptoJS.AES.decrypt(encrypted, key, {

Wyświetl plik

@ -203,13 +203,14 @@ Filename changed to circumvent adblockers that mistake it for a crypto miner (se
* Inspired by https://github.com/adonespitogo * Inspired by https://github.com/adonespitogo
*/ */
var keySize = 256; var keySize = 256;
var iterations = 1000; var iterations = 15000;
function encrypt (msg, password) { function encrypt (msg, password) {
var salt = CryptoJS.lib.WordArray.random(128/8); var salt = CryptoJS.lib.WordArray.random(128/8);
var key = CryptoJS.PBKDF2(password, salt, { var key = CryptoJS.PBKDF2(password, salt, {
keySize: keySize/32, keySize: keySize/32,
iterations: iterations iterations: iterations,
hasher: CryptoJS.algo.SHA256,
}); });
var iv = CryptoJS.lib.WordArray.random(128/8); var iv = CryptoJS.lib.WordArray.random(128/8);

Wyświetl plik

@ -143,13 +143,14 @@
{crypto_tag} {crypto_tag}
<script> <script>
// STATICRYPT VERSION: >= 1.4.3
/** /**
* Decrypt a salted msg using a password. * Decrypt a salted msg using a password.
* Inspired by https://github.com/adonespitogo * Inspired by https://github.com/adonespitogo
*/ */
var keySize = 256; var keySize = 256;
var iterations = 1000; var iterations = 15000;
function decrypt (encryptedMsg, pass) { function decrypt (encryptedMsg, pass) {
var salt = CryptoJS.enc.Hex.parse(encryptedMsg.substr(0, 32)); var salt = CryptoJS.enc.Hex.parse(encryptedMsg.substr(0, 32));
var iv = CryptoJS.enc.Hex.parse(encryptedMsg.substr(32, 32)) var iv = CryptoJS.enc.Hex.parse(encryptedMsg.substr(32, 32))
@ -157,7 +158,8 @@
var key = CryptoJS.PBKDF2(pass, salt, { var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize/32, keySize: keySize/32,
iterations: iterations iterations: iterations,
hasher: CryptoJS.algo.SHA256,
}); });
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { var decrypted = CryptoJS.AES.decrypt(encrypted, key, {