@tmsfe/tms-core 0.0.152 → 0.0.154

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.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 生成traceparent Id
3
+ * 用途:用于生成version - trace-id - parent-id/span-id - trace-flags规则的id,方便链路追踪
4
+ */
5
+ /* eslint-disable */
6
+ var CryptoJS=CryptoJS||function(t){var n={},i=n.lib={},s=function(){},r=i.Base={extend:function(t){s.prototype=this;var n=new s;return t&&n.mixIn(t),n.hasOwnProperty("init")||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},e=i.WordArray=r.extend({init:function(t,n){t=this.words=t||[],this.sigBytes=null!=n?n:4*t.length},toString:function(t){return(t||o).stringify(this)},concat:function(t){var n=this.words,i=t.words,r=this.sigBytes;if(t=t.sigBytes,this.clamp(),r%4)for(var e=0;e<t;e++)n[r+e>>>2]|=(i[e>>>2]>>>24-e%4*8&255)<<24-(r+e)%4*8;else if(65535<i.length)for(e=0;e<t;e+=4)n[r+e>>>2]=i[e>>>2];else n.push.apply(n,i);return this.sigBytes+=t,this},clamp:function(){var n=this.words,i=this.sigBytes;n[i>>>2]&=4294967295<<32-i%4*8,n.length=t.ceil(i/4)},clone:function(){var t=r.clone.call(this);return t.words=this.words.slice(0),t},random:function(n){for(var i=[],r=0;r<n;r+=4)i.push(4294967296*t.random()|0);return new e.init(i,n)}}),o=(n.enc={}).Hex={stringify:function(t){var n=t.words;t=t.sigBytes;for(var i=[],r=0;r<t;r++){var e=n[r>>>2]>>>24-r%4*8&255;i.push((e>>>4).toString(16)),i.push((15&e).toString(16))}return i.join("")},parse:function(t){for(var n=t.length,i=[],r=0;r<n;r+=2)i[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new e.init(i,n/2)}};return n}(Math);
7
+
8
+ // 生成随机的16字节trace-id和8字节parent-id/span-id
9
+ function generateRandomHex(size) {
10
+ return CryptoJS.lib.WordArray.random(size).toString(CryptoJS.enc.Hex);
11
+ }
12
+
13
+ // 生成traceparent ID
14
+ function genTraceparent() {
15
+ const version = '00';
16
+ const traceId = generateRandomHex(16); // 16字节的trace-id
17
+ const parentId = generateRandomHex(8); // 8字节的parent-id/span-id
18
+ const traceFlags = '01'; // 示例标志,表示采样
19
+ return `${version}-${traceId}-${parentId}-${traceFlags}`;
20
+ }
21
+
22
+ export {
23
+ genTraceparent,
24
+ };
package/src/index.js CHANGED
@@ -110,7 +110,6 @@ const getLocationBaseClass = () => LocationBase;
110
110
  const init = (options = {}) => {
111
111
  const {
112
112
  appVersion, wxAppId, secretKey = '', client, defaultHost, cloudEnvId, appEnv, appPagePaths, homePage,
113
- requestEncryptOpen,
114
113
  } = options;
115
114
  const envInfo = {
116
115
  wxAppId,
@@ -152,7 +151,6 @@ const init = (options = {}) => {
152
151
 
153
152
  Request.defaultHost = defaultHost;
154
153
  Request.defaultSecretKey = secretKey;
155
- Request.requestEncryptOpen = requestEncryptOpen;
156
154
  // 初始化云环境
157
155
  wx.cloud.init({ env: cloudEnvId });
158
156
  };
package/src/request.js CHANGED
@@ -11,12 +11,16 @@
11
11
  import md5 from './md5';
12
12
  import { getEnvInfo, getAuthInfo } from './env';
13
13
  import { safeJsonParse } from './objUtils';
14
- import encryptObj from './encrypt';
14
+ import { encryptObjInit } from './encrypt/index';
15
15
  import reporter from './report/index';
16
- import { genTraceparent } from './traceUtils';
17
16
 
18
17
  const logger = wx.getLogManager({});
19
- let refreshPromise = null;
18
+
19
+ // 加密模块初始化
20
+ encryptObjInit({
21
+ composeParamsFunc: data => composeParam(data, true, {}),
22
+ report: (...args) => reporter.reportPerformance(...args),
23
+ });
20
24
 
21
25
  /**
22
26
  * 用于序列化需要签名的参数
@@ -161,8 +165,6 @@ export default class Request {
161
165
  */
162
166
  static defaultSecretKey = '';
163
167
 
164
- static requestEncryptOpen = true;
165
-
166
168
  static getInstance() {
167
169
  if (reqInstance === null) {
168
170
  reqInstance = new Request();
@@ -348,94 +350,6 @@ export default class Request {
348
350
  return Promise.resolve({ url });
349
351
  }
350
352
 
351
- // wx请求封装成promise
352
- async wxRequest(path, method, header = {}, data, needReport, seqId) {
353
- if (needReport && path.indexOf('basic/event/upload') < 0) {
354
- logger.log(
355
- 'tms-performance-log',
356
- 'request_encrypt_log', 'main', 'send_unencrypt_request', seqId,
357
- !!wx.$_publicKey, Request.requestEncryptOpen, path,
358
- );
359
- }
360
- // 如果是获取pubKey的接口,但是没带userId, 则需要取消这次请求
361
- if (path.indexOf('basic/crypto/lastkey') > -1 && !data.userId) {
362
- return;
363
- }
364
- return new Promise((resolve, reject) => {
365
- wx.request({
366
- url: path,
367
- header: { ...header, 'X-Seq-Id': seqId, Traceparent: genTraceparent() },
368
- method,
369
- data,
370
- enableHttp2: true,
371
- success: (res) => {
372
- resolve(res);
373
- },
374
- fail: (err) => {
375
- reject(err);
376
- },
377
- });
378
- });
379
- }
380
-
381
- async refreshEncryptKey() {
382
- if (wx.$_encrypt_refreshDisable) {
383
- return false;
384
- }
385
- if (!refreshPromise) {
386
- refreshPromise = new Promise(async (resolve) => {
387
- try {
388
- const requestParam = await composeParam({}, true, {});
389
- const data = sign(requestParam, this.secretKey);
390
- const finalUrl = this.makeUrl('basic/crypto/lastkey');
391
- const res = await this.wxRequest(finalUrl, 'GET', {}, data, true, data.seqId);
392
- const success = res.data.errCode === 0;
393
- if (!success) {
394
- // 如果请求失败,则停止刷新加密秘钥,运行时永久关闭
395
- wx.$_encrypt_refreshDisable = true;
396
- }
397
- encryptObj.updateDecryptKey(res.data.resData);
398
- resolve(success);
399
- } catch (e) {
400
- encryptObj.updateDecryptKey(null);
401
- resolve(false);
402
- }
403
- refreshPromise = null;
404
- });
405
- }
406
- return refreshPromise;
407
- }
408
-
409
- // 如果全局请求加密开关关闭 || 当前请求内容不满足加密规则(publickey不为空且走sinan网关且非性能上报埋点)
410
- checkIfNeedEncrypt(url, data) {
411
- if (!Request.requestEncryptOpen || !encryptObj.needsEncryption(url, data)) {
412
- return false;
413
- }
414
- return true;
415
- }
416
-
417
- async dealEncryptionSwitch(resHeader, forceRefresh = false) {
418
- if (!forceRefresh && (!resHeader || this.dealEncryptionSwitching)) {
419
- return false;
420
- }
421
- this.dealEncryptionSwitching = true;
422
- const formatHeader = {};
423
- Object.keys(resHeader).forEach(key => formatHeader[key.toLowerCase()] = resHeader[key]);
424
- const encryptionAvaliable = formatHeader['x-encryption-available'] === '0';
425
- if (encryptionAvaliable) {
426
- // 关闭接下来请求的加密开关
427
- wx.$_publicKey = null;
428
- return false;
429
- }
430
- let refreshSuccess = true;
431
- // 打开开关,如果当前是关闭状态,则需要刷新加密key
432
- if (forceRefresh || !wx.$_publicKey) {
433
- refreshSuccess = await this.refreshEncryptKey();
434
- }
435
- this.dealEncryptionSwitching = false;
436
- return refreshSuccess;
437
- }
438
-
439
353
  /**
440
354
  * 创建发送请求任务
441
355
  * @memberof Request
@@ -445,94 +359,61 @@ export default class Request {
445
359
  * @param {object} header 自定义的请求头
446
360
  * @returns {Promise} 接口返回结果
447
361
  */
448
- async createRequestTask(path, param = {}, method = 'POST', header = {}, doEncrypt = true, retryTimes = 0) {
362
+ async createRequestTask(path, param = {}, method = 'POST', header = {}) {
449
363
  const requestParam = await composeParam(param, this.withAuth, this.baseParam);
450
364
  const data = sign(requestParam, this.secretKey);
451
- const finalUrl = this.makeUrl(path);
452
- const requestTime = Date.now();
453
- const printLog = (isSuccess, res) => {
454
- // 埋点已经单独打日志了,接口请求数据日志太长影响分析
455
- if (path.indexOf('basic/event/upload') !== -1) {
456
- return;
457
- }
365
+ return new Promise((resolve, reject) => {
366
+ const requestTime = Date.now();
367
+ const printLog = (isSuccess, res) => {
368
+ // 埋点已经单独打日志了,接口请求数据日志太长影响分析
369
+ if (path.indexOf('basic/event/upload') !== -1) {
370
+ return;
371
+ }
458
372
 
459
- // 打车、代驾日志不截断,方便用于回放
460
- const fullApi = path.indexOf('/takecar/') !== -1 || path.indexOf('dd/api/v2/order') !== -1;
373
+ // 打车、代驾日志不截断,方便用于回放
374
+ const fullApi = path.indexOf('/takecar/') !== -1 || path.indexOf('dd/api/v2/order') !== -1;
461
375
 
462
- let result = JSON.stringify(res);
463
- if (isSuccess && !fullApi && result.length > 500) {
464
- result = `${result.substring(0, 500)} 内容太长被截断`;
465
- }
376
+ let result = JSON.stringify(res);
377
+ if (isSuccess && !fullApi && result.length > 500) {
378
+ result = `${result.substring(0, 500)} 内容太长被截断`;
379
+ }
466
380
 
467
- const obj = {
468
- path,
469
- method,
470
- header: JSON.stringify(header),
471
- params: JSON.stringify(data),
472
- duration: Date.now() - requestTime,
473
- };
474
- if (isSuccess) {
475
- obj.res = result;
476
- } else {
477
- obj.err = result;
478
- }
381
+ const obj = {
382
+ path,
383
+ method,
384
+ header: JSON.stringify(header),
385
+ params: JSON.stringify(data),
386
+ duration: Date.now() - requestTime,
387
+ };
388
+ if (isSuccess) {
389
+ obj.res = result;
390
+ } else {
391
+ obj.err = result;
392
+ }
479
393
 
480
- const str = JSON.stringify(obj, null, 2).replace(/\\"/ig, '\'');
481
- if (isSuccess) {
482
- logger.log(`接口请求成功:\n${str}`);
483
- } else {
484
- logger.warn(`接口请求失败:\n${str}`);
485
- }
486
- };
487
- const { seqId } = data;
488
- try {
489
- // 当前请求不加密 || 不满足加密前提
490
- if (!doEncrypt || !this.checkIfNeedEncrypt(finalUrl, data)) {
491
- const result = await this.wxRequest(finalUrl, method, header, data, true, seqId);
492
- const { header: resHeader, data: resData } = result;
493
- // 根据返回的响应头来控制接下来运行时的加密开关
494
- this.dealEncryptionSwitch(resHeader);
495
- printLog(true, resData);
496
- return result;
497
- }
498
- // 1. 加密请求
499
- const {
500
- header: encryptHeader, data: encryptData, aesKey,
501
- } = encryptObj.reqEncrypt(method, data, header, '');
502
- // 2. 发送请求
503
- const result = await this.wxRequest(finalUrl, method, encryptHeader, encryptData, false, seqId);
504
- const { header: resHeader, data: resData } = result;
505
- // 3. 解密响应
506
- const { success, header: decryptHeader, data: decryptData } = encryptObj.resDecrypt(aesKey, resHeader, resData);
507
- if (!success) {
508
- reporter.reportPerformance('request_encrypt_log', 'main', 'local_response_decrypt_fail', seqId);
509
- return this.createRequestTask(path, param, method, header, false);
510
- }
511
- // 4. 处理解密失败的响应
512
- const errCodeType = encryptObj.getErrcodeType(decryptData.errCode, decryptData.errMsg);
513
- if (errCodeType === encryptObj.reqErrType.pubKeyInvalid) { // 秘钥失效
514
- const encryptSwitch = await this.dealEncryptionSwitch(resHeader, true);
515
- if (retryTimes > 2) {
516
- throw new Error('解密失败,请重试');
394
+ const str = JSON.stringify(obj, null, 2).replace(/\\"/ig, '\'');
395
+ if (isSuccess) {
396
+ logger.log(`接口请求成功:\n${str}`);
397
+ } else {
398
+ logger.warn(`接口请求失败:\n${str}`);
517
399
  }
518
- return this.createRequestTask(path, param, method, header, encryptSwitch, retryTimes + 1);
519
- }
520
- if (errCodeType === encryptObj.reqErrType.decryptError) { // 解密失败
521
- return this.createRequestTask(path, param, method, header, false);
522
- }
523
- if (errCodeType === encryptObj.reqErrType.cryptoDisabled) { // 加密关闭
524
- wx.$_publicKey = null;
525
- return this.createRequestTask(path, param, method, header, false);
526
- }
527
- result.header = decryptHeader;
528
- result.data = decryptData;
529
- printLog(true, result.data);
530
- // 根据返回的响应头来控制接下来运行时的加密开关
531
- this.dealEncryptionSwitch(resHeader);
532
- return result;
533
- } catch (err) {
534
- printLog(false, err);
535
- throw err;
536
- }
400
+ };
401
+
402
+ wx.request({
403
+ url: this.makeUrl(path),
404
+ header,
405
+ method,
406
+ data,
407
+ enableHttp2: true,
408
+ success: (res) => {
409
+ printLog(true, res.data);
410
+ resolve(res);
411
+ },
412
+ fail: (err) => {
413
+ printLog(false, err);
414
+ reject(err);
415
+ },
416
+ });
417
+ });
537
418
  }
538
419
  }
@@ -55,8 +55,6 @@ const loginFn = async () => {
55
55
  }
56
56
  if (userData.errCode === 0) {
57
57
  userInfo = userData.resData.userInfo;
58
- // 全局挂载公钥数据
59
- wx.$_publicKey = userData.resData.publicKey;
60
58
  // 缓存登录信息
61
59
  wx.setStorageSync('sinanCacheUserInfo', userInfo);
62
60
  }
package/src/aes.js DELETED
@@ -1,84 +0,0 @@
1
- /*
2
- CryptoJS v3.1.2
3
- code.google.com/p/crypto-js
4
- (c) 2009-2013 by Jeff Mott. All rights reserved.
5
- code.google.com/p/crypto-js/wiki/License
6
- */
7
- /* eslint-disable */
8
- var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
9
- r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;k<a;k++)c[j+k>>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535<e.length)for(k=0;k<a;k+=4)c[j+k>>>2]=e[k>>>2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<
10
- 32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e<a;e+=4)c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++){var k=c[j>>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j+=2)e[j>>>3]|=parseInt(a.substr(j,
11
- 2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++)e.push(String.fromCharCode(c[j>>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j++)e[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},
12
- q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q<a;q+=k)this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}return new r.init(q,j)},clone:function(){var a=t.clone.call(this);
13
- a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,
14
- e)).finalize(b)}}});var n=d.algo={};return d}(Math);
15
- (function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;r<p;r+=3)for(var w=(l[r>>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v<p;v++)d.push(t.charAt(w>>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<
16
- l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
17
- (function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<<j|b>>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<<j|b>>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<<j|b>>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<<j|b>>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},
18
- _doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),
19
- f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,
20
- m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,
21
- E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/
22
- 4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);
23
- (function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length<q;){n&&s.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;a<p;a++)n=s.finalize(n),s.reset();b.concat(n)}b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,
24
- l)}})();
25
- CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},
26
- finalize:function(e){e&&this._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d<b;d++)e[a+d]^=
27
- c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,
28
- e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
29
- this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,
30
- 1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},
31
- decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,
32
- b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();
33
- (function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,
34
- 16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j<a;j++)if(j<d)e[j]=c[j];else{var k=e[j-1];j%d?6<d&&4==j%d&&(k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;d<a;d++)j=a-d,k=d%4?e[j]:e[j-4],c[d]=4>d||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>
35
- 8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r<m;r++)var q=d[g>>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=
36
- d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();
37
- CryptoJS.mode.CBC = (function () {
38
- var CBC = CryptoJS.lib.BlockCipherMode.extend();
39
-
40
- CBC.Encryptor = CBC.extend({
41
- processBlock: function (words, offset) {
42
- var cipher = this._cipher;
43
- var blockSize = cipher.blockSize;
44
-
45
- xorBlock.call(this, words, offset, blockSize);
46
- cipher.encryptBlock(words, offset);
47
-
48
- this._prevBlock = words.slice(offset, offset + blockSize);
49
- }
50
- });
51
-
52
- CBC.Decryptor = CBC.extend({
53
- processBlock: function (words, offset) {
54
- var cipher = this._cipher;
55
- var blockSize = cipher.blockSize;
56
-
57
- var thisBlock = words.slice(offset, offset + blockSize);
58
- cipher.decryptBlock(words, offset);
59
- xorBlock.call(this, words, offset, blockSize);
60
-
61
- this._prevBlock = thisBlock;
62
- }
63
- });
64
-
65
- function xorBlock(words, offset, blockSize) {
66
- var block;
67
-
68
- if (this._iv) {
69
- block = this._iv;
70
- this._iv = undefined;
71
- } else {
72
- block = this._prevBlock;
73
- }
74
-
75
- for (var i = 0; i < blockSize; i++) {
76
- words[offset + i] ^= block[i];
77
- }
78
- }
79
-
80
- return CBC;
81
- }());
82
- module.exports = {
83
- CryptoJS: CryptoJS
84
- }