gy-webcode2 1.0.0

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.
Files changed (70) hide show
  1. package/components/bar.vue +37 -0
  2. package/components/breadcrumb.vue +127 -0
  3. package/components/javaEditor.vue +88 -0
  4. package/components/sqlEditor.vue +92 -0
  5. package/components/waterfall.vue +484 -0
  6. package/css/common.scss +106 -0
  7. package/css/layout.scss +338 -0
  8. package/css/login.scss +122 -0
  9. package/css/modules/button.scss +2 -0
  10. package/css/modules/color.scss +58 -0
  11. package/css/modules/common.scss +217 -0
  12. package/css/modules/elementUI.scss +426 -0
  13. package/css/modules/form.scss +56 -0
  14. package/css/modules/header.scss +342 -0
  15. package/css/modules/sidebar.scss +214 -0
  16. package/css/modules/table.scss +134 -0
  17. package/css/modules/tabs.scss +54 -0
  18. package/css/modules/tags.scss +149 -0
  19. package/css/modules/tree.scss +120 -0
  20. package/css/modules/tree_check.scss +53 -0
  21. package/css/theme/colors/cheng.scss +17 -0
  22. package/css/theme/colors/default.scss +19 -0
  23. package/css/theme/colors/hong.scss +17 -0
  24. package/css/theme/colors/huang.scss +17 -0
  25. package/css/theme/colors/lv.scss +17 -0
  26. package/css/theme/colors/qing.scss +17 -0
  27. package/css/theme/colors/shenaln.scss +17 -0
  28. package/css/theme/colors/zi.scss +18 -0
  29. package/css/theme/global.scss +8 -0
  30. package/css/theme/styles/default.scss +11 -0
  31. package/css/theme/styles/hailan.scss +11 -0
  32. package/css/theme/styles/shenlan.scss +11 -0
  33. package/css/theme/theme.scss +78 -0
  34. package/extend/axios.js +173 -0
  35. package/extend/formatTime.js +54 -0
  36. package/img/btnActive/1.png +0 -0
  37. package/img/btnActive/2.png +0 -0
  38. package/img/btnActive/3.png +0 -0
  39. package/img/btnActive/4.png +0 -0
  40. package/img/btnActive/5.png +0 -0
  41. package/img/btnActive/6.png +0 -0
  42. package/img/btnActive/7.png +0 -0
  43. package/img/btnActive/8.png +0 -0
  44. package/img/login_bg.jpg +0 -0
  45. package/img/login_bg2.jpg +0 -0
  46. package/img/login_bg2.png +0 -0
  47. package/img/mrtx.jpg +0 -0
  48. package/img/slogan.png +0 -0
  49. package/img/theme/pageStyle_1.png +0 -0
  50. package/img/theme/pageStyle_2.png +0 -0
  51. package/img/theme/pageStyle_3.png +0 -0
  52. package/index.js +17 -0
  53. package/jsconfig.json +19 -0
  54. package/package.json +15 -0
  55. package/plugins/jsencrypt.js +5370 -0
  56. package/plugins/jsencrypt.min.js +1 -0
  57. package/plugins/swiper-4.5.3/css/swiper.css +619 -0
  58. package/plugins/swiper-4.5.3/css/swiper.min.css +12 -0
  59. package/plugins/swiper-4.5.3/js/swiper.esm.bundle.js +7184 -0
  60. package/plugins/swiper-4.5.3/js/swiper.esm.js +7166 -0
  61. package/plugins/swiper-4.5.3/js/swiper.js +8149 -0
  62. package/plugins/swiper-4.5.3/js/swiper.min.js +13 -0
  63. package/plugins/swiper-4.5.3/js/swiper.min.js.map +1 -0
  64. package/scripts/$u.mixin.js +27 -0
  65. package/scripts/crypto.js +184 -0
  66. package/scripts/jsencrypt.js +180 -0
  67. package/scripts/md5.js +259 -0
  68. package/scripts/numberAnimate.js +134 -0
  69. package/scripts/uuid.js +33 -0
  70. package/updateLog.txt +0 -0
