fa-toolkit
Version:
a devtool for fast app
1 lines • 18.8 kB
JavaScript
"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _regeneratorRuntime(){_regeneratorRuntime=function(){return s};var s={},e=Object.prototype,u=e.hasOwnProperty,c=Object.defineProperty||function(e,t,n){e[t]=n.value},t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",n=t.asyncIterator||"@@asyncIterator",i=t.toStringTag||"@@toStringTag";function a(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{a({},"")}catch(e){a=function(e,t,n){return e[t]=n}}function o(e,t,n,r){var i,a,s,o,t=t&&t.prototype instanceof g?t:g,t=Object.create(t.prototype),r=new b(r||[]);return c(t,"_invoke",{value:(i=e,a=n,s=r,o="suspendedStart",function(e,t){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===e)throw t;return m()}for(s.method=e,s.arg=t;;){var n=s.delegate;if(n){var r=function e(t,n){var r=n.method,i=t.iterator[r];if(void 0===i)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=void 0,e(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),l;i=f(i,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,l;var i=i.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=void 0),n.delegate=null,l):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,l)}(n,s);if(r){if(r===l)continue;return r}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if("suspendedStart"===o)throw o="completed",s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);o="executing";r=f(i,a,s);if("normal"===r.type){if(o=s.done?"completed":"suspendedYield",r.arg===l)continue;return{value:r.arg,done:s.done}}"throw"===r.type&&(o="completed",s.method="throw",s.arg=r.arg)}})}),t}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}s.wrap=o;var l={};function g(){}function h(){}function d(){}var p={};a(p,r,function(){return this});t=Object.getPrototypeOf,t=t&&t(t(T([])));t&&t!==e&&u.call(t,r)&&(p=t);var y=d.prototype=g.prototype=Object.create(p);function S(e){["next","throw","return"].forEach(function(t){a(e,t,function(e){return this._invoke(t,e)})})}function v(s,o){var t;c(this,"_invoke",{value:function(n,r){function e(){return new o(function(e,t){!function t(e,n,r,i){e=f(s[e],s,n);if("throw"!==e.type){var a=e.arg,n=a.value;return n&&"object"==_typeof(n)&&u.call(n,"__await")?o.resolve(n.__await).then(function(e){t("next",e,r,i)},function(e){t("throw",e,r,i)}):o.resolve(n).then(function(e){a.value=e,r(a)},function(e){return t("throw",e,r,i)})}i(e.arg)}(n,r,e,t)})}return t=t?t.then(e,e):e()}})}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function b(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function T(t){if(t){var e=t[r];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,e=function e(){for(;++n<t.length;)if(u.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return e.next=e}}return{next:m}}function m(){return{value:void 0,done:!0}}return c(y,"constructor",{value:h.prototype=d,configurable:!0}),c(d,"constructor",{value:h,configurable:!0}),h.displayName=a(d,i,"GeneratorFunction"),s.isGeneratorFunction=function(e){e="function"==typeof e&&e.constructor;return!!e&&(e===h||"GeneratorFunction"===(e.displayName||e.name))},s.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,a(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e},s.awrap=function(e){return{__await:e}},S(v.prototype),a(v.prototype,n,function(){return this}),s.AsyncIterator=v,s.async=function(e,t,n,r,i){void 0===i&&(i=Promise);var a=new v(o(e,t,n,r),i);return s.isGeneratorFunction(t)?a:a.next().then(function(e){return e.done?e.value:a.next()})},S(y),a(y,i,"Generator"),a(y,r,function(){return this}),a(y,"toString",function(){return"[object Generator]"}),s.keys=function(e){var t,n=Object(e),r=[];for(t in n)r.push(t);return r.reverse(),function e(){for(;r.length;){var t=r.pop();if(t in n)return e.value=t,e.done=!1,e}return e.done=!0,e}},s.values=T,b.prototype={constructor:b,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(_),!e)for(var t in this)"t"===t.charAt(0)&&u.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var r=this;function e(e,t){return a.type="throw",a.arg=n,r.next=e,t&&(r.method="next",r.arg=void 0),!!t}for(var t=this.tryEntries.length-1;0<=t;--t){var i=this.tryEntries[t],a=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var s=u.call(i,"catchLoc"),o=u.call(i,"finallyLoc");if(s&&o){if(this.prev<i.catchLoc)return e(i.catchLoc,!0);if(this.prev<i.finallyLoc)return e(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return e(i.catchLoc,!0)}else{if(!o)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return e(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;0<=n;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&u.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var i=r;break}}var a=(i=i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc?null:i)?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),_(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r,i=n.completion;return"throw"===i.type&&(r=i.arg,_(n)),r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:T(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},s}function asyncGeneratorStep(e,t,n,r,i,a,s){try{var o=e[a](s),u=o.value}catch(e){return void n(e)}o.done?t(u):Promise.resolve(u).then(r,i)}function _asyncToGenerator(o){return function(){var e=this,s=arguments;return new Promise(function(t,n){var r=o.apply(e,s);function i(e){asyncGeneratorStep(r,t,n,i,a,"next",e)}function a(e){asyncGeneratorStep(r,t,n,i,a,"throw",e)}i(void 0)})}}var CONSTANTS=require("./constants"),CLIENT_TYPE="Rsagen",CLIENT_VERSION="Rsagen-V3.0.1.20190615",ALGORITHM_TYPE="Normal",ALGORITHM="NONEWITHRSA",OUTPUT_DATA_NAME="signData",zipUtils=require("./zip-utils"),_require=require("js-base64"),encode=_require.encode,Base64=_require.Base64,http=require("http"),_fs=require("fs"),_crypto=require("crypto"),_signature=require("./signature"),dssSignUtils=require("./dss-sign-utils");function processChunk(e,t,n){var r=t.startIndex,i=t.startIndex+t.len,r=e.slice(r,i),i=Buffer.alloc(5+t.len);i[0]=CONSTANTS.BEGIN_TAG,i.writeInt32LE(r.length,1),r.copy(i,5),t.sign=getBufferDigest(i,n)}function hashFile(e){return getBufferDigest(_fs.readFileSync(e))}function getChunkDigest(e,t){function n(e){e.copy(i,a),a+=e.length}var r=e.sections,e=r.header.sign.length+r.central.sign.length+r.footer.sign.length+5,i=Buffer.alloc(e),a=0;return i.writeInt8(CONSTANTS.JOINT_TAG,0),i.writeInt32LE(3,1),a+=5,n(r.header.sign),n(r.central.sign),n(r.footer.sign),getBufferDigest(i,t)}function signDigest(e,t){var r={keyId:t.keyId,clientType:CLIENT_TYPE,clientVersion:CLIENT_VERSION,algorithmType:ALGORITHM_TYPE,userName:t.userName,unSignData:encode(e),passwordDigest:t.passwordDigest,algorithm:ALGORITHM,outFileNameArray:[OUTPUT_DATA_NAME],encryptPassword:t.encryptPassword},i=new URL(t.host),a=i.pathname;return new Promise(function(n){var e=http.request({host:i.hostname,method:"POST",path:a,headers:{"Content-Type":"application/json"}},function(e){var t="";e.on("data",function(e){t+=e}),e.on("end",function(){n(JSON.parse(t))})});e.on("error",function(e){console.error("problem with request: ".concat(e.message))}),e.write(JSON.stringify(r)),e.end()})}function updateUnsignedData(e){var t=Buffer.from(CONSTANTS.SIGN_HEADER),n=getBufferDigest(e),r=Buffer.alloc(n.length+t.length),e=0;return t.copy(r,0),e+=t.length,n.copy(r,e),r}function getDigestObject(e){var t=Buffer.alloc(e.length+12);return t.writeInt32LE(e.length+8,0),t.writeInt32LE(CONSTANTS.CRYPT_TYPE_RSA_SHA256,4),t.writeInt32LE(e.length,8),e.copy(t,12),{len:t.length,buffer:t}}function getDcObj(e,t){var n={len:12,digests:{size:0,data:[]},certs:{size:0,data:[]},additional:0};return n.digests.data.push(e),n.digests.size+=e.len,n.len+=e.len,n.certs.data.push(t),n.certs.size+=t.len,n.len+=t.len,n}function getSignedObject(e,t){return _getSignedObject.apply(this,arguments)}function _getSignedObject(){return(_getSignedObject=_asyncToGenerator(_regeneratorRuntime().mark(function e(t,n){var r,i,a,s,o,u,c;return _regeneratorRuntime().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if((r={len:16+n.cert.pemBuffer.length,size:12+n.cert.pemBuffer.length,signdata:{size:0,buffer:null},signatures:{size:0,data:[]},pubkey:{size:n.cert.pemBuffer.length,buffer:n.cert.pemBuffer}}).signdata.buffer=makeSignDataBuffer(t),r.signdata.size=t.len,r.size+=t.len,r.len+=t.len,i=void 0,CONSTANTS.isApkSign())return e.next=9,dssSignUtils.getSignDigestOnline(r.signdata.buffer);e.next=13;break;case 9:a=e.sent,i=Buffer.from(Base64.toUint8Array(a.signature)),e.next=41;break;case 13:if("dss_v3"===n.type)return s=getBufferDigest(r.signdata.buffer),e.next=17,dssSignUtils.getSignDigestOnline(s);e.next=21;break;case 17:s=e.sent,i=Buffer.from(Base64.toUint8Array(s.signature)),e.next=41;break;case 21:if("dss"===n.type)return e.next=24,dssSignUtils.getSignDigestOnline(r.signdata.buffer);e.next=28;break;case 24:o=e.sent,i=Buffer.from(Base64.toUint8Array(o.signature)),e.next=41;break;case 28:if(n.signOnline)return o=updateUnsignedData(r.signdata.buffer),e.next=32,signDigest(o,n.onlineConfig);e.next=38;break;case 32:if((u=e.sent).success){e.next=35;break}throw new Error(u.message);case 35:i=Buffer.from(Base64.toUint8Array(u.data.signData)),e.next=41;break;case 38:(c=_crypto.createSign("RSA-SHA256")).update(r.signdata.buffer),i=c.sign(n.privateKey);case 41:return c={len:i.length+12,size:i.length+8,id:CONSTANTS.CRYPT_TYPE_RSA_SHA256,buffer:i},r.signatures.data.push(c),r.signatures.size+=c.len,r.size+=c.len,r.len+=c.len,e.abrupt("return",r);case 47:case"end":return e.stop()}},e)}))).apply(this,arguments)}function constructSignedData(e,t,n){return _constructSignedData.apply(this,arguments)}function _constructSignedData(){return(_constructSignedData=_asyncToGenerator(_regeneratorRuntime().mark(function e(t,n,r){var i,a,s;return _regeneratorRuntime().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if((a={len:4+n.len,size:n.len,data:[]}).data.push(n),i=CONSTANTS.isApkSign()?CONSTANTS.SIGN_TYPE_FULL_PACKAGE_APK:CONSTANTS.SIGN_TYPE_FULL_PACKAGE,s={len:a.len+12,size:a.len+4,id:i,value:a},(i={len:32+s.len,size:24+s.len,data:[]}).data.push(s),t.files&&!CONSTANTS.isApkSign()&&"dss_v3"===!r.type)return e.next=9,signFiles(t.files,r);e.next=11;break;case 9:(a=e.sent)&&((s={len:4+a.length,size:a.length,data:[]}).data.push(a),s={len:s.len+12,size:s.len+4,id:CONSTANTS.SIGN_TYPE_FILE_LIST,value:s},i.data.push(s),i.size+=s.len,i.len+=s.len);case 11:return e.abrupt("return",i);case 12:case"end":return e.stop()}},e)}))).apply(this,arguments)}function makeSignDataBuffer(e){var t=Buffer.alloc(e.len),n=0;return t.writeInt32LE(e.digests.size,n),n+=4,e.digests.data.forEach(function(e){e.buffer.copy(t,n),n+=e.len}),t.writeInt32LE(e.certs.size,n),n+=4,e.certs.data.forEach(function(e){e.buffer.copy(t,n),n+=e.len}),t.writeInt32LE(e.additional,n),t}function saveSignChunk(e){var t=Buffer.alloc(e.len),n=0;t.writeInt32LE(e.size,n),t.writeInt32LE(0,n+=4),n+=4;var r=CONSTANTS.isApkSign()?CONSTANTS.SIGN_TYPE_FULL_PACKAGE_APK:CONSTANTS.SIGN_TYPE_FULL_PACKAGE;e.data.forEach(function(e){t.writeInt32LE(e.size,n),n+=4,t.writeInt32LE(0,n),n+=4,t.writeInt32LE(e.id,n),n+=4,t.writeInt32LE(e.value.size,n),n+=4,r===e.id?e.value.data.forEach(function(e){t.writeInt32LE(e.size,n),n+=4,t.writeInt32LE(e.signdata.size,n),n+=4,e.signdata.buffer.copy(t,n),n+=e.signdata.buffer.length,t.writeInt32LE(e.signatures.size,n),n+=4,e.signatures.data.forEach(function(e){t.writeInt32LE(e.size,n),n+=4,t.writeInt32LE(e.id,n),n+=4,t.writeInt32LE(e.buffer.length,n),n+=4,e.buffer.copy(t,n),n+=e.buffer.length}),t.writeInt32LE(e.pubkey.size,n),n+=4,e.pubkey.buffer.copy(t,n),n+=e.pubkey.buffer.length}):CONSTANTS.SIGN_TYPE_FILE_LIST===e.id&&e.value.data.forEach(function(e){e.copy(t,n),n+=e.length})}),t.writeInt32LE(e.size,n),t.writeInt32LE(0,n+=4),n+=4;e=CONSTANTS.isApkSign()?CONSTANTS.SIGN_MAGIC_APK:CONSTANTS.SIGN_MAGIC;return Buffer.from(e).copy(t,n),t}function getSignFilesObject(e){var i={len:8,size:4,digests:[],sign:null};return e.forEach(function(e){var t=_signature.CRC32.digest(e.name.toString()),n=6+e.hash.length,r=Buffer.alloc(n);r.writeInt32LE(t,0),r.writeInt16LE(e.hash.length,4),e.hash.copy(r,6),i.digests.push(r),i.size+=n,i.len+=n}),i}function signFiles(e,t){return _signFiles.apply(this,arguments)}function _signFiles(){return(_signFiles=_asyncToGenerator(_regeneratorRuntime().mark(function e(t,n){var r,i,a,s,o,u,c;return _regeneratorRuntime().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=getSignFilesObject(t),i=Buffer.alloc(r.size),a=0,r.digests.forEach(function(e){e.copy(i,a),a+=e.length}),!n.sign){e.next=9;break}console.log("sign files, use remote sign"),s=n.sign,e.next=29;break;case 9:if("dss"===n.type)return e.next=12,dssSignUtils.getSignDigestOnline(i);e.next=16;break;case 12:o=e.sent,s=Buffer.from(Base64.toUint8Array(o.signature)),e.next=29;break;case 16:if(n.signOnline)return c=updateUnsignedData(i),e.next=20,signDigest(c,n.onlineConfig);e.next=26;break;case 20:if((u=e.sent).success){e.next=23;break}throw new Error(u.message);case 23:s=Buffer.from(Base64.toUint8Array(u.data.signData)),e.next=29;break;case 26:(c=_crypto.createSign("RSA-SHA256")).update(i),s=c.sign(n.privateKey);case 29:return r.digests=i.slice(),r.sign={len:12+s.length,size:8+s.length,id:CONSTANTS.CRYPT_TYPE_RSA_SHA256,data:s},r.len+=r.sign.len,e.abrupt("return",saveDigestChunk(r));case 33:case"end":return e.stop()}},e)}))).apply(this,arguments)}function saveDigestChunk(e){var t=Buffer.alloc(e.len),n=0;return t.writeInt32LE(e.size,0),n+=4,e.digests.copy(t,4),n+=e.digests.length,t.writeInt32LE(e.sign.size,n),t.writeInt32LE(e.sign.id,n+=4),t.writeInt32LE(e.sign.data.length,n+=4),e.sign.data.copy(t,n+=4),t}function signZipResource(e,t,n){return _signZipResource.apply(this,arguments)}function _signZipResource(){return(_signZipResource=_asyncToGenerator(_regeneratorRuntime().mark(function e(t,n,r){var i,a,s;return _regeneratorRuntime().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(zipUtils.checkZipBuffer(t)){e.next=2;break}return e.abrupt("return",null);case 2:if((i=zipUtils.parserZip(t)).tag){e.next=5;break}return e.abrupt("return",null);case 5:return i.options={files:n},Object.keys(i.sections).forEach(function(e){e=i.sections[e];processChunk(t,e)}),a=getChunkDigest(i),a=getDigestObject(a),a=getDcObj(a,r.cert.obj),e.next=12,getSignedObject(a,r);case 12:return s=e.sent,e.next=15,constructSignedData(i.options,s,r);case 15:return s=e.sent,i.signchunk=saveSignChunk(s),e.abrupt("return",saveChunks(t,i));case 18:case"end":return e.stop()}},e)}))).apply(this,arguments)}function getBufferDigest(e,t){t=_crypto.createHash(t=t||"SHA256");return t.update(e),t.digest()}function saveChunks(e,t){var n=Buffer.alloc(e.length+t.signchunk.length),r=0,i=t.sections;return e.copy(n,0,i.header.startIndex,i.header.startIndex+i.header.len),r+=i.header.len,t.signchunk.copy(n,r),r+=t.signchunk.length,e.copy(n,r,i.central.startIndex,i.central.startIndex+i.central.len),r+=i.central.len,e.writeInt32LE(i.central.startIndex+t.signchunk.length,i.footer.startIndex+zipUtils.EOCD_CENTRAL_DIR_OFFSET_FIELD_OFFSET),e.copy(n,r,i.footer.startIndex,i.footer.startIndex+i.footer.len),n}function getSignChunkData(e,t){var n={};return n.size=e.readInt32LE(t),n.id=e.readInt32LE(t+=8),t+=4,n.value={},n.value.size=e.readInt32LE(t),n.value.data=[],{data:n,index:t+=4}}function getOneSignaturesData(e,t){var n={};n.size=e.readInt32LE(t),n.id=e.readInt32LE(t+=4);var r=e.readInt32LE(t+=4);return n.buffer=e.slice(t+=4,t+r),{sData:n,index:t+=r}}function getFullPackageSignBlock(e,t){for(var n=(c=t.previous)+t.len,r=CONSTANTS.isApkSign()?CONSTANTS.SIGN_TYPE_FULL_PACKAGE_APK:CONSTANTS.SIGN_TYPE_FULL_PACKAGE;c<=n;){var i=getSignChunkData(e,c+8);c=i.index;var a={};if(i.data.id===r){a.signDataSize=e.readInt32LE(c);var s=getOneBlock(e,c+=4);a.signDataBuffer=s.obj,c=s.i,a.signatures={},a.signatures.size=e.readInt32LE(c),c+=4,a.signatures.size=e.readInt32LE(c);var o=c+a.signatures.size;for(a.signatures.data=[];c<o;){var u=getOneSignaturesData(e,c),c=u.index;a.signatures.data.push(u.sData)}s=getOneBlock(e,c);return a.pubkey=s.obj,c=s.i,a}c+=i.size}return{}}function getOneBlock(e,t){var n={};return n.size=e.readInt32LE(t),n.buffer=e.slice(t+=4,t+n.size),{obj:n,i:t+=n.size}}function getDigestAndCert(e){if(e&&e.signDataBuffer&&e.signDataBuffer.buffer){var t={},n=0,r=e.signDataBuffer.buffer.readInt32LE(0);n+=4;var i=e.signDataBuffer.buffer.readInt32LE(4);if(n+=4,r===i+4){t.digestId=e.signDataBuffer.buffer.readInt32LE(8),n+=4;r=e.signDataBuffer.buffer.readInt32LE(12);if(n+=4,i===r+8){t.digest=e.signDataBuffer.buffer.slice(16,16+r);r=e.signDataBuffer.buffer.readInt32LE(n+=r+4);return t.certString=CONSTANTS.CERT_HEAD+e.signDataBuffer.buffer.slice(n+=4,n+r).toString("base64")+CONSTANTS.CERT_END,t}console.error("getDigestAndCert error")}else console.error("getDigestAndCert error")}else console.error("no sign chunk!")}module.exports={hashFile:hashFile,signZipResource:signZipResource,getBufferSha256:getBufferDigest,getFullPackageSignBlock:getFullPackageSignBlock,getDigestAndCert:getDigestAndCert,processChunk:processChunk,getChunkDigest:getChunkDigest};