diff --git a/dist/crypto.html b/dist/crypto.html
--- a/dist/crypto.html
+++ b/dist/crypto.html
@@ -38,8 +38,10 @@
form.querySelector("button[name='decrypt']").addEventListener("click",function(){
let res=cryptoJS.decrypt(input.value,password.value);
- if(res===1){res="! Nepodařilo se ověřit pravost zprávy. !";}
- else if(res===2){res="! Nekompatibilní verze programu. !";}
+ if(res===1){res="! Neplatný podpis. Nepodařilo se ověřit pravost zprávy. !";}
+ else if(res===2){res="! Neplatný formát zprávy. Nekompatibilní verze programu. !";}
+ else if(res===3){res="! Neplatný formát zprávy. Počet iterací mimo povolený rozsah. !";}
+ else if(res===4){res="! Neplatný formát zprávy. Příliš krátká zpráva. !";}
output.value=res;
});
diff --git a/src/main.js b/src/main.js
--- a/src/main.js
+++ b/src/main.js
@@ -4,6 +4,7 @@ import {pbkdf2} from "./pbkdf2.js";
import {Chacha20,encrypt as _encrypt,decrypt as _decrypt} from "./chacha.js";
const VERSION=1;
+const MAX_ITERS=24;
function encrypt(s,password){
let bs=util.str2utf8(s);
@@ -25,10 +26,12 @@ function decrypt(s,password){
let salt=arr.slice(18,30);
let ciphertext=arr.slice(30);
+ if(ciphertext.length==0){return 4;}
+ if(version>VERSION){return 2;}
+ if(iters>MAX_ITERS){return 3;}
let key=pbkdf2(pass,salt,1<b===check[i])){return 1;}
- if(version>VERSION){return 2;}
let plainbytes=_decrypt(ciphertext,key,salt);
return util.utf82str(plainbytes);
}
@@ -36,7 +39,7 @@ function decrypt(s,password){
function stretchKey(password,salt){
let start=Date.now(); // ms
let i,key;
- for(i=0;i<52;i++){
+ for(i=0;i<=MAX_ITERS;i++){
key=pbkdf2(password,salt,1<=500){break;}
}