@@ -0,0 +1,27 @@
1
+ import { mapState } from 'vuex'
2
+ import store from "@/store"
3
+
4
+ // 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
5
+ let $uStoreKey = [];
6
+ try{
7
+ $uStoreKey = store.state ? Object.keys(store.state) : [];
8
+ }catch(e){
9
+
10
+ }
11
+
12
+ export default {
13
+ beforeCreate() {
14
+ // 将vuex方法挂在到$u中
15
+ // 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
16
+ // 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
17
+ this.$vuex = (name, value) => {
18
+ this.$store.commit('$uStore', {
19
+ name,value
20
+ })
21
+ }
22
+ },
23
+ computed: {
24
+ // 将vuex的state中的所有变量,解构到全局混入的mixin中
25
+ ...mapState($uStoreKey)
26
+ }
27
+ }
@@ -0,0 +1,184 @@
1
+ import CryptoJS from "crypto-js";
2
+ import JSEncrypt from "./jsencrypt"
3
+
4
+ let publicKey = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHc63H8xcxLRfImQFsa+x1ANC7vIX7GAKAXvz1EE76OWLY0DLc4rlo6wedOu+HzaDSsSTwDCHr8Gi2SXg4DNwyJY12vNK4ZpptHj6BrYqOhxJmExmxMLuyyzAxMiaBWYmGJhHPb1xHoOYaSGd4JkVEfdmkkg5OeqH1ZFhzmK5VIQIDAQAB`
5
+ let privateKey = '这里是封装的私钥'
6
+
7
+ const sha256 = (data) => {
8
+ return CryptoJS.SHA256(data).toString();
9
+ };
10
+
11
+ const crypto = {
12
+ // 数据加密
13
+ encrypt(val) {
14
+ var key = CryptoJS.enc.Utf8.parse(window._zgy.aESKey);
15
+ let encrypted = CryptoJS.AES.encrypt(val, key,
16
+ {
17
+ mode: CryptoJS.mode.ECB,
18
+ padding: CryptoJS.pad.ZeroPadding
19
+ });
20
+ return encrypted.toString();
21
+ },
22
+ // 数据解密
23
+ decrypt(val) {
24
+ var key = CryptoJS.enc.Utf8.parse(window._zgy.aESKey);
25
+ let decrypted = CryptoJS.AES.decrypt(val, key,
26
+ {
27
+ mode: CryptoJS.mode.ECB,
28
+ padding: CryptoJS.pad.ZeroPadding
29
+ });
30
+ return decrypted.toString(CryptoJS.enc.Utf8);
31
+ },
32
+
33
+ /**
34
+ * 生成随机字符串
35
+ * @param len 指定长度
36
+ */
37
+ randomString(len) {
38
+ len = len || 32;
39
+ let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
40
+ let maxPos = $chars.length;
41
+ let pwd = '';
42
+ for (let i = 0; i < len; i++) {
43
+ pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
44
+ }
45
+ return pwd;
46
+ },
47
+
48
+ /**
49
+ * 从1970年开始的毫秒数然后截取10位变成 从1970年开始的秒数
50
+ * @return 返回10位时间戳
51
+ */
52
+ timestamp() {
53
+ // new Date().getTime();
54
+ let tmp = Date.parse(new Date()).toString();
55
+ tmp = tmp.substr(0, 10);
56
+ return tmp;
57
+ },
58
+
59
+ /**
60
+ * 签名
61
+ * @param token 身份令牌
62
+ * @param timestamp 签名时间戳
63
+ * @param data 签名数据
64
+ * @param key 签名key
65
+ * @param nonce 随机字符串
66
+ */
67
+ sign(token, timestamp, data, key, nonce) {
68
+ let ret = [];
69
+ let json = {};
70
+ if(!data || Array.isArray(data)){
71
+ ret = [];
72
+ }else if(data.constructor.name == "URLSearchParams"){
73
+ data.forEach((a,b)=>{
74
+ if(a != null){
75
+ ret.push(b);
76
+ json[b] = a;
77
+ }
78
+ });
79
+ }else{
80
+ for (let it in data) {
81
+ let val = data[it];
82
+ if(data[it] != null){
83
+ json[it] = val;
84
+ if (typeof val === 'object') {
85
+ json[it] = '';
86
+ }
87
+ ret.push(it);
88
+ }
89
+ }
90
+ }
91
+ // 字典升序
92
+ ret.sort();
93
+ var parstring = [];
94
+ ret.forEach((a,b)=>{
95
+ parstring.push(a+json[a])
96
+ });
97
+ let signsrc = parstring.join('') + token + timestamp + nonce;
98
+ return sha256(signsrc).toUpperCase();
99
+ },
100
+ //key加密
101
+ RSAencrypt(pas,key) {
102
+ if(!pas){
103
+ return "";
104
+ }
105
+ let encryptStr = new JSEncrypt();
106
+ encryptStr.setPublicKey(key);
107
+ return encryptStr.encryptLong2(pas.toString());
108
+ },
109
+ //key解密
110
+ RSAdecrypt(pas,key) {
111
+ let jse = new JSEncrypt();
112
+ // 私钥
113
+ jse.setPrivateKey(key)
114
+ // console.log('解密:'+jse.decrypt(pas))
115
+ return jse.decryptLong2(pas);
116
+
117
+ // let jse = new JSEncrypt();
118
+ // // 私钥
119
+ // jse.setPrivateKey(key)
120
+ // // console.log('解密:'+jse.decrypt(pas))
121
+ // return jse.decrypt(pas);
122
+
123
+ },
124
+ //生成公私钥
125
+ getRsaKeys(func){
126
+ window.crypto.subtle.generateKey(
127
+ {
128
+ name: "RSA-OAEP",
129
+ modulusLength: 1024, //can be 1024, 2048, or 4096
130
+ publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
131
+ hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
132
+ },
133
+ true, //whether the key is extractable (i.e. can be used in exportKey)
134
+ ["encrypt", "decrypt"] //must be ["encrypt", "decrypt"] or ["wrapKey", "unwrapKey"]
135
+ ).then(function(key){
136
+ window.crypto.subtle.exportKey(
137
+ "pkcs8",
138
+ key.privateKey
139
+ ).then(function(keydata1){
140
+ window.crypto.subtle.exportKey(
141
+ "spki",
142
+ key.publicKey
143
+ ).then(function(keydata2){
144
+ var privateKey = crypto.RSA2text(keydata1,1);
145
+ var publicKey = crypto.RSA2text(keydata2);
146
+ func(privateKey,publicKey);
147
+ }).catch(function(err){
148
+ console.error(err);
149
+ });
150
+ })
151
+ .catch(function(err){
152
+ console.error(err);
153
+ });
154
+ })
155
+ .catch(function(err){
156
+ console.error(err);
157
+ });
158
+ },
159
+ RSA2text(buffer,isPrivate=0) {
160
+ var binary = '';
161
+ var bytes = new Uint8Array(buffer);
162
+ var len = bytes.byteLength;
163
+ for (var i = 0; i < len; i++) {
164
+ binary += String.fromCharCode(bytes[i]);
165
+ }
166
+ var base64 = window.btoa(binary);
167
+ if(isPrivate == 1){
168
+
169
+ // var text = "-----BEGIN "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----\n";
170
+ var text = base64.replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{64}\x01?/g,"$&\n");
171
+ // text += "\n-----END "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----";
172
+ }
173
+ else{
174
+ // var text = "-----BEGIN "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----\n";
175
+ var text = base64
176
+ // .replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{64}\x01?/g,"$&\n");
177
+ // text += "\n-----END "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----";
178
+ }
179
+ return text;
180
+ }
181
+
182
+
183
+ }
184
+ export default crypto;
@@ -0,0 +1,180 @@
1
+ var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2
+ var b64pad="=";
3
+ var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
4
+ JSEncrypt.prototype.encryptLong2 = function (string) {
5
+ var k = this.getKey();
6
+ // console.log(k);
7
+ try {
8
+ var lt = "";
9
+ var ct = "";
10
+ //RSA每次加密117bytes,需要辅助方法判断字符串截取位置
11
+ //1.获取字符串截取点
12
+ var bytes = new Array();
13
+ bytes.push(0);
14
+ var byteNo = 0;
15
+ var len, c;
16
+ len = string.length;
17
+ var temp = 0;
18
+ for (var i = 0; i < len; i++) {
19
+ c = string.charCodeAt(i);
20
+ if (c >= 0x010000 && c <= 0x10FFFF) {
21
+ byteNo += 4;
22
+ } else if (c >= 0x000800 && c <= 0x00FFFF) {
23
+ byteNo += 3;
24
+ } else if (c >= 0x000080 && c <= 0x0007FF) {
25
+ byteNo += 2;
26
+ } else {
27
+ byteNo += 1;
28
+ }
29
+ if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
30
+ if (byteNo - temp >= 114) {
31
+ bytes.push(i);
32
+ temp = byteNo;
33
+ }
34
+ }
35
+ }
36
+ //2.截取字符串并分段加密
37
+ if (bytes.length > 1) {
38
+ for (var i = 0; i < bytes.length - 1; i++) {
39
+ var str;
40
+ if (i == 0) {
41
+ str = string.substring(0, bytes[i + 1] + 1);
42
+ } else {
43
+ str = string.substring(bytes[i] + 1, bytes[i + 1] + 1);
44
+ }
45
+ var t1 = k.encrypt(str);
46
+ ct += t1;
47
+ }
48
+ ;
49
+ if (bytes[bytes.length - 1] != string.length - 1) {
50
+ var lastStr = string.substring(bytes[bytes.length - 1] + 1);
51
+ ct += k.encrypt(lastStr);
52
+ }
53
+ return hex2b64(ct);
54
+ }
55
+ var t = k.encrypt(string);
56
+ var y = hex2b64(t);
57
+ return y;
58
+ } catch (ex) {
59
+ return false;
60
+ }
61
+ };
62
+
63
+ JSEncrypt.prototype.decryptLong2 = function (string) {
64
+ var k = this.getKey();
65
+ // var maxLength = ((k.n.bitLength()+7)>>3);
66
+ var MAX_DECRYPT_BLOCK = 128;
67
+ try {
68
+ var ct = "";
69
+ var t1;
70
+ var bufTmp;
71
+ var hexTmp;
72
+ var str = b64tohex(string);
73
+ var buf = hexToBytes(str);
74
+ var inputLen = buf.length;
75
+ //开始长度
76
+ var offSet = 0;
77
+ //结束长度
78
+ var endOffSet = MAX_DECRYPT_BLOCK;
79
+ //分段加密
80
+ while (inputLen - offSet > 0) {
81
+ if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
82
+ bufTmp = buf.slice(offSet, endOffSet);
83
+ hexTmp = bytesToHex(bufTmp);
84
+ t1 = k.decrypt(hexTmp);
85
+ ct += t1;
86
+
87
+ } else {
88
+
89
+ bufTmp = buf.slice(offSet, inputLen);
90
+ hexTmp = bytesToHex(bufTmp);
91
+ t1 = k.decrypt(hexTmp);
92
+ ct += t1;
93
+
94
+ }
95
+ offSet += MAX_DECRYPT_BLOCK;
96
+ endOffSet += MAX_DECRYPT_BLOCK;
97
+ }
98
+ return ct;
99
+ } catch (ex) {
100
+ console.log(ex);
101
+ return false;
102
+ }
103
+ };
104
+
105
+ function hex2b64(h) {
106
+ var i;
107
+ var c;
108
+ var ret = "";
109
+ for(i = 0; i+3 <= h.length; i+=3) {
110
+ c = parseInt(h.substring(i,i+3),16);
111
+ ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
112
+ }
113
+ if(i+1 == h.length) {
114
+ c = parseInt(h.substring(i,i+1),16);
115
+ ret += b64map.charAt(c << 2);
116
+ }
117
+ else if(i+2 == h.length) {
118
+ c = parseInt(h.substring(i,i+2),16);
119
+ ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
120
+ }
121
+ while((ret.length & 3) > 0) ret += b64pad;
122
+ return ret;
123
+ }
124
+ function b64tohex(s) {
125
+ var ret = "";
126
+ var i;
127
+ var k = 0; // b64 state, 0-3
128
+ var slop = 0;
129
+ for (i = 0; i < s.length; ++i) {
130
+ if (s.charAt(i) == b64pad) {
131
+ break;
132
+ }
133
+ var v = b64map.indexOf(s.charAt(i));
134
+ if (v < 0) {
135
+ continue;
136
+ }
137
+ if (k == 0) {
138
+ ret += int2char(v >> 2);
139
+ slop = v & 3;
140
+ k = 1;
141
+ }
142
+ else if (k == 1) {
143
+ ret += int2char((slop << 2) | (v >> 4));
144
+ slop = v & 0xf;
145
+ k = 2;
146
+ }
147
+ else if (k == 2) {
148
+ ret += int2char(slop);
149
+ ret += int2char(v >> 2);
150
+ slop = v & 3;
151
+ k = 3;
152
+ }
153
+ else {
154
+ ret += int2char((slop << 2) | (v >> 4));
155
+ ret += int2char(v & 0xf);
156
+ k = 0;
157
+ }
158
+ }
159
+ if (k == 1) {
160
+ ret += int2char(slop << 2);
161
+ }
162
+ return ret;
163
+ }
164
+ function hexToBytes(hex) {
165
+ for (var bytes = [], c = 0; c < hex.length; c += 2)
166
+ bytes.push(parseInt(hex.substr(c, 2), 16));
167
+ return bytes;
168
+ }
169
+ function bytesToHex(bytes) {
170
+ for (var hex = [], i = 0; i < bytes.length; i++) {
171
+ hex.push((bytes[i] >>> 4).toString(16));
172
+ hex.push((bytes[i] & 0xF).toString(16));
173
+ }
174
+ return hex.join("");
175
+ }
176
+ function int2char(n) {
177
+ return BI_RM.charAt(n);
178
+ }
179
+
180
+ export default JSEncrypt;
package/scripts/md5.js ADDED
@@ -0,0 +1,259 @@
1
+ let md5 = function(s) {
2
+ /*
3
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
4
+ * Digest Algorithm, as defined in RFC 1321.
5
+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
6
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7
+ * Distributed under the BSD License
8
+ * See http://pajhome.org.uk/crypt/md5 for more info.
9
+ */
10
+
11
+ /*
12
+ * Configurable variables. You may need to tweak these to be compatible with
13
+ * the server-side, but the defaults work in most cases.
14
+ */
15
+ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
16
+ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
17
+ var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
18
+
19
+ /*
20
+ * These are the functions you'll usually want to call
21
+ * They take string arguments and return either hex or base-64 encoded strings
22
+ */
23
+ function hex_md5(s) {
24
+ return binl2hex(core_md5(str2binl(s), s.length * chrsz));
25
+ }
26
+ function b64_md5(s) {
27
+ return binl2b64(core_md5(str2binl(s), s.length * chrsz));
28
+ }
29
+ function str_md5(s) {
30
+ return binl2str(core_md5(str2binl(s), s.length * chrsz));
31
+ }
32
+ function hex_hmac_md5(key, data) {
33
+ return binl2hex(core_hmac_md5(key, data));
34
+ }
35
+ function b64_hmac_md5(key, data) {
36
+ return binl2b64(core_hmac_md5(key, data));
37
+ }
38
+ function str_hmac_md5(key, data) {
39
+ return binl2str(core_hmac_md5(key, data));
40
+ }
41
+
42
+ /*
43
+ * Perform a simple self-test to see if the VM is working
44
+ */
45
+ function md5_vm_test() {
46
+ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
47
+ }
48
+
49
+ /*
50
+ * Calculate the MD5 of an array of little-endian words, and a bit length
51
+ */
52
+ function core_md5(x, len) {
53
+ /* append padding */
54
+ x[len >> 5] |= 0x80 << len % 32;
55
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
56
+
57
+ var a = 1732584193;
58
+ var b = -271733879;
59
+ var c = -1732584194;
60
+ var d = 271733878;
61
+
62
+ for (var i = 0; i < x.length; i += 16) {
63
+ var olda = a;
64
+ var oldb = b;
65
+ var oldc = c;
66
+ var oldd = d;
67
+
68
+ a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
69
+ d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
70
+ c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
71
+ b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
72
+ a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
73
+ d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
74
+ c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
75
+ b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
76
+ a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
77
+ d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
78
+ c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
79
+ b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
80
+ a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
81
+ d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
82
+ c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
83
+ b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
84
+
85
+ a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
86
+ d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
87
+ c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
88
+ b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
89
+ a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
90
+ d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
91
+ c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
92
+ b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
93
+ a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
94
+ d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
95
+ c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
96
+ b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
97
+ a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
98
+ d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
99
+ c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
100
+ b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
101
+
102
+ a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
103
+ d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
104
+ c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
105
+ b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
106
+ a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
107
+ d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
108
+ c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
109
+ b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
110
+ a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
111
+ d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
112
+ c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
113
+ b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
114
+ a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
115
+ d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
116
+ c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
117
+ b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
118
+
119
+ a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
120
+ d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
121
+ c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
122
+ b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
123
+ a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
124
+ d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
125
+ c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
126
+ b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
127
+ a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
128
+ d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
129
+ c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
130
+ b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
131
+ a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
132
+ d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
133
+ c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
134
+ b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
135
+
136
+ a = safe_add(a, olda);
137
+ b = safe_add(b, oldb);
138
+ c = safe_add(c, oldc);
139
+ d = safe_add(d, oldd);
140
+ }
141
+ return Array(a, b, c, d);
142
+ }
143
+
144
+ /*
145
+ * These functions implement the four basic operations the algorithm uses.
146
+ */
147
+ function md5_cmn(q, a, b, x, s, t) {
148
+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
149
+ }
150
+ function md5_ff(a, b, c, d, x, s, t) {
151
+ return md5_cmn((b & c) | (~b & d), a, b, x, s, t);
152
+ }
153
+ function md5_gg(a, b, c, d, x, s, t) {
154
+ return md5_cmn((b & d) | (c & ~d), a, b, x, s, t);
155
+ }
156
+ function md5_hh(a, b, c, d, x, s, t) {
157
+ return md5_cmn(b ^ c ^ d, a, b, x, s, t);
158
+ }
159
+ function md5_ii(a, b, c, d, x, s, t) {
160
+ return md5_cmn(c ^ (b | ~d), a, b, x, s, t);
161
+ }
162
+
163
+ /*
164
+ * Calculate the HMAC-MD5, of a key and some data
165
+ */
166
+ function core_hmac_md5(key, data) {
167
+ var bkey = str2binl(key);
168
+ if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
169
+
170
+ var ipad = Array(16),
171
+ opad = Array(16);
172
+ for (var i = 0; i < 16; i++) {
173
+ ipad[i] = bkey[i] ^ 0x36363636;
174
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
175
+ }
176
+
177
+ var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
178
+ return core_md5(opad.concat(hash), 512 + 128);
179
+ }
180
+
181
+ /*
182
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
183
+ * to work around bugs in some JS interpreters.
184
+ */
185
+ function safe_add(x, y) {
186
+ var lsw = (x & 0xffff) + (y & 0xffff);
187
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
188
+ return (msw << 16) | (lsw & 0xffff);
189
+ }
190
+
191
+ /*
192
+ * Bitwise rotate a 32-bit number to the left.
193
+ */
194
+ function bit_rol(num, cnt) {
195
+ return (num << cnt) | (num >>> (32 - cnt));
196
+ }
197
+
198
+ /*
199
+ * Convert a string to an array of little-endian words
200
+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
201
+ */
202
+ function str2binl(str) {
203
+ var bin = Array();
204
+ var mask = (1 << chrsz) - 1;
205
+ for (var i = 0; i < str.length * chrsz; i += chrsz) {
206
+ bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32;
207
+ }
208
+ return bin;
209
+ }
210
+
211
+ /*
212
+ * Convert an array of little-endian words to a string
213
+ */
214
+ function binl2str(bin) {
215
+ var str = "";
216
+ var mask = (1 << chrsz) - 1;
217
+ for (var i = 0; i < bin.length * 32; i += chrsz) {
218
+ str += String.fromCharCode((bin[i >> 5] >>> i % 32) & mask);
219
+ }
220
+ return str;
221
+ }
222
+
223
+ /*
224
+ * Convert an array of little-endian words to a hex string.
225
+ */
226
+ function binl2hex(binarray) {
227
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
228
+ var str = "";
229
+ for (var i = 0; i < binarray.length * 4; i++) {
230
+ str +=
231
+ hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xf) +
232
+ hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xf);
233
+ }
234
+ return str;
235
+ }
236
+
237
+ /*
238
+ * Convert an array of little-endian words to a base-64 string
239
+ */
240
+ function binl2b64(binarray) {
241
+ var tab =
242
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
243
+ var str = "";
244
+ for (var i = 0; i < binarray.length * 4; i += 3) {
245
+ var triplet =
246
+ (((binarray[i >> 2] >> (8 * (i % 4))) & 0xff) << 16) |
247
+ (((binarray[(i + 1) >> 2] >> (8 * ((i + 1) % 4))) & 0xff) << 8) |
248
+ ((binarray[(i + 2) >> 2] >> (8 * ((i + 2) % 4))) & 0xff);
249
+ for (var j = 0; j < 4; j++) {
250
+ if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
251
+ else str += tab.charAt((triplet >> (6 * (3 - j))) & 0x3f);
252
+ }
253
+ }
254
+ return str;
255
+ }
256
+
257
+ return hex_md5(s);
258
+ };
259
+ export default md5;