UNPKG

kuznyechik_multi

Version:

Шифрование ГОСТ 34.12-2018 Кузнечик. Encryption GOST 34.12-2018 Kuznyechik || Grasshopper. Support || Поддержка ESM/CommonJS/ChildProcess/browser

2 lines 5.25 kB
const r=Uint8Array.from([252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77,233,119,240,219,147,46,153,186,23,54,241,187,20,205,95,193,249,24,101,90,226,92,239,33,129,28,60,66,139,1,142,79,5,132,2,174,227,106,143,160,6,11,237,152,127,212,211,31,235,52,44,81,234,200,72,171,242,42,104,162,253,58,206,204,181,112,14,86,8,12,118,18,191,114,19,71,156,183,93,135,21,161,150,41,16,123,154,199,243,145,120,111,157,158,178,177,50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87,223,245,36,169,62,168,67,201,215,121,214,246,124,34,185,3,224,15,236,222,122,148,176,188,220,232,40,80,78,51,10,74,167,151,96,115,30,0,98,68,26,184,56,130,100,159,38,65,173,69,70,146,39,94,85,47,140,163,165,125,105,213,149,59,7,88,179,64,134,172,29,247,48,55,107,228,136,217,231,137,225,27,131,73,76,63,248,254,141,83,170,144,202,216,133,97,32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82,89,166,116,210,230,244,180,192,209,102,175,194,57,75,99,182]),t=(Uint8Array.from([165,45,50,143,14,48,56,192,84,230,158,57,85,126,82,145,100,3,87,90,28,96,7,24,33,114,168,209,41,198,164,63,224,39,141,12,130,234,174,180,154,99,73,229,66,228,21,183,200,6,112,157,65,117,25,201,170,252,77,191,42,115,132,213,195,175,43,134,167,177,178,91,70,211,159,253,212,15,156,47,155,67,239,217,121,182,83,127,193,240,35,231,37,94,181,30,162,223,166,254,172,34,249,226,74,188,53,202,238,120,5,107,81,225,89,163,242,113,86,17,106,137,148,101,140,187,119,60,123,40,171,210,49,222,196,95,204,207,118,44,184,216,46,54,219,105,179,20,149,190,98,161,59,22,102,233,92,108,109,173,55,97,75,185,227,186,241,160,133,131,218,71,197,176,51,250,150,111,110,194,246,80,255,93,169,142,23,27,151,125,236,88,247,31,251,124,9,13,122,103,69,135,220,232,79,29,78,4,235,248,243,62,61,189,138,136,221,205,11,19,152,2,147,128,144,208,36,52,203,237,244,206,153,16,68,64,146,58,1,38,18,26,72,104,245,129,139,199,214,32,10,8,0,76,215,116]),Array.from({length:16}).map((r=>0))),e=Uint8Array.from([148,32,133,16,194,192,1,251,1,192,194,16,133,32,148,1]);function n(...r){let t=new Uint8Array(r.reduce(((r,t)=>r+t.length),0)),e=0;for(let n of r)t.set(n,e),e+=n.length;return t}const l=(r,t)=>{if(r.length!==t.length)throw"XOR a.length !== b.length";return Uint8Array.from(r.map(((r,e)=>t[e]^r)))},o=(r,t)=>{let e=0,n=0;for(let l=0;l<8;l++)!(1&~t)&&(e^=r),n=128&r,r<<=1,128===n&&(r^=451),t>>=1;return e},f=e=>{let n=Uint8Array.from(t.slice());return e.forEach(((t,e)=>n[e]=r[t])),n},a=r=>{let t=Uint8Array.from(r),n=0;for(let t=0;t<16;t++)n^=o(r[t],e[t]);for(let e=15;e>=1;e--)t[e]=r[e-1];return t[0]=n,t},i=r=>{let n=r[0],l=Uint8Array.from(t.slice());for(let t=0;t<15;t++)l[t]=r[t+1],n^=o(r[t+1],e[t]);return l[15]=n,l},h=e=>{let n=Uint8Array.from(t.slice());return e.forEach(((t,e)=>n[e]=r.indexOf(t))),n},m=r=>{let t=Uint8Array.from(r);for(let r=0;r<16;r++)t=a(t);return t},y=r=>{let t=Uint8Array.from(r);for(let r=0;r<16;r++)t=i(t);return t},u=(r,t,e)=>{let n=l(r,e);return n=f(n),n=m(n),[l(n,t),r]},A=r=>{if(32!==r.length)throw"Ключ должен быть 32 байта или 256 бит\nПолучил "+r.length+" байт";let e=[],n=Uint8Array.from(t.slice()),l=Uint8Array.from(t.slice());for(let o=0;o<r.length;o++){let f=o%16,a=Uint8Array.from(t.slice());a[15]=o,e.push(m(a)),o<16?n[f]=r[f]:l[f]=r[f]}let o=[Uint8Array.from(l),Uint8Array.from(n)];for(let r=0;r<4;r++){for(let t=0;t<8;t++){let o=u(n,l,e[t+8*r]);l=Uint8Array.from(o[0]),n=Uint8Array.from(o[1])}o[2*r+2]=Uint8Array.from(n),o[2*r+3]=Uint8Array.from(l)}return o};function s(r){if("string"==typeof r){if(/[^0123456789abcdef]/gi.test(r))throw"Строка не HEX";let t=r.match(/.?./g);if(!t)throw"match errore FN toBuffer";return Uint8Array.from(t.map((r=>parseInt(r,16))))}return r}function g(r,t){let e=Uint8Array.from(r);for(let r=0;r<9;r++)e=l(e,t[r]),e=f(e),e=m(e);return l(e,t[9])}function U(r,t){let e=l(r,t[9]);for(let r=8;r>=0;r--)e=y(e),e=h(e),e=l(e,t[r]);return e}const c=r=>{let t=r.findIndex((r=>0!==r));return~t?r.subarray(t,r.length):r},p={async:{encrypt:async(r,t)=>{let e=A(s(t));r.length%16&&(r=n(Uint8Array.from(Array.from({length:16-r.length%16}).map((r=>0))),r));let l=r.length/16,o=[];for(let t=0;t<l;t++)o.push(new Promise((function(n,l){n(g(Uint8Array.from(r.subarray(16*t,16*(t+1))),e))})));return await Promise.all(o).then((r=>n(...r)))},decrypt:async(r,t,e=!0)=>{let l=A(s(t));r.length%16&&(r=n(Uint8Array.from(Array.from({length:16-r.length%16}).map((r=>0))),r));let o=r.length/16,f=[];for(let t=0;t<o;t++)f.push(new Promise((function(e,n){e(U(Uint8Array.from(r.subarray(16*t,16*(t+1))),l))})));return e?c(await Promise.all(f).then((r=>n(...r)))):await Promise.all(f).then((r=>n(...r)))}},sync:{encrypt:(r,t)=>{let e=A(s(t)),l=[],o=[];r.length%16&&(r=n(Uint8Array.from(Array.from({length:16-r.length%16}).map((r=>0))),r));for(let t=0;t<r.length;t++)o.push(r[t]),16===o.length&&(l.push(...g(o,e)),o=[]);return o.length>0&&l.push(...g(o,e)),Uint8Array.from(l)},decrypt:(r,t,e=!0)=>{let l=A(s(t)),o=[],f=[];r.length%16&&(r=n(Uint8Array.from(Array.from({length:16-r.length%16}).map((r=>0))),r));for(let t=0;t<r.length;t++)f.push(r[t]),16===f.length&&(o.push(...U(f,l)),f=[]);return 0!==f.length&&o.push(...U(f,l)),e?c(Uint8Array.from(o)):Uint8Array.from(o)}}};export{p as default}; //# sourceMappingURL=index.min.js.map