Files
@ 7eec13103f80
Branch filter:
Location: CryptoJS/src/main.js - annotation
7eec13103f80
1.3 KiB
text/javascript
encrypt/decrypt wrappers
f425e00a94c6 f425e00a94c6 944bd9524df4 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 7eec13103f80 f425e00a94c6 944bd9524df4 bcd08758ec7c bcd08758ec7c bcd08758ec7c bcd08758ec7c bcd08758ec7c 944bd9524df4 bcd08758ec7c 7eec13103f80 7eec13103f80 bcd08758ec7c | import * as util from "./util.js";
import {blake2s} from "./blake.js";
import {pbkdf2} from "./pbkdf2.js";
import {Chacha20,encrypt as _encrypt,decrypt as _decrypt} from "./chacha.js";
const VERSION=1;
function encrypt(s,password){
let bs=util.str2utf8(s);
let pass=util.str2utf8(password);
let noncedCiphertext=_encrypt(bs,pass);
let signature=blake2s([VERSION].concat(noncedCiphertext),16,pass);
let arr=[VERSION].concat(signature,noncedCiphertext);
return util.bytes2base64(arr);
}
function decrypt(s,password){
let pass=util.str2utf8(password);
let arr=util.base642bytes(s);
let version=arr[0];
let signature=arr.slice(1,17);
let noncedCiphertext=arr.slice(17);
let check=blake2s([version].concat(noncedCiphertext),16,pass);
if(!signature.every((b,i)=>b===check[i])){return false;}
if(version>VERSION){return false;}
let plainbytes=_decrypt(noncedCiphertext,pass);
return util.utf82str(plainbytes);
}
export default {util,blake2s,pbkdf2,Chacha20,encrypt,decrypt};
// export for tests running on Node
if(typeof module!=='undefined'&&module.hasOwnProperty('exports')){
module.exports.util=util;
module.exports.blake2s=blake2s;
module.exports.pbkdf2=pbkdf2;
module.exports.Chacha20=Chacha20;
module.exports.encrypt=_encrypt;
module.exports.decrypt=_decrypt;
}
|