@ray-js/wechat-tycrypto 0.0.1-beta-1 → 0.0.2-beta-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.esm.js +6 -1740
- package/index.js +6 -0
- package/package.json +1 -1
- package/index..js +0 -1751
package/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t extends Error{constructor(...t){super(...t)}}class e extends Error{constructor(...t){super(...t)}}class s extends Error{constructor(...t){super(...t)}}function n(t){return t instanceof Uint8Array}function i(t,e,s,n,i){const r=t.length-e,a=r<i?r:i;return t.set(s.subarray(n,n+a),e),a}function r(...t){const e=t.reduce(((t,e)=>t+e.length),0),s=new Uint8Array(e);let n=0;for(let e=0;e<t.length;e++)s.set(t[e],n),n+=t[e].length;return s}
|
|
2
|
+
/**
|
|
3
|
+
* @file {@link http://asmjs.org Asm.js} implementation of the {@link https://en.wikipedia.org/wiki/Advanced_Encryption_Standard Advanced Encryption Standard}.
|
|
4
|
+
* @author Artem S Vybornov <vybornov@gmail.com>
|
|
5
|
+
* @license MIT
|
|
6
|
+
*/let a,h,o=!1;function c(t,e){let s=a[(h[t]+h[e])%255];return 0!==t&&0!==e||(s=0),s}let l,A,p,u,_=!1;function f(){function t(t){let e,s,n;for(s=n=function(t){let e=a[255-h[t]];return 0===t&&(e=0),e}(t),e=0;e<4;e++)s=255&(s<<1|s>>>7),n^=s;return n^=99,n}o||function(){a=[],h=[];let t,e,s=1;for(t=0;t<255;t++)a[t]=s,e=128&s,s<<=1,s&=255,128===e&&(s^=27),s^=a[t],h[a[t]]=t;a[255]=a[0],h[0]=0,o=!0}(),l=[],A=[],p=[[],[],[],[]],u=[[],[],[],[]];for(let e=0;e<256;e++){const s=t(e);l[e]=s,A[s]=e,p[0][e]=c(2,s)<<24|s<<16|s<<8|c(3,s),u[0][s]=c(14,e)<<24|c(9,e)<<16|c(13,e)<<8|c(11,e);for(let t=1;t<4;t++)p[t][e]=p[t-1][e]>>>8|p[t-1][e]<<24,u[t][s]=u[t-1][s]>>>8|u[t-1][s]<<24}_=!0}class g{constructor(t,e){return function(t,e){_||f();const s=new Uint32Array(e);s.set(l,512),s.set(A,768);for(let t=0;t<4;t++)s.set(p[t],4096+1024*t>>2),s.set(u[t],8192+1024*t>>2);function n(t,e,n,r,a,h,o,c,A){const p=s.subarray(0,60),_=s.subarray(256,316);p.set([e,n,r,a,h,o,c,A]);let f=t;for(let e=1;f<4*t+28;f++){let s=p[f-1];(f%t==0||8===t&&f%t==4)&&(s=l[s>>>24]<<24^l[s>>>16&255]<<16^l[s>>>8&255]<<8^l[255&s]),f%t==0&&(s=s<<8^s>>>24^e<<24,e=e<<1^(128&e?27:0)),p[f]=p[f-t]^s}for(let t=0;t<f;t+=4)for(let e=0;e<4;e++){const s=p[f-(4+t)+(4-e)%4];_[t+e]=t<4||t>=f-4?s:u[0][l[s>>>24]]^u[1][l[s>>>16&255]]^u[2][l[s>>>8&255]]^u[3][l[255&s]]}i.set_rounds(t+5)}const i=function(t,e){"use asm";let s=0,i=0,r=0,a=0,h=0,o=0,c=0,l=0,A=0,p=0,u=0,_=0,f=0,g=0,y=0,E=0,C=0,w=0,d=0,m=0,D=0;const S=new Uint32Array(e),T=new Uint8Array(e);function U(t,e,n,h,o,c,l,A){t=t|0;e=e|0;n=n|0;h=h|0;o=o|0;c=c|0;l=l|0;A=A|0;let p=0,u=0,_=0,f=0,g=0,y=0,E=0,C=0;p=n|0x400,u=n|0x800,_=n|0xc00;o=o^S[(t|0)>>2],c=c^S[(t|4)>>2],l=l^S[(t|8)>>2],A=A^S[(t|12)>>2];for(C=16;(C|0)<=h<<4;C=C+16|0){f=S[(n|o>>22&1020)>>2]^S[(p|c>>14&1020)>>2]^S[(u|l>>6&1020)>>2]^S[(_|A<<2&1020)>>2]^S[(t|C|0)>>2],g=S[(n|c>>22&1020)>>2]^S[(p|l>>14&1020)>>2]^S[(u|A>>6&1020)>>2]^S[(_|o<<2&1020)>>2]^S[(t|C|4)>>2],y=S[(n|l>>22&1020)>>2]^S[(p|A>>14&1020)>>2]^S[(u|o>>6&1020)>>2]^S[(_|c<<2&1020)>>2]^S[(t|C|8)>>2],E=S[(n|A>>22&1020)>>2]^S[(p|o>>14&1020)>>2]^S[(u|c>>6&1020)>>2]^S[(_|l<<2&1020)>>2]^S[(t|C|12)>>2];o=f,c=g,l=y,A=E}s=S[(e|o>>22&1020)>>2]<<24^S[(e|c>>14&1020)>>2]<<16^S[(e|l>>6&1020)>>2]<<8^S[(e|A<<2&1020)>>2]^S[(t|C|0)>>2],i=S[(e|c>>22&1020)>>2]<<24^S[(e|l>>14&1020)>>2]<<16^S[(e|A>>6&1020)>>2]<<8^S[(e|o<<2&1020)>>2]^S[(t|C|4)>>2],r=S[(e|l>>22&1020)>>2]<<24^S[(e|A>>14&1020)>>2]<<16^S[(e|o>>6&1020)>>2]<<8^S[(e|c<<2&1020)>>2]^S[(t|C|8)>>2],a=S[(e|A>>22&1020)>>2]<<24^S[(e|o>>14&1020)>>2]<<16^S[(e|c>>6&1020)>>2]<<8^S[(e|l<<2&1020)>>2]^S[(t|C|12)>>2]}function M(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;U(0x0000,0x0800,0x1000,D,t,e,s,n)}function b(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;let r=0;U(0x0400,0x0c00,0x2000,D,t,n,s,e);r=i,i=a,a=r}function x(t,e,n,A){t=t|0;e=e|0;n=n|0;A=A|0;U(0x0000,0x0800,0x1000,D,h^t,o^e,c^n,l^A);h=s,o=i,c=r,l=a}function P(t,e,n,A){t=t|0;e=e|0;n=n|0;A=A|0;let p=0;U(0x0400,0x0c00,0x2000,D,t,A,n,e);p=i,i=a,a=p;s=s^h,i=i^o,r=r^c,a=a^l;h=t,o=e,c=n,l=A}function v(t,e,n,A){t=t|0;e=e|0;n=n|0;A=A|0;U(0x0000,0x0800,0x1000,D,h,o,c,l);h=s=s^t,o=i=i^e,c=r=r^n,l=a=a^A}function H(t,e,n,A){t=t|0;e=e|0;n=n|0;A=A|0;U(0x0000,0x0800,0x1000,D,h,o,c,l);s=s^t,i=i^e,r=r^n,a=a^A;h=t,o=e,c=n,l=A}function z(t,e,n,A){t=t|0;e=e|0;n=n|0;A=A|0;U(0x0000,0x0800,0x1000,D,h,o,c,l);h=s,o=i,c=r,l=a;s=s^t,i=i^e,r=r^n,a=a^A}function G(t,e,n,h){t=t|0;e=e|0;n=n|0;h=h|0;U(0x0000,0x0800,0x1000,D,A,p,u,_);_=~E&_|E&_+1;u=~y&u|y&u+Number((_|0)===0);p=~g&p|g&p+Number((u|0)===0);A=~f&A|f&A+Number((p|0)===0);s=s^t;i=i^e;r=r^n;a=a^h}function R(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;let i=0,r=0,a=0,A=0,p=0,u=0,_=0,f=0,g=0,y=0;t=t^h,e=e^o,s=s^c,n=n^l;i=C|0,r=w|0,a=d|0,A=m|0;for(;(g|0)<128;g=g+1|0){if(i>>>31){p=p^t,u=u^e,_=_^s,f=f^n}i=i<<1|r>>>31,r=r<<1|a>>>31,a=a<<1|A>>>31,A=A<<1;y=n&1;n=n>>>1|s<<31,s=s>>>1|e<<31,e=e>>>1|t<<31,t=t>>>1;if(y)t=t^0xe1000000}h=p,o=u,c=_,l=f}function B(t){t=t|0;D=t}function N(t,e,n,h){t=t|0;e=e|0;n=n|0;h=h|0;s=t,i=e,r=n,a=h}function k(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;h=t,o=e,c=s,l=n}function L(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;A=t,p=e,u=s,_=n}function O(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;f=t,g=e,y=s,E=n}function V(t,e,s,n){t=t|0;e=e|0;s=s|0;n=n|0;_=~E&_|E&n,u=~y&u|y&s,p=~g&p|g&e,A=~f&A|f&t}function F(t){t=t|0;if(t&15)return-1;T[t|0]=s>>>24,T[t|1]=s>>>16&255,T[t|2]=s>>>8&255,T[t|3]=s&255,T[t|4]=i>>>24,T[t|5]=i>>>16&255,T[t|6]=i>>>8&255,T[t|7]=i&255,T[t|8]=r>>>24,T[t|9]=r>>>16&255,T[t|10]=r>>>8&255,T[t|11]=r&255,T[t|12]=a>>>24,T[t|13]=a>>>16&255,T[t|14]=a>>>8&255,T[t|15]=a&255;return 16}function I(t){t=t|0;if(t&15)return-1;T[t|0]=h>>>24,T[t|1]=h>>>16&255,T[t|2]=h>>>8&255,T[t|3]=h&255,T[t|4]=o>>>24,T[t|5]=o>>>16&255,T[t|6]=o>>>8&255,T[t|7]=o&255,T[t|8]=c>>>24,T[t|9]=c>>>16&255,T[t|10]=c>>>8&255,T[t|11]=c&255,T[t|12]=l>>>24,T[t|13]=l>>>16&255,T[t|14]=l>>>8&255,T[t|15]=l&255;return 16}function j(){M(0,0,0,0);C=s,w=i,d=r,m=a}function q(t,e,n){t=t|0;e=e|0;n=n|0;let h=0;if(e&15)return-1;while((n|0)>=16){K[t&7](T[e|0]<<24|T[e|1]<<16|T[e|2]<<8|T[e|3],T[e|4]<<24|T[e|5]<<16|T[e|6]<<8|T[e|7],T[e|8]<<24|T[e|9]<<16|T[e|10]<<8|T[e|11],T[e|12]<<24|T[e|13]<<16|T[e|14]<<8|T[e|15]);T[e|0]=s>>>24,T[e|1]=s>>>16&255,T[e|2]=s>>>8&255,T[e|3]=s&255,T[e|4]=i>>>24,T[e|5]=i>>>16&255,T[e|6]=i>>>8&255,T[e|7]=i&255,T[e|8]=r>>>24,T[e|9]=r>>>16&255,T[e|10]=r>>>8&255,T[e|11]=r&255,T[e|12]=a>>>24,T[e|13]=a>>>16&255,T[e|14]=a>>>8&255,T[e|15]=a&255;h=h+16|0,e=e+16|0,n=n-16|0}return h|0}function J(t,e,s){t=t|0;e=e|0;s=s|0;let n=0;if(e&15)return-1;while((s|0)>=16){Q[t&1](T[e|0]<<24|T[e|1]<<16|T[e|2]<<8|T[e|3],T[e|4]<<24|T[e|5]<<16|T[e|6]<<8|T[e|7],T[e|8]<<24|T[e|9]<<16|T[e|10]<<8|T[e|11],T[e|12]<<24|T[e|13]<<16|T[e|14]<<8|T[e|15]);n=n+16|0,e=e+16|0,s=s-16|0}return n|0}const K=[M,b,x,P,v,H,z,G];const Q=[x,R];return{set_rounds:B,set_state:N,set_iv:k,set_nonce:L,set_mask:O,set_counter:V,get_state:F,get_iv:I,gcm_init:j,cipher:q,mac:J,set_key:n}}(t,e);return i}(t,e)}set_key(t,e,s,n,i,r,a,h,o){}set_iv(t,e,s,n){}set_mask(t,e,s,n){}set_nonce(t,e,s,n){}set_counter(t,e,s,n){}cipher(t,e,s){return 0}gcm_init(){}get_iv(t){return 16}mac(t,e,s){return 0}get_state(t){return 16}}g.ENC={ECB:0,CBC:2,CFB:4,OFB:6,CTR:7},g.DEC={ECB:1,CBC:3,CFB:5,OFB:6,CTR:7},g.MAC={CBC:0,GCM:1},g.HEAP_DATA=16384;class y{constructor(t,s,n=!0,i,r,a){this.pos=0,this.len=0,this.mode=i,this.heap=r||function(t,e){const s=t?t.byteLength:e||65536;if(4095&s||s<=0)throw new Error("heap size must be a positive integer and a multiple of 4096");return t||new Uint8Array(new ArrayBuffer(s))}().subarray(g.HEAP_DATA),this.asm=a||new g(null,this.heap.buffer),this.pos=0,this.len=0;const h=t.length;if(16!==h&&24!==h&&32!==h)throw new e("illegal key size");const o=new DataView(t.buffer,t.byteOffset,t.byteLength);if(this.asm.set_key(h>>2,o.getUint32(0),o.getUint32(4),o.getUint32(8),o.getUint32(12),h>16?o.getUint32(16):0,h>16?o.getUint32(20):0,h>24?o.getUint32(24):0,h>24?o.getUint32(28):0),void 0!==s){if(16!==s.length)throw new e("illegal iv size");const t=new DataView(s.buffer,s.byteOffset,s.byteLength);this.asm.set_iv(t.getUint32(0),t.getUint32(4),t.getUint32(8),t.getUint32(12))}else this.asm.set_iv(0,0,0,0);this.padding=n}AES_Encrypt_process(t){if(!n(t))throw new TypeError("data isn't of expected type");const e=this.asm,s=this.heap,r=g.ENC[this.mode],a=g.HEAP_DATA;let h=this.pos,o=this.len,c=0,l=t.length||0,A=0;let p=0;const u=new Uint8Array(o+l&-16);for(;l>0;)p=i(s,h+o,t,c,l),o+=p,c+=p,l-=p,p=e.cipher(r,a+h,o),p&&u.set(s.subarray(h,h+p),A),A+=p,p<o?(h+=p,o-=p):(h=0,o=0);return this.pos=h,this.len=o,u}AES_Encrypt_finish(){const t=this.asm,s=this.heap,n=g.ENC[this.mode],i=g.HEAP_DATA,r=this.pos;let a=this.len;const h=16-a%16;let o=a;if(this.hasOwnProperty("padding")){if(this.padding){for(let t=0;t<h;++t)s[r+a+t]=h;a+=h,o=a}else if(a%16)throw new e("data length must be a multiple of the block size")}else a+=h;const c=new Uint8Array(o);return a&&t.cipher(n,i+r,a),o&&c.set(s.subarray(r,r+o)),this.pos=0,this.len=0,c}AES_Decrypt_process(t){if(!n(t))throw new TypeError("data isn't of expected type");const e=this.asm,s=this.heap,r=g.DEC[this.mode],a=g.HEAP_DATA;let h=this.pos,o=this.len,c=0,l=t.length||0,A=0,p=o+l&-16,u=0,_=0;this.padding&&(u=o+l-p||16,p-=u);const f=new Uint8Array(p);for(;l>0;)_=i(s,h+o,t,c,l),o+=_,c+=_,l-=_,_=e.cipher(r,a+h,o-(l?0:u)),_&&f.set(s.subarray(h,h+_),A),A+=_,_<o?(h+=_,o-=_):(h=0,o=0);return this.pos=h,this.len=o,f}AES_Decrypt_finish(){const t=this.asm,n=this.heap,i=g.DEC[this.mode],r=g.HEAP_DATA,a=this.pos;let h=this.len,o=h;if(h>0){if(h%16){if(this.hasOwnProperty("padding"))throw new e("data length must be a multiple of the block size");h+=16-h%16}if(t.cipher(i,r+a,h),this.hasOwnProperty("padding")&&this.padding){const t=n[a+o-1];if(t<1||t>16||t>o)throw new s("bad padding");let e=0;for(let s=t;s>1;s--)e|=t^n[a+o-s];if(e)throw new s("bad padding");o-=t}}const c=new Uint8Array(o);return o>0&&c.set(n.subarray(a,a+o)),this.pos=0,this.len=0,c}}class E{constructor(t,s,n,i=16,r){if(this.tagSize=i,this.gamma0=0,this.counter=1,this.aes=r||new y(t,void 0,!1,"CTR"),this.aes.asm.gcm_init(),this.tagSize<4||this.tagSize>16)throw new e("illegal tagSize value");const a=s.length||0,h=new Uint8Array(16);12!==a?(this._gcm_mac_process(s),this.aes.heap[0]=0,this.aes.heap[1]=0,this.aes.heap[2]=0,this.aes.heap[3]=0,this.aes.heap[4]=0,this.aes.heap[5]=0,this.aes.heap[6]=0,this.aes.heap[7]=0,this.aes.heap[8]=0,this.aes.heap[9]=0,this.aes.heap[10]=0,this.aes.heap[11]=a>>>29,this.aes.heap[12]=a>>>21&255,this.aes.heap[13]=a>>>13&255,this.aes.heap[14]=a>>>5&255,this.aes.heap[15]=a<<3&255,this.aes.asm.mac(g.MAC.GCM,g.HEAP_DATA,16),this.aes.asm.get_iv(g.HEAP_DATA),this.aes.asm.set_iv(0,0,0,0),h.set(this.aes.heap.subarray(0,16))):(h.set(s),h[15]=1);const o=new DataView(h.buffer);if(this.gamma0=o.getUint32(12),this.aes.asm.set_nonce(o.getUint32(0),o.getUint32(4),o.getUint32(8),0),this.aes.asm.set_mask(0,0,0,4294967295),void 0!==n){if(n.length>68719476704)throw new e("illegal adata length");n.length?(this.adata=n,this._gcm_mac_process(n)):this.adata=void 0}else this.adata=void 0;if(this.counter<1||this.counter>4294967295)throw new RangeError("counter must be a positive 32-bit integer");this.aes.asm.set_counter(0,0,0,this.gamma0+this.counter|0)}static encrypt(t,e,s,n,i){return new E(e,s,n,i).encrypt(t)}static decrypt(t,e,s,n,i){return new E(e,s,n,i).decrypt(t)}encrypt(t){return this.AES_GCM_encrypt(t)}decrypt(t){return this.AES_GCM_decrypt(t)}AES_GCM_Encrypt_process(t){let e=0,s=t.length||0;const n=this.aes.asm,r=this.aes.heap;let a=this.counter,h=this.aes.pos,o=this.aes.len,c=0;const l=o+s&-16;let A=0;if((a-1<<4)+o+s>68719476704)throw new RangeError("counter overflow");const p=new Uint8Array(l);for(;s>0;)A=i(r,h+o,t,e,s),o+=A,e+=A,s-=A,A=n.cipher(g.ENC.CTR,g.HEAP_DATA+h,o),A=n.mac(g.MAC.GCM,g.HEAP_DATA+h,A),A&&p.set(r.subarray(h,h+A),c),a+=A>>>4,c+=A,A<o?(h+=A,o-=A):(h=0,o=0);return this.counter=a,this.aes.pos=h,this.aes.len=o,p}AES_GCM_Encrypt_finish(){const t=this.aes.asm,e=this.aes.heap,s=this.counter,n=this.tagSize,i=this.adata,r=this.aes.pos,a=this.aes.len,h=new Uint8Array(a+n);t.cipher(g.ENC.CTR,g.HEAP_DATA+r,a+15&-16),a&&h.set(e.subarray(r,r+a));let o=a;for(;15&o;o++)e[r+o]=0;t.mac(g.MAC.GCM,g.HEAP_DATA+r,o);const c=void 0!==i?i.length:0,l=(s-1<<4)+a;return e[0]=0,e[1]=0,e[2]=0,e[3]=c>>>29,e[4]=c>>>21,e[5]=c>>>13&255,e[6]=c>>>5&255,e[7]=c<<3&255,e[8]=e[9]=e[10]=0,e[11]=l>>>29,e[12]=l>>>21&255,e[13]=l>>>13&255,e[14]=l>>>5&255,e[15]=l<<3&255,t.mac(g.MAC.GCM,g.HEAP_DATA,16),t.get_iv(g.HEAP_DATA),t.set_counter(0,0,0,this.gamma0),t.cipher(g.ENC.CTR,g.HEAP_DATA,16),h.set(e.subarray(0,n),a),this.counter=1,this.aes.pos=0,this.aes.len=0,h}AES_GCM_Decrypt_process(t){let e=0,s=t.length||0;const n=this.aes.asm,r=this.aes.heap;let a=this.counter;const h=this.tagSize;let o=this.aes.pos,c=this.aes.len,l=0;const A=c+s>h?c+s-h&-16:0,p=c+s-A;let u=0;if((a-1<<4)+c+s>68719476704)throw new RangeError("counter overflow");const _=new Uint8Array(A);for(;s>p;)u=i(r,o+c,t,e,s-p),c+=u,e+=u,s-=u,u=n.mac(g.MAC.GCM,g.HEAP_DATA+o,u),u=n.cipher(g.DEC.CTR,g.HEAP_DATA+o,u),u&&_.set(r.subarray(o,o+u),l),a+=u>>>4,l+=u,o=0,c=0;return s>0&&(c+=i(r,0,t,e,s)),this.counter=a,this.aes.pos=o,this.aes.len=c,_}AES_GCM_Decrypt_finish(){const e=this.aes.asm,n=this.aes.heap,i=this.tagSize,r=this.adata,a=this.counter,h=this.aes.pos,o=this.aes.len,c=o-i;if(o<i)throw new t("authentication tag not found");const l=new Uint8Array(c),A=new Uint8Array(n.subarray(h+c,h+o));let p=c;for(;15&p;p++)n[h+p]=0;e.mac(g.MAC.GCM,g.HEAP_DATA+h,p),e.cipher(g.DEC.CTR,g.HEAP_DATA+h,p),c&&l.set(n.subarray(h,h+c));const u=void 0!==r?r.length:0,_=(a-1<<4)+o-i;n[0]=0,n[1]=0,n[2]=0,n[3]=u>>>29,n[4]=u>>>21,n[5]=u>>>13&255,n[6]=u>>>5&255,n[7]=u<<3&255,n[8]=n[9]=n[10]=0,n[11]=_>>>29,n[12]=_>>>21&255,n[13]=_>>>13&255,n[14]=_>>>5&255,n[15]=_<<3&255,e.mac(g.MAC.GCM,g.HEAP_DATA,16),e.get_iv(g.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(g.ENC.CTR,g.HEAP_DATA,16);let f=0;for(let t=0;t<i;++t)f|=A[t]^n[t];if(f)throw new s("data integrity check failed");return this.counter=1,this.aes.pos=0,this.aes.len=0,l}AES_GCM_decrypt(t){const e=this.AES_GCM_Decrypt_process(t),s=this.AES_GCM_Decrypt_finish(),n=new Uint8Array(e.length+s.length);return e.length&&n.set(e),s.length&&n.set(s,e.length),n}AES_GCM_encrypt(t){const e=this.AES_GCM_Encrypt_process(t),s=this.AES_GCM_Encrypt_finish(),n=new Uint8Array(e.length+s.length);return e.length&&n.set(e),s.length&&n.set(s,e.length),n}_gcm_mac_process(t){const e=this.aes.heap,s=this.aes.asm;let n=0,r=t.length||0,a=0;for(;r>0;){for(a=i(e,0,t,n,r),n+=a,r-=a;15&a;)e[a++]=0;s.mac(g.MAC.GCM,g.HEAP_DATA,a)}}}class C{constructor(t,e=!1,s){this.aes=s||new y(t,void 0,e,"ECB")}static encrypt(t,e,s=!1){return new C(e,s).encrypt(t)}static decrypt(t,e,s=!1){return new C(e,s).decrypt(t)}encrypt(t){return r(this.aes.AES_Encrypt_process(t),this.aes.AES_Encrypt_finish())}decrypt(t){return r(this.aes.AES_Decrypt_process(t),this.aes.AES_Decrypt_finish())}}class w{constructor(t,e,s=!0,n){this.aes=n||new y(t,e,s,"CBC")}static encrypt(t,e,s=!0,n){return new w(e,n,s).encrypt(t)}static decrypt(t,e,s=!0,n){return new w(e,n,s).decrypt(t)}encrypt(t){return r(this.aes.AES_Encrypt_process(t),this.aes.AES_Encrypt_finish())}decrypt(t){return r(this.aes.AES_Decrypt_process(t),this.aes.AES_Decrypt_finish())}}class d{constructor(t,s,n,i=16,r,a){if(this.counter=1,this.dataLength=-1,this.aes=a||new y(t,void 0,void 0,"CCM"),i<4||i>16||1&i)throw new e("illegal tagSize value");if(this.tagSize=i,this.nonce=s,s.length<8||s.length>13)throw new e("illegal nonce length");if(this.lengthSize=15-s.length,(s=new Uint8Array(s.length+1))[0]=this.lengthSize-1,s.set(this.nonce,1),r<0||r>0xffffffffffff0||r>Math.pow(2,8*this.lengthSize)-16)throw new e("illegal dataLength value");if(void 0!==n){if(n.length>65279)throw new e("illegal adata length");this.adata=n.length?n:void 0}this.dataLength=r,this.counter=1,this.AES_CCM_calculate_iv(),this.AES_CTR_set_options(s,this.counter,8*this.lengthSize)}static encrypt(t,e,s,n,i=16){return new d(e,s,n,i,t.length).encrypt(t)}static decrypt(t,e,s,n,i=16){return new d(e,s,n,i,t.length-i).decrypt(t)}encrypt(t){this.dataLength=t.length||0;const e=this.AES_CCM_Encrypt_process(t),s=this.AES_CCM_Encrypt_finish(),n=new Uint8Array(e.length+s.length);return e.length&&n.set(e),s.length&&n.set(s,e.length),n}decrypt(t){this.dataLength=t.length||0;const e=this.AES_CCM_Decrypt_process(t),s=this.AES_CCM_Decrypt_finish(),n=new Uint8Array(e.length+s.length);return e.length&&n.set(e),s.length&&n.set(s,e.length),n}AES_CCM_calculate_iv(){const t=this.nonce,e=this.adata,s=this.tagSize,n=this.lengthSize,i=this.dataLength,r=new Uint8Array(16+(e?2+e.length:0));r[0]=(e?64:0)|s-2<<2|n-1,r.set(t,1),n>6&&(r[9]=i/4294967296>>>16&15),n>5&&(r[10]=i/4294967296>>>8&255),n>4&&(r[11]=i/4294967296&255),n>3&&(r[12]=i>>>24),n>2&&(r[13]=i>>>16&255),r[14]=i>>>8&255,r[15]=255&i,e&&(r[16]=e.length>>>8&255,r[17]=255&e.length,r.set(e,18)),this._cbc_mac_process(r),this.aes.asm.get_state(g.HEAP_DATA);const a=new Uint8Array(this.aes.heap.subarray(0,16)),h=new DataView(a.buffer,a.byteOffset,a.byteLength);this.aes.asm.set_iv(h.getUint32(0),h.getUint32(4),h.getUint32(8),h.getUint32(12))}_cbc_mac_process(t){const e=this.aes.heap,s=this.aes.asm;let n=0,r=t.length||0,a=0;for(;r>0;){for(a=i(e,0,t,n,r);15&a;)e[a++]=0;n+=a,r-=a,s.mac(g.MAC.CBC,g.HEAP_DATA,a)}}AES_CCM_Encrypt_process(t){const e=this.aes.asm,s=this.aes.heap;let n=0,r=t.length||0,a=this.counter,h=this.aes.pos,o=this.aes.len;const c=o+r&-16;let l=0,A=0;if((a-1<<4)+o+r>0xffffffffffff0)throw new RangeError("counter overflow");const p=new Uint8Array(c);for(;r>0;)A=i(s,h+o,t,n,r),o+=A,n+=A,r-=A,A=e.mac(g.MAC.CBC,g.HEAP_DATA+h,o),A=e.cipher(g.ENC.CTR,g.HEAP_DATA+h,A),A&&p.set(s.subarray(h,h+A),l),a+=A>>>4,l+=A,A<o?(h+=A,o-=A):(h=0,o=0);return this.counter=a,this.aes.pos=h,this.aes.len=o,p}AES_CCM_Encrypt_finish(){const t=this.aes.asm,e=this.aes.heap,s=this.tagSize,n=this.aes.pos,i=this.aes.len,r=new Uint8Array(i+s);let a=i;for(;15&a;a++)e[n+a]=0;return t.mac(g.MAC.CBC,g.HEAP_DATA+n,a),t.cipher(g.ENC.CTR,g.HEAP_DATA+n,a),i&&r.set(e.subarray(n,n+i)),t.set_counter(0,0,0,0),t.get_iv(g.HEAP_DATA),t.cipher(g.ENC.CTR,g.HEAP_DATA,16),r.set(e.subarray(0,s),i),this.counter=1,this.aes.pos=0,this.aes.len=0,r}AES_CCM_Decrypt_process(t){let e=0,s=t.length||0;const n=this.aes.asm,r=this.aes.heap;let a=this.counter;const h=this.tagSize;let o=this.aes.pos,c=this.aes.len,l=0;const A=c+s>h?c+s-h&-16:0,p=c+s-A;let u=0;if((a-1<<4)+c+s>0xffffffffffff0)throw new RangeError("counter overflow");const _=new Uint8Array(A);for(;s>p;)u=i(r,o+c,t,e,s-p),c+=u,e+=u,s-=u,u=n.cipher(g.DEC.CTR,g.HEAP_DATA+o,u),u=n.mac(g.MAC.CBC,g.HEAP_DATA+o,u),u&&_.set(r.subarray(o,o+u),l),a+=u>>>4,l+=u,o=0,c=0;return s>0&&(c+=i(r,0,t,e,s)),this.counter=a,this.aes.pos=o,this.aes.len=c,_}AES_CCM_Decrypt_finish(){const e=this.aes.asm,n=this.aes.heap,i=this.tagSize,r=this.aes.pos,a=this.aes.len,h=a-i;if(a<i)throw new t("authentication tag not found");const o=new Uint8Array(h),c=new Uint8Array(n.subarray(r+h,r+a));e.cipher(g.DEC.CTR,g.HEAP_DATA+r,h+15&-16),o.set(n.subarray(r,r+h));let l=h;for(;15&l;l++)n[r+l]=0;e.mac(g.MAC.CBC,g.HEAP_DATA+r,l),e.set_counter(0,0,0,0),e.get_iv(g.HEAP_DATA),e.cipher(g.ENC.CTR,g.HEAP_DATA,16);let A=0;for(let t=0;t<i;++t)A|=c[t]^n[t];if(A)throw new s("data integrity check failed");return this.counter=1,this.aes.pos=0,this.aes.len=0,o}AES_CTR_set_options(t,s,n){if(n<8||n>48)throw new e("illegal counter size");const i=Math.pow(2,n)-1;this.aes.asm.set_mask(0,0,i/4294967296|0,0|i);const r=t.length;if(!r||r>16)throw new e("illegal nonce size");this.nonce=t;const a=new DataView(new ArrayBuffer(16));if(new Uint8Array(a.buffer).set(t),this.aes.asm.set_nonce(a.getUint32(0),a.getUint32(4),a.getUint32(8),a.getUint32(12)),s<0||s>=Math.pow(2,n))throw new e("illegal counter value");this.counter=s,this.aes.asm.set_counter(0,0,s/4294967296|0,0|s)}}exports.AES=y,exports.AES_CBC=w,exports.AES_CCM=d,exports.AES_ECB=C,exports.AES_GCM=E,exports.IllegalArgumentError=e,exports.IllegalStateError=t,exports.SecurityError=s;
|