@gjsify/crypto 0.62.0 → 0.63.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";const e=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),t=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]),n=[1,2,4,8,16,32,64,128,27,54];function gmul(e,t){let n=0;for(let r=0;r<8;r++){t&1&&(n^=e);let r=e&128;e=e<<1&255,r&&(e^=27),t>>=1}return n}function keyExpansion(t){let r=t.length/4,i=r+6,a=4*(i+1),o=Array.from({length:a});for(let e=0;e<r;e++)o[e]=new Uint8Array([t[4*e],t[4*e+1],t[4*e+2],t[4*e+3]]);for(let t=r;t<a;t++){let i=new Uint8Array(o[t-1]);t%r===0?i=new Uint8Array([e[i[1]]^n[t/r-1],e[i[2]],e[i[3]],e[i[0]]]):r>6&&t%r===4&&(i=new Uint8Array([e[i[0]],e[i[1]],e[i[2]],e[i[3]]])),o[t]=new Uint8Array(4);for(let e=0;e<4;e++)o[t][e]=o[t-r][e]^i[e]}let s=[];for(let e=0;e<=i;e++){let t=new Uint8Array(16);for(let n=0;n<4;n++)t[4*n]=o[4*e+n][0],t[4*n+1]=o[4*e+n][1],t[4*n+2]=o[4*e+n][2],t[4*n+3]=o[4*e+n][3];s.push(t)}return s}function aesEncryptBlock(t,n){let r=new Uint8Array(t),i=n.length-1;for(let e=0;e<16;e++)r[e]^=n[0][e];for(let t=1;t<i;t++){for(let t=0;t<16;t++)r[t]=e[r[t]];let i=r[1];r[1]=r[5],r[5]=r[9],r[9]=r[13],r[13]=i;let a=r[2],o=r[6];r[2]=r[10],r[6]=r[14],r[10]=a,r[14]=o;let s=r[15];r[15]=r[11],r[11]=r[7],r[7]=r[3],r[3]=s;for(let e=0;e<4;e++){let t=e*4,n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];r[t]=gmul(2,n)^gmul(3,i)^a^o,r[t+1]=n^gmul(2,i)^gmul(3,a)^o,r[t+2]=n^i^gmul(2,a)^gmul(3,o),r[t+3]=gmul(3,n)^i^a^gmul(2,o)}for(let e=0;e<16;e++)r[e]^=n[t][e]}for(let t=0;t<16;t++)r[t]=e[r[t]];let a=r[1];r[1]=r[5],r[5]=r[9],r[9]=r[13],r[13]=a;let o=r[2],s=r[6];r[2]=r[10],r[6]=r[14],r[10]=o,r[14]=s;let c=r[15];r[15]=r[11],r[11]=r[7],r[7]=r[3],r[3]=c;for(let e=0;e<16;e++)r[e]^=n[i][e];return r}function aesDecryptBlock(e,n){let r=new Uint8Array(e),i=n.length-1;for(let e=0;e<16;e++)r[e]^=n[i][e];for(let e=i-1;e>0;e--){let i=r[13];r[13]=r[9],r[9]=r[5],r[5]=r[1],r[1]=i;let a=r[10],o=r[14];r[10]=r[2],r[14]=r[6],r[2]=a,r[6]=o;let s=r[3];r[3]=r[7],r[7]=r[11],r[11]=r[15],r[15]=s;for(let e=0;e<16;e++)r[e]=t[r[e]];for(let t=0;t<16;t++)r[t]^=n[e][t];for(let e=0;e<4;e++){let t=e*4,n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];r[t]=gmul(14,n)^gmul(11,i)^gmul(13,a)^gmul(9,o),r[t+1]=gmul(9,n)^gmul(14,i)^gmul(11,a)^gmul(13,o),r[t+2]=gmul(13,n)^gmul(9,i)^gmul(14,a)^gmul(11,o),r[t+3]=gmul(11,n)^gmul(13,i)^gmul(9,a)^gmul(14,o)}}let a=r[13];r[13]=r[9],r[9]=r[5],r[5]=r[1],r[1]=a;let o=r[10],s=r[14];r[10]=r[2],r[14]=r[6],r[2]=o,r[6]=s;let c=r[3];r[3]=r[7],r[7]=r[11],r[11]=r[15],r[15]=c;for(let e=0;e<16;e++)r[e]=t[r[e]];for(let e=0;e<16;e++)r[e]^=n[0][e];return r}function incrementCounter(e){for(let t=15;t>=0&&(e[t]=e[t]+1&255,e[t]===0);t--);}function gcmIncrementCounter(e){for(let t=15;t>=12&&(e[t]=e[t]+1&255,e[t]===0);t--);}function gfMul(e,t){let n=new Uint8Array(16),r=new Uint8Array(e);for(let e=0;e<128;e++){if(t[e>>>3]&1<<7-(e&7))for(let e=0;e<16;e++)n[e]^=r[e];let i=r[15]&1;for(let e=15;e>0;e--)r[e]=r[e]>>>1|(r[e-1]&1)<<7;r[0]>>>=1,i&&(r[0]^=225)}return n}function ghash(e,t,n){let r=new Uint8Array(16),i=Math.ceil(t.length/16)||0;for(let n=0;n<i;n++){let i=n*16,a=Math.min(i+16,t.length);for(let e=0;e<16;e++){let n=i+e;n<a&&(r[e]^=t[n])}let o=gfMul(r,e);r.set(o)}let a=Math.ceil(n.length/16)||0;for(let t=0;t<a;t++){let i=t*16,a=Math.min(i+16,n.length);for(let e=0;e<16;e++){let t=i+e;t<a&&(r[e]^=n[t])}let o=gfMul(r,e);r.set(o)}let o=new Uint8Array(16),s=t.length*8,c=n.length*8,l=Math.floor(s/4294967296),u=s>>>0;o[0]=l>>>24&255,o[1]=l>>>16&255,o[2]=l>>>8&255,o[3]=l&255,o[4]=u>>>24&255,o[5]=u>>>16&255,o[6]=u>>>8&255,o[7]=u&255;let d=Math.floor(c/4294967296),f=c>>>0;o[8]=d>>>24&255,o[9]=d>>>16&255,o[10]=d>>>8&255,o[11]=d&255,o[12]=f>>>24&255,o[13]=f>>>16&255,o[14]=f>>>8&255,o[15]=f&255;for(let e=0;e<16;e++)r[e]^=o[e];let p=gfMul(r,e);return r.set(p),r}export{aesDecryptBlock,aesEncryptBlock,gcmIncrementCounter,ghash,incrementCounter,keyExpansion};
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";const e=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),t=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]),n=[1,2,4,8,16,32,64,128,27,54];function gmul(e,t){let n=0;for(let r=0;r<8;r++){t&1&&(n^=e);let r=e&128;e=e<<1&255,r&&(e^=27),t>>=1}return n}function keyExpansion(t){let r=t.length/4,i=r+6,a=4*(i+1),o=Array.from({length:a});for(let e=0;e<r;e++)o[e]=new Uint8Array([t[4*e],t[4*e+1],t[4*e+2],t[4*e+3]]);for(let t=r;t<a;t++){let i=new Uint8Array(o[t-1]);t%r===0?i=new Uint8Array([e[i[1]]^n[t/r-1],e[i[2]],e[i[3]],e[i[0]]]):r>6&&t%r===4&&(i=new Uint8Array([e[i[0]],e[i[1]],e[i[2]],e[i[3]]])),o[t]=new Uint8Array(4);for(let e=0;e<4;e++)o[t][e]=o[t-r][e]^i[e]}let s=[];for(let e=0;e<=i;e++){let t=new Uint8Array(16);for(let n=0;n<4;n++)t[4*n]=o[4*e+n][0],t[4*n+1]=o[4*e+n][1],t[4*n+2]=o[4*e+n][2],t[4*n+3]=o[4*e+n][3];s.push(t)}return s}function aesEncryptBlock(t,n){let r=new Uint8Array(t),i=n.length-1;for(let e=0;e<16;e++)r[e]^=n[0][e];for(let t=1;t<i;t++){for(let t=0;t<16;t++)r[t]=e[r[t]];let i=r[1];r[1]=r[5],r[5]=r[9],r[9]=r[13],r[13]=i;let a=r[2],o=r[6];r[2]=r[10],r[6]=r[14],r[10]=a,r[14]=o;let s=r[15];r[15]=r[11],r[11]=r[7],r[7]=r[3],r[3]=s;for(let e=0;e<4;e++){let t=e*4,n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];r[t]=gmul(2,n)^gmul(3,i)^a^o,r[t+1]=n^gmul(2,i)^gmul(3,a)^o,r[t+2]=n^i^gmul(2,a)^gmul(3,o),r[t+3]=gmul(3,n)^i^a^gmul(2,o)}for(let e=0;e<16;e++)r[e]^=n[t][e]}for(let t=0;t<16;t++)r[t]=e[r[t]];let a=r[1];r[1]=r[5],r[5]=r[9],r[9]=r[13],r[13]=a;let o=r[2],s=r[6];r[2]=r[10],r[6]=r[14],r[10]=o,r[14]=s;let c=r[15];r[15]=r[11],r[11]=r[7],r[7]=r[3],r[3]=c;for(let e=0;e<16;e++)r[e]^=n[i][e];return r}function aesDecryptBlock(e,n){let r=new Uint8Array(e),i=n.length-1;for(let e=0;e<16;e++)r[e]^=n[i][e];for(let e=i-1;e>0;e--){let i=r[13];r[13]=r[9],r[9]=r[5],r[5]=r[1],r[1]=i;let a=r[10],o=r[14];r[10]=r[2],r[14]=r[6],r[2]=a,r[6]=o;let s=r[3];r[3]=r[7],r[7]=r[11],r[11]=r[15],r[15]=s;for(let e=0;e<16;e++)r[e]=t[r[e]];for(let t=0;t<16;t++)r[t]^=n[e][t];for(let e=0;e<4;e++){let t=e*4,n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];r[t]=gmul(14,n)^gmul(11,i)^gmul(13,a)^gmul(9,o),r[t+1]=gmul(9,n)^gmul(14,i)^gmul(11,a)^gmul(13,o),r[t+2]=gmul(13,n)^gmul(9,i)^gmul(14,a)^gmul(11,o),r[t+3]=gmul(11,n)^gmul(13,i)^gmul(9,a)^gmul(14,o)}}let a=r[13];r[13]=r[9],r[9]=r[5],r[5]=r[1],r[1]=a;let o=r[10],s=r[14];r[10]=r[2],r[14]=r[6],r[2]=o,r[6]=s;let c=r[3];r[3]=r[7],r[7]=r[11],r[11]=r[15],r[15]=c;for(let e=0;e<16;e++)r[e]=t[r[e]];for(let e=0;e<16;e++)r[e]^=n[0][e];return r}function incrementCounter(e){for(let t=15;t>=0&&(e[t]=e[t]+1&255,e[t]===0);t--);}function gcmJ0(e,t){if(t.length===12){let e=new Uint8Array(16);return e.set(t),e[15]=1,e}return ghash(e,new Uint8Array,t)}function gcmIncrementCounter(e){for(let t=15;t>=12&&(e[t]=e[t]+1&255,e[t]===0);t--);}function gfMul(e,t){let n=new Uint8Array(16),r=new Uint8Array(e);for(let e=0;e<128;e++){if(t[e>>>3]&1<<7-(e&7))for(let e=0;e<16;e++)n[e]^=r[e];let i=r[15]&1;for(let e=15;e>0;e--)r[e]=r[e]>>>1|(r[e-1]&1)<<7;r[0]>>>=1,i&&(r[0]^=225)}return n}function ghash(e,t,n){let r=new Uint8Array(16),i=Math.ceil(t.length/16)||0;for(let n=0;n<i;n++){let i=n*16,a=Math.min(i+16,t.length);for(let e=0;e<16;e++){let n=i+e;n<a&&(r[e]^=t[n])}let o=gfMul(r,e);r.set(o)}let a=Math.ceil(n.length/16)||0;for(let t=0;t<a;t++){let i=t*16,a=Math.min(i+16,n.length);for(let e=0;e<16;e++){let t=i+e;t<a&&(r[e]^=n[t])}let o=gfMul(r,e);r.set(o)}let o=new Uint8Array(16),s=t.length*8,c=n.length*8,l=Math.floor(s/4294967296),u=s>>>0;o[0]=l>>>24&255,o[1]=l>>>16&255,o[2]=l>>>8&255,o[3]=l&255,o[4]=u>>>24&255,o[5]=u>>>16&255,o[6]=u>>>8&255,o[7]=u&255;let d=Math.floor(c/4294967296),f=c>>>0;o[8]=d>>>24&255,o[9]=d>>>16&255,o[10]=d>>>8&255,o[11]=d&255,o[12]=f>>>24&255,o[13]=f>>>16&255,o[14]=f>>>8&255,o[15]=f&255;for(let e=0;e<16;e++)r[e]^=o[e];let p=gfMul(r,e);return r.set(p),r}export{aesDecryptBlock,aesEncryptBlock,gcmIncrementCounter,gcmJ0,ghash,incrementCounter,keyExpansion};
|
package/lib/esm/cipher.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{aesDecryptBlock as e,aesEncryptBlock as t,gcmIncrementCounter as n,
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{aesDecryptBlock as e,aesEncryptBlock as t,gcmIncrementCounter as n,gcmJ0 as r,ghash as i,incrementCounter as a,keyExpansion as o}from"./aes-primitives.js";import{encodeOutput as s,incompleteUtf8Tail as c,parseAlgorithm as l,pkcs7Pad as u,pkcs7Unpad as d,toBuffer as f}from"./cipher-utils.js";import{Buffer as p}from"node:buffer";var CipherBase=class{_roundKeys;_iv;_mode;_buffer=new Uint8Array;_autoPadding=!0;_finalized=!1;constructor(e,t,n){let r=l(e);if(t.length!==r.keySize)throw Error(`Invalid key length ${t.length}, expected ${r.keySize} for ${e}`);if(r.mode===`gcm`){if(!n||n.length===0)throw Error(`Invalid IV length 0 for ${e}`)}else if(r.ivSize>0&&(!n||n.length!==r.ivSize))throw Error(`Invalid IV length ${n?.length??0}, expected ${r.ivSize} for ${e}`);this._roundKeys=o(t),this._iv=n?new Uint8Array(n):new Uint8Array(16),this._mode=r.mode}setAutoPadding(e){return this._autoPadding=e,this}},Cipher=class extends CipherBase{_prevBlock;_counter;_gcmH=null;_gcmJ0=null;_gcmAAD=new Uint8Array;_gcmCiphertext=[];_gcmCiphertextLen=0;_gcmAuthTag=null;_gcmAADSet=!1;constructor(e,i,a){super(e,i,a),this._prevBlock=new Uint8Array(this._iv),this._mode===`gcm`?(this._gcmH=t(new Uint8Array(16),this._roundKeys),this._gcmJ0=r(this._gcmH,this._iv),this._counter=new Uint8Array(this._gcmJ0),n(this._counter)):this._counter=new Uint8Array(this._iv)}setAAD(e){if(this._mode!==`gcm`)throw Error(`setAAD is only supported in GCM mode`);if(this._gcmCiphertextLen>0)throw Error(`setAAD must be called before update()`);return this._gcmAAD=new Uint8Array(e),this._gcmAADSet=!0,this}getAuthTag(){if(this._mode!==`gcm`)throw Error(`getAuthTag is only supported in GCM mode`);if(!this._gcmAuthTag)throw Error(`getAuthTag must be called after final()`);return p.from(this._gcmAuthTag)}update(e,t,n){let r=f(e,t),i=new Uint8Array(this._buffer.length+r.length);if(i.set(this._buffer),i.set(r,this._buffer.length),this._mode===`gcm`){let e=this._processGcmEncrypt(i);return this._buffer=new Uint8Array,s(e,n)}if(this._mode===`ctr`||this._mode===`cfb`||this._mode===`ofb`){let e=this._processStream(i);return this._buffer=new Uint8Array,s(e,n)}let a=Math.floor(i.length/16)*16,o=[];for(let e=0;e<a;e+=16){let t=i.slice(e,e+16);o.push(this._encryptBlock(t))}this._buffer=i.slice(a);let c=new Uint8Array(o.length*16);for(let e=0;e<o.length;e++)c.set(o[e],e*16);return s(c,n)}final(e){if(this._finalized)throw Error(`Cipher already finalized`);if(this._finalized=!0,this._mode===`gcm`){let n=new Uint8Array;this._buffer.length>0&&(n=this._processGcmEncrypt(this._buffer),this._buffer=new Uint8Array);let r=new Uint8Array(this._gcmCiphertextLen),a=0;for(let e of this._gcmCiphertext)r.set(e,a),a+=e.length;let o=i(this._gcmH,this._gcmAAD,r),c=t(this._gcmJ0,this._roundKeys),l=new Uint8Array(16);for(let e=0;e<16;e++)l[e]=o[e]^c[e];return this._gcmAuthTag=p.from(l),s(n,e)}if(this._mode===`ctr`||this._mode===`cfb`||this._mode===`ofb`){if(this._buffer.length>0){let t=this._processStream(this._buffer);return this._buffer=new Uint8Array,s(t,e)}return s(new Uint8Array,e)}let n=this._buffer;if(this._autoPadding)n=u(n);else if(n.length%16!=0)throw Error(`data not multiple of block size`);let r=[];for(let e=0;e<n.length;e+=16)r.push(this._encryptBlock(n.slice(e,e+16)));if(this._buffer=new Uint8Array,r.length===0)return s(new Uint8Array,e);let a=new Uint8Array(r.length*16);for(let e=0;e<r.length;e++)a.set(r[e],e*16);return s(a,e)}_encryptBlock(e){if(this._mode===`cbc`){let n=new Uint8Array(16);for(let t=0;t<16;t++)n[t]=e[t]^this._prevBlock[t];let r=t(n,this._roundKeys);return this._prevBlock=r,r}else if(this._mode===`ecb`)return t(e,this._roundKeys);throw Error(`Block encryption not supported for mode: ${this._mode}`)}_processStream(e){let n=new Uint8Array(e.length);for(let r=0;r<e.length;r+=16){let i=t(this._counter,this._roundKeys),o=Math.min(16,e.length-r);for(let t=0;t<o;t++)n[r+t]=e[r+t]^i[t];a(this._counter)}return n}_processGcmEncrypt(e){let r=new Uint8Array(e.length);for(let i=0;i<e.length;i+=16){let a=t(this._counter,this._roundKeys),o=Math.min(16,e.length-i);for(let t=0;t<o;t++)r[i+t]=e[i+t]^a[t];n(this._counter)}return this._gcmCiphertext.push(new Uint8Array(r)),this._gcmCiphertextLen+=r.length,r}},Decipher=class extends CipherBase{_prevBlock;_counter;_pendingUtf8=new Uint8Array;_gcmH=null;_gcmJ0=null;_gcmAAD=new Uint8Array;_gcmCiphertext=[];_gcmCiphertextLen=0;_gcmExpectedTag=null;_gcmAADSet=!1;constructor(e,i,a){super(e,i,a),this._prevBlock=new Uint8Array(this._iv),this._mode===`gcm`?(this._gcmH=t(new Uint8Array(16),this._roundKeys),this._gcmJ0=r(this._gcmH,this._iv),this._counter=new Uint8Array(this._gcmJ0),n(this._counter)):this._counter=new Uint8Array(this._iv)}setAAD(e){if(this._mode!==`gcm`)throw Error(`setAAD is only supported in GCM mode`);if(this._gcmCiphertextLen>0)throw Error(`setAAD must be called before update()`);return this._gcmAAD=new Uint8Array(e),this._gcmAADSet=!0,this}setAuthTag(e){if(this._mode!==`gcm`)throw Error(`setAuthTag is only supported in GCM mode`);return this._gcmExpectedTag=p.from(e),this}_encodeWithUtf8Handling(e,t,n){if(!t||t!==`utf8`&&t!==`utf-8`)return s(e,t);let r;if(this._pendingUtf8.length>0?(r=new Uint8Array(this._pendingUtf8.length+e.length),r.set(this._pendingUtf8),r.set(e,this._pendingUtf8.length),this._pendingUtf8=new Uint8Array):r=e,!n){let e=c(r);e>0&&(this._pendingUtf8=new Uint8Array(r.slice(r.length-e)),r=new Uint8Array(r.slice(0,r.length-e)))}return p.from(r).toString(`utf8`)}update(e,t,n){let r=f(e,t),i=new Uint8Array(this._buffer.length+r.length);if(i.set(this._buffer),i.set(r,this._buffer.length),this._mode===`gcm`){this._gcmCiphertext.push(new Uint8Array(i)),this._gcmCiphertextLen+=i.length;let e=this._processGcmDecrypt(i);return this._buffer=new Uint8Array,this._encodeWithUtf8Handling(e,n,!1)}if(this._mode===`ctr`||this._mode===`cfb`||this._mode===`ofb`){let e=this._processStream(i);return this._buffer=new Uint8Array,this._encodeWithUtf8Handling(e,n,!1)}let a=Math.floor(i.length/16);if(a===0)return this._buffer=i,this._encodeWithUtf8Handling(new Uint8Array,n,!1);let o=(this._autoPadding?a-1:a)*16,s=[];for(let e=0;e<o;e+=16){let t=i.slice(e,e+16);s.push(this._decryptBlock(t))}this._buffer=i.slice(o);let c=new Uint8Array(s.length*16);for(let e=0;e<s.length;e++)c.set(s[e],e*16);return this._encodeWithUtf8Handling(c,n,!1)}final(e){if(this._finalized)throw Error(`Decipher already finalized`);if(this._finalized=!0,this._mode===`gcm`){let n=new Uint8Array;if(this._buffer.length>0&&(this._gcmCiphertext.push(new Uint8Array(this._buffer)),this._gcmCiphertextLen+=this._buffer.length,n=this._processGcmDecrypt(this._buffer),this._buffer=new Uint8Array),!this._gcmExpectedTag)throw Error(`Unsupported state or unable to authenticate data`);let r=new Uint8Array(this._gcmCiphertextLen),a=0;for(let e of this._gcmCiphertext)r.set(e,a),a+=e.length;let o=i(this._gcmH,this._gcmAAD,r),s=t(this._gcmJ0,this._roundKeys),c=new Uint8Array(16);for(let e=0;e<16;e++)c[e]=o[e]^s[e];let l=this._gcmExpectedTag,u=Math.min(l.length,16),d=0;for(let e=0;e<u;e++)d|=c[e]^l[e];if(d!==0)throw Error(`Unsupported state or unable to authenticate data`);return this._encodeWithUtf8Handling(n,e,!0)}if(this._mode===`ctr`||this._mode===`cfb`||this._mode===`ofb`){if(this._buffer.length>0){let t=this._processStream(this._buffer);return this._buffer=new Uint8Array,this._encodeWithUtf8Handling(t,e,!0)}return this._encodeWithUtf8Handling(new Uint8Array,e,!0)}if(this._buffer.length===0)return this._encodeWithUtf8Handling(new Uint8Array,e,!0);if(this._buffer.length%16!=0)throw Error(`bad decrypt`);let n=[];for(let e=0;e<this._buffer.length;e+=16)n.push(this._decryptBlock(this._buffer.slice(e,e+16)));let r=new Uint8Array(n.length*16);for(let e=0;e<n.length;e++)r.set(n[e],e*16);let a=this._autoPadding?d(r):r;return this._buffer=new Uint8Array,this._encodeWithUtf8Handling(a,e,!0)}_decryptBlock(t){if(this._mode===`cbc`){let n=e(t,this._roundKeys),r=new Uint8Array(16);for(let e=0;e<16;e++)r[e]=n[e]^this._prevBlock[e];return this._prevBlock=new Uint8Array(t),r}else if(this._mode===`ecb`)return e(t,this._roundKeys);throw Error(`Block decryption not supported for mode: ${this._mode}`)}_processStream(e){let n=new Uint8Array(e.length);for(let r=0;r<e.length;r+=16){let i=t(this._counter,this._roundKeys),o=Math.min(16,e.length-r);for(let t=0;t<o;t++)n[r+t]=e[r+t]^i[t];a(this._counter)}return n}_processGcmDecrypt(e){let r=new Uint8Array(e.length);for(let i=0;i<e.length;i+=16){let a=t(this._counter,this._roundKeys),o=Math.min(16,e.length-i);for(let t=0;t<o;t++)r[i+t]=e[i+t]^a[t];n(this._counter)}return r}};function createCipher(e,t){throw Error(`crypto.createCipher() is deprecated. Use createCipheriv() instead.`)}function createCipheriv(e,t,n){return new Cipher(e,typeof t==`string`?p.from(t):new Uint8Array(t),n==null?null:typeof n==`string`?p.from(n):new Uint8Array(n))}function createDecipher(e,t){throw Error(`crypto.createDecipher() is deprecated. Use createDecipheriv() instead.`)}function createDecipheriv(e,t,n){return new Decipher(e,typeof t==`string`?p.from(t):new Uint8Array(t),n==null?null:typeof n==`string`?p.from(n):new Uint8Array(n))}function getCiphers(){return[`aes-128-cbc`,`aes-128-ecb`,`aes-192-cbc`,`aes-192-ecb`,`aes-256-cbc`,`aes-256-ecb`,`aes-128-ctr`,`aes-192-ctr`,`aes-256-ctr`,`aes-128-cfb`,`aes-192-cfb`,`aes-256-cfb`,`aes-128-gcm`,`aes-192-gcm`,`aes-256-gcm`]}export{createCipher,createCipheriv,createDecipher,createDecipheriv,getCiphers};
|
|
@@ -2,6 +2,11 @@ export declare function keyExpansion(key: Uint8Array): Uint8Array[];
|
|
|
2
2
|
export declare function aesEncryptBlock(block: Uint8Array, roundKeys: Uint8Array[]): Uint8Array;
|
|
3
3
|
export declare function aesDecryptBlock(block: Uint8Array, roundKeys: Uint8Array[]): Uint8Array;
|
|
4
4
|
export declare function incrementCounter(counter: Uint8Array): void;
|
|
5
|
+
/**
|
|
6
|
+
* Pre-counter block J0 per NIST SP 800-38D §7.1: `IV || 0^31 || 1` for a 96-bit IV,
|
|
7
|
+
* otherwise `GHASH_H(IV || pad || 0^64 || [len(IV)]_64)`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function gcmJ0(H: Uint8Array, iv: Uint8Array): Uint8Array;
|
|
5
10
|
export declare function gcmIncrementCounter(counter: Uint8Array): void;
|
|
6
11
|
/**
|
|
7
12
|
* GHASH function per NIST SP 800-38D.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/crypto",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.63.0",
|
|
4
4
|
"description": "Node.js crypto module for Gjs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -74,18 +74,18 @@
|
|
|
74
74
|
"crypto"
|
|
75
75
|
],
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@gjsify/cli": "^0.
|
|
78
|
-
"@gjsify/unit": "^0.
|
|
79
|
-
"@gjsify/util": "^0.
|
|
77
|
+
"@gjsify/cli": "^0.63.0",
|
|
78
|
+
"@gjsify/unit": "^0.63.0",
|
|
79
|
+
"@gjsify/util": "^0.63.0",
|
|
80
80
|
"@types/diffie-hellman": "^5.0.3",
|
|
81
81
|
"@types/node": "^25.9.2",
|
|
82
82
|
"typescript": "^6.0.3"
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
85
|
"@girs/glib-2.0": "5.4.0",
|
|
86
|
-
"@gjsify/buffer": "^0.
|
|
87
|
-
"@gjsify/stream": "^0.
|
|
88
|
-
"@gjsify/webcrypto": "^0.
|
|
86
|
+
"@gjsify/buffer": "^0.63.0",
|
|
87
|
+
"@gjsify/stream": "^0.63.0",
|
|
88
|
+
"@gjsify/webcrypto": "^0.63.0",
|
|
89
89
|
"@noble/curves": "^2.4.0",
|
|
90
90
|
"@noble/hashes": "^2.4.0"
|
|
91
91
|
},
|