@sddxzxqy/core-js-sdk
Version:
Official SDK of OCP Auth
2 lines (1 loc) • 9.35 kB
JavaScript
import{__awaiter as e,__generator as r}from"tslib";import t from"qs";import s from"./jsencrypt.js";import{Buffer as c}from"../../../_virtual/_polyfill-node.buffer.js";var n,i=function(){function t(){}return t.prototype.generateRandomString=function(e){void 0===e&&(e=30);for(var r="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",s=t.length,c=0;c<e;c++)r+=t.charAt(Math.floor(Math.random()*s));return r},t.prototype.encrypt=function(t){return e(this,void 0,void 0,(function(){var e,i,o,a,u,y,p,m,v,l,d,f,P,K,g,h,S,w,j,b;return r(this,(function(r){switch(r.label){case 0:if(!t.rawTxt)return[2,Promise.reject("无法加密空字符")];switch(t.isBrowser="undefined"!=typeof window,t.type){case n.AES:return[3,1];case n.RSA:return[3,5];case n.SM2:return[3,6];case n.SM4:return[3,14]}return[3,22];case 1:e=t.secureKey||this.createKey(),i=t.iv||this.createIv(),r.label=2;case 2:return r.trys.push([2,4,,5]),[4,import("crypto-js")];case 3:return o=r.sent(),a=o.AES.encrypt(t.rawTxt,o.enc.Utf8.parse(e),{iv:o.enc.Utf8.parse(i),mode:o.mode.CBC,padding:o.pad.Pkcs7}),[2,Promise.resolve({secureType:n.AES,iv:o.enc.Utf8.stringify(a.iv),secureKey:o.enc.Utf8.stringify(a.key),result:"".concat(o.enc.Base64.stringify(a.ciphertext))})];case 4:return u=r.sent(),[2,Promise.reject("模块: crypto-js: "+u.message)];case 5:return(y=t.servePublicKey)?((p=new s({default_key_size:2048})).setPublicKey(y),(m=p.encrypt(t.rawTxt))?[2,Promise.resolve({secureType:n.RSA,result:"".concat(m)})]:[2,Promise.reject("RSA encrypt error")]):[2,Promise.reject("加密类型 "+t.type+" serverPublicKey 不能为空")];case 6:if(!t.servePublicKey)return[2,Promise.reject("加密类型 "+t.type+" servePublicKey 不能为空")];if(!t.isBrowser)return[3,11];r.label=7;case 7:return r.trys.push([7,9,,10]),[4,import("sm-crypto")];case 8:return d=r.sent().sm2,v=d.doEncrypt(t.rawTxt,t.servePublicKey,1),[2,Promise.resolve({secureType:n.SM2,result:"04".concat(v)})];case 9:return l=r.sent(),[2,Promise.reject("模块: sm-crypto:"+l.message)];case 10:return[3,14];case 11:return r.trys.push([11,13,,14]),[4,import("miniprogram-sm-crypto")];case 12:return d=r.sent(),f=d.doEncrypt(t.rawTxt,t.servePublicKey,1),[2,Promise.resolve({secureType:n.SM2,result:"04".concat(f)})];case 13:return P=r.sent(),[2,Promise.reject("模块: miniprogram-sm-crypto:"+P.message)];case 14:if(K=t.secureKey||new c(this.createKey()).toString("hex"),g=t.iv||new c(this.createIv()).toString("hex"),!t.isBrowser)return[3,19];r.label=15;case 15:return r.trys.push([15,17,,18]),[4,import("sm-crypto")];case 16:return w=r.sent().sm4,h=w.encrypt(t.rawTxt,K,{padding:"pkcs#5",mode:"cbc",iv:g}),[2,Promise.resolve({secureType:n.SM4,iv:g,secureKey:K,result:"".concat(h)})];case 17:return S=r.sent(),[2,Promise.reject("模块: sm-crypto:"+S.message)];case 18:return[3,22];case 19:return r.trys.push([19,21,,22]),[4,import("miniprogram-sm-crypto")];case 20:return w=r.sent(),j=w.encrypt(t.rawTxt,K,{padding:"pkcs#5",mode:"cbc",iv:g}),[2,Promise.resolve({secureType:n.SM4,iv:g,secureKey:K,result:"".concat(j)})];case 21:return b=r.sent(),[2,Promise.reject("模块: miniprogram-sm-crypto:"+b.message)];case 22:return[2,Promise.reject("未知的加密类型"+t.type)]}}))}))},t.prototype.createAsyKey=function(t){return e(this,void 0,void 0,(function(){var e,c,i,o,a;return r(this,(function(r){switch(r.label){case 0:switch(t){case n.RSA:return[3,1];case n.SM2:return[3,2]}return[3,10];case 1:return e=new s({default_key_size:2048}),[2,Promise.resolve({publicKey:e.getPublicKeyB64(),privateKey:e.getPrivateKeyB64()})];case 2:if("undefined"==typeof window)return[3,7];r.label=3;case 3:return r.trys.push([3,5,,6]),[4,import("sm-crypto")];case 4:return i=r.sent().sm2,o=i.generateKeyPairHex(),[2,Promise.resolve({publicKey:o.publicKey,privateKey:o.privateKey})];case 5:return c=r.sent(),[2,Promise.reject("模块: sm-crypto:"+c.message)];case 6:return[3,10];case 7:return r.trys.push([7,9,,10]),[4,import("miniprogram-sm-crypto")];case 8:return i=r.sent(),o=i.generateKeyPairHex(),[2,Promise.resolve({publicKey:o.publicKey,privateKey:o.privateKey})];case 9:return a=r.sent(),[2,Promise.reject("模块: miniprogram-sm-crypto:"+a.message)];case 10:return[2,Promise.reject("未知的非对称加密类型"+t)]}}))}))},t.prototype.createIv=function(){return this.generateRandomString(16)},t.prototype.createKey=function(){return this.generateRandomString(16)},t.prototype.decrypt=function(t){return e(this,void 0,void 0,(function(){var e,c,i,o,a,u,y,p,m,v,l,d,f,P,K,g,h,S,w,j,b,x,T;return r(this,(function(r){switch(r.label){case 0:if(!t.encryptedTxt)return[2,Promise.reject("无法解密空字符")];if((e=t.encryptedTxt.split(":")).length<2)return[2,Promise.reject("待解密信息格式不正确: "+t.encryptedTxt)];switch(c="undefined"!=typeof window,i=e[0],o=e[1],i){case n.AES:return[3,1];case n.RSA:return[3,5];case n.SM2:return[3,6];case n.SM4:return[3,14]}return[3,22];case 1:if(!t.iv||!t.secureKey)return[2,Promise.reject("".concat(n.AES,"解密失败,缺少必要参数"))];r.label=2;case 2:return r.trys.push([2,4,,5]),[4,import("crypto-js")];case 3:return a=r.sent(),u=a.enc.Hex.parse(t.encryptedTxt),y=a.enc.Base64.stringify(u),p=a.AES.decrypt(y,a.enc.Utf8.parse(t.secureKey),{iv:a.enc.Utf8.parse(t.iv),mode:a.mode.CBC,padding:a.pad.Pkcs7}),[2,Promise.resolve({rawTxt:p.toString(a.enc.Utf8)})];case 4:return m=r.sent(),[2,Promise.reject("模块: crypto-js: "+m.message)];case 5:return(v=t.clientPrivateKey)?((l=new s({default_key_size:2048})).setPrivateKey(v),(d=l.decrypt(o))?(h=d.split(":"),[2,Promise.resolve({iv:h[0],secureKey:h[1]})]):[2,Promise.reject("RSA encrypt error")]):[2,Promise.reject("加密类型 ".concat(n.RSA," clientPrivateKey 不能为空"))];case 6:if(!t.clientPrivateKey)return[2,Promise.reject("加密类型 ".concat(n.SM2," clientPrivateKey 不能为空"))];if(!c)return[3,11];r.label=7;case 7:return r.trys.push([7,9,,10]),[4,import("sm-crypto")];case 8:return K=r.sent().sm2,f=K.doDecrypt(o,t.clientPrivateKey,1),h=f.split(":"),[2,Promise.resolve({iv:h[0],secureKey:h[1]})];case 9:return P=r.sent(),[2,Promise.reject("模块: sm-crypto:"+P.message)];case 10:return[3,14];case 11:return r.trys.push([11,13,,14]),[4,import("miniprogram-sm-crypto")];case 12:return K=r.sent(),g=K.doEncrypt(o,t.clientPrivateKey,1),h=g.split(":"),[2,Promise.resolve({iv:h[0],secureKey:h[1]})];case 13:return S=r.sent(),[2,Promise.reject("模块: miniprogram-sm-crypto:"+S.message)];case 14:if(!t.iv||!t.secureKey)return[2,Promise.reject("".concat(n.AES,"解密失败,缺少必要参数"))];if(!c)return[3,19];r.label=15;case 15:return r.trys.push([15,17,,18]),[4,import("sm-crypto")];case 16:return b=r.sent().sm4,w=b.decrypt(o,t.secureKey,{padding:"pkcs#5",mode:"cbc",iv:t.iv}),[2,Promise.resolve({rawTxt:w})];case 17:return j=r.sent(),[2,Promise.reject("模块: sm-crypto:"+j.message)];case 18:return[3,22];case 19:return r.trys.push([19,21,,22]),[4,import("miniprogram-sm-crypto")];case 20:return b=r.sent(),x=b.decrypt(o,t.secureKey,{padding:"pkcs#5",mode:"cbc",iv:t.iv}),[2,Promise.resolve({rawTxt:x})];case 21:return T=r.sent(),[2,Promise.reject("模块: miniprogram-sm-crypto:"+T.message)];case 22:return[2,Promise.reject("解密失败,未知的加密类型: "+i)]}}))}))},t}();!function(e){e.RSA="RSA",e.SM2="SM2",e.AES="AES",e.SM4="SM4"}(n||(n={}));var o=new i,a=function(t){return void 0===t&&(t=n.SM2),e(void 0,void 0,void 0,(function(){return r(this,(function(e){return[2,o.createAsyKey(t)]}))}))},u=function(e){return void 0===e&&(e=30),o.generateRandomString(e)},y=function(s,i,a,u,y){return void 0===a&&(a=n.SM4),void 0===u&&(u=n.SM2),e(void 0,void 0,void 0,(function(){var e,n,p,l,d,f,P,K,g,h,S,w,j,b,x,T,A,M,E,R;return r(this,(function(r){switch(r.label){case 0:if("form"!==i)return[3,5];for(f in n=new c(m()).toString("hex"),p=new c(v()).toString("hex"),d=[],l=s)d.push(f);P=0,r.label=1;case 1:return P<d.length?(f=d[P])in l&&(g=s[K=f])?[4,o.encrypt({rawTxt:g,type:a,secureKey:n,iv:p})]:[3,3]:[3,4];case 2:(e=r.sent())&&(h=e.result,s[K]="".concat(a,":").concat(h)),r.label=3;case 3:return P++,[3,1];case 4:return e={secureType:a,result:t.stringify(s),iv:p,secureKey:n},[3,8];case 5:return"json"!==i?[3,7]:[4,o.encrypt({rawTxt:JSON.stringify(s),type:a})];case 6:return S=r.sent(),w=S.secureType,j=S.result,b=S.iv,x=S.secureKey,e={secureType:w,result:"".concat(a,":").concat(j),iv:b,secureKey:x},[3,8];case 7:throw new Error("加密仅支持form 和 json");case 8:return T=e.result,A=e.iv,M=e.secureKey,[4,o.encrypt({rawTxt:"".concat(A,":").concat(M),type:u,servePublicKey:y})];case 9:return E=r.sent(),R=E.result,[2,{success:!0,symmetricKey:"".concat(u,":").concat(R),result:"".concat(T)}]}}))}))},p=function(t,s,c){return e(void 0,void 0,void 0,(function(){var e,n,i,a;return r(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),[4,o.decrypt({encryptedTxt:s,clientPrivateKey:c})];case 1:return(e=r.sent())?(n=e.iv,i=e.secureKey,[4,o.decrypt({encryptedTxt:t,iv:n,secureKey:i})]):[2,{success:!1}];case 2:return(a=r.sent())?[2,{success:!0,result:a.rawTxt}]:[2,{success:!1}];case 3:return r.sent(),[2,{success:!1}];case 4:return[2]}}))}))},m=function(){return o.createKey()},v=function(){return o.createIv()};export{n as SecureType,a as createAsymmetricKey,v as createIv,m as createSecureKey,p as decryptData,y as encryptData,u as generateRandomString};