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;} }