import{j as t}from"./jsbn-6a317af9.js";import{g as e}from"./@turf-e5dd68ad.js"; /* eslint-disable class-methods-use-this */const{BigInteger:n}=t;class r{constructor(){this.tlv=null,this.t="00",this.l="00",this.v=""} /** * 获取 der 编码比特流16进制串 */getEncodedHex(){return this.tlv||(this.v=this.getValue(),this.l=this.getLength(),this.tlv=this.t+this.l+this.v),this.tlv}getLength(){const t=this.v.length/2;// 字节数 let e=t.toString(16);// 补齐到整字节 if(e.length%2==1&&(e="0"+e),t<128) // 短格式,以 0 开头 return e;// 1(1位) + 真正的长度占用字节数(7位) + 真正的长度 return(128+e.length/2).toString(16)+e}getValue(){return""}}class i extends r{constructor(t){super(),this.t="02",// 整型标签说明 t&&(this.v=function(t){let e=t.toString(16);if("-"!==e[0]) // 正数 e.length%2==1?e="0"+e:e.match(/^[0-7]/)||(e="00"+e);// 非0开头,则补一个全0字节 else{ // 负数 e=e.substr(1);let r=e.length;r%2==1?r+=1:e.match(/^[0-7]/)||(r+=2);// 非0开头,则补一个全0字节 let i="";for(let t=0;tt.getEncodedHex())).join(""),this.v}} /** * 获取 l 占用字节数 */function o(t,e){return+t[e+2]<8?1:128&+t.substr(e+2,2);// l 以0开头,则表示短格式,只占一个字节 } /** * 获取 l */function u(t,e){ // 获取 l const r=o(t,e),i=t.substr(e+2,2*r);if(!i)return-1;return(+i[0]<8?new n(i,16):new n(i.substr(2),16)).intValue()} /** * 获取 v 的位置 */function l(t,e){return e+2*(o(t,e)+1)}var c={ /** * ASN.1 der 编码,针对 sm2 签名 */ encodeDer(t,e){const n=new i(t),r=new i(e);return new s([n,r]).getEncodedHex()}, /** * 解析 ASN.1 der,针对 sm2 验签 */ decodeDer(t){ // 结构: // input = | tSeq | lSeq | vSeq | // vSeq = | tR | lR | vR | tS | lS | vS | const e=l(t,0),r=l(t,e),i=u(t,e),s=t.substr(r,2*i),o=r+s.length,c=l(t,o),h=u(t,o),a=t.substr(c,2*h);return{r:new n(s,16),s:new n(a,16)}}}; /* eslint-disable no-case-declarations, max-len */const{BigInteger:h}=t,a=new h("2"),g=new h("3"); /** * thanks for Tom Wu : http://www-cs-students.stanford.edu/~tjw/jsbn/ * * Basic Javascript Elliptic Curve implementation * Ported loosely from BouncyCastle's Java EC code * Only Fp curves implemented for now */ /** * 椭圆曲线域元素 */ class f{constructor(t,e){this.x=e,this.q=t} /** * 判断相等 */equals(t){return t===this||this.q.equals(t.q)&&this.x.equals(t.x)} /** * 返回具体数值 */toBigInteger(){return this.x} /** * 取反 */negate(){return new f(this.q,this.x.negate().mod(this.q))} /** * 相加 */add(t){return new f(this.q,this.x.add(t.toBigInteger()).mod(this.q))} /** * 相减 */subtract(t){return new f(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))} /** * 相乘 */multiply(t){return new f(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))} /** * 相除 */divide(t){return new f(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))} /** * 平方 */square(){return new f(this.q,this.x.square().mod(this.q))}}class d{constructor(t,e,n,r){this.curve=t,this.x=e,this.y=n, // 标准射影坐标系:zinv == null 或 z * zinv == 1 this.z=null==r?h.ONE:r,this.zinv=null}getX(){return null===this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))}getY(){return null===this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))} /** * 判断相等 */equals(t){if(t===this)return!0;if(this.isInfinity())return t.isInfinity();if(t.isInfinity())return this.isInfinity(); // u = y2 * z1 - y1 * z2 if(!t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(h.ZERO))return!1; // v = x2 * z1 - x1 * z2 return t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(h.ZERO)} /** * 是否是无穷远点 */isInfinity(){return null===this.x&&null===this.y||this.z.equals(h.ZERO)&&!this.y.toBigInteger().equals(h.ZERO)} /** * 取反,x 轴对称点 */negate(){return new d(this.curve,this.x,this.y.negate(),this.z)} /** * 相加 * * 标准射影坐标系: * * λ1 = x1 * z2 * λ2 = x2 * z1 * λ3 = λ1 − λ2 * λ4 = y1 * z2 * λ5 = y2 * z1 * λ6 = λ4 − λ5 * λ7 = λ1 + λ2 * λ8 = z1 * z2 * λ9 = λ3^2 * λ10 = λ3 * λ9 * λ11 = λ8 * λ6^2 − λ7 * λ9 * x3 = λ3 * λ11 * y3 = λ6 * (λ9 * λ1 − λ11) − λ4 * λ10 * z3 = λ10 * λ8 */add(t){if(this.isInfinity())return t;if(t.isInfinity())return this;const e=this.x.toBigInteger(),n=this.y.toBigInteger(),r=this.z,i=t.x.toBigInteger(),s=t.y.toBigInteger(),o=t.z,u=this.curve.q,l=e.multiply(o).mod(u),c=i.multiply(r).mod(u),a=l.subtract(c),g=n.multiply(o).mod(u),f=s.multiply(r).mod(u),F=g.subtract(f);if(h.ZERO.equals(a))return h.ZERO.equals(F)?this.twice():this.curve.infinity;const y=l.add(c),p=r.multiply(o).mod(u),m=a.square().mod(u),w=a.multiply(m).mod(u),v=p.multiply(F.square()).subtract(y.multiply(m)).mod(u),x=a.multiply(v).mod(u),I=F.multiply(m.multiply(l).subtract(v)).subtract(g.multiply(w)).mod(u),b=w.multiply(p).mod(u);return new d(this.curve,this.curve.fromBigInteger(x),this.curve.fromBigInteger(I),b)} /** * 自加 * * 标准射影坐标系: * * λ1 = 3 * x1^2 + a * z1^2 * λ2 = 2 * y1 * z1 * λ3 = y1^2 * λ4 = λ3 * x1 * z1 * λ5 = λ2^2 * λ6 = λ1^2 − 8 * λ4 * x3 = λ2 * λ6 * y3 = λ1 * (4 * λ4 − λ6) − 2 * λ5 * λ3 * z3 = λ2 * λ5 */twice(){if(this.isInfinity())return this;if(!this.y.toBigInteger().signum())return this.curve.infinity;const t=this.x.toBigInteger(),e=this.y.toBigInteger(),n=this.z,r=this.curve.q,i=this.curve.a.toBigInteger(),s=t.square().multiply(g).add(i.multiply(n.square())).mod(r),o=e.shiftLeft(1).multiply(n).mod(r),u=e.square().mod(r),l=u.multiply(t).multiply(n).mod(r),c=o.square().mod(r),h=s.square().subtract(l.shiftLeft(3)).mod(r),a=o.multiply(h).mod(r),f=s.multiply(l.shiftLeft(2).subtract(h)).subtract(c.shiftLeft(1).multiply(u)).mod(r),F=o.multiply(c).mod(r);return new d(this.curve,this.curve.fromBigInteger(a),this.curve.fromBigInteger(f),F)} /** * 倍点计算 */multiply(t){if(this.isInfinity())return this;if(!t.signum())return this.curve.infinity; // 使用加减法 const e=t.multiply(g),n=this.negate();let r=this;for(let i=e.bitLength()-2;i>0;i--){r=r.twice();const s=e.testBit(i);s!==t.testBit(i)&&(r=r.add(s?this:n))}return r}} /** * 椭圆曲线 y^2 = x^3 + ax + b */var F={ECPointFp:d,ECCurveFp:class{constructor(t,e,n){this.q=t,this.a=this.fromBigInteger(e),this.b=this.fromBigInteger(n),this.infinity=new d(this,null,null)} /** * 判断两个椭圆曲线是否相等 */equals(t){return t===this||this.q.equals(t.q)&&this.a.equals(t.a)&&this.b.equals(t.b)} /** * 生成椭圆曲线域元素 */fromBigInteger(t){return new f(this.q,t)} /** * 解析 16 进制串为椭圆曲线点 */decodePointHex(t){switch(parseInt(t.substr(0,2),16)){ // 第一个字节 case 0:return this.infinity;case 2:case 3: // 压缩 const e=this.fromBigInteger(new h(t.substr(2),16)); // 对 p ≡ 3 (mod4),即存在正整数 u,使得 p = 4u + 3 // 计算 y = (√ (x^3 + ax + b) % p)^(u + 1) modp let n=this.fromBigInteger(e.multiply(e.square()).add(e.multiply(this.a)).add(this.b).toBigInteger().modPow(this.q.divide(new h("4")).add(h.ONE),this.q)); // 算出结果 2 进制最后 1 位不等于第 1 个字节减 2 则取反 return n.toBigInteger().mod(a).equals(new h(t.substr(0,2),16).subtract(a))||(n=n.negate()),new d(this,e,n);case 4:case 6:case 7:const r=(t.length-2)/2,i=t.substr(2,r),s=t.substr(r+2,r);return new d(this,this.fromBigInteger(new h(i,16)),this.fromBigInteger(new h(s,16)));default: // 不支持 return null}}}}; /* eslint-disable no-bitwise, no-mixed-operators, no-use-before-define, max-len */const{BigInteger:y,SecureRandom:p}=t,{ECCurveFp:m}=F,w=new p,{curve:v,G:x,n:I}=b(); /** * 生成ecparam */ function b(){ // 椭圆曲线 const t=new y("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",16),e=new y("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",16),n=new y("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",16),r=new m(t,e,n),i=r.decodePointHex("0432C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0");return{curve:r,G:i,n:new y("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",16)}} /** * 生成密钥对:publicKey = privateKey * G */ /** * 补全16进制字符串 */ function B(t,e){return t.length>=e?t:new Array(e-t.length+1).join("0")+t} /** * 转成16进制串 */var q={getGlobalCurve: /** * 获取公共椭圆曲线 */ function(){return v},generateEcparam:b,generateKeyPairHex:function(t,e,n){const r=(t?new y(t,e,n):new y(I.bitLength(),w)).mod(I.subtract(y.ONE)).add(y.ONE),i=B(r.toString(16),64),s=x.multiply(r);return{privateKey:i,publicKey:"04"+B(s.getX().toBigInteger().toString(16),64)+B(s.getY().toBigInteger().toString(16),64)}} /** * 生成压缩公钥 */,compressPublicKeyHex:function(t){if(130!==t.length)throw new Error("Invalid public key to compress");const e=(t.length-2)/2,n=t.substr(2,e);let r="03";return new y(t.substr(e+2,e),16).mod(new y("2")).equals(y.ZERO)&&(r="02"),r+n} /** * utf8串转16进制串 */,utf8ToHex:function(t){const e=(t=unescape(encodeURIComponent(t))).length,n=[]; // 转换到字数组 for(let i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8; // 转换到16进制 const r=[];for(let i=0;i>>2]>>>24-i%4*8&255;r.push((t>>>4).toString(16)),r.push((15&t).toString(16))}return r.join("")},leftPad:B,arrayToHex:function(t){return t.map((t=>1===(t=t.toString(16)).length?"0"+t:t)).join("")} /** * 转成utf8串 */,arrayToUtf8:function(t){const e=[];let n=0;for(let i=0;i<2*t.length;i+=2)e[i>>>3]|=parseInt(t[n],10)<<24-i%8*4,n++;try{const n=[];for(let r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(t))}return decodeURIComponent(escape(n.join("")))}catch(r){throw new Error("Malformed UTF-8 data")}} /** * 转成字节数组 */,hexToArray:function(t){const e=[];let n=t.length;n%2!=0&&(t=B(t,n+1)),n=t.length;for(let r=0;r>>32-n} /** * 二进制异或运算 */function H(t,e){const n=[];for(let r=t.length-1;r>=0;r--)n[r]=255&(t[r]^e[r]);return n} /** * 压缩函数中的置换函数 P0(X) = X xor (X <<< 9) xor (X <<< 17) */function C(t){return t^A(t,9)^A(t,17)} /** * 消息扩展中的置换函数 P1(X) = X xor (X <<< 15) xor (X <<< 23) */ /** * sm3 本体 */ function S(t){let e=8*t.length,n=e%512; // k 是满足 len + 1 + k = 448mod512 的最小的非负整数 // 如果 448 <= (512 % len) < 512,需要多补充 (len % 448) 比特'0'以满足总比特长度为512的倍数 n=n>=448?512-n%448-1:448-n-1; // 填充 const r=new Array((n-7)/8),i=new Array(8);for(let a=0,g=r.length;a=0;a--)if(e.length>8){const t=e.length-8;i[a]=parseInt(e.substr(t),2),e=e.substr(0,t)}else e.length>0&&(i[a]=parseInt(e,2),e="");const s=new Uint8Array([...t,128,...r,...i]),o=new DataView(s.buffer,0),u=s.length/64,l=new Uint32Array([1937774191,1226093241,388252375,3666478592,2842636476,372324522,3817729613,2969243214]);for(let a=0;a=0&&o<=15?e:n,r=A(A(g,12)+y+A(h,o),7),i=r^A(g,12),s=(o>=0&&o<=15?g^f^d:g&f|g&d|f&d)+F+i+E[o],u=(o>=0&&o<=15?y^p^m:y&p|~y&m)+w+r+P[o],F=d,d=A(f,9),f=g,g=s,w=m,m=A(p,19),p=y,y=C(u);l[0]^=g,l[1]^=f,l[2]^=d,l[3]^=F,l[4]^=y,l[5]^=p,l[6]^=m,l[7]^=w} // 转回 uint8 var c;const h=[];for(let a=0,g=l.length;a>>24,(16711680&t)>>>16,(65280&t)>>>8,255&t)}return h} /** * hmac 实现 */const T=new Uint8Array(64),K=new Uint8Array(64);for(let lt=0;lt<64;lt++)T[lt]=54,K[lt]=92;var R={sm3:S,hmac:function(t,e){for( // 密钥填充 e.length>64&&(e=S(e));e.length<64;)e.push(0);const n=H(e,T),r=H(e,K),i=S([...n,...t]);return S([...r,...i])}}; /* eslint-disable no-use-before-define */const{BigInteger:z}=t,{encodeDer:D,decodeDer:O}=c,j=q,U=R.sm3,{G:k,curve:X,n:Z}=j.generateEcparam(); /** * sm3杂凑算法 */ function L(t,e,n="1234567812345678"){ // z = hash(entl || userId || a || b || gx || gy || px || py) n=j.utf8ToHex(n);const r=j.leftPad(k.curve.a.toBigInteger().toRadix(16),64),i=j.leftPad(k.curve.b.toBigInteger().toRadix(16),64),s=j.leftPad(k.getX().toBigInteger().toRadix(16),64),o=j.leftPad(k.getY().toBigInteger().toRadix(16),64);let u,l;if(128===e.length)u=e.substr(0,64),l=e.substr(64,64);else{const t=k.curve.decodePointHex(e);u=j.leftPad(t.getX().toBigInteger().toRadix(16),64),l=j.leftPad(t.getY().toBigInteger().toRadix(16),64)}const c=j.hexToArray(n+r+i+s+o+u+l),h=4*n.length;c.unshift(255&h),c.unshift(h>>8&255);const a=U(c); // e = hash(z || msg) return j.arrayToHex(U(a.concat(j.hexToArray(t))))} /** * 计算公钥 */function Y(t){const e=k.multiply(new z(t,16));return"04"+j.leftPad(e.getX().toBigInteger().toString(16),64)+j.leftPad(e.getY().toBigInteger().toString(16),64)} /** * 获取椭圆曲线点 */function V(){const t=j.generateKeyPairHex(),e=X.decodePointHex(t.publicKey);return t.k=new z(t.privateKey,16),t.x1=e.getX().toBigInteger(),t}var G={generateKeyPairHex:j.generateKeyPairHex,compressPublicKeyHex:j.compressPublicKeyHex,comparePublicKeyHex:j.comparePublicKeyHex,doEncrypt: /** * 加密 */ function(t,e,n=1){t="string"==typeof t?j.hexToArray(j.utf8ToHex(t)):Array.prototype.slice.call(t),e=j.getGlobalCurve().decodePointHex(e);// 先将公钥转成点 const r=j.generateKeyPairHex(),i=new z(r.privateKey,16);// 随机数 k // c1 = k * G let s=r.publicKey;s.length>128&&(s=s.substr(s.length-128)); // (x2, y2) = k * publicKey const o=e.multiply(i),u=j.hexToArray(j.leftPad(o.getX().toBigInteger().toRadix(16),64)),l=j.hexToArray(j.leftPad(o.getY().toBigInteger().toRadix(16),64)),c=j.arrayToHex(U([].concat(u,t,l)));let h=1,a=0,g=[];// 256 位 const f=[].concat(u,l),d=()=>{ // (1) Hai = hash(z || ct) // (2) ct++ g=U([...f,h>>24&255,h>>16&255,h>>8&255,255&h]),h++,a=0};d();// 先生成 Ha1 for(let y=0,p=t.length;y{ // (1) Hai = hash(z || ct) // (2) ct++ g=U([...f,h>>24&255,h>>16&255,h>>8&255,255&h]),h++,a=0};d();// 先生成 Ha1 for(let F=0,y=o.length;F1===(t=t.toString(16)).length?"0"+t:t)).join("")} /** * 转成字节数组 */function J(t){const e=[];let n=t.length;var r,i;n%2!=0&&(i=n+1,t=(r=t).length>=i?r:new Array(i-r.length+1).join("0")+r),n=t.length;for(let s=0;s>>32-n} /** * 非线性变换 */function nt(t){return(255&W[t>>>24&255])<<24|(255&W[t>>>16&255])<<16|(255&W[t>>>8&255])<<8|255&W[255&t]} /** * 线性变换,加密/解密用 */function rt(t){return t^et(t,2)^et(t,10)^et(t,18)^et(t,24)} /** * 线性变换,生成轮密钥用 */function it(t){return t^et(t,13)^et(t,23)} /** * 以一组 128 比特进行加密/解密操作 */function st(t,e,n){const r=new Array(4),i=new Array(4); // 字节数组转成字数组(此处 1 字 = 32 比特) for(let s=0;s<4;s++)i[0]=255&t[4*s],i[1]=255&t[4*s+1],i[2]=255&t[4*s+2],i[3]=255&t[4*s+3],r[s]=i[0]<<24|i[1]<<16|i[2]<<8|i[3]; // x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i])) for(let s,o=0;o<32;o+=4)s=r[1]^r[2]^r[3]^n[o+0],r[0]^=rt(nt(s)),// x[4] s=r[2]^r[3]^r[0]^n[o+1],r[1]^=rt(nt(s)),// x[5] s=r[3]^r[0]^r[1]^n[o+2],r[2]^=rt(nt(s)),// x[6] s=r[0]^r[1]^r[2]^n[o+3],r[3]^=rt(nt(s)); // 反序变换 for(let s=0;s<16;s+=4)e[s]=r[3-s/4]>>>24&255,e[s+1]=r[3-s/4]>>>16&255,e[s+2]=r[3-s/4]>>>8&255,e[s+3]=255&r[3-s/4]} /** * 密钥扩展算法 */function ot(t,e,n,{padding:r="pkcs#7",mode:i,iv:s=[],output:o="string"}={}){if("cbc"===i&&( // CBC 模式,默认走 ECB 模式 "string"==typeof s&&(s=tt(s)),16!==s.length)) // iv 不是 128 比特 throw new Error("iv is invalid"); // 检查 key if("string"==typeof e&&(e=tt(e)),16!==e.length) // key 不是 128 比特 throw new Error("key is invalid"); // 检查输入 // 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7 if( // 加密,输入为 utf8 串 t="string"==typeof t?0!==n? /** * utf8 串转字节数组 */ function(t){const e=[];for(let n=0,r=t.length;n>>6),// 110yyyyy(0xc0-0xdf) e.push(128|63&r);else if(r<=55295||r>=57344&&r<=65535) // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz e.push(224|r>>>12),// 1110xxxx(0xe0-0xef) e.push(128|r>>>6&63),// 10yyyyyy(0x80-0xbf) e.push(128|63&r);else{if(!(r>=65536&&r<=1114111)) // 五、六字节,暂时不支持 throw e.push(r),new Error("input is not supported"); // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz n++,e.push(240|r>>>18&28),// 11110www(0xf0-0xf7) e.push(128|r>>>12&63),// 10xxxxxx(0x80-0xbf) e.push(128|r>>>6&63),// 10yyyyyy(0x80-0xbf) e.push(128|63&r)}}return e} /** * 字节数组转 utf8 串 */(t):tt(t):[...t],("pkcs#5"===r||"pkcs#7"===r)&&0!==n){const e=Q-t.length%Q;for(let n=0;n=Q;){const e=t.slice(a,a+16),r=new Array(16);if("cbc"===i)for(let t=0;t1===(t=t.toString(16)).length?"0"+t:t)).join(""):function(t){const e=[];for(let n=0,r=t.length;n=240&&t[n]<=247?( // 四字节 e.push(String.fromCodePoint(((7&t[n])<<18)+((63&t[n+1])<<12)+((63&t[n+2])<<6)+(63&t[n+3]))),n+=3):t[n]>=224&&t[n]<=239?( // 三字节 e.push(String.fromCodePoint(((15&t[n])<<12)+((63&t[n+1])<<6)+(63&t[n+2]))),n+=2):t[n]>=192&&t[n]<=223?( // 双字节 e.push(String.fromCodePoint(((31&t[n])<<6)+(63&t[n+1]))),n++): // 单字节 e.push(String.fromCodePoint(t[n]));return e.join("")}(l):l}const ut=e({sm2:G,sm3:function(t,e){if(t="string"==typeof t?function(t){const e=[];for(let n=0,r=t.length;n>>6),// 110yyyyy(0xc0-0xdf) e.push(128|63&r);else if(r<=55295||r>=57344&&r<=65535) // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz e.push(224|r>>>12),// 1110xxxx(0xe0-0xef) e.push(128|r>>>6&63),// 10yyyyyy(0x80-0xbf) e.push(128|63&r);else{if(!(r>=65536&&r<=1114111)) // 五、六字节,暂时不支持 throw e.push(r),new Error("input is not supported"); // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz n++,e.push(240|r>>>18&28),// 11110www(0xf0-0xf7) e.push(128|r>>>12&63),// 10xxxxxx(0x80-0xbf) e.push(128|r>>>6&63),// 10yyyyyy(0x80-0xbf) e.push(128|63&r)}}return e}(t):Array.prototype.slice.call(t),e){if("hmac"!==(e.mode||"hmac"))throw new Error("invalid mode");let n=e.key;if(!n)throw new Error("invalid key");return n="string"==typeof n?J(n):Array.prototype.slice.call(n),_(M(t,n))}return _(N(t))},sm4:{encrypt:(t,e,n)=>ot(t,e,1,n),decrypt:(t,e,n)=>ot(t,e,0,n)}});export{ut as _}; //# sourceMappingURL=sm-crypto-2cfdc71b.js.map