Skip to content

Instantly share code, notes, and snippets.

@CodyKochmann
Created October 5, 2015 18:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CodyKochmann/53a0e693b5af3ae249e1 to your computer and use it in GitHub Desktop.
Save CodyKochmann/53a0e693b5af3ae249e1 to your computer and use it in GitHub Desktop.
Simple wrapper around CryptoJS to make best practices in encryption simple and easier to remember. Example usage: Crypto.encrypt(secret_data,password) Crypto.decrypt(encrypted,password) Crypto.hash(password)
(function(){
/* CryptoJS v3.1.2 below */
var CryptoJS=CryptoJS||function(g,p){var e={},m=e.lib={},r=function(){},v=m.Base={extend:function(a){r.prototype=this;var d=new r;a&&d.mixIn(a);d.hasOwnProperty("init")||(d.init=function(){d.$super.init.apply(this,arguments)});d.init.prototype=d;d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
u=m.WordArray=v.extend({init:function(a,d){a=this.words=a||[];this.sigBytes=d!=p?d:4*a.length},toString:function(a){return(a||x).stringify(this)},concat:function(a){var d=this.words,l=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var q=0;q<a;q++)d[b+q>>>2]|=(l[q>>>2]>>>24-q%4*8&255)<<24-(b+q)%4*8;else if(65535<l.length)for(q=0;q<a;q+=4)d[b+q>>>2]=l[q>>>2];else d.push.apply(d,l);this.sigBytes+=a;return this},clamp:function(){var a=this.words,d=this.sigBytes;a[d>>>2]&=4294967295<<32-
d%4*8;a.length=g.ceil(d/4)},clone:function(){var a=v.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var d=[],l=0;l<a;l+=4)d.push(4294967296*g.random()|0);return new u.init(d,a)}}),y=e.enc={},x=y.Hex={stringify:function(a){var d=a.words;a=a.sigBytes;for(var l=[],b=0;b<a;b++){var q=d[b>>>2]>>>24-b%4*8&255;l.push((q>>>4).toString(16));l.push((q&15).toString(16))}return l.join("")},parse:function(a){for(var d=a.length,l=[],b=0;b<d;b+=2)l[b>>>3]|=parseInt(a.substr(b,2),16)<<
24-b%8*4;return new u.init(l,d/2)}},c=y.Latin1={stringify:function(a){var d=a.words;a=a.sigBytes;for(var l=[],b=0;b<a;b++)l.push(String.fromCharCode(d[b>>>2]>>>24-b%4*8&255));return l.join("")},parse:function(a){for(var d=a.length,l=[],b=0;b<d;b++)l[b>>>2]|=(a.charCodeAt(b)&255)<<24-b%4*8;return new u.init(l,d)}},w=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(c.stringify(a)))}catch(d){throw Error("Malformed UTF-8 data");}},parse:function(a){return c.parse(unescape(encodeURIComponent(a)))}},
t=m.BufferedBlockAlgorithm=v.extend({reset:function(){this._data=new u.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=w.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var d=this._data,l=d.words,b=d.sigBytes,q=this.blockSize,c=b/(4*q),c=a?g.ceil(c):g.max((c|0)-this._minBufferSize,0);a=c*q;b=g.min(4*a,b);if(a){for(var t=0;t<a;t+=q)this._doProcessBlock(l,t);t=l.splice(0,a);d.sigBytes-=b}return new u.init(t,b)},clone:function(){var a=v.clone.call(this);
a._data=this._data.clone();return a},_minBufferSize:0});m.Hasher=t.extend({cfg:v.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){t.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(d,l){return(new a.init(l)).finalize(d)}},_createHmacHelper:function(a){return function(d,l){return(new z.HMAC.init(a,
l)).finalize(d)}}});var z=e.algo={};return e}(Math);
(function(){var g=CryptoJS,p=g.lib.WordArray;g.enc.Base64={stringify:function(e){var m=e.words,p=e.sigBytes,v=this._map;e.clamp();e=[];for(var u=0;u<p;u+=3)for(var g=(m[u>>>2]>>>24-u%4*8&255)<<16|(m[u+1>>>2]>>>24-(u+1)%4*8&255)<<8|m[u+2>>>2]>>>24-(u+2)%4*8&255,x=0;4>x&&u+.75*x<p;x++)e.push(v.charAt(g>>>6*(3-x)&63));if(m=v.charAt(64))for(;e.length%4;)e.push(m);return e.join("")},parse:function(e){var m=e.length,r=this._map,v=r.charAt(64);v&&(v=e.indexOf(v),-1!=v&&(m=v));for(var v=[],u=0,g=0;g<m;g++)if(g%
4){var x=r.indexOf(e.charAt(g-1))<<g%4*2,c=r.indexOf(e.charAt(g))>>>6-g%4*2;v[u>>>2]|=(x|c)<<24-u%4*8;u++}return p.create(v,u)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
(function(g){function p(c,e,a,d,l,b,q){c=c+(e&a|~e&d)+l+q;return(c<<b|c>>>32-b)+e}function e(c,e,a,d,l,b,q){c=c+(e&d|a&~d)+l+q;return(c<<b|c>>>32-b)+e}function m(c,e,a,d,l,b,q){c=c+(e^a^d)+l+q;return(c<<b|c>>>32-b)+e}function r(c,e,a,d,l,b,q){c=c+(a^(e|~d))+l+q;return(c<<b|c>>>32-b)+e}for(var v=CryptoJS,u=v.lib,y=u.WordArray,x=u.Hasher,u=v.algo,c=[],w=0;64>w;w++)c[w]=4294967296*g.abs(g.sin(w+1))|0;u=u.MD5=x.extend({_doReset:function(){this._hash=new y.init([1732584193,4023233417,2562383102,271733878])},
_doProcessBlock:function(t,g){for(var a=0;16>a;a++){var d=g+a,l=t[d];t[d]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360}var a=this._hash.words,d=t[g+0],l=t[g+1],b=t[g+2],q=t[g+3],B=t[g+4],u=t[g+5],v=t[g+6],x=t[g+7],y=t[g+8],C=t[g+9],D=t[g+10],E=t[g+11],F=t[g+12],G=t[g+13],H=t[g+14],w=t[g+15],f=a[0],n=a[1],h=a[2],k=a[3],f=p(f,n,h,k,d,7,c[0]),k=p(k,f,n,h,l,12,c[1]),h=p(h,k,f,n,b,17,c[2]),n=p(n,h,k,f,q,22,c[3]),f=p(f,n,h,k,B,7,c[4]),k=p(k,f,n,h,u,12,c[5]),h=p(h,k,f,n,v,17,c[6]),n=p(n,h,k,f,x,22,c[7]),
f=p(f,n,h,k,y,7,c[8]),k=p(k,f,n,h,C,12,c[9]),h=p(h,k,f,n,D,17,c[10]),n=p(n,h,k,f,E,22,c[11]),f=p(f,n,h,k,F,7,c[12]),k=p(k,f,n,h,G,12,c[13]),h=p(h,k,f,n,H,17,c[14]),n=p(n,h,k,f,w,22,c[15]),f=e(f,n,h,k,l,5,c[16]),k=e(k,f,n,h,v,9,c[17]),h=e(h,k,f,n,E,14,c[18]),n=e(n,h,k,f,d,20,c[19]),f=e(f,n,h,k,u,5,c[20]),k=e(k,f,n,h,D,9,c[21]),h=e(h,k,f,n,w,14,c[22]),n=e(n,h,k,f,B,20,c[23]),f=e(f,n,h,k,C,5,c[24]),k=e(k,f,n,h,H,9,c[25]),h=e(h,k,f,n,q,14,c[26]),n=e(n,h,k,f,y,20,c[27]),f=e(f,n,h,k,G,5,c[28]),k=e(k,f,
n,h,b,9,c[29]),h=e(h,k,f,n,x,14,c[30]),n=e(n,h,k,f,F,20,c[31]),f=m(f,n,h,k,u,4,c[32]),k=m(k,f,n,h,y,11,c[33]),h=m(h,k,f,n,E,16,c[34]),n=m(n,h,k,f,H,23,c[35]),f=m(f,n,h,k,l,4,c[36]),k=m(k,f,n,h,B,11,c[37]),h=m(h,k,f,n,x,16,c[38]),n=m(n,h,k,f,D,23,c[39]),f=m(f,n,h,k,G,4,c[40]),k=m(k,f,n,h,d,11,c[41]),h=m(h,k,f,n,q,16,c[42]),n=m(n,h,k,f,v,23,c[43]),f=m(f,n,h,k,C,4,c[44]),k=m(k,f,n,h,F,11,c[45]),h=m(h,k,f,n,w,16,c[46]),n=m(n,h,k,f,b,23,c[47]),f=r(f,n,h,k,d,6,c[48]),k=r(k,f,n,h,x,10,c[49]),h=r(h,k,f,n,
H,15,c[50]),n=r(n,h,k,f,u,21,c[51]),f=r(f,n,h,k,F,6,c[52]),k=r(k,f,n,h,q,10,c[53]),h=r(h,k,f,n,D,15,c[54]),n=r(n,h,k,f,l,21,c[55]),f=r(f,n,h,k,y,6,c[56]),k=r(k,f,n,h,w,10,c[57]),h=r(h,k,f,n,v,15,c[58]),n=r(n,h,k,f,G,21,c[59]),f=r(f,n,h,k,B,6,c[60]),k=r(k,f,n,h,E,10,c[61]),h=r(h,k,f,n,b,15,c[62]),n=r(n,h,k,f,C,21,c[63]);a[0]=a[0]+f|0;a[1]=a[1]+n|0;a[2]=a[2]+h|0;a[3]=a[3]+k|0},_doFinalize:function(){var c=this._data,e=c.words,a=8*this._nDataBytes,d=8*c.sigBytes;e[d>>>5]|=128<<24-d%32;var l=g.floor(a/
4294967296);e[(d+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;e[(d+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;c.sigBytes=4*(e.length+1);this._process();c=this._hash;e=c.words;for(a=0;4>a;a++)d=e[a],e[a]=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360;return c},clone:function(){var c=x.clone.call(this);c._hash=this._hash.clone();return c}});v.MD5=x._createHelper(u);v.HmacMD5=x._createHmacHelper(u)})(Math);
(function(){var g=CryptoJS,p=g.lib,e=p.Base,m=p.WordArray,p=g.algo,r=p.EvpKDF=e.extend({cfg:e.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,g){for(var p=this.cfg,r=p.hasher.create(),c=m.create(),w=c.words,t=p.keySize,p=p.iterations;w.length<t;){z&&r.update(z);var z=r.update(e).finalize(g);r.reset();for(var a=1;a<p;a++)z=r.finalize(z),r.reset();c.concat(z)}c.sigBytes=4*t;return c}});g.EvpKDF=function(e,g,m){return r.create(m).compute(e,
g)}})();
CryptoJS.lib.Cipher||function(g){var p=CryptoJS,e=p.lib,m=e.Base,r=e.WordArray,v=e.BufferedBlockAlgorithm,u=p.enc.Base64,y=p.algo.EvpKDF,x=e.Cipher=v.extend({cfg:m.extend(),createEncryptor:function(a,b){return this.create(this._ENC_XFORM_MODE,a,b)},createDecryptor:function(a,b){return this.create(this._DEC_XFORM_MODE,a,b)},init:function(a,b,d){this.cfg=this.cfg.extend(d);this._xformMode=a;this._key=b;this.reset()},reset:function(){v.reset.call(this);this._doReset()},process:function(a){this._append(a);return this._process()},
finalize:function(a){a&&this._append(a);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(l){return{encrypt:function(b,q,c){return("string"==typeof q?d:a).encrypt(l,b,q,c)},decrypt:function(b,q,c){return("string"==typeof q?d:a).decrypt(l,b,q,c)}}}});e.StreamCipher=x.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var c=p.mode={},w=function(a,b,d){var c=this._iv;c?this._iv=g:c=this._prevBlock;for(var e=0;e<d;e++)a[b+e]^=
c[e]},t=(e.BlockCipherMode=m.extend({createEncryptor:function(a,b){return this.Encryptor.create(a,b)},createDecryptor:function(a,b){return this.Decryptor.create(a,b)},init:function(a,b){this._cipher=a;this._iv=b}})).extend();t.Encryptor=t.extend({processBlock:function(a,b){var d=this._cipher,c=d.blockSize;w.call(this,a,b,c);d.encryptBlock(a,b);this._prevBlock=a.slice(b,b+c)}});t.Decryptor=t.extend({processBlock:function(a,b){var d=this._cipher,c=d.blockSize,e=a.slice(b,b+c);d.decryptBlock(a,b);w.call(this,
a,b,c);this._prevBlock=e}});c=c.CBC=t;t=(p.pad={}).Pkcs7={pad:function(a,b){for(var d=4*b,d=d-a.sigBytes%d,c=d<<24|d<<16|d<<8|d,e=[],g=0;g<d;g+=4)e.push(c);d=r.create(e,d);a.concat(d)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};e.BlockCipher=x.extend({cfg:x.cfg.extend({mode:c,padding:t}),reset:function(){x.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var d=a.createEncryptor;else d=a.createDecryptor,this._minBufferSize=1;this._mode=d.call(a,
this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var z=e.CipherParams=m.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),c=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?r.create([1398893684,
1701076831]).concat(a).concat(b):b).toString(u)},parse:function(a){a=u.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var d=r.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return z.create({ciphertext:a,salt:d})}},a=e.SerializableCipher=m.extend({cfg:m.extend({format:c}),encrypt:function(a,b,d,c){c=this.cfg.extend(c);var e=a.createEncryptor(d,c);b=e.finalize(b);e=e.cfg;return z.create({ciphertext:b,key:d,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding,blockSize:a.blockSize,formatter:c.format})},
decrypt:function(a,b,d,c){c=this.cfg.extend(c);b=this._parse(b,c.format);return a.createDecryptor(d,c).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,d,c){c||(c=r.random(8));a=y.create({keySize:b+d}).compute(a,c);d=r.create(a.words.slice(b),4*d);a.sigBytes=4*b;return z.create({key:a,iv:d,salt:c})}},d=e.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(d,b,c,e){e=this.cfg.extend(e);c=e.kdf.execute(c,
d.keySize,d.ivSize);e.iv=c.iv;d=a.encrypt.call(this,d,b,c.key,e);d.mixIn(c);return d},decrypt:function(d,b,c,e){e=this.cfg.extend(e);b=this._parse(b,e.format);c=e.kdf.execute(c,d.keySize,d.ivSize,b.salt);e.iv=c.iv;return a.decrypt.call(this,d,b,c.key,e)}})}();
(function(){for(var g=CryptoJS,p=g.lib.BlockCipher,e=g.algo,m=[],r=[],v=[],u=[],y=[],x=[],c=[],w=[],t=[],z=[],a=[],d=0;256>d;d++)a[d]=128>d?d<<1:d<<1^283;for(var l=0,b=0,d=0;256>d;d++){var q=b^b<<1^b<<2^b<<3^b<<4,q=q>>>8^q&255^99;m[l]=q;r[q]=l;var B=a[l],I=a[B],J=a[I],A=257*a[q]^16843008*q;v[l]=A<<24|A>>>8;u[l]=A<<16|A>>>16;y[l]=A<<8|A>>>24;x[l]=A;A=16843009*J^65537*I^257*B^16843008*l;c[q]=A<<24|A>>>8;w[q]=A<<16|A>>>16;t[q]=A<<8|A>>>24;z[q]=A;l?(l=B^a[a[a[J^B]]],b^=a[a[b]]):l=b=1}var K=[0,1,2,4,8,
16,32,64,128,27,54],e=e.AES=p.extend({_doReset:function(){for(var a=this._key,d=a.words,b=a.sigBytes/4,a=4*((this._nRounds=b+6)+1),e=this._keySchedule=[],l=0;l<a;l++)if(l<b)e[l]=d[l];else{var q=e[l-1];l%b?6<b&&4==l%b&&(q=m[q>>>24]<<24|m[q>>>16&255]<<16|m[q>>>8&255]<<8|m[q&255]):(q=q<<8|q>>>24,q=m[q>>>24]<<24|m[q>>>16&255]<<16|m[q>>>8&255]<<8|m[q&255],q^=K[l/b|0]<<24);e[l]=e[l-b]^q}d=this._invKeySchedule=[];for(b=0;b<a;b++)l=a-b,q=b%4?e[l]:e[l-4],d[b]=4>b||4>=l?q:c[m[q>>>24]]^w[m[q>>>16&255]]^t[m[q>>>
8&255]]^z[m[q&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,v,u,y,x,m)},decryptBlock:function(a,b){var d=a[b+1];a[b+1]=a[b+3];a[b+3]=d;this._doCryptBlock(a,b,this._invKeySchedule,c,w,t,z,r);d=a[b+1];a[b+1]=a[b+3];a[b+3]=d},_doCryptBlock:function(a,b,d,c,e,l,q,f){for(var n=this._nRounds,h=a[b]^d[0],k=a[b+1]^d[1],g=a[b+2]^d[2],m=a[b+3]^d[3],p=4,u=1;u<n;u++)var r=c[h>>>24]^e[k>>>16&255]^l[g>>>8&255]^q[m&255]^d[p++],t=c[k>>>24]^e[g>>>16&255]^l[m>>>8&255]^q[h&255]^d[p++],v=
c[g>>>24]^e[m>>>16&255]^l[h>>>8&255]^q[k&255]^d[p++],m=c[m>>>24]^e[h>>>16&255]^l[k>>>8&255]^q[g&255]^d[p++],h=r,k=t,g=v;r=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[g>>>8&255]<<8|f[m&255])^d[p++];t=(f[k>>>24]<<24|f[g>>>16&255]<<16|f[m>>>8&255]<<8|f[h&255])^d[p++];v=(f[g>>>24]<<24|f[m>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^d[p++];m=(f[m>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[g&255])^d[p++];a[b]=r;a[b+1]=t;a[b+2]=v;a[b+3]=m},keySize:8});g.AES=p._createHelper(e)})();
CryptoJS=CryptoJS||function(g,p){var e={},m=e.lib={},r=function(){},v=m.Base={extend:function(a){r.prototype=this;var d=new r;a&&d.mixIn(a);d.hasOwnProperty("init")||(d.init=function(){d.$super.init.apply(this,arguments)});d.init.prototype=d;d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
u=m.WordArray=v.extend({init:function(a,d){a=this.words=a||[];this.sigBytes=d!=p?d:4*a.length},toString:function(a){return(a||x).stringify(this)},concat:function(a){var d=this.words,c=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e<a;e++)d[b+e>>>2]|=(c[e>>>2]>>>24-e%4*8&255)<<24-(b+e)%4*8;else if(65535<c.length)for(e=0;e<a;e+=4)d[b+e>>>2]=c[e>>>2];else d.push.apply(d,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,d=this.sigBytes;a[d>>>2]&=4294967295<<32-
d%4*8;a.length=g.ceil(d/4)},clone:function(){var a=v.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var d=[],c=0;c<a;c+=4)d.push(4294967296*g.random()|0);return new u.init(d,a)}}),y=e.enc={},x=y.Hex={stringify:function(a){var d=a.words;a=a.sigBytes;for(var c=[],b=0;b<a;b++){var e=d[b>>>2]>>>24-b%4*8&255;c.push((e>>>4).toString(16));c.push((e&15).toString(16))}return c.join("")},parse:function(a){for(var d=a.length,c=[],b=0;b<d;b+=2)c[b>>>3]|=parseInt(a.substr(b,2),16)<<
24-b%8*4;return new u.init(c,d/2)}},c=y.Latin1={stringify:function(a){var d=a.words;a=a.sigBytes;for(var c=[],b=0;b<a;b++)c.push(String.fromCharCode(d[b>>>2]>>>24-b%4*8&255));return c.join("")},parse:function(a){for(var d=a.length,c=[],b=0;b<d;b++)c[b>>>2]|=(a.charCodeAt(b)&255)<<24-b%4*8;return new u.init(c,d)}},w=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(c.stringify(a)))}catch(d){throw Error("Malformed UTF-8 data");}},parse:function(a){return c.parse(unescape(encodeURIComponent(a)))}},
t=m.BufferedBlockAlgorithm=v.extend({reset:function(){this._data=new u.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=w.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var d=this._data,c=d.words,b=d.sigBytes,e=this.blockSize,m=b/(4*e),m=a?g.ceil(m):g.max((m|0)-this._minBufferSize,0);a=m*e;b=g.min(4*a,b);if(a){for(var p=0;p<a;p+=e)this._doProcessBlock(c,p);p=c.splice(0,a);d.sigBytes-=b}return new u.init(p,b)},clone:function(){var a=v.clone.call(this);
a._data=this._data.clone();return a},_minBufferSize:0});m.Hasher=t.extend({cfg:v.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){t.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(d,c){return(new a.init(c)).finalize(d)}},_createHmacHelper:function(a){return function(d,c){return(new z.HMAC.init(a,
c)).finalize(d)}}});var z=e.algo={};return e}(Math);
(function(g){for(var p=CryptoJS,e=p.lib,m=e.WordArray,r=e.Hasher,e=p.algo,v=[],u=[],y=function(a){return 4294967296*(a-(a|0))|0},x=2,c=0;64>c;){var w;a:{w=x;for(var t=g.sqrt(w),z=2;z<=t;z++)if(!(w%z)){w=!1;break a}w=!0}w&&(8>c&&(v[c]=y(g.pow(x,.5))),u[c]=y(g.pow(x,1/3)),c++);x++}var a=[],e=e.SHA256=r.extend({_doReset:function(){this._hash=new m.init(v.slice(0))},_doProcessBlock:function(d,c){for(var b=this._hash.words,e=b[0],g=b[1],m=b[2],p=b[3],r=b[4],t=b[5],v=b[6],x=b[7],w=0;64>w;w++){if(16>w)a[w]=
d[c+w]|0;else{var y=a[w-15],z=a[w-2];a[w]=((y<<25|y>>>7)^(y<<14|y>>>18)^y>>>3)+a[w-7]+((z<<15|z>>>17)^(z<<13|z>>>19)^z>>>10)+a[w-16]}y=x+((r<<26|r>>>6)^(r<<21|r>>>11)^(r<<7|r>>>25))+(r&t^~r&v)+u[w]+a[w];z=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&g^e&m^g&m);x=v;v=t;t=r;r=p+y|0;p=m;m=g;g=e;e=y+z|0}b[0]=b[0]+e|0;b[1]=b[1]+g|0;b[2]=b[2]+m|0;b[3]=b[3]+p|0;b[4]=b[4]+r|0;b[5]=b[5]+t|0;b[6]=b[6]+v|0;b[7]=b[7]+x|0},_doFinalize:function(){var a=this._data,c=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;
c[e>>>5]|=128<<24-e%32;c[(e+64>>>9<<4)+14]=g.floor(b/4294967296);c[(e+64>>>9<<4)+15]=b;a.sigBytes=4*c.length;this._process();return this._hash},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a}});p.SHA256=r._createHelper(e);p.HmacSHA256=r._createHmacHelper(e)})(Math);
/*=============================================================
Crypto API is set up down here so it's easy to update
whenever there is a security update
=============================================================*/
var Crypto = function(){
/* by: Cody Kochmann */
this.encrypt = function(g,p){return CryptoJS.AES.encrypt(g,Crypto.hash(p))};
this.decrypt = function(g,p){return CryptoJS.AES.decrypt(g,Crypto.hash(p))};
this.hash = function(g){return CryptoJS.SHA256(g)};
}
window.Crypto = new Crypto();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment