From d4e116d41fbc815db40bffb284ddd881adfca1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E5=A4=B4=E5=A4=A7=E5=A4=B4=E4=B8=8B=E9=9B=A8?= =?UTF-8?q?=E4=B8=8D=E6=84=81?= <617594538@qq.com> Date: Thu, 16 Dec 2021 09:52:39 +0800 Subject: [PATCH] =?UTF-8?q?'=E5=88=9B=E5=BB=BA'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/pom.xml | 70 + .../com/pnkx/service/ServiceApplication.java | 13 + .../service/controller/TestController.java | 27 + .../pnkx/service/filter/EncryptionFilter.java | 94 + .../service/filter/domain/WrappedRequest.java | 77 + .../filter/domain/WrappedResponse.java | 100 + .../java/com/pnkx/service/utils/SM2Utils.java | 56 + .../java/com/pnkx/service/utils/SM4Utils.java | 179 + service/src/main/resources/application.yml | 7 + web/.browserslistrc | 3 + web/.editorconfig | 5 + web/.env.development | 4 + web/.env.production | 1 + web/.eslintrc.js | 17 + web/.gitignore | 23 + web/babel.config.js | 5 + web/package.json | 40 + web/public/favicon.ico | Bin 0 -> 4286 bytes web/public/index.html | 20 + web/public/js/crypto-js.js | 1622 +++++++ web/public/js/sm2.js | 3953 +++++++++++++++++ web/src/App.vue | 9 + web/src/api/index.js | 23 + web/src/assets/logo.png | Bin 0 -> 6849 bytes web/src/main.js | 14 + web/src/router/index.js | 34 + web/src/store/index.js | 15 + web/src/utils/request.js | 102 + web/src/utils/sm.js | 87 + web/src/views/Index.vue | 105 + web/vue.config.js | 65 + 31 files changed, 6770 insertions(+) create mode 100644 service/pom.xml create mode 100644 service/src/main/java/com/pnkx/service/ServiceApplication.java create mode 100644 service/src/main/java/com/pnkx/service/controller/TestController.java create mode 100644 service/src/main/java/com/pnkx/service/filter/EncryptionFilter.java create mode 100644 service/src/main/java/com/pnkx/service/filter/domain/WrappedRequest.java create mode 100644 service/src/main/java/com/pnkx/service/filter/domain/WrappedResponse.java create mode 100644 service/src/main/java/com/pnkx/service/utils/SM2Utils.java create mode 100644 service/src/main/java/com/pnkx/service/utils/SM4Utils.java create mode 100644 service/src/main/resources/application.yml create mode 100644 web/.browserslistrc create mode 100644 web/.editorconfig create mode 100644 web/.env.development create mode 100644 web/.env.production create mode 100644 web/.eslintrc.js create mode 100644 web/.gitignore create mode 100644 web/babel.config.js create mode 100644 web/package.json create mode 100644 web/public/favicon.ico create mode 100644 web/public/index.html create mode 100644 web/public/js/crypto-js.js create mode 100644 web/public/js/sm2.js create mode 100644 web/src/App.vue create mode 100644 web/src/api/index.js create mode 100644 web/src/assets/logo.png create mode 100644 web/src/main.js create mode 100644 web/src/router/index.js create mode 100644 web/src/store/index.js create mode 100644 web/src/utils/request.js create mode 100644 web/src/utils/sm.js create mode 100644 web/src/views/Index.vue create mode 100644 web/vue.config.js diff --git a/service/pom.xml b/service/pom.xml new file mode 100644 index 0000000..4b336fc --- /dev/null +++ b/service/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.1 + + + com.pnkx + service + 0.0.1-SNAPSHOT + https://maven.aliyun.com/nexus/content/groups/public + service + service + + 1.8 + + + + + + org.bouncycastle + bcprov-jdk15on + 1.69 + + + + + com.alibaba + fastjson + 1.2.78 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/service/src/main/java/com/pnkx/service/ServiceApplication.java b/service/src/main/java/com/pnkx/service/ServiceApplication.java new file mode 100644 index 0000000..e89371f --- /dev/null +++ b/service/src/main/java/com/pnkx/service/ServiceApplication.java @@ -0,0 +1,13 @@ +package com.pnkx.service; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceApplication.class, args); + } + +} diff --git a/service/src/main/java/com/pnkx/service/controller/TestController.java b/service/src/main/java/com/pnkx/service/controller/TestController.java new file mode 100644 index 0000000..7d21779 --- /dev/null +++ b/service/src/main/java/com/pnkx/service/controller/TestController.java @@ -0,0 +1,27 @@ +package com.pnkx.service.controller; + +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author by PHY + * @classname TestController + * @date 2021-12-15 15:11 + * @description: 描述 + */ +@RestController +@RequestMapping("/test") +public class TestController { + + @GetMapping("getRequest") + public Object getRequest(@RequestParam Map params) { + System.out.println(params.toString()); + return params; + } + + @PostMapping("postRequest") + public Object postRequest(@RequestBody Map params) { + return params; + } +} diff --git a/service/src/main/java/com/pnkx/service/filter/EncryptionFilter.java b/service/src/main/java/com/pnkx/service/filter/EncryptionFilter.java new file mode 100644 index 0000000..b38356c --- /dev/null +++ b/service/src/main/java/com/pnkx/service/filter/EncryptionFilter.java @@ -0,0 +1,94 @@ +package com.pnkx.service.filter; + +import com.alibaba.fastjson.JSON; +import com.pnkx.service.filter.domain.WrappedRequest; +import com.pnkx.service.filter.domain.WrappedResponse; +import com.pnkx.service.utils.SM2Utils; +import com.pnkx.service.utils.SM4Utils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +/** + * @author by PHY + * @classname encryptionFilter + * @date 2021-12-15 16:27 + * @description: 描述 + */ +@Component +public class EncryptionFilter extends OncePerRequestFilter{ + + /** get请求关键字 */ + private static final String GET = "GET"; + /** 是否开启解密 */ + @Value("${encrypt.enabled}") + private Boolean encryptEnabled; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { + // 解密 + if (encryptEnabled && !GET.equals(request.getMethod())) { + String requestKey = request.getHeader("RequestKey"); + String decrypt = SM2Utils.decrypt(requestKey); + String sm4Key = decrypt.split("-")[1]; + String requestBody = getRequestBody(request); + String requestBodyMw = null; + Map requestBodyMap = (Map) JSON.parse(requestBody); + // 解密请求报文 + if (!"".equals(requestBody)) { + try { + requestBodyMw = SM4Utils.decryptEcb(sm4Key, requestBodyMap.get("cis_req_params")); + } catch (Exception e) { + e.printStackTrace(); + } + } + request = new WrappedRequest(request, requestBodyMw); + // 加密返回值 + WrappedResponse wrapResponse = new WrappedResponse(response); + chain.doFilter(request, wrapResponse); + String content = wrapResponse.getContent(); + String responseBodyMw = null; + try { + // 加密 + responseBodyMw = SM4Utils.encryptEcb(sm4Key, content); + } catch (Exception e) { + e.printStackTrace(); + } + response.setContentLength(-1); + PrintWriter out = response.getWriter(); + out.write(responseBodyMw); + out.flush(); + out.close(); + } + chain.doFilter(request, response); + } + + /** + * 获取body体内容 + * @param req 请求 + * @return body体内容 + */ + private String getRequestBody(HttpServletRequest req) { + try { + BufferedReader reader = req.getReader(); + StringBuilder sb = new StringBuilder(); + String line = null; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + return sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/service/src/main/java/com/pnkx/service/filter/domain/WrappedRequest.java b/service/src/main/java/com/pnkx/service/filter/domain/WrappedRequest.java new file mode 100644 index 0000000..c69affe --- /dev/null +++ b/service/src/main/java/com/pnkx/service/filter/domain/WrappedRequest.java @@ -0,0 +1,77 @@ +package com.pnkx.service.filter.domain; + +/** + * @author PHY + * @classname WrappedRequest + * @data 2021/10/29 12:58 + * @description 描述 + */ + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; + +public class WrappedRequest extends HttpServletRequestWrapper { + + private String requestBody = null; + HttpServletRequest req = null; + + public WrappedRequest(HttpServletRequest request) { + super(request); + this.req = request; + } + + public WrappedRequest(HttpServletRequest request, String requestBody) { + super(request); + this.requestBody = requestBody; + this.req = request; + } + + /** + * (non-Javadoc) + * + * @see javax.servlet.ServletRequestWrapper#getReader() + */ + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new StringReader(requestBody)); + } + + /** + * (non-Javadoc) + * + * @see javax.servlet.ServletRequestWrapper#getInputStream() + */ + @Override + public ServletInputStream getInputStream() throws IOException { + return new ServletInputStream() { + private InputStream in = new ByteArrayInputStream( + requestBody.getBytes(req.getCharacterEncoding())); + + @Override + public int read() throws IOException { + return in.read(); + } + + @Override + public boolean isFinished() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isReady() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + // TODO Auto-generated method stub + + } + }; + } +} diff --git a/service/src/main/java/com/pnkx/service/filter/domain/WrappedResponse.java b/service/src/main/java/com/pnkx/service/filter/domain/WrappedResponse.java new file mode 100644 index 0000000..5e8fc28 --- /dev/null +++ b/service/src/main/java/com/pnkx/service/filter/domain/WrappedResponse.java @@ -0,0 +1,100 @@ +package com.pnkx.service.filter.domain; + +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; +import java.io.*; + +/** + * @author PHY + * @classname WrappedResponse + * @data 2021/10/29 12:59 + * @description 描述 + */ +public class WrappedResponse extends HttpServletResponseWrapper { + + private ByteArrayOutputStream buffer = null; + private ServletOutputStream out = null; + private PrintWriter writer = null; + + public WrappedResponse(HttpServletResponse resp) throws IOException { + super(resp); + // 真正存储数据的流 + buffer = new ByteArrayOutputStream(); + out = new WapperedOutputStream(buffer); + writer = new PrintWriter(new OutputStreamWriter(buffer, + this.getCharacterEncoding())); + } + + /** 重载父类获取outputStream的方法 */ + @Override + public ServletOutputStream getOutputStream() throws IOException { + return out; + } + + /** 重载父类获取writer的方法 */ + @Override + public PrintWriter getWriter() throws UnsupportedEncodingException { + return writer; + } + + /** 重载父类获取flushBuffer的方法 */ + @Override + public void flushBuffer() throws IOException { + if (out != null) { + out.flush(); + } + if (writer != null) { + writer.flush(); + } + } + + @Override + public void reset() { + buffer.reset(); + } + + /** 将out、writer中的数据强制输出到WapperedResponse的buffer里面,否则取不到数据 */ + public byte[] getResponseData() throws IOException { + flushBuffer(); + return buffer.toByteArray(); + } + + public String getContent() throws IOException { + flushBuffer();//将out、writer中的数据强制输出到WapperedResponse的buffer里面,否则取不到数据 + return new String(buffer.toByteArray()); + } + + /** 内部类,对ServletOutputStream进行包装 */ + private class WapperedOutputStream extends ServletOutputStream { + private ByteArrayOutputStream bos = null; + + public WapperedOutputStream(ByteArrayOutputStream stream) + throws IOException { + bos = stream; + } + + @Override + public void write(int b) throws IOException { + bos.write(b); + } + + @Override + public void write(byte[] b) throws IOException { + bos.write(b, 0, b.length); + } + + @Override + public boolean isReady() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + // TODO Auto-generated method stub + + } + } +} diff --git a/service/src/main/java/com/pnkx/service/utils/SM2Utils.java b/service/src/main/java/com/pnkx/service/utils/SM2Utils.java new file mode 100644 index 0000000..ffa1459 --- /dev/null +++ b/service/src/main/java/com/pnkx/service/utils/SM2Utils.java @@ -0,0 +1,56 @@ +package com.pnkx.service.utils; + +import org.bouncycastle.asn1.gm.GMNamedCurves; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.engines.SM2Engine; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.util.encoders.Hex; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * @author PHY + * @classname SM2Util + * @data 2021/11/1 10:31 + * @description SM2工具类 + */ +public class SM2Utils { + /** 私钥 */ + private static final String privateKey = "a2081b5b81fbea0b6b973a3ab6dbbbc65b1164488bf22d8ae2ff0b8260f64853"; + + /** + * 解密 + * @param ciphertext 密文 + * @return 明文 + */ + public static String decrypt(String ciphertext) { + X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1"); + ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(), sm2ECParameters.getG(), sm2ECParameters.getN()); + byte[] cipherData = ciphertext.getBytes(StandardCharsets.UTF_8); + byte[] cipherDataByte = Hex.decode(cipherData); + //刚才的私钥Hex,先还原私钥 + BigInteger privateKeyD = new BigInteger(privateKey, 16); + ECPrivateKeyParameters privateKeyParameters = new ECPrivateKeyParameters(privateKeyD, domainParameters); + + //用私钥解密 + SM2Engine sm2Engine = new SM2Engine(); + sm2Engine.init(false, privateKeyParameters); + + //processBlock得到Base64格式,记得解码 + byte[] arrayOfBytes = new byte[0]; + try { + arrayOfBytes = Base64.getDecoder().decode(sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length)); + } catch (InvalidCipherTextException e) { + e.printStackTrace(); + } + + //得到明文:SM2 Encryption Test + String data = new String(arrayOfBytes); + return data; + } + +} diff --git a/service/src/main/java/com/pnkx/service/utils/SM4Utils.java b/service/src/main/java/com/pnkx/service/utils/SM4Utils.java new file mode 100644 index 0000000..a045ed9 --- /dev/null +++ b/service/src/main/java/com/pnkx/service/utils/SM4Utils.java @@ -0,0 +1,179 @@ +package com.pnkx.service.utils; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.spec.SecretKeySpec; +import java.security.Key; +import java.security.SecureRandom; +import java.security.Security; +import java.util.Arrays; + +/** + * @classname Sm4Util + * @data 2021-10-28 14:49:10 + * @author PHY + * @description sm4加密算法工具类 + */ +public class SM4Utils { + static { + Security.addProvider(new BouncyCastleProvider()); + } + + private static final String ENCODING = "UTF-8"; + public static final String ALGORITHM_NAME = "SM4"; + /** 加密算法/分组加密模式/分组填充方式 + * PKCS5Padding-以8个字节为一组进行分组加密 + * 定义分组加密模式使用:PKCS5Padding + */ + public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding"; + /** 128-32位16进制;256-64位16进制 */ + public static final int DEFAULT_KEY_SIZE = 128; + + /** + * 生成ECB暗号 + * @explain ECB模式(电子密码本模式:Electronic codebook) + * @param algorithmName + * 算法名称 + * @param mode + * 模式 + * @param key + * @return + * @throws Exception + */ + private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception { + Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME); + Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME); + cipher.init(mode, sm4Key); + return cipher; + } + + /** + *

  第一步:产生密钥

+ *

  方式一:系统生成密钥

+ * 自动生成密钥 + * @explain + * @return + */ + public static byte[] generateKey() throws Exception { + return generateKey(DEFAULT_KEY_SIZE); + } + + /** + * @explain + * @param keySize + * @return + * @throws Exception + */ + public static byte[] generateKey(int keySize) throws Exception { + KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME); + kg.init(keySize, new SecureRandom()); + return kg.generateKey().getEncoded(); + } + + /** + *

  方法二:自己提供16进制的密钥

+ *

  第二步:加密

+ * sm4加密 + * @explain 加密模式:ECB + * 密文长度不固定,会随着被加密字符串长度的变化而变化 + * @param hexKey + * 16进制密钥(忽略大小写) + * @param paramStr + * 待加密字符串 + * @return 返回16进制的加密字符串 + * @throws Exception + */ + public static String encryptEcb(String hexKey, String paramStr) throws Exception { + String cipherText = ""; + // 16进制字符串-->byte[] + byte[] keyData = ByteUtils.fromHexString(hexKey); + // String-->byte[] + byte[] srcData = paramStr.getBytes(ENCODING); + // 加密后的数组 + byte[] cipherArray = encrypt_Ecb_Padding(keyData, srcData); + // byte[]-->hexString + cipherText = ByteUtils.toHexString(cipherArray); + return cipherText; + } + + /** + * 加密模式之Ecb + * @explain + * @param key + * @param data + * @return + * @throws Exception + */ + public static byte[] encrypt_Ecb_Padding(byte[] key, byte[] data) throws Exception { + Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key); + return cipher.doFinal(data); + } + + /** + * sm4解密 + * @explain 解密模式:采用ECB + * @param hexKey + * 16进制密钥 + * @param cipherText + * 16进制的加密字符串(忽略大小写) + * @return 解密后的字符串 + * @throws Exception + */ + public static String decryptEcb(String hexKey, String cipherText) throws Exception { + // 用于接收解密后的字符串 + String decryptStr = ""; + // hexString-->byte[] + byte[] keyData = ByteUtils.fromHexString(hexKey); + // hexString-->byte[] + byte[] cipherData = ByteUtils.fromHexString(cipherText); + // 解密 + byte[] srcData = decrypt_Ecb_Padding(keyData, cipherData); + // byte[]-->String + decryptStr = new String(srcData, ENCODING); + return decryptStr; + } + + /** + * 解密 + * @explain + * @param key + * @param cipherText + * @return + * @throws Exception + */ + public static byte[] decrypt_Ecb_Padding(byte[] key, byte[] cipherText) throws Exception { + Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key); + return cipher.doFinal(cipherText); + } + + /** + * 校验加密前后的字符串是否为同一数据 + * @explain + * @param hexKey + * 16进制密钥(忽略大小写) + * @param cipherText + * 16进制加密后的字符串 + * @param paramStr + * 加密前的字符串 + * @return 是否为同一数据 + * @throws Exception + */ + public static boolean verifyEcb(String hexKey, String cipherText, String paramStr) throws Exception { + // 用于接收校验结果 + boolean flag = false; + // hexString-->byte[] + byte[] keyData = ByteUtils.fromHexString(hexKey); + // 将16进制字符串转换成数组 + byte[] cipherData = ByteUtils.fromHexString(cipherText); + // 解密 + byte[] decryptData = decrypt_Ecb_Padding(keyData, cipherData); + // 将原字符串转换成byte[] + byte[] srcData = paramStr.getBytes(ENCODING); + // 判断2个数组是否一致 + flag = Arrays.equals(decryptData, srcData); + return flag; + } +} diff --git a/service/src/main/resources/application.yml b/service/src/main/resources/application.yml new file mode 100644 index 0000000..bfeffbf --- /dev/null +++ b/service/src/main/resources/application.yml @@ -0,0 +1,7 @@ +# 端口号 +server: + port: 8686 + +# 是否开启加密 +encrypt: + enabled: true diff --git a/web/.browserslistrc b/web/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/web/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/web/.editorconfig b/web/.editorconfig new file mode 100644 index 0000000..7053c49 --- /dev/null +++ b/web/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/web/.env.development b/web/.env.development new file mode 100644 index 0000000..10ca0be --- /dev/null +++ b/web/.env.development @@ -0,0 +1,4 @@ +VUE_APP_BASE_API = '/dev-api' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/web/.env.production b/web/.env.production new file mode 100644 index 0000000..81ba185 --- /dev/null +++ b/web/.env.production @@ -0,0 +1 @@ +VUE_APP_BASE_API = '/prod-api' diff --git a/web/.eslintrc.js b/web/.eslintrc.js new file mode 100644 index 0000000..2c6a7fa --- /dev/null +++ b/web/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + root: true, + env: { + node: true + }, + extends: [ + 'plugin:vue/essential', + '@vue/standard' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' + } +} diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/babel.config.js b/web/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/web/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..2fe8f5b --- /dev/null +++ b/web/package.json @@ -0,0 +1,40 @@ +{ + "name": "code", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "start": "node index.js", + "server": "nodemon index.js --ignore client" + }, + "dependencies": { + "axios": "^0.24.0", + "core-js": "^3.6.5", + "element-ui": "^2.13.2", + "es6-promise": "^4.2.8", + "sm-crypto": "^0.3.7", + "vue": "^2.6.11", + "vue-router": "^3.2.0", + "vuex": "^3.4.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/eslint-config-standard": "^5.1.2", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^6.2.2", + "less": "^3.0.4", + "less-loader": "^5.0.0", + "vue-template-compiler": "^2.6.11" + } +} diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/web/public/index.html b/web/public/index.html new file mode 100644 index 0000000..e495410 --- /dev/null +++ b/web/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + +
+ + + diff --git a/web/public/js/crypto-js.js b/web/public/js/crypto-js.js new file mode 100644 index 0000000..9264b69 --- /dev/null +++ b/web/public/js/crypto-js.js @@ -0,0 +1,1622 @@ +!function (t, r) { + "object" == typeof exports ? module.exports = exports = r() : "function" == typeof define && define.amd ? define([], r) : t.CryptoJS = r() +}(this, function () { + var t = t || function (t, r) { + var e = Object.create || function () { + function t() { + } + + return function (r) { + var e; + return t.prototype = r, e = new t, t.prototype = null, e + } + }(), i = {}, n = i.lib = {}, o = n.Base = function () { + return { + extend: function (t) { + var r = e(this); + return t && r.mixIn(t), r.hasOwnProperty("init") && this.init !== r.init || (r.init = function () { + r.$super.init.apply(this, arguments) + }), r.init.prototype = r, r.$super = this, r + }, create: function () { + var t = this.extend(); + return t.init.apply(t, arguments), t + }, init: function () { + }, mixIn: function (t) { + for (var r in t) t.hasOwnProperty(r) && (this[r] = t[r]); + t.hasOwnProperty("toString") && (this.toString = t.toString) + }, clone: function () { + return this.init.prototype.extend(this) + } + } + }(), s = n.WordArray = o.extend({ + init: function (t, e) { + t = this.words = t || [], e != r ? this.sigBytes = e : this.sigBytes = 4 * t.length + }, toString: function (t) { + return (t || c).stringify(this) + }, concat: function (t) { + var r = this.words, e = t.words, i = this.sigBytes, n = t.sigBytes; + if (this.clamp(), i % 4) for (var o = 0; o < n; o++) { + var s = e[o >>> 2] >>> 24 - o % 4 * 8 & 255; + r[i + o >>> 2] |= s << 24 - (i + o) % 4 * 8 + } else for (var o = 0; o < n; o += 4) r[i + o >>> 2] = e[o >>> 2]; + return this.sigBytes += n, this + }, clamp: function () { + var r = this.words, e = this.sigBytes; + r[e >>> 2] &= 4294967295 << 32 - e % 4 * 8, r.length = t.ceil(e / 4) + }, clone: function () { + var t = o.clone.call(this); + return t.words = this.words.slice(0), t + }, random: function (r) { + for (var e, i = [], n = function (r) { + var r = r, e = 987654321, i = 4294967295; + return function () { + e = 36969 * (65535 & e) + (e >> 16) & i, r = 18e3 * (65535 & r) + (r >> 16) & i; + var n = (e << 16) + r & i; + return n /= 4294967296, n += .5, n * (t.random() > .5 ? 1 : -1) + } + }, o = 0; o < r; o += 4) { + var a = n(4294967296 * (e || t.random())); + e = 987654071 * a(), i.push(4294967296 * a() | 0) + } + return new s.init(i, r) + } + }), a = i.enc = {}, c = a.Hex = { + stringify: function (t) { + for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n++) { + var o = r[n >>> 2] >>> 24 - n % 4 * 8 & 255; + i.push((o >>> 4).toString(16)), i.push((15 & o).toString(16)) + } + return i.join("") + }, parse: function (t) { + for (var r = t.length, e = [], i = 0; i < r; i += 2) e[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - i % 8 * 4; + return new s.init(e, r / 2) + } + }, h = a.Latin1 = { + stringify: function (t) { + for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n++) { + var o = r[n >>> 2] >>> 24 - n % 4 * 8 & 255; + i.push(String.fromCharCode(o)) + } + return i.join("") + }, parse: function (t) { + for (var r = t.length, e = [], i = 0; i < r; i++) e[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - i % 4 * 8; + return new s.init(e, r) + } + }, l = a.Utf8 = { + stringify: function (t) { + try { + return decodeURIComponent(escape(h.stringify(t))) + } catch (t) { + throw new Error("Malformed UTF-8 data") + } + }, parse: function (t) { + return h.parse(unescape(encodeURIComponent(t))) + } + }, f = n.BufferedBlockAlgorithm = o.extend({ + reset: function () { + this._data = new s.init, this._nDataBytes = 0 + }, _append: function (t) { + "string" == typeof t && (t = l.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes + }, _process: function (r) { + var e = this._data, i = e.words, n = e.sigBytes, o = this.blockSize, a = 4 * o, c = n / a; + c = r ? t.ceil(c) : t.max((0 | c) - this._minBufferSize, 0); + var h = c * o, l = t.min(4 * h, n); + if (h) { + for (var f = 0; f < h; f += o) this._doProcessBlock(i, f); + var u = i.splice(0, h); + e.sigBytes -= l + } + return new s.init(u, l) + }, clone: function () { + var t = o.clone.call(this); + return t._data = this._data.clone(), t + }, _minBufferSize: 0 + }), u = (n.Hasher = f.extend({ + cfg: o.extend(), init: function (t) { + this.cfg = this.cfg.extend(t), this.reset() + }, reset: function () { + f.reset.call(this), this._doReset() + }, update: function (t) { + return this._append(t), this._process(), this + }, finalize: function (t) { + t && this._append(t); + var r = this._doFinalize(); + return r + }, blockSize: 16, _createHelper: function (t) { + return function (r, e) { + return new t.init(e).finalize(r) + } + }, _createHmacHelper: function (t) { + return function (r, e) { + return new u.HMAC.init(t, e).finalize(r) + } + } + }), i.algo = {}); + return i + }(Math); + return function () { + function r(t, r, e) { + for (var i = [], o = 0, s = 0; s < r; s++) if (s % 4) { + var a = e[t.charCodeAt(s - 1)] << s % 4 * 2, c = e[t.charCodeAt(s)] >>> 6 - s % 4 * 2; + i[o >>> 2] |= (a | c) << 24 - o % 4 * 8, o++ + } + return n.create(i, o) + } + + var e = t, i = e.lib, n = i.WordArray, o = e.enc; + o.Base64 = { + stringify: function (t) { + var r = t.words, e = t.sigBytes, i = this._map; + t.clamp(); + for (var n = [], o = 0; o < e; o += 3) for (var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255, a = r[o + 1 >>> 2] >>> 24 - (o + 1) % 4 * 8 & 255, c = r[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, h = s << 16 | a << 8 | c, l = 0; l < 4 && o + .75 * l < e; l++) n.push(i.charAt(h >>> 6 * (3 - l) & 63)); + var f = i.charAt(64); + if (f) for (; n.length % 4;) n.push(f); + return n.join("") + }, parse: function (t) { + var e = t.length, i = this._map, n = this._reverseMap; + if (!n) { + n = this._reverseMap = []; + for (var o = 0; o < i.length; o++) n[i.charCodeAt(o)] = o + } + var s = i.charAt(64); + if (s) { + var a = t.indexOf(s); + a !== -1 && (e = a) + } + return r(t, e, n) + }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } + }(), function (r) { + function e(t, r, e, i, n, o, s) { + var a = t + (r & e | ~r & i) + n + s; + return (a << o | a >>> 32 - o) + r + } + + function i(t, r, e, i, n, o, s) { + var a = t + (r & i | e & ~i) + n + s; + return (a << o | a >>> 32 - o) + r + } + + function n(t, r, e, i, n, o, s) { + var a = t + (r ^ e ^ i) + n + s; + return (a << o | a >>> 32 - o) + r + } + + function o(t, r, e, i, n, o, s) { + var a = t + (e ^ (r | ~i)) + n + s; + return (a << o | a >>> 32 - o) + r + } + + var s = t, a = s.lib, c = a.WordArray, h = a.Hasher, l = s.algo, f = []; + !function () { + for (var t = 0; t < 64; t++) f[t] = 4294967296 * r.abs(r.sin(t + 1)) | 0 + }(); + var u = l.MD5 = h.extend({ + _doReset: function () { + this._hash = new c.init([1732584193, 4023233417, 2562383102, 271733878]) + }, _doProcessBlock: function (t, r) { + for (var s = 0; s < 16; s++) { + var a = r + s, c = t[a]; + t[a] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8) + } + var h = this._hash.words, l = t[r + 0], u = t[r + 1], d = t[r + 2], v = t[r + 3], p = t[r + 4], + _ = t[r + 5], y = t[r + 6], g = t[r + 7], B = t[r + 8], w = t[r + 9], k = t[r + 10], S = t[r + 11], + m = t[r + 12], x = t[r + 13], b = t[r + 14], H = t[r + 15], z = h[0], A = h[1], C = h[2], D = h[3]; + z = e(z, A, C, D, l, 7, f[0]), D = e(D, z, A, C, u, 12, f[1]), C = e(C, D, z, A, d, 17, f[2]), A = e(A, C, D, z, v, 22, f[3]), z = e(z, A, C, D, p, 7, f[4]), D = e(D, z, A, C, _, 12, f[5]), C = e(C, D, z, A, y, 17, f[6]), A = e(A, C, D, z, g, 22, f[7]), z = e(z, A, C, D, B, 7, f[8]), D = e(D, z, A, C, w, 12, f[9]), C = e(C, D, z, A, k, 17, f[10]), A = e(A, C, D, z, S, 22, f[11]), z = e(z, A, C, D, m, 7, f[12]), D = e(D, z, A, C, x, 12, f[13]), C = e(C, D, z, A, b, 17, f[14]), A = e(A, C, D, z, H, 22, f[15]), z = i(z, A, C, D, u, 5, f[16]), D = i(D, z, A, C, y, 9, f[17]), C = i(C, D, z, A, S, 14, f[18]), A = i(A, C, D, z, l, 20, f[19]), z = i(z, A, C, D, _, 5, f[20]), D = i(D, z, A, C, k, 9, f[21]), C = i(C, D, z, A, H, 14, f[22]), A = i(A, C, D, z, p, 20, f[23]), z = i(z, A, C, D, w, 5, f[24]), D = i(D, z, A, C, b, 9, f[25]), C = i(C, D, z, A, v, 14, f[26]), A = i(A, C, D, z, B, 20, f[27]), z = i(z, A, C, D, x, 5, f[28]), D = i(D, z, A, C, d, 9, f[29]), C = i(C, D, z, A, g, 14, f[30]), A = i(A, C, D, z, m, 20, f[31]), z = n(z, A, C, D, _, 4, f[32]), D = n(D, z, A, C, B, 11, f[33]), C = n(C, D, z, A, S, 16, f[34]), A = n(A, C, D, z, b, 23, f[35]), z = n(z, A, C, D, u, 4, f[36]), D = n(D, z, A, C, p, 11, f[37]), C = n(C, D, z, A, g, 16, f[38]), A = n(A, C, D, z, k, 23, f[39]), z = n(z, A, C, D, x, 4, f[40]), D = n(D, z, A, C, l, 11, f[41]), C = n(C, D, z, A, v, 16, f[42]), A = n(A, C, D, z, y, 23, f[43]), z = n(z, A, C, D, w, 4, f[44]), D = n(D, z, A, C, m, 11, f[45]), C = n(C, D, z, A, H, 16, f[46]), A = n(A, C, D, z, d, 23, f[47]), z = o(z, A, C, D, l, 6, f[48]), D = o(D, z, A, C, g, 10, f[49]), C = o(C, D, z, A, b, 15, f[50]), A = o(A, C, D, z, _, 21, f[51]), z = o(z, A, C, D, m, 6, f[52]), D = o(D, z, A, C, v, 10, f[53]), C = o(C, D, z, A, k, 15, f[54]), A = o(A, C, D, z, u, 21, f[55]), z = o(z, A, C, D, B, 6, f[56]), D = o(D, z, A, C, H, 10, f[57]), C = o(C, D, z, A, y, 15, f[58]), A = o(A, C, D, z, x, 21, f[59]), z = o(z, A, C, D, p, 6, f[60]), D = o(D, z, A, C, S, 10, f[61]), C = o(C, D, z, A, d, 15, f[62]), A = o(A, C, D, z, w, 21, f[63]), h[0] = h[0] + z | 0, h[1] = h[1] + A | 0, h[2] = h[2] + C | 0, h[3] = h[3] + D | 0 + }, _doFinalize: function () { + var t = this._data, e = t.words, i = 8 * this._nDataBytes, n = 8 * t.sigBytes; + e[n >>> 5] |= 128 << 24 - n % 32; + var o = r.floor(i / 4294967296), s = i; + e[(n + 64 >>> 9 << 4) + 15] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), e[(n + 64 >>> 9 << 4) + 14] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), t.sigBytes = 4 * (e.length + 1), this._process(); + for (var a = this._hash, c = a.words, h = 0; h < 4; h++) { + var l = c[h]; + c[h] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) + } + return a + }, clone: function () { + var t = h.clone.call(this); + return t._hash = this._hash.clone(), t + } + }); + s.MD5 = h._createHelper(u), s.HmacMD5 = h._createHmacHelper(u) + }(Math), function () { + var r = t, e = r.lib, i = e.WordArray, n = e.Hasher, o = r.algo, s = [], a = o.SHA1 = n.extend({ + _doReset: function () { + this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, _doProcessBlock: function (t, r) { + for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], a = e[3], c = e[4], h = 0; h < 80; h++) { + if (h < 16) s[h] = 0 | t[r + h]; else { + var l = s[h - 3] ^ s[h - 8] ^ s[h - 14] ^ s[h - 16]; + s[h] = l << 1 | l >>> 31 + } + var f = (i << 5 | i >>> 27) + c + s[h]; + f += h < 20 ? (n & o | ~n & a) + 1518500249 : h < 40 ? (n ^ o ^ a) + 1859775393 : h < 60 ? (n & o | n & a | o & a) - 1894007588 : (n ^ o ^ a) - 899497514, c = a, a = o, o = n << 30 | n >>> 2, n = i, i = f + } + e[0] = e[0] + i | 0, e[1] = e[1] + n | 0, e[2] = e[2] + o | 0, e[3] = e[3] + a | 0, e[4] = e[4] + c | 0 + }, _doFinalize: function () { + var t = this._data, r = t.words, e = 8 * this._nDataBytes, i = 8 * t.sigBytes; + return r[i >>> 5] |= 128 << 24 - i % 32, r[(i + 64 >>> 9 << 4) + 14] = Math.floor(e / 4294967296), r[(i + 64 >>> 9 << 4) + 15] = e, t.sigBytes = 4 * r.length, this._process(), this._hash + }, clone: function () { + var t = n.clone.call(this); + return t._hash = this._hash.clone(), t + } + }); + r.SHA1 = n._createHelper(a), r.HmacSHA1 = n._createHmacHelper(a) + }(), function (r) { + var e = t, i = e.lib, n = i.WordArray, o = i.Hasher, s = e.algo, a = [], c = []; + !function () { + function t(t) { + for (var e = r.sqrt(t), i = 2; i <= e; i++) if (!(t % i)) return !1; + return !0 + } + + function e(t) { + return 4294967296 * (t - (0 | t)) | 0 + } + + for (var i = 2, n = 0; n < 64;) t(i) && (n < 8 && (a[n] = e(r.pow(i, .5))), c[n] = e(r.pow(i, 1 / 3)), n++), i++ + }(); + var h = [], l = s.SHA256 = o.extend({ + _doReset: function () { + this._hash = new n.init(a.slice(0)) + }, _doProcessBlock: function (t, r) { + for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], s = e[3], a = e[4], l = e[5], f = e[6], u = e[7], d = 0; d < 64; d++) { + if (d < 16) h[d] = 0 | t[r + d]; else { + var v = h[d - 15], p = (v << 25 | v >>> 7) ^ (v << 14 | v >>> 18) ^ v >>> 3, _ = h[d - 2], + y = (_ << 15 | _ >>> 17) ^ (_ << 13 | _ >>> 19) ^ _ >>> 10; + h[d] = p + h[d - 7] + y + h[d - 16] + } + var g = a & l ^ ~a & f, B = i & n ^ i & o ^ n & o, + w = (i << 30 | i >>> 2) ^ (i << 19 | i >>> 13) ^ (i << 10 | i >>> 22), + k = (a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | a >>> 25), + S = u + k + g + c[d] + h[d], m = w + B; + u = f, f = l, l = a, a = s + S | 0, s = o, o = n, n = i, i = S + m | 0 + } + e[0] = e[0] + i | 0, e[1] = e[1] + n | 0, e[2] = e[2] + o | 0, e[3] = e[3] + s | 0, e[4] = e[4] + a | 0, e[5] = e[5] + l | 0, e[6] = e[6] + f | 0, e[7] = e[7] + u | 0 + }, _doFinalize: function () { + var t = this._data, e = t.words, i = 8 * this._nDataBytes, n = 8 * t.sigBytes; + return e[n >>> 5] |= 128 << 24 - n % 32, e[(n + 64 >>> 9 << 4) + 14] = r.floor(i / 4294967296), e[(n + 64 >>> 9 << 4) + 15] = i, t.sigBytes = 4 * e.length, this._process(), this._hash + }, clone: function () { + var t = o.clone.call(this); + return t._hash = this._hash.clone(), t + } + }); + e.SHA256 = o._createHelper(l), e.HmacSHA256 = o._createHmacHelper(l) + }(Math), function () { + function r(t) { + return t << 8 & 4278255360 | t >>> 8 & 16711935 + } + + var e = t, i = e.lib, n = i.WordArray, o = e.enc; + o.Utf16 = o.Utf16BE = { + stringify: function (t) { + for (var r = t.words, e = t.sigBytes, i = [], n = 0; n < e; n += 2) { + var o = r[n >>> 2] >>> 16 - n % 4 * 8 & 65535; + i.push(String.fromCharCode(o)) + } + return i.join("") + }, parse: function (t) { + for (var r = t.length, e = [], i = 0; i < r; i++) e[i >>> 1] |= t.charCodeAt(i) << 16 - i % 2 * 16; + return n.create(e, 2 * r) + } + }; + o.Utf16LE = { + stringify: function (t) { + for (var e = t.words, i = t.sigBytes, n = [], o = 0; o < i; o += 2) { + var s = r(e[o >>> 2] >>> 16 - o % 4 * 8 & 65535); + n.push(String.fromCharCode(s)) + } + return n.join("") + }, parse: function (t) { + for (var e = t.length, i = [], o = 0; o < e; o++) i[o >>> 1] |= r(t.charCodeAt(o) << 16 - o % 2 * 16); + return n.create(i, 2 * e) + } + } + }(), function () { + if ("function" == typeof ArrayBuffer) { + var r = t, e = r.lib, i = e.WordArray, n = i.init, o = i.init = function (t) { + if (t instanceof ArrayBuffer && (t = new Uint8Array(t)), (t instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && t instanceof Uint8ClampedArray || t instanceof Int16Array || t instanceof Uint16Array || t instanceof Int32Array || t instanceof Uint32Array || t instanceof Float32Array || t instanceof Float64Array) && (t = new Uint8Array(t.buffer, t.byteOffset, t.byteLength)), t instanceof Uint8Array) { + for (var r = t.byteLength, e = [], i = 0; i < r; i++) e[i >>> 2] |= t[i] << 24 - i % 4 * 8; + n.call(this, e, r) + } else n.apply(this, arguments) + }; + o.prototype = i + } + }(), function (r) { + function e(t, r, e) { + return t ^ r ^ e + } + + function i(t, r, e) { + return t & r | ~t & e + } + + function n(t, r, e) { + return (t | ~r) ^ e + } + + function o(t, r, e) { + return t & e | r & ~e + } + + function s(t, r, e) { + return t ^ (r | ~e) + } + + function a(t, r) { + return t << r | t >>> 32 - r + } + + var c = t, h = c.lib, l = h.WordArray, f = h.Hasher, u = c.algo, + d = l.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]), + v = l.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]), + p = l.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]), + _ = l.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]), + y = l.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), + g = l.create([1352829926, 1548603684, 1836072691, 2053994217, 0]), B = u.RIPEMD160 = f.extend({ + _doReset: function () { + this._hash = l.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, _doProcessBlock: function (t, r) { + for (var c = 0; c < 16; c++) { + var h = r + c, l = t[h]; + t[h] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) + } + var f, u, B, w, k, S, m, x, b, H, z = this._hash.words, A = y.words, C = g.words, D = d.words, + R = v.words, E = p.words, M = _.words; + S = f = z[0], m = u = z[1], x = B = z[2], b = w = z[3], H = k = z[4]; + for (var F, c = 0; c < 80; c += 1) F = f + t[r + D[c]] | 0, F += c < 16 ? e(u, B, w) + A[0] : c < 32 ? i(u, B, w) + A[1] : c < 48 ? n(u, B, w) + A[2] : c < 64 ? o(u, B, w) + A[3] : s(u, B, w) + A[4], F |= 0, F = a(F, E[c]), F = F + k | 0, f = k, k = w, w = a(B, 10), B = u, u = F, F = S + t[r + R[c]] | 0, F += c < 16 ? s(m, x, b) + C[0] : c < 32 ? o(m, x, b) + C[1] : c < 48 ? n(m, x, b) + C[2] : c < 64 ? i(m, x, b) + C[3] : e(m, x, b) + C[4], F |= 0, F = a(F, M[c]), F = F + H | 0, S = H, H = b, b = a(x, 10), x = m, m = F; + F = z[1] + B + b | 0, z[1] = z[2] + w + H | 0, z[2] = z[3] + k + S | 0, z[3] = z[4] + f + m | 0, z[4] = z[0] + u + x | 0, z[0] = F + }, _doFinalize: function () { + var t = this._data, r = t.words, e = 8 * this._nDataBytes, i = 8 * t.sigBytes; + r[i >>> 5] |= 128 << 24 - i % 32, r[(i + 64 >>> 9 << 4) + 14] = 16711935 & (e << 8 | e >>> 24) | 4278255360 & (e << 24 | e >>> 8), t.sigBytes = 4 * (r.length + 1), this._process(); + for (var n = this._hash, o = n.words, s = 0; s < 5; s++) { + var a = o[s]; + o[s] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) + } + return n + }, clone: function () { + var t = f.clone.call(this); + return t._hash = this._hash.clone(), t + } + }); + c.RIPEMD160 = f._createHelper(B), c.HmacRIPEMD160 = f._createHmacHelper(B) + }(Math), function () { + var r = t, e = r.lib, i = e.Base, n = r.enc, o = n.Utf8, s = r.algo; + s.HMAC = i.extend({ + init: function (t, r) { + t = this._hasher = new t.init, "string" == typeof r && (r = o.parse(r)); + var e = t.blockSize, i = 4 * e; + r.sigBytes > i && (r = t.finalize(r)), r.clamp(); + for (var n = this._oKey = r.clone(), s = this._iKey = r.clone(), a = n.words, c = s.words, h = 0; h < e; h++) a[h] ^= 1549556828, c[h] ^= 909522486; + n.sigBytes = s.sigBytes = i, this.reset() + }, reset: function () { + var t = this._hasher; + t.reset(), t.update(this._iKey) + }, update: function (t) { + return this._hasher.update(t), this + }, finalize: function (t) { + var r = this._hasher, e = r.finalize(t); + r.reset(); + var i = r.finalize(this._oKey.clone().concat(e)); + return i + } + }) + }(), function () { + var r = t, e = r.lib, i = e.Base, n = e.WordArray, o = r.algo, s = o.SHA1, a = o.HMAC, c = o.PBKDF2 = i.extend({ + cfg: i.extend({keySize: 4, hasher: s, iterations: 1}), init: function (t) { + this.cfg = this.cfg.extend(t) + }, compute: function (t, r) { + for (var e = this.cfg, i = a.create(e.hasher, t), o = n.create(), s = n.create([1]), c = o.words, h = s.words, l = e.keySize, f = e.iterations; c.length < l;) { + var u = i.update(r).finalize(s); + i.reset(); + for (var d = u.words, v = d.length, p = u, _ = 1; _ < f; _++) { + p = i.finalize(p), i.reset(); + for (var y = p.words, g = 0; g < v; g++) d[g] ^= y[g] + } + o.concat(u), h[0]++ + } + return o.sigBytes = 4 * l, o + } + }); + r.PBKDF2 = function (t, r, e) { + return c.create(e).compute(t, r) + } + }(), function () { + var r = t, e = r.lib, i = e.Base, n = e.WordArray, o = r.algo, s = o.MD5, a = o.EvpKDF = i.extend({ + cfg: i.extend({keySize: 4, hasher: s, iterations: 1}), init: function (t) { + this.cfg = this.cfg.extend(t) + }, compute: function (t, r) { + for (var e = this.cfg, i = e.hasher.create(), o = n.create(), s = o.words, a = e.keySize, c = e.iterations; s.length < a;) { + h && i.update(h); + var h = i.update(t).finalize(r); + i.reset(); + for (var l = 1; l < c; l++) h = i.finalize(h), i.reset(); + o.concat(h) + } + return o.sigBytes = 4 * a, o + } + }); + r.EvpKDF = function (t, r, e) { + return a.create(e).compute(t, r) + } + }(), function () { + var r = t, e = r.lib, i = e.WordArray, n = r.algo, o = n.SHA256, s = n.SHA224 = o.extend({ + _doReset: function () { + this._hash = new i.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) + }, _doFinalize: function () { + var t = o._doFinalize.call(this); + return t.sigBytes -= 4, t + } + }); + r.SHA224 = o._createHelper(s), r.HmacSHA224 = o._createHmacHelper(s) + }(), function (r) { + var e = t, i = e.lib, n = i.Base, o = i.WordArray, s = e.x64 = {}; + s.Word = n.extend({ + init: function (t, r) { + this.high = t, this.low = r + } + }), s.WordArray = n.extend({ + init: function (t, e) { + t = this.words = t || [], e != r ? this.sigBytes = e : this.sigBytes = 8 * t.length + }, toX32: function () { + for (var t = this.words, r = t.length, e = [], i = 0; i < r; i++) { + var n = t[i]; + e.push(n.high), e.push(n.low) + } + return o.create(e, this.sigBytes) + }, clone: function () { + for (var t = n.clone.call(this), r = t.words = this.words.slice(0), e = r.length, i = 0; i < e; i++) r[i] = r[i].clone(); + return t + } + }) + }(), function (r) { + var e = t, i = e.lib, n = i.WordArray, o = i.Hasher, s = e.x64, a = s.Word, c = e.algo, h = [], l = [], f = []; + !function () { + for (var t = 1, r = 0, e = 0; e < 24; e++) { + h[t + 5 * r] = (e + 1) * (e + 2) / 2 % 64; + var i = r % 5, n = (2 * t + 3 * r) % 5; + t = i, r = n + } + for (var t = 0; t < 5; t++) for (var r = 0; r < 5; r++) l[t + 5 * r] = r + (2 * t + 3 * r) % 5 * 5; + for (var o = 1, s = 0; s < 24; s++) { + for (var c = 0, u = 0, d = 0; d < 7; d++) { + if (1 & o) { + var v = (1 << d) - 1; + v < 32 ? u ^= 1 << v : c ^= 1 << v - 32 + } + 128 & o ? o = o << 1 ^ 113 : o <<= 1 + } + f[s] = a.create(c, u) + } + }(); + var u = []; + !function () { + for (var t = 0; t < 25; t++) u[t] = a.create() + }(); + var d = c.SHA3 = o.extend({ + cfg: o.cfg.extend({outputLength: 512}), _doReset: function () { + for (var t = this._state = [], r = 0; r < 25; r++) t[r] = new a.init; + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32 + }, _doProcessBlock: function (t, r) { + for (var e = this._state, i = this.blockSize / 2, n = 0; n < i; n++) { + var o = t[r + 2 * n], s = t[r + 2 * n + 1]; + o = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8); + var a = e[n]; + a.high ^= s, a.low ^= o + } + for (var c = 0; c < 24; c++) { + for (var d = 0; d < 5; d++) { + for (var v = 0, p = 0, _ = 0; _ < 5; _++) { + var a = e[d + 5 * _]; + v ^= a.high, p ^= a.low + } + var y = u[d]; + y.high = v, y.low = p + } + for (var d = 0; d < 5; d++) for (var g = u[(d + 4) % 5], B = u[(d + 1) % 5], w = B.high, k = B.low, v = g.high ^ (w << 1 | k >>> 31), p = g.low ^ (k << 1 | w >>> 31), _ = 0; _ < 5; _++) { + var a = e[d + 5 * _]; + a.high ^= v, a.low ^= p + } + for (var S = 1; S < 25; S++) { + var a = e[S], m = a.high, x = a.low, b = h[S]; + if (b < 32) var v = m << b | x >>> 32 - b, + p = x << b | m >>> 32 - b; else var v = x << b - 32 | m >>> 64 - b, + p = m << b - 32 | x >>> 64 - b; + var H = u[l[S]]; + H.high = v, H.low = p + } + var z = u[0], A = e[0]; + z.high = A.high, z.low = A.low; + for (var d = 0; d < 5; d++) for (var _ = 0; _ < 5; _++) { + var S = d + 5 * _, a = e[S], C = u[S], D = u[(d + 1) % 5 + 5 * _], R = u[(d + 2) % 5 + 5 * _]; + a.high = C.high ^ ~D.high & R.high, a.low = C.low ^ ~D.low & R.low + } + var a = e[0], E = f[c]; + a.high ^= E.high, a.low ^= E.low + } + }, _doFinalize: function () { + var t = this._data, e = t.words, i = (8 * this._nDataBytes, 8 * t.sigBytes), o = 32 * this.blockSize; + e[i >>> 5] |= 1 << 24 - i % 32, e[(r.ceil((i + 1) / o) * o >>> 5) - 1] |= 128, t.sigBytes = 4 * e.length, this._process(); + for (var s = this._state, a = this.cfg.outputLength / 8, c = a / 8, h = [], l = 0; l < c; l++) { + var f = s[l], u = f.high, d = f.low; + u = 16711935 & (u << 8 | u >>> 24) | 4278255360 & (u << 24 | u >>> 8), d = 16711935 & (d << 8 | d >>> 24) | 4278255360 & (d << 24 | d >>> 8), h.push(d), h.push(u) + } + return new n.init(h, a) + }, clone: function () { + for (var t = o.clone.call(this), r = t._state = this._state.slice(0), e = 0; e < 25; e++) r[e] = r[e].clone(); + return t + } + }); + e.SHA3 = o._createHelper(d), e.HmacSHA3 = o._createHmacHelper(d) + }(Math), function () { + function r() { + return s.create.apply(s, arguments) + } + + var e = t, i = e.lib, n = i.Hasher, o = e.x64, s = o.Word, a = o.WordArray, c = e.algo, + h = [r(1116352408, 3609767458), r(1899447441, 602891725), r(3049323471, 3964484399), r(3921009573, 2173295548), r(961987163, 4081628472), r(1508970993, 3053834265), r(2453635748, 2937671579), r(2870763221, 3664609560), r(3624381080, 2734883394), r(310598401, 1164996542), r(607225278, 1323610764), r(1426881987, 3590304994), r(1925078388, 4068182383), r(2162078206, 991336113), r(2614888103, 633803317), r(3248222580, 3479774868), r(3835390401, 2666613458), r(4022224774, 944711139), r(264347078, 2341262773), r(604807628, 2007800933), r(770255983, 1495990901), r(1249150122, 1856431235), r(1555081692, 3175218132), r(1996064986, 2198950837), r(2554220882, 3999719339), r(2821834349, 766784016), r(2952996808, 2566594879), r(3210313671, 3203337956), r(3336571891, 1034457026), r(3584528711, 2466948901), r(113926993, 3758326383), r(338241895, 168717936), r(666307205, 1188179964), r(773529912, 1546045734), r(1294757372, 1522805485), r(1396182291, 2643833823), r(1695183700, 2343527390), r(1986661051, 1014477480), r(2177026350, 1206759142), r(2456956037, 344077627), r(2730485921, 1290863460), r(2820302411, 3158454273), r(3259730800, 3505952657), r(3345764771, 106217008), r(3516065817, 3606008344), r(3600352804, 1432725776), r(4094571909, 1467031594), r(275423344, 851169720), r(430227734, 3100823752), r(506948616, 1363258195), r(659060556, 3750685593), r(883997877, 3785050280), r(958139571, 3318307427), r(1322822218, 3812723403), r(1537002063, 2003034995), r(1747873779, 3602036899), r(1955562222, 1575990012), r(2024104815, 1125592928), r(2227730452, 2716904306), r(2361852424, 442776044), r(2428436474, 593698344), r(2756734187, 3733110249), r(3204031479, 2999351573), r(3329325298, 3815920427), r(3391569614, 3928383900), r(3515267271, 566280711), r(3940187606, 3454069534), r(4118630271, 4000239992), r(116418474, 1914138554), r(174292421, 2731055270), r(289380356, 3203993006), r(460393269, 320620315), r(685471733, 587496836), r(852142971, 1086792851), r(1017036298, 365543100), r(1126000580, 2618297676), r(1288033470, 3409855158), r(1501505948, 4234509866), r(1607167915, 987167468), r(1816402316, 1246189591)], + l = []; + !function () { + for (var t = 0; t < 80; t++) l[t] = r() + }(); + var f = c.SHA512 = n.extend({ + _doReset: function () { + this._hash = new a.init([new s.init(1779033703, 4089235720), new s.init(3144134277, 2227873595), new s.init(1013904242, 4271175723), new s.init(2773480762, 1595750129), new s.init(1359893119, 2917565137), new s.init(2600822924, 725511199), new s.init(528734635, 4215389547), new s.init(1541459225, 327033209)]) + }, _doProcessBlock: function (t, r) { + for (var e = this._hash.words, i = e[0], n = e[1], o = e[2], s = e[3], a = e[4], c = e[5], f = e[6], u = e[7], d = i.high, v = i.low, p = n.high, _ = n.low, y = o.high, g = o.low, B = s.high, w = s.low, k = a.high, S = a.low, m = c.high, x = c.low, b = f.high, H = f.low, z = u.high, A = u.low, C = d, D = v, R = p, E = _, M = y, F = g, P = B, W = w, O = k, U = S, I = m, K = x, X = b, L = H, j = z, N = A, T = 0; T < 80; T++) { + var Z = l[T]; + if (T < 16) var q = Z.high = 0 | t[r + 2 * T], G = Z.low = 0 | t[r + 2 * T + 1]; else { + var J = l[T - 15], $ = J.high, Q = J.low, + V = ($ >>> 1 | Q << 31) ^ ($ >>> 8 | Q << 24) ^ $ >>> 7, + Y = (Q >>> 1 | $ << 31) ^ (Q >>> 8 | $ << 24) ^ (Q >>> 7 | $ << 25), tt = l[T - 2], + rt = tt.high, et = tt.low, it = (rt >>> 19 | et << 13) ^ (rt << 3 | et >>> 29) ^ rt >>> 6, + nt = (et >>> 19 | rt << 13) ^ (et << 3 | rt >>> 29) ^ (et >>> 6 | rt << 26), ot = l[T - 7], + st = ot.high, at = ot.low, ct = l[T - 16], ht = ct.high, lt = ct.low, G = Y + at, + q = V + st + (G >>> 0 < Y >>> 0 ? 1 : 0), G = G + nt, + q = q + it + (G >>> 0 < nt >>> 0 ? 1 : 0), G = G + lt, + q = q + ht + (G >>> 0 < lt >>> 0 ? 1 : 0); + Z.high = q, Z.low = G + } + var ft = O & I ^ ~O & X, ut = U & K ^ ~U & L, dt = C & R ^ C & M ^ R & M, + vt = D & E ^ D & F ^ E & F, + pt = (C >>> 28 | D << 4) ^ (C << 30 | D >>> 2) ^ (C << 25 | D >>> 7), + _t = (D >>> 28 | C << 4) ^ (D << 30 | C >>> 2) ^ (D << 25 | C >>> 7), + yt = (O >>> 14 | U << 18) ^ (O >>> 18 | U << 14) ^ (O << 23 | U >>> 9), + gt = (U >>> 14 | O << 18) ^ (U >>> 18 | O << 14) ^ (U << 23 | O >>> 9), Bt = h[T], wt = Bt.high, + kt = Bt.low, St = N + gt, mt = j + yt + (St >>> 0 < N >>> 0 ? 1 : 0), St = St + ut, + mt = mt + ft + (St >>> 0 < ut >>> 0 ? 1 : 0), St = St + kt, + mt = mt + wt + (St >>> 0 < kt >>> 0 ? 1 : 0), St = St + G, + mt = mt + q + (St >>> 0 < G >>> 0 ? 1 : 0), xt = _t + vt, + bt = pt + dt + (xt >>> 0 < _t >>> 0 ? 1 : 0); + j = X, N = L, X = I, L = K, I = O, K = U, U = W + St | 0, O = P + mt + (U >>> 0 < W >>> 0 ? 1 : 0) | 0, P = M, W = F, M = R, F = E, R = C, E = D, D = St + xt | 0, C = mt + bt + (D >>> 0 < St >>> 0 ? 1 : 0) | 0 + } + v = i.low = v + D, i.high = d + C + (v >>> 0 < D >>> 0 ? 1 : 0), _ = n.low = _ + E, n.high = p + R + (_ >>> 0 < E >>> 0 ? 1 : 0), g = o.low = g + F, o.high = y + M + (g >>> 0 < F >>> 0 ? 1 : 0), w = s.low = w + W, s.high = B + P + (w >>> 0 < W >>> 0 ? 1 : 0), S = a.low = S + U, a.high = k + O + (S >>> 0 < U >>> 0 ? 1 : 0), x = c.low = x + K, c.high = m + I + (x >>> 0 < K >>> 0 ? 1 : 0), H = f.low = H + L, f.high = b + X + (H >>> 0 < L >>> 0 ? 1 : 0), A = u.low = A + N, u.high = z + j + (A >>> 0 < N >>> 0 ? 1 : 0) + }, _doFinalize: function () { + var t = this._data, r = t.words, e = 8 * this._nDataBytes, i = 8 * t.sigBytes; + r[i >>> 5] |= 128 << 24 - i % 32, r[(i + 128 >>> 10 << 5) + 30] = Math.floor(e / 4294967296), r[(i + 128 >>> 10 << 5) + 31] = e, t.sigBytes = 4 * r.length, this._process(); + var n = this._hash.toX32(); + return n + }, clone: function () { + var t = n.clone.call(this); + return t._hash = this._hash.clone(), t + }, blockSize: 32 + }); + e.SHA512 = n._createHelper(f), e.HmacSHA512 = n._createHmacHelper(f) + }(), function () { + var r = t, e = r.x64, i = e.Word, n = e.WordArray, o = r.algo, s = o.SHA512, a = o.SHA384 = s.extend({ + _doReset: function () { + this._hash = new n.init([new i.init(3418070365, 3238371032), new i.init(1654270250, 914150663), new i.init(2438529370, 812702999), new i.init(355462360, 4144912697), new i.init(1731405415, 4290775857), new i.init(2394180231, 1750603025), new i.init(3675008525, 1694076839), new i.init(1203062813, 3204075428)]) + }, _doFinalize: function () { + var t = s._doFinalize.call(this); + return t.sigBytes -= 16, t + } + }); + r.SHA384 = s._createHelper(a), r.HmacSHA384 = s._createHmacHelper(a) + }(), t.lib.Cipher || function (r) { + var e = t, i = e.lib, n = i.Base, o = i.WordArray, s = i.BufferedBlockAlgorithm, a = e.enc, + c = (a.Utf8, a.Base64), h = e.algo, l = h.EvpKDF, f = i.Cipher = s.extend({ + cfg: n.extend(), createEncryptor: function (t, r) { + return this.create(this._ENC_XFORM_MODE, t, r) + }, createDecryptor: function (t, r) { + return this.create(this._DEC_XFORM_MODE, t, r) + }, init: function (t, r, e) { + this.cfg = this.cfg.extend(e), this._xformMode = t, this._key = r, this.reset() + }, reset: function () { + s.reset.call(this), this._doReset() + }, process: function (t) { + return this._append(t), this._process() + }, finalize: function (t) { + t && this._append(t); + var r = this._doFinalize(); + return r + }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function () { + function t(t) { + return "string" == typeof t ? m : w + } + + return function (r) { + return { + encrypt: function (e, i, n) { + return t(i).encrypt(r, e, i, n) + }, decrypt: function (e, i, n) { + return t(i).decrypt(r, e, i, n) + } + } + } + }() + }), u = (i.StreamCipher = f.extend({ + _doFinalize: function () { + var t = this._process(!0); + return t + }, blockSize: 1 + }), e.mode = {}), d = i.BlockCipherMode = n.extend({ + createEncryptor: function (t, r) { + return this.Encryptor.create(t, r) + }, createDecryptor: function (t, r) { + return this.Decryptor.create(t, r) + }, init: function (t, r) { + this._cipher = t, this._iv = r + } + }), v = u.CBC = function () { + function t(t, e, i) { + var n = this._iv; + if (n) { + var o = n; + this._iv = r + } else var o = this._prevBlock; + for (var s = 0; s < i; s++) t[e + s] ^= o[s] + } + + var e = d.extend(); + return e.Encryptor = e.extend({ + processBlock: function (r, e) { + var i = this._cipher, n = i.blockSize; + t.call(this, r, e, n), i.encryptBlock(r, e), this._prevBlock = r.slice(e, e + n) + } + }), e.Decryptor = e.extend({ + processBlock: function (r, e) { + var i = this._cipher, n = i.blockSize, o = r.slice(e, e + n); + i.decryptBlock(r, e), t.call(this, r, e, n), this._prevBlock = o + } + }), e + }(), p = e.pad = {}, _ = p.Pkcs7 = { + pad: function (t, r) { + for (var e = 4 * r, i = e - t.sigBytes % e, n = i << 24 | i << 16 | i << 8 | i, s = [], a = 0; a < i; a += 4) s.push(n); + var c = o.create(s, i); + t.concat(c) + }, unpad: function (t) { + var r = 255 & t.words[t.sigBytes - 1 >>> 2]; + t.sigBytes -= r + } + }, y = (i.BlockCipher = f.extend({ + cfg: f.cfg.extend({mode: v, padding: _}), reset: function () { + f.reset.call(this); + var t = this.cfg, r = t.iv, e = t.mode; + if (this._xformMode == this._ENC_XFORM_MODE) var i = e.createEncryptor; else { + var i = e.createDecryptor; + this._minBufferSize = 1 + } + this._mode && this._mode.__creator == i ? this._mode.init(this, r && r.words) : (this._mode = i.call(e, this, r && r.words), this._mode.__creator = i) + }, _doProcessBlock: function (t, r) { + this._mode.processBlock(t, r) + }, _doFinalize: function () { + var t = this.cfg.padding; + if (this._xformMode == this._ENC_XFORM_MODE) { + t.pad(this._data, this.blockSize); + var r = this._process(!0) + } else { + var r = this._process(!0); + t.unpad(r) + } + return r + }, blockSize: 4 + }), i.CipherParams = n.extend({ + init: function (t) { + this.mixIn(t) + }, toString: function (t) { + return (t || this.formatter).stringify(this) + } + })), g = e.format = {}, B = g.OpenSSL = { + stringify: function (t) { + var r = t.ciphertext, e = t.salt; + if (e) var i = o.create([1398893684, 1701076831]).concat(e).concat(r); else var i = r; + return i.toString(c) + }, parse: function (t) { + var r = c.parse(t), e = r.words; + if (1398893684 == e[0] && 1701076831 == e[1]) { + var i = o.create(e.slice(2, 4)); + e.splice(0, 4), r.sigBytes -= 16 + } + return y.create({ciphertext: r, salt: i}) + } + }, w = i.SerializableCipher = n.extend({ + cfg: n.extend({format: B}), encrypt: function (t, r, e, i) { + i = this.cfg.extend(i); + var n = t.createEncryptor(e, i), o = n.finalize(r), s = n.cfg; + return y.create({ + ciphertext: o, + key: e, + iv: s.iv, + algorithm: t, + mode: s.mode, + padding: s.padding, + blockSize: t.blockSize, + formatter: i.format + }) + }, decrypt: function (t, r, e, i) { + i = this.cfg.extend(i), r = this._parse(r, i.format); + var n = t.createDecryptor(e, i).finalize(r.ciphertext); + return n + }, _parse: function (t, r) { + return "string" == typeof t ? r.parse(t, this) : t + } + }), k = e.kdf = {}, S = k.OpenSSL = { + execute: function (t, r, e, i) { + i || (i = o.random(8)); + var n = l.create({keySize: r + e}).compute(t, i), s = o.create(n.words.slice(r), 4 * e); + return n.sigBytes = 4 * r, y.create({key: n, iv: s, salt: i}) + } + }, m = i.PasswordBasedCipher = w.extend({ + cfg: w.cfg.extend({kdf: S}), encrypt: function (t, r, e, i) { + i = this.cfg.extend(i); + var n = i.kdf.execute(e, t.keySize, t.ivSize); + i.iv = n.iv; + var o = w.encrypt.call(this, t, r, n.key, i); + return o.mixIn(n), o + }, decrypt: function (t, r, e, i) { + i = this.cfg.extend(i), r = this._parse(r, i.format); + var n = i.kdf.execute(e, t.keySize, t.ivSize, r.salt); + i.iv = n.iv; + var o = w.decrypt.call(this, t, r, n.key, i); + return o + } + }) + }(), t.mode.CFB = function () { + function r(t, r, e, i) { + var n = this._iv; + if (n) { + var o = n.slice(0); + this._iv = void 0 + } else var o = this._prevBlock; + i.encryptBlock(o, 0); + for (var s = 0; s < e; s++) t[r + s] ^= o[s] + } + + var e = t.lib.BlockCipherMode.extend(); + return e.Encryptor = e.extend({ + processBlock: function (t, e) { + var i = this._cipher, n = i.blockSize; + r.call(this, t, e, n, i), this._prevBlock = t.slice(e, e + n) + } + }), e.Decryptor = e.extend({ + processBlock: function (t, e) { + var i = this._cipher, n = i.blockSize, o = t.slice(e, e + n); + r.call(this, t, e, n, i), this._prevBlock = o + } + }), e + }(), t.mode.ECB = function () { + var r = t.lib.BlockCipherMode.extend(); + return r.Encryptor = r.extend({ + processBlock: function (t, r) { + this._cipher.encryptBlock(t, r) + } + }), r.Decryptor = r.extend({ + processBlock: function (t, r) { + this._cipher.decryptBlock(t, r) + } + }), r + }(), t.pad.AnsiX923 = { + pad: function (t, r) { + var e = t.sigBytes, i = 4 * r, n = i - e % i, o = e + n - 1; + t.clamp(), t.words[o >>> 2] |= n << 24 - o % 4 * 8, t.sigBytes += n + }, unpad: function (t) { + var r = 255 & t.words[t.sigBytes - 1 >>> 2]; + t.sigBytes -= r + } + }, t.pad.Iso10126 = { + pad: function (r, e) { + var i = 4 * e, n = i - r.sigBytes % i; + r.concat(t.lib.WordArray.random(n - 1)).concat(t.lib.WordArray.create([n << 24], 1)) + }, unpad: function (t) { + var r = 255 & t.words[t.sigBytes - 1 >>> 2]; + t.sigBytes -= r + } + }, t.pad.Iso97971 = { + pad: function (r, e) { + r.concat(t.lib.WordArray.create([2147483648], 1)), t.pad.ZeroPadding.pad(r, e) + }, unpad: function (r) { + t.pad.ZeroPadding.unpad(r), r.sigBytes-- + } + }, t.mode.OFB = function () { + var r = t.lib.BlockCipherMode.extend(), e = r.Encryptor = r.extend({ + processBlock: function (t, r) { + var e = this._cipher, i = e.blockSize, n = this._iv, o = this._keystream; + n && (o = this._keystream = n.slice(0), this._iv = void 0), e.encryptBlock(o, 0); + for (var s = 0; s < i; s++) t[r + s] ^= o[s] + } + }); + return r.Decryptor = e, r + }(), t.pad.NoPadding = { + pad: function () { + }, unpad: function () { + } + }, function (r) { + var e = t, i = e.lib, n = i.CipherParams, o = e.enc, s = o.Hex, a = e.format; + a.Hex = { + stringify: function (t) { + return t.ciphertext.toString(s) + }, parse: function (t) { + var r = s.parse(t); + return n.create({ciphertext: r}) + } + } + }(), function () { + var r = t, e = r.lib, i = e.BlockCipher, n = r.algo, o = [], s = [], a = [], c = [], h = [], l = [], f = [], + u = [], d = [], v = []; + !function () { + for (var t = [], r = 0; r < 256; r++) r < 128 ? t[r] = r << 1 : t[r] = r << 1 ^ 283; + for (var e = 0, i = 0, r = 0; r < 256; r++) { + var n = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4; + n = n >>> 8 ^ 255 & n ^ 99, o[e] = n, s[n] = e; + var p = t[e], _ = t[p], y = t[_], g = 257 * t[n] ^ 16843008 * n; + a[e] = g << 24 | g >>> 8, c[e] = g << 16 | g >>> 16, h[e] = g << 8 | g >>> 24, l[e] = g; + var g = 16843009 * y ^ 65537 * _ ^ 257 * p ^ 16843008 * e; + f[n] = g << 24 | g >>> 8, u[n] = g << 16 | g >>> 16, d[n] = g << 8 | g >>> 24, v[n] = g, e ? (e = p ^ t[t[t[y ^ p]]], i ^= t[t[i]]) : e = i = 1 + } + }(); + var p = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], _ = n.AES = i.extend({ + _doReset: function () { + if (!this._nRounds || this._keyPriorReset !== this._key) { + for (var t = this._keyPriorReset = this._key, r = t.words, e = t.sigBytes / 4, i = this._nRounds = e + 6, n = 4 * (i + 1), s = this._keySchedule = [], a = 0; a < n; a++) if (a < e) s[a] = r[a]; else { + var c = s[a - 1]; + a % e ? e > 6 && a % e == 4 && (c = o[c >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & c]) : (c = c << 8 | c >>> 24, c = o[c >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & c], c ^= p[a / e | 0] << 24), s[a] = s[a - e] ^ c + } + for (var h = this._invKeySchedule = [], l = 0; l < n; l++) { + var a = n - l; + if (l % 4) var c = s[a]; else var c = s[a - 4]; + l < 4 || a <= 4 ? h[l] = c : h[l] = f[o[c >>> 24]] ^ u[o[c >>> 16 & 255]] ^ d[o[c >>> 8 & 255]] ^ v[o[255 & c]] + } + } + }, encryptBlock: function (t, r) { + this._doCryptBlock(t, r, this._keySchedule, a, c, h, l, o) + }, decryptBlock: function (t, r) { + var e = t[r + 1]; + t[r + 1] = t[r + 3], t[r + 3] = e, this._doCryptBlock(t, r, this._invKeySchedule, f, u, d, v, s); + var e = t[r + 1]; + t[r + 1] = t[r + 3], t[r + 3] = e + }, _doCryptBlock: function (t, r, e, i, n, o, s, a) { + for (var c = this._nRounds, h = t[r] ^ e[0], l = t[r + 1] ^ e[1], f = t[r + 2] ^ e[2], u = t[r + 3] ^ e[3], d = 4, v = 1; v < c; v++) { + var p = i[h >>> 24] ^ n[l >>> 16 & 255] ^ o[f >>> 8 & 255] ^ s[255 & u] ^ e[d++], + _ = i[l >>> 24] ^ n[f >>> 16 & 255] ^ o[u >>> 8 & 255] ^ s[255 & h] ^ e[d++], + y = i[f >>> 24] ^ n[u >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & l] ^ e[d++], + g = i[u >>> 24] ^ n[h >>> 16 & 255] ^ o[l >>> 8 & 255] ^ s[255 & f] ^ e[d++]; + h = p, l = _, f = y, u = g + } + var p = (a[h >>> 24] << 24 | a[l >>> 16 & 255] << 16 | a[f >>> 8 & 255] << 8 | a[255 & u]) ^ e[d++], + _ = (a[l >>> 24] << 24 | a[f >>> 16 & 255] << 16 | a[u >>> 8 & 255] << 8 | a[255 & h]) ^ e[d++], + y = (a[f >>> 24] << 24 | a[u >>> 16 & 255] << 16 | a[h >>> 8 & 255] << 8 | a[255 & l]) ^ e[d++], + g = (a[u >>> 24] << 24 | a[h >>> 16 & 255] << 16 | a[l >>> 8 & 255] << 8 | a[255 & f]) ^ e[d++]; + t[r] = p, t[r + 1] = _, t[r + 2] = y, t[r + 3] = g + }, keySize: 8 + }); + r.AES = i._createHelper(_) + }(), function () { + function r(t, r) { + var e = (this._lBlock >>> t ^ this._rBlock) & r; + this._rBlock ^= e, this._lBlock ^= e << t + } + + function e(t, r) { + var e = (this._rBlock >>> t ^ this._lBlock) & r; + this._lBlock ^= e, this._rBlock ^= e << t; + } + + var i = t, n = i.lib, o = n.WordArray, s = n.BlockCipher, a = i.algo, + c = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4], + h = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32], + l = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], f = [{ + 0: 8421888, + 268435456: 32768, + 536870912: 8421378, + 805306368: 2, + 1073741824: 512, + 1342177280: 8421890, + 1610612736: 8389122, + 1879048192: 8388608, + 2147483648: 514, + 2415919104: 8389120, + 2684354560: 33280, + 2952790016: 8421376, + 3221225472: 32770, + 3489660928: 8388610, + 3758096384: 0, + 4026531840: 33282, + 134217728: 0, + 402653184: 8421890, + 671088640: 33282, + 939524096: 32768, + 1207959552: 8421888, + 1476395008: 512, + 1744830464: 8421378, + 2013265920: 2, + 2281701376: 8389120, + 2550136832: 33280, + 2818572288: 8421376, + 3087007744: 8389122, + 3355443200: 8388610, + 3623878656: 32770, + 3892314112: 514, + 4160749568: 8388608, + 1: 32768, + 268435457: 2, + 536870913: 8421888, + 805306369: 8388608, + 1073741825: 8421378, + 1342177281: 33280, + 1610612737: 512, + 1879048193: 8389122, + 2147483649: 8421890, + 2415919105: 8421376, + 2684354561: 8388610, + 2952790017: 33282, + 3221225473: 514, + 3489660929: 8389120, + 3758096385: 32770, + 4026531841: 0, + 134217729: 8421890, + 402653185: 8421376, + 671088641: 8388608, + 939524097: 512, + 1207959553: 32768, + 1476395009: 8388610, + 1744830465: 2, + 2013265921: 33282, + 2281701377: 32770, + 2550136833: 8389122, + 2818572289: 514, + 3087007745: 8421888, + 3355443201: 8389120, + 3623878657: 0, + 3892314113: 33280, + 4160749569: 8421378 + }, { + 0: 1074282512, + 16777216: 16384, + 33554432: 524288, + 50331648: 1074266128, + 67108864: 1073741840, + 83886080: 1074282496, + 100663296: 1073758208, + 117440512: 16, + 134217728: 540672, + 150994944: 1073758224, + 167772160: 1073741824, + 184549376: 540688, + 201326592: 524304, + 218103808: 0, + 234881024: 16400, + 251658240: 1074266112, + 8388608: 1073758208, + 25165824: 540688, + 41943040: 16, + 58720256: 1073758224, + 75497472: 1074282512, + 92274688: 1073741824, + 109051904: 524288, + 125829120: 1074266128, + 142606336: 524304, + 159383552: 0, + 176160768: 16384, + 192937984: 1074266112, + 209715200: 1073741840, + 226492416: 540672, + 243269632: 1074282496, + 260046848: 16400, + 268435456: 0, + 285212672: 1074266128, + 301989888: 1073758224, + 318767104: 1074282496, + 335544320: 1074266112, + 352321536: 16, + 369098752: 540688, + 385875968: 16384, + 402653184: 16400, + 419430400: 524288, + 436207616: 524304, + 452984832: 1073741840, + 469762048: 540672, + 486539264: 1073758208, + 503316480: 1073741824, + 520093696: 1074282512, + 276824064: 540688, + 293601280: 524288, + 310378496: 1074266112, + 327155712: 16384, + 343932928: 1073758208, + 360710144: 1074282512, + 377487360: 16, + 394264576: 1073741824, + 411041792: 1074282496, + 427819008: 1073741840, + 444596224: 1073758224, + 461373440: 524304, + 478150656: 0, + 494927872: 16400, + 511705088: 1074266128, + 528482304: 540672 + }, { + 0: 260, + 1048576: 0, + 2097152: 67109120, + 3145728: 65796, + 4194304: 65540, + 5242880: 67108868, + 6291456: 67174660, + 7340032: 67174400, + 8388608: 67108864, + 9437184: 67174656, + 10485760: 65792, + 11534336: 67174404, + 12582912: 67109124, + 13631488: 65536, + 14680064: 4, + 15728640: 256, + 524288: 67174656, + 1572864: 67174404, + 2621440: 0, + 3670016: 67109120, + 4718592: 67108868, + 5767168: 65536, + 6815744: 65540, + 7864320: 260, + 8912896: 4, + 9961472: 256, + 11010048: 67174400, + 12058624: 65796, + 13107200: 65792, + 14155776: 67109124, + 15204352: 67174660, + 16252928: 67108864, + 16777216: 67174656, + 17825792: 65540, + 18874368: 65536, + 19922944: 67109120, + 20971520: 256, + 22020096: 67174660, + 23068672: 67108868, + 24117248: 0, + 25165824: 67109124, + 26214400: 67108864, + 27262976: 4, + 28311552: 65792, + 29360128: 67174400, + 30408704: 260, + 31457280: 65796, + 32505856: 67174404, + 17301504: 67108864, + 18350080: 260, + 19398656: 67174656, + 20447232: 0, + 21495808: 65540, + 22544384: 67109120, + 23592960: 256, + 24641536: 67174404, + 25690112: 65536, + 26738688: 67174660, + 27787264: 65796, + 28835840: 67108868, + 29884416: 67109124, + 30932992: 67174400, + 31981568: 4, + 33030144: 65792 + }, { + 0: 2151682048, + 65536: 2147487808, + 131072: 4198464, + 196608: 2151677952, + 262144: 0, + 327680: 4198400, + 393216: 2147483712, + 458752: 4194368, + 524288: 2147483648, + 589824: 4194304, + 655360: 64, + 720896: 2147487744, + 786432: 2151678016, + 851968: 4160, + 917504: 4096, + 983040: 2151682112, + 32768: 2147487808, + 98304: 64, + 163840: 2151678016, + 229376: 2147487744, + 294912: 4198400, + 360448: 2151682112, + 425984: 0, + 491520: 2151677952, + 557056: 4096, + 622592: 2151682048, + 688128: 4194304, + 753664: 4160, + 819200: 2147483648, + 884736: 4194368, + 950272: 4198464, + 1015808: 2147483712, + 1048576: 4194368, + 1114112: 4198400, + 1179648: 2147483712, + 1245184: 0, + 1310720: 4160, + 1376256: 2151678016, + 1441792: 2151682048, + 1507328: 2147487808, + 1572864: 2151682112, + 1638400: 2147483648, + 1703936: 2151677952, + 1769472: 4198464, + 1835008: 2147487744, + 1900544: 4194304, + 1966080: 64, + 2031616: 4096, + 1081344: 2151677952, + 1146880: 2151682112, + 1212416: 0, + 1277952: 4198400, + 1343488: 4194368, + 1409024: 2147483648, + 1474560: 2147487808, + 1540096: 64, + 1605632: 2147483712, + 1671168: 4096, + 1736704: 2147487744, + 1802240: 2151678016, + 1867776: 4160, + 1933312: 2151682048, + 1998848: 4194304, + 2064384: 4198464 + }, { + 0: 128, + 4096: 17039360, + 8192: 262144, + 12288: 536870912, + 16384: 537133184, + 20480: 16777344, + 24576: 553648256, + 28672: 262272, + 32768: 16777216, + 36864: 537133056, + 40960: 536871040, + 45056: 553910400, + 49152: 553910272, + 53248: 0, + 57344: 17039488, + 61440: 553648128, + 2048: 17039488, + 6144: 553648256, + 10240: 128, + 14336: 17039360, + 18432: 262144, + 22528: 537133184, + 26624: 553910272, + 30720: 536870912, + 34816: 537133056, + 38912: 0, + 43008: 553910400, + 47104: 16777344, + 51200: 536871040, + 55296: 553648128, + 59392: 16777216, + 63488: 262272, + 65536: 262144, + 69632: 128, + 73728: 536870912, + 77824: 553648256, + 81920: 16777344, + 86016: 553910272, + 90112: 537133184, + 94208: 16777216, + 98304: 553910400, + 102400: 553648128, + 106496: 17039360, + 110592: 537133056, + 114688: 262272, + 118784: 536871040, + 122880: 0, + 126976: 17039488, + 67584: 553648256, + 71680: 16777216, + 75776: 17039360, + 79872: 537133184, + 83968: 536870912, + 88064: 17039488, + 92160: 128, + 96256: 553910272, + 100352: 262272, + 104448: 553910400, + 108544: 0, + 112640: 553648128, + 116736: 16777344, + 120832: 262144, + 124928: 537133056, + 129024: 536871040 + }, { + 0: 268435464, + 256: 8192, + 512: 270532608, + 768: 270540808, + 1024: 268443648, + 1280: 2097152, + 1536: 2097160, + 1792: 268435456, + 2048: 0, + 2304: 268443656, + 2560: 2105344, + 2816: 8, + 3072: 270532616, + 3328: 2105352, + 3584: 8200, + 3840: 270540800, + 128: 270532608, + 384: 270540808, + 640: 8, + 896: 2097152, + 1152: 2105352, + 1408: 268435464, + 1664: 268443648, + 1920: 8200, + 2176: 2097160, + 2432: 8192, + 2688: 268443656, + 2944: 270532616, + 3200: 0, + 3456: 270540800, + 3712: 2105344, + 3968: 268435456, + 4096: 268443648, + 4352: 270532616, + 4608: 270540808, + 4864: 8200, + 5120: 2097152, + 5376: 268435456, + 5632: 268435464, + 5888: 2105344, + 6144: 2105352, + 6400: 0, + 6656: 8, + 6912: 270532608, + 7168: 8192, + 7424: 268443656, + 7680: 270540800, + 7936: 2097160, + 4224: 8, + 4480: 2105344, + 4736: 2097152, + 4992: 268435464, + 5248: 268443648, + 5504: 8200, + 5760: 270540808, + 6016: 270532608, + 6272: 270540800, + 6528: 270532616, + 6784: 8192, + 7040: 2105352, + 7296: 2097160, + 7552: 0, + 7808: 268435456, + 8064: 268443656 + }, { + 0: 1048576, + 16: 33555457, + 32: 1024, + 48: 1049601, + 64: 34604033, + 80: 0, + 96: 1, + 112: 34603009, + 128: 33555456, + 144: 1048577, + 160: 33554433, + 176: 34604032, + 192: 34603008, + 208: 1025, + 224: 1049600, + 240: 33554432, + 8: 34603009, + 24: 0, + 40: 33555457, + 56: 34604032, + 72: 1048576, + 88: 33554433, + 104: 33554432, + 120: 1025, + 136: 1049601, + 152: 33555456, + 168: 34603008, + 184: 1048577, + 200: 1024, + 216: 34604033, + 232: 1, + 248: 1049600, + 256: 33554432, + 272: 1048576, + 288: 33555457, + 304: 34603009, + 320: 1048577, + 336: 33555456, + 352: 34604032, + 368: 1049601, + 384: 1025, + 400: 34604033, + 416: 1049600, + 432: 1, + 448: 0, + 464: 34603008, + 480: 33554433, + 496: 1024, + 264: 1049600, + 280: 33555457, + 296: 34603009, + 312: 1, + 328: 33554432, + 344: 1048576, + 360: 1025, + 376: 34604032, + 392: 33554433, + 408: 34603008, + 424: 0, + 440: 34604033, + 456: 1049601, + 472: 1024, + 488: 33555456, + 504: 1048577 + }, { + 0: 134219808, + 1: 131072, + 2: 134217728, + 3: 32, + 4: 131104, + 5: 134350880, + 6: 134350848, + 7: 2048, + 8: 134348800, + 9: 134219776, + 10: 133120, + 11: 134348832, + 12: 2080, + 13: 0, + 14: 134217760, + 15: 133152, + 2147483648: 2048, + 2147483649: 134350880, + 2147483650: 134219808, + 2147483651: 134217728, + 2147483652: 134348800, + 2147483653: 133120, + 2147483654: 133152, + 2147483655: 32, + 2147483656: 134217760, + 2147483657: 2080, + 2147483658: 131104, + 2147483659: 134350848, + 2147483660: 0, + 2147483661: 134348832, + 2147483662: 134219776, + 2147483663: 131072, + 16: 133152, + 17: 134350848, + 18: 32, + 19: 2048, + 20: 134219776, + 21: 134217760, + 22: 134348832, + 23: 131072, + 24: 0, + 25: 131104, + 26: 134348800, + 27: 134219808, + 28: 134350880, + 29: 133120, + 30: 2080, + 31: 134217728, + 2147483664: 131072, + 2147483665: 2048, + 2147483666: 134348832, + 2147483667: 133152, + 2147483668: 32, + 2147483669: 134348800, + 2147483670: 134217728, + 2147483671: 134219808, + 2147483672: 134350880, + 2147483673: 134217760, + 2147483674: 134219776, + 2147483675: 0, + 2147483676: 133120, + 2147483677: 2080, + 2147483678: 131104, + 2147483679: 134350848 + }], u = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], d = a.DES = s.extend({ + _doReset: function () { + for (var t = this._key, r = t.words, e = [], i = 0; i < 56; i++) { + var n = c[i] - 1; + e[i] = r[n >>> 5] >>> 31 - n % 32 & 1 + } + for (var o = this._subKeys = [], s = 0; s < 16; s++) { + for (var a = o[s] = [], f = l[s], i = 0; i < 24; i++) a[i / 6 | 0] |= e[(h[i] - 1 + f) % 28] << 31 - i % 6, a[4 + (i / 6 | 0)] |= e[28 + (h[i + 24] - 1 + f) % 28] << 31 - i % 6; + a[0] = a[0] << 1 | a[0] >>> 31; + for (var i = 1; i < 7; i++) a[i] = a[i] >>> 4 * (i - 1) + 3; + a[7] = a[7] << 5 | a[7] >>> 27 + } + for (var u = this._invSubKeys = [], i = 0; i < 16; i++) u[i] = o[15 - i] + }, encryptBlock: function (t, r) { + this._doCryptBlock(t, r, this._subKeys) + }, decryptBlock: function (t, r) { + this._doCryptBlock(t, r, this._invSubKeys) + }, _doCryptBlock: function (t, i, n) { + this._lBlock = t[i], this._rBlock = t[i + 1], r.call(this, 4, 252645135), r.call(this, 16, 65535), e.call(this, 2, 858993459), e.call(this, 8, 16711935), r.call(this, 1, 1431655765); + for (var o = 0; o < 16; o++) { + for (var s = n[o], a = this._lBlock, c = this._rBlock, h = 0, l = 0; l < 8; l++) h |= f[l][((c ^ s[l]) & u[l]) >>> 0]; + this._lBlock = c, this._rBlock = a ^ h + } + var d = this._lBlock; + this._lBlock = this._rBlock, this._rBlock = d, r.call(this, 1, 1431655765), e.call(this, 8, 16711935), e.call(this, 2, 858993459), r.call(this, 16, 65535), r.call(this, 4, 252645135), t[i] = this._lBlock, t[i + 1] = this._rBlock + }, keySize: 2, ivSize: 2, blockSize: 2 + }); + i.DES = s._createHelper(d); + var v = a.TripleDES = s.extend({ + _doReset: function () { + var t = this._key, r = t.words; + this._des1 = d.createEncryptor(o.create(r.slice(0, 2))), this._des2 = d.createEncryptor(o.create(r.slice(2, 4))), this._des3 = d.createEncryptor(o.create(r.slice(4, 6))) + }, encryptBlock: function (t, r) { + this._des1.encryptBlock(t, r), this._des2.decryptBlock(t, r), this._des3.encryptBlock(t, r) + }, decryptBlock: function (t, r) { + this._des3.decryptBlock(t, r), this._des2.encryptBlock(t, r), this._des1.decryptBlock(t, r) + }, keySize: 6, ivSize: 2, blockSize: 2 + }); + i.TripleDES = s._createHelper(v) + }(), function () { + function r() { + for (var t = this._S, r = this._i, e = this._j, i = 0, n = 0; n < 4; n++) { + r = (r + 1) % 256, e = (e + t[r]) % 256; + var o = t[r]; + t[r] = t[e], t[e] = o, i |= t[(t[r] + t[e]) % 256] << 24 - 8 * n + } + return this._i = r, this._j = e, i + } + + var e = t, i = e.lib, n = i.StreamCipher, o = e.algo, s = o.RC4 = n.extend({ + _doReset: function () { + for (var t = this._key, r = t.words, e = t.sigBytes, i = this._S = [], n = 0; n < 256; n++) i[n] = n; + for (var n = 0, o = 0; n < 256; n++) { + var s = n % e, a = r[s >>> 2] >>> 24 - s % 4 * 8 & 255; + o = (o + i[n] + a) % 256; + var c = i[n]; + i[n] = i[o], i[o] = c + } + this._i = this._j = 0 + }, _doProcessBlock: function (t, e) { + t[e] ^= r.call(this) + }, keySize: 8, ivSize: 0 + }); + e.RC4 = n._createHelper(s); + var a = o.RC4Drop = s.extend({ + cfg: s.cfg.extend({drop: 192}), _doReset: function () { + s._doReset.call(this); + for (var t = this.cfg.drop; t > 0; t--) r.call(this) + } + }); + e.RC4Drop = n._createHelper(a) + }(), t.mode.CTRGladman = function () { + function r(t) { + if (255 === (t >> 24 & 255)) { + var r = t >> 16 & 255, e = t >> 8 & 255, i = 255 & t; + 255 === r ? (r = 0, 255 === e ? (e = 0, 255 === i ? i = 0 : ++i) : ++e) : ++r, t = 0, t += r << 16, t += e << 8, t += i + } else t += 1 << 24; + return t + } + + function e(t) { + return 0 === (t[0] = r(t[0])) && (t[1] = r(t[1])), t + } + + var i = t.lib.BlockCipherMode.extend(), n = i.Encryptor = i.extend({ + processBlock: function (t, r) { + var i = this._cipher, n = i.blockSize, o = this._iv, s = this._counter; + o && (s = this._counter = o.slice(0), this._iv = void 0), e(s); + var a = s.slice(0); + i.encryptBlock(a, 0); + for (var c = 0; c < n; c++) t[r + c] ^= a[c] + } + }); + return i.Decryptor = n, i + }(), function () { + function r() { + for (var t = this._X, r = this._C, e = 0; e < 8; e++) a[e] = r[e]; + r[0] = r[0] + 1295307597 + this._b | 0, r[1] = r[1] + 3545052371 + (r[0] >>> 0 < a[0] >>> 0 ? 1 : 0) | 0, r[2] = r[2] + 886263092 + (r[1] >>> 0 < a[1] >>> 0 ? 1 : 0) | 0, r[3] = r[3] + 1295307597 + (r[2] >>> 0 < a[2] >>> 0 ? 1 : 0) | 0, r[4] = r[4] + 3545052371 + (r[3] >>> 0 < a[3] >>> 0 ? 1 : 0) | 0, r[5] = r[5] + 886263092 + (r[4] >>> 0 < a[4] >>> 0 ? 1 : 0) | 0, r[6] = r[6] + 1295307597 + (r[5] >>> 0 < a[5] >>> 0 ? 1 : 0) | 0, r[7] = r[7] + 3545052371 + (r[6] >>> 0 < a[6] >>> 0 ? 1 : 0) | 0, this._b = r[7] >>> 0 < a[7] >>> 0 ? 1 : 0; + for (var e = 0; e < 8; e++) { + var i = t[e] + r[e], n = 65535 & i, o = i >>> 16, s = ((n * n >>> 17) + n * o >>> 15) + o * o, + h = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0); + c[e] = s ^ h + } + t[0] = c[0] + (c[7] << 16 | c[7] >>> 16) + (c[6] << 16 | c[6] >>> 16) | 0, t[1] = c[1] + (c[0] << 8 | c[0] >>> 24) + c[7] | 0, t[2] = c[2] + (c[1] << 16 | c[1] >>> 16) + (c[0] << 16 | c[0] >>> 16) | 0, t[3] = c[3] + (c[2] << 8 | c[2] >>> 24) + c[1] | 0, t[4] = c[4] + (c[3] << 16 | c[3] >>> 16) + (c[2] << 16 | c[2] >>> 16) | 0, t[5] = c[5] + (c[4] << 8 | c[4] >>> 24) + c[3] | 0, t[6] = c[6] + (c[5] << 16 | c[5] >>> 16) + (c[4] << 16 | c[4] >>> 16) | 0, t[7] = c[7] + (c[6] << 8 | c[6] >>> 24) + c[5] | 0 + } + + var e = t, i = e.lib, n = i.StreamCipher, o = e.algo, s = [], a = [], c = [], h = o.Rabbit = n.extend({ + _doReset: function () { + for (var t = this._key.words, e = this.cfg.iv, i = 0; i < 4; i++) t[i] = 16711935 & (t[i] << 8 | t[i] >>> 24) | 4278255360 & (t[i] << 24 | t[i] >>> 8); + var n = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16], + o = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; + this._b = 0; + for (var i = 0; i < 4; i++) r.call(this); + for (var i = 0; i < 8; i++) o[i] ^= n[i + 4 & 7]; + if (e) { + var s = e.words, a = s[0], c = s[1], + h = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + l = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8), + f = h >>> 16 | 4294901760 & l, u = l << 16 | 65535 & h; + o[0] ^= h, o[1] ^= f, o[2] ^= l, o[3] ^= u, o[4] ^= h, o[5] ^= f, o[6] ^= l, o[7] ^= u; + for (var i = 0; i < 4; i++) r.call(this) + } + }, _doProcessBlock: function (t, e) { + var i = this._X; + r.call(this), s[0] = i[0] ^ i[5] >>> 16 ^ i[3] << 16, s[1] = i[2] ^ i[7] >>> 16 ^ i[5] << 16, s[2] = i[4] ^ i[1] >>> 16 ^ i[7] << 16, s[3] = i[6] ^ i[3] >>> 16 ^ i[1] << 16; + for (var n = 0; n < 4; n++) s[n] = 16711935 & (s[n] << 8 | s[n] >>> 24) | 4278255360 & (s[n] << 24 | s[n] >>> 8), t[e + n] ^= s[n] + }, blockSize: 4, ivSize: 2 + }); + e.Rabbit = n._createHelper(h) + }(), t.mode.CTR = function () { + var r = t.lib.BlockCipherMode.extend(), e = r.Encryptor = r.extend({ + processBlock: function (t, r) { + var e = this._cipher, i = e.blockSize, n = this._iv, o = this._counter; + n && (o = this._counter = n.slice(0), this._iv = void 0); + var s = o.slice(0); + e.encryptBlock(s, 0), o[i - 1] = o[i - 1] + 1 | 0; + for (var a = 0; a < i; a++) t[r + a] ^= s[a] + } + }); + return r.Decryptor = e, r + }(), function () { + function r() { + for (var t = this._X, r = this._C, e = 0; e < 8; e++) a[e] = r[e]; + r[0] = r[0] + 1295307597 + this._b | 0, r[1] = r[1] + 3545052371 + (r[0] >>> 0 < a[0] >>> 0 ? 1 : 0) | 0, r[2] = r[2] + 886263092 + (r[1] >>> 0 < a[1] >>> 0 ? 1 : 0) | 0, r[3] = r[3] + 1295307597 + (r[2] >>> 0 < a[2] >>> 0 ? 1 : 0) | 0, r[4] = r[4] + 3545052371 + (r[3] >>> 0 < a[3] >>> 0 ? 1 : 0) | 0, r[5] = r[5] + 886263092 + (r[4] >>> 0 < a[4] >>> 0 ? 1 : 0) | 0, r[6] = r[6] + 1295307597 + (r[5] >>> 0 < a[5] >>> 0 ? 1 : 0) | 0, r[7] = r[7] + 3545052371 + (r[6] >>> 0 < a[6] >>> 0 ? 1 : 0) | 0, this._b = r[7] >>> 0 < a[7] >>> 0 ? 1 : 0; + for (var e = 0; e < 8; e++) { + var i = t[e] + r[e], n = 65535 & i, o = i >>> 16, s = ((n * n >>> 17) + n * o >>> 15) + o * o, + h = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0); + c[e] = s ^ h + } + t[0] = c[0] + (c[7] << 16 | c[7] >>> 16) + (c[6] << 16 | c[6] >>> 16) | 0, t[1] = c[1] + (c[0] << 8 | c[0] >>> 24) + c[7] | 0, t[2] = c[2] + (c[1] << 16 | c[1] >>> 16) + (c[0] << 16 | c[0] >>> 16) | 0, t[3] = c[3] + (c[2] << 8 | c[2] >>> 24) + c[1] | 0, t[4] = c[4] + (c[3] << 16 | c[3] >>> 16) + (c[2] << 16 | c[2] >>> 16) | 0, t[5] = c[5] + (c[4] << 8 | c[4] >>> 24) + c[3] | 0, t[6] = c[6] + (c[5] << 16 | c[5] >>> 16) + (c[4] << 16 | c[4] >>> 16) | 0, t[7] = c[7] + (c[6] << 8 | c[6] >>> 24) + c[5] | 0 + } + + var e = t, i = e.lib, n = i.StreamCipher, o = e.algo, s = [], a = [], c = [], h = o.RabbitLegacy = n.extend({ + _doReset: function () { + var t = this._key.words, e = this.cfg.iv, + i = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16], + n = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; + this._b = 0; + for (var o = 0; o < 4; o++) r.call(this); + for (var o = 0; o < 8; o++) n[o] ^= i[o + 4 & 7]; + if (e) { + var s = e.words, a = s[0], c = s[1], + h = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + l = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8), + f = h >>> 16 | 4294901760 & l, u = l << 16 | 65535 & h; + n[0] ^= h, n[1] ^= f, n[2] ^= l, n[3] ^= u, n[4] ^= h, n[5] ^= f, n[6] ^= l, n[7] ^= u; + for (var o = 0; o < 4; o++) r.call(this) + } + }, _doProcessBlock: function (t, e) { + var i = this._X; + r.call(this), s[0] = i[0] ^ i[5] >>> 16 ^ i[3] << 16, s[1] = i[2] ^ i[7] >>> 16 ^ i[5] << 16, s[2] = i[4] ^ i[1] >>> 16 ^ i[7] << 16, s[3] = i[6] ^ i[3] >>> 16 ^ i[1] << 16; + for (var n = 0; n < 4; n++) s[n] = 16711935 & (s[n] << 8 | s[n] >>> 24) | 4278255360 & (s[n] << 24 | s[n] >>> 8), t[e + n] ^= s[n] + }, blockSize: 4, ivSize: 2 + }); + e.RabbitLegacy = n._createHelper(h) + }(), t.pad.ZeroPadding = { + pad: function (t, r) { + var e = 4 * r; + t.clamp(), t.sigBytes += e - (t.sigBytes % e || e) + }, unpad: function (t) { + for (var r = t.words, e = t.sigBytes - 1; !(r[e >>> 2] >>> 24 - e % 4 * 8 & 255);) e--; + t.sigBytes = e + 1 + } + }, t +}); +//# sourceMappingURL=crypto-js.min.js.map diff --git a/web/public/js/sm2.js b/web/public/js/sm2.js new file mode 100644 index 0000000..c631950 --- /dev/null +++ b/web/public/js/sm2.js @@ -0,0 +1,3953 @@ +function SM2Cipher (a) { + this.ct = 1 + this.sm3c3 = this.sm3keybase = this.p2 = null + this.key = Array(32) + this.keyOff = 0 + this.cipherMode = 'undefined' != typeof a ? a : SM2CipherMode.C1C3C2 +} + +(function (global, undefined) { + 'use strict' + var SM2CipherMode = { + C1C2C3: '0', + C1C3C2: '1' + }; + (function () { + function a (a, c) { + var b = (this._lBlock >>> a ^ this._rBlock) & c + this._rBlock ^= b + this._lBlock ^= b << a + } + + function b (a, c) { + var b = (this._rBlock >>> a ^ this._lBlock) & c + this._lBlock ^= b + this._rBlock ^= b << a + } + + var c = CryptoJS, + d = c.lib, + e = d.WordArray, + d = d.BlockCipher, + f = c.algo, + g = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4], + h = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32], + k = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], + l = [{ + 0: 8421888, + 268435456: 32768, + 536870912: 8421378, + 805306368: 2, + 1073741824: 512, + 1342177280: 8421890, + 1610612736: 8389122, + 1879048192: 8388608, + 2147483648: 514, + 2415919104: 8389120, + 2684354560: 33280, + 2952790016: 8421376, + 3221225472: 32770, + 3489660928: 8388610, + 3758096384: 0, + 4026531840: 33282, + 134217728: 0, + 402653184: 8421890, + 671088640: 33282, + 939524096: 32768, + 1207959552: 8421888, + 1476395008: 512, + 1744830464: 8421378, + 2013265920: 2, + 2281701376: 8389120, + 2550136832: 33280, + 2818572288: 8421376, + 3087007744: 8389122, + 3355443200: 8388610, + 3623878656: 32770, + 3892314112: 514, + 4160749568: 8388608, + 1: 32768, + 268435457: 2, + 536870913: 8421888, + 805306369: 8388608, + 1073741825: 8421378, + 1342177281: 33280, + 1610612737: 512, + 1879048193: 8389122, + 2147483649: 8421890, + 2415919105: 8421376, + 2684354561: 8388610, + 2952790017: 33282, + 3221225473: 514, + 3489660929: 8389120, + 3758096385: 32770, + 4026531841: 0, + 134217729: 8421890, + 402653185: 8421376, + 671088641: 8388608, + 939524097: 512, + 1207959553: 32768, + 1476395009: 8388610, + 1744830465: 2, + 2013265921: 33282, + 2281701377: 32770, + 2550136833: 8389122, + 2818572289: 514, + 3087007745: 8421888, + 3355443201: 8389120, + 3623878657: 0, + 3892314113: 33280, + 4160749569: 8421378 + }, { + 0: 1074282512, + 16777216: 16384, + 33554432: 524288, + 50331648: 1074266128, + 67108864: 1073741840, + 83886080: 1074282496, + 100663296: 1073758208, + 117440512: 16, + 134217728: 540672, + 150994944: 1073758224, + 167772160: 1073741824, + 184549376: 540688, + 201326592: 524304, + 218103808: 0, + 234881024: 16400, + 251658240: 1074266112, + 8388608: 1073758208, + 25165824: 540688, + 41943040: 16, + 58720256: 1073758224, + 75497472: 1074282512, + 92274688: 1073741824, + 109051904: 524288, + 125829120: 1074266128, + 142606336: 524304, + 159383552: 0, + 176160768: 16384, + 192937984: 1074266112, + 209715200: 1073741840, + 226492416: 540672, + 243269632: 1074282496, + 260046848: 16400, + 268435456: 0, + 285212672: 1074266128, + 301989888: 1073758224, + 318767104: 1074282496, + 335544320: 1074266112, + 352321536: 16, + 369098752: 540688, + 385875968: 16384, + 402653184: 16400, + 419430400: 524288, + 436207616: 524304, + 452984832: 1073741840, + 469762048: 540672, + 486539264: 1073758208, + 503316480: 1073741824, + 520093696: 1074282512, + 276824064: 540688, + 293601280: 524288, + 310378496: 1074266112, + 327155712: 16384, + 343932928: 1073758208, + 360710144: 1074282512, + 377487360: 16, + 394264576: 1073741824, + 411041792: 1074282496, + 427819008: 1073741840, + 444596224: 1073758224, + 461373440: 524304, + 478150656: 0, + 494927872: 16400, + 511705088: 1074266128, + 528482304: 540672 + }, { + 0: 260, + 1048576: 0, + 2097152: 67109120, + 3145728: 65796, + 4194304: 65540, + 5242880: 67108868, + 6291456: 67174660, + 7340032: 67174400, + 8388608: 67108864, + 9437184: 67174656, + 10485760: 65792, + 11534336: 67174404, + 12582912: 67109124, + 13631488: 65536, + 14680064: 4, + 15728640: 256, + 524288: 67174656, + 1572864: 67174404, + 2621440: 0, + 3670016: 67109120, + 4718592: 67108868, + 5767168: 65536, + 6815744: 65540, + 7864320: 260, + 8912896: 4, + 9961472: 256, + 11010048: 67174400, + 12058624: 65796, + 13107200: 65792, + 14155776: 67109124, + 15204352: 67174660, + 16252928: 67108864, + 16777216: 67174656, + 17825792: 65540, + 18874368: 65536, + 19922944: 67109120, + 20971520: 256, + 22020096: 67174660, + 23068672: 67108868, + 24117248: 0, + 25165824: 67109124, + 26214400: 67108864, + 27262976: 4, + 28311552: 65792, + 29360128: 67174400, + 30408704: 260, + 31457280: 65796, + 32505856: 67174404, + 17301504: 67108864, + 18350080: 260, + 19398656: 67174656, + 20447232: 0, + 21495808: 65540, + 22544384: 67109120, + 23592960: 256, + 24641536: 67174404, + 25690112: 65536, + 26738688: 67174660, + 27787264: 65796, + 28835840: 67108868, + 29884416: 67109124, + 30932992: 67174400, + 31981568: 4, + 33030144: 65792 + }, { + 0: 2151682048, + 65536: 2147487808, + 131072: 4198464, + 196608: 2151677952, + 262144: 0, + 327680: 4198400, + 393216: 2147483712, + 458752: 4194368, + 524288: 2147483648, + 589824: 4194304, + 655360: 64, + 720896: 2147487744, + 786432: 2151678016, + 851968: 4160, + 917504: 4096, + 983040: 2151682112, + 32768: 2147487808, + 98304: 64, + 163840: 2151678016, + 229376: 2147487744, + 294912: 4198400, + 360448: 2151682112, + 425984: 0, + 491520: 2151677952, + 557056: 4096, + 622592: 2151682048, + 688128: 4194304, + 753664: 4160, + 819200: 2147483648, + 884736: 4194368, + 950272: 4198464, + 1015808: 2147483712, + 1048576: 4194368, + 1114112: 4198400, + 1179648: 2147483712, + 1245184: 0, + 1310720: 4160, + 1376256: 2151678016, + 1441792: 2151682048, + 1507328: 2147487808, + 1572864: 2151682112, + 1638400: 2147483648, + 1703936: 2151677952, + 1769472: 4198464, + 1835008: 2147487744, + 1900544: 4194304, + 1966080: 64, + 2031616: 4096, + 1081344: 2151677952, + 1146880: 2151682112, + 1212416: 0, + 1277952: 4198400, + 1343488: 4194368, + 1409024: 2147483648, + 1474560: 2147487808, + 1540096: 64, + 1605632: 2147483712, + 1671168: 4096, + 1736704: 2147487744, + 1802240: 2151678016, + 1867776: 4160, + 1933312: 2151682048, + 1998848: 4194304, + 2064384: 4198464 + }, { + 0: 128, + 4096: 17039360, + 8192: 262144, + 12288: 536870912, + 16384: 537133184, + 20480: 16777344, + 24576: 553648256, + 28672: 262272, + 32768: 16777216, + 36864: 537133056, + 40960: 536871040, + 45056: 553910400, + 49152: 553910272, + 53248: 0, + 57344: 17039488, + 61440: 553648128, + 2048: 17039488, + 6144: 553648256, + 10240: 128, + 14336: 17039360, + 18432: 262144, + 22528: 537133184, + 26624: 553910272, + 30720: 536870912, + 34816: 537133056, + 38912: 0, + 43008: 553910400, + 47104: 16777344, + 51200: 536871040, + 55296: 553648128, + 59392: 16777216, + 63488: 262272, + 65536: 262144, + 69632: 128, + 73728: 536870912, + 77824: 553648256, + 81920: 16777344, + 86016: 553910272, + 90112: 537133184, + 94208: 16777216, + 98304: 553910400, + 102400: 553648128, + 106496: 17039360, + 110592: 537133056, + 114688: 262272, + 118784: 536871040, + 122880: 0, + 126976: 17039488, + 67584: 553648256, + 71680: 16777216, + 75776: 17039360, + 79872: 537133184, + 83968: 536870912, + 88064: 17039488, + 92160: 128, + 96256: 553910272, + 100352: 262272, + 104448: 553910400, + 108544: 0, + 112640: 553648128, + 116736: 16777344, + 120832: 262144, + 124928: 537133056, + 129024: 536871040 + }, { + 0: 268435464, + 256: 8192, + 512: 270532608, + 768: 270540808, + 1024: 268443648, + 1280: 2097152, + 1536: 2097160, + 1792: 268435456, + 2048: 0, + 2304: 268443656, + 2560: 2105344, + 2816: 8, + 3072: 270532616, + 3328: 2105352, + 3584: 8200, + 3840: 270540800, + 128: 270532608, + 384: 270540808, + 640: 8, + 896: 2097152, + 1152: 2105352, + 1408: 268435464, + 1664: 268443648, + 1920: 8200, + 2176: 2097160, + 2432: 8192, + 2688: 268443656, + 2944: 270532616, + 3200: 0, + 3456: 270540800, + 3712: 2105344, + 3968: 268435456, + 4096: 268443648, + 4352: 270532616, + 4608: 270540808, + 4864: 8200, + 5120: 2097152, + 5376: 268435456, + 5632: 268435464, + 5888: 2105344, + 6144: 2105352, + 6400: 0, + 6656: 8, + 6912: 270532608, + 7168: 8192, + 7424: 268443656, + 7680: 270540800, + 7936: 2097160, + 4224: 8, + 4480: 2105344, + 4736: 2097152, + 4992: 268435464, + 5248: 268443648, + 5504: 8200, + 5760: 270540808, + 6016: 270532608, + 6272: 270540800, + 6528: 270532616, + 6784: 8192, + 7040: 2105352, + 7296: 2097160, + 7552: 0, + 7808: 268435456, + 8064: 268443656 + }, { + 0: 1048576, + 16: 33555457, + 32: 1024, + 48: 1049601, + 64: 34604033, + 80: 0, + 96: 1, + 112: 34603009, + 128: 33555456, + 144: 1048577, + 160: 33554433, + 176: 34604032, + 192: 34603008, + 208: 1025, + 224: 1049600, + 240: 33554432, + 8: 34603009, + 24: 0, + 40: 33555457, + 56: 34604032, + 72: 1048576, + 88: 33554433, + 104: 33554432, + 120: 1025, + 136: 1049601, + 152: 33555456, + 168: 34603008, + 184: 1048577, + 200: 1024, + 216: 34604033, + 232: 1, + 248: 1049600, + 256: 33554432, + 272: 1048576, + 288: 33555457, + 304: 34603009, + 320: 1048577, + 336: 33555456, + 352: 34604032, + 368: 1049601, + 384: 1025, + 400: 34604033, + 416: 1049600, + 432: 1, + 448: 0, + 464: 34603008, + 480: 33554433, + 496: 1024, + 264: 1049600, + 280: 33555457, + 296: 34603009, + 312: 1, + 328: 33554432, + 344: 1048576, + 360: 1025, + 376: 34604032, + 392: 33554433, + 408: 34603008, + 424: 0, + 440: 34604033, + 456: 1049601, + 472: 1024, + 488: 33555456, + 504: 1048577 + }, { + 0: 134219808, + 1: 131072, + 2: 134217728, + 3: 32, + 4: 131104, + 5: 134350880, + 6: 134350848, + 7: 2048, + 8: 134348800, + 9: 134219776, + 10: 133120, + 11: 134348832, + 12: 2080, + 13: 0, + 14: 134217760, + 15: 133152, + 2147483648: 2048, + 2147483649: 134350880, + 2147483650: 134219808, + 2147483651: 134217728, + 2147483652: 134348800, + 2147483653: 133120, + 2147483654: 133152, + 2147483655: 32, + 2147483656: 134217760, + 2147483657: 2080, + 2147483658: 131104, + 2147483659: 134350848, + 2147483660: 0, + 2147483661: 134348832, + 2147483662: 134219776, + 2147483663: 131072, + 16: 133152, + 17: 134350848, + 18: 32, + 19: 2048, + 20: 134219776, + 21: 134217760, + 22: 134348832, + 23: 131072, + 24: 0, + 25: 131104, + 26: 134348800, + 27: 134219808, + 28: 134350880, + 29: 133120, + 30: 2080, + 31: 134217728, + 2147483664: 131072, + 2147483665: 2048, + 2147483666: 134348832, + 2147483667: 133152, + 2147483668: 32, + 2147483669: 134348800, + 2147483670: 134217728, + 2147483671: 134219808, + 2147483672: 134350880, + 2147483673: 134217760, + 2147483674: 134219776, + 2147483675: 0, + 2147483676: 133120, + 2147483677: 2080, + 2147483678: 131104, + 2147483679: 134350848 + }], + p = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], + n = f.DES = d.extend({ + _doReset: function () { + for (var a = this._key.words, c = [], b = 0; 56 > b; b++) { + var d = g[b] - 1 + c[b] = a[d >>> 5] >>> 31 - d % 32 & 1 + } + a = this._subKeys = [] + for (d = 0; 16 > d; d++) { + for (var e = a[d] = [], f = k[d], b = 0; 24 > b; b++) { + e[b / 6 | 0] |= c[(h[b] - 1 + f) % 28] << 31 - b % 6, + e[4 + (b / 6 | 0)] |= c[28 + (h[b + 24] - 1 + f) % 28] << 31 - b % 6 + } + e[0] = e[0] << 1 | e[0] >>> 31 + for (b = 1; 7 > b; b++) { + e[b] >>>= 4 * (b - 1) + 3 + } + e[7] = e[7] << 5 | e[7] >>> 27 + } + c = this._invSubKeys = [] + for (b = 0; 16 > b; b++) { + c[b] = a[15 - b] + } + }, + encryptBlock: function (a, c) { + this._doCryptBlock(a, c, this._subKeys) + }, + decryptBlock: function (a, c) { + this._doCryptBlock(a, c, this._invSubKeys) + }, + _doCryptBlock: function (c, d, e) { + this._lBlock = c[d] + this._rBlock = c[d + 1] + a.call(this, 4, 252645135) + a.call(this, 16, 65535) + b.call(this, 2, 858993459) + b.call(this, 8, 16711935) + a.call(this, 1, 1431655765) + for (var f = 0; 16 > f; f++) { + for (var g = e[f], h = this._lBlock, k = this._rBlock, n = 0, u = 0; 8 > u; u++) { + n |= l[u][((k ^ g[u]) & p[u]) >>> 0] + } + this._lBlock = k + this._rBlock = h ^ n + } + e = this._lBlock + this._lBlock = this._rBlock + this._rBlock = e + a.call(this, 1, 1431655765) + b.call(this, 8, 16711935) + b.call(this, 2, 858993459) + a.call(this, 16, 65535) + a.call(this, 4, 252645135) + c[d] = this._lBlock + c[d + 1] = this._rBlock + }, + keySize: 2, + ivSize: 2, + blockSize: 2 + }) + c.DES = d._createHelper(n) + f = f.TripleDES = d.extend({ + _doReset: function () { + var a = this._key.words + this._des1 = n.createEncryptor(e.create(a.slice(0, 2))) + this._des2 = n.createEncryptor(e.create(a.slice(2, 4))) + this._des3 = n.createEncryptor(e.create(a.slice(4, 6))) + }, + encryptBlock: function (a, c) { + this._des1.encryptBlock(a, c) + this._des2.decryptBlock(a, c) + this._des3.encryptBlock(a, c) + }, + decryptBlock: function (a, c) { + this._des3.decryptBlock(a, c) + this._des2.encryptBlock(a, c) + this._des1.decryptBlock(a, c) + }, + keySize: 6, + ivSize: 2, + blockSize: 2 + }) + c.TripleDES = d._createHelper(f) + })(); + (function () { + var a = CryptoJS, + b = a.lib.WordArray + a.enc.Base64 = { + stringify: function (a) { + var b = a.words, + e = a.sigBytes, + f = this._map + a.clamp() + a = [] + for (var g = 0; g < e; g += 3) { + for (var h = (b[g >>> 2] >>> 24 - g % 4 * 8 & 255) << 16 | (b[g + 1 >>> 2] >>> 24 - (g + 1) % 4 * 8 & 255) << 8 | b[g + 2 >>> 2] >>> 24 - (g + 2) % 4 * 8 & 255, k = 0; 4 > k && g + .75 * k < e; k++) { + a.push(f.charAt(h >>> 6 * (3 - k) & 63)) + } + } + if (b = f.charAt(64)) { + for (; a.length % 4;) { + a.push(b) + } + } + return a.join('') + }, + parse: function (a) { + var d = a.length, + e = this._map, + f = e.charAt(64) + f && (f = a.indexOf(f), + -1 != f && (d = f)) + for (var f = [], g = 0, h = 0; h < d; h++) { + if (h % 4) { + var k = e.indexOf(a.charAt(h - 1)) << h % 4 * 2, + l = e.indexOf(a.charAt(h)) >>> 6 - h % 4 * 2 + f[g >>> 2] |= (k | l) << 24 - g % 4 * 8 + g++ + } + } + return b.create(f, g) + }, + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + } + })() + var dbits, canary = 0xdeadbeefcafe, + j_lm = 15715070 == (canary & 16777215) + + function BigInteger (a, b, c) { + null != a && ('number' == typeof a ? this.fromNumber(a, b, c) : null == b && 'string' != typeof a ? this.fromString(a, 256) : this.fromString(a, b)) + } + + function nbi () { + return new BigInteger(null) + } + + function am1 (a, b, c, d, e, f) { + for (; 0 <= --f;) { + var g = b * this[a++] + c[d] + e + e = Math.floor(g / 67108864) + c[d++] = g & 67108863 + } + return e + } + + function am2 (a, b, c, d, e, f) { + var g = b & 32767 + for (b >>= 15; 0 <= --f;) { + var h = this[a] & 32767, + k = this[a++] >> 15, + l = b * h + k * g, + h = g * h + ((l & 32767) << 15) + c[d] + (e & 1073741823) + e = (h >>> 30) + (l >>> 15) + b * k + (e >>> 30) + c[d++] = h & 1073741823 + } + return e + } + + function am3 (a, b, c, d, e, f) { + var g = b & 16383 + for (b >>= 14; 0 <= --f;) { + var h = this[a] & 16383, + k = this[a++] >> 14, + l = b * h + k * g, + h = g * h + ((l & 16383) << 14) + c[d] + e + e = (h >> 28) + (l >> 14) + b * k + c[d++] = h & 268435455 + } + return e + } + + j_lm && 'Microsoft Internet Explorer' == navigator.appName ? (BigInteger.prototype.am = am2, + dbits = 30) : j_lm && 'Netscape' != navigator.appName ? (BigInteger.prototype.am = am1, + dbits = 26) : (BigInteger.prototype.am = am3, + dbits = 28) + BigInteger.prototype.DB = dbits + BigInteger.prototype.DM = (1 << dbits) - 1 + BigInteger.prototype.DV = 1 << dbits + var BI_FP = 52 + BigInteger.prototype.FV = Math.pow(2, BI_FP) + BigInteger.prototype.F1 = BI_FP - dbits + BigInteger.prototype.F2 = 2 * dbits - BI_FP + var BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz', + BI_RC = [], + rr, vv + rr = 48 + for (vv = 0; 9 >= vv; ++vv) { + BI_RC[rr++] = vv + } + rr = 97 + for (vv = 10; 36 > vv; ++vv) { + BI_RC[rr++] = vv + } + rr = 65 + for (vv = 10; 36 > vv; ++vv) { + BI_RC[rr++] = vv + } + + function int2char (a) { + return BI_RM.charAt(a) + } + + function intAt (a, b) { + var c = BI_RC[a.charCodeAt(b)] + return null == c ? -1 : c + } + + function bnpCopyTo (a) { + for (var b = this.t - 1; 0 <= b; --b) { + a[b] = this[b] + } + a.t = this.t + a.s = this.s + } + + function bnpFromInt (a) { + this.t = 1 + this.s = 0 > a ? -1 : 0 + 0 < a ? this[0] = a : -1 > a ? this[0] = a + this.DV : this.t = 0 + } + + function nbv (a) { + var b = nbi() + b.fromInt(a) + return b + } + + function bnpFromString (a, b) { + var c + if (16 == b) { + c = 4 + } else if (8 == b) { + c = 3 + } else if (256 == b) { + c = 8 + } else if (2 == b) { + c = 1 + } else if (32 == b) { + c = 5 + } else if (4 == b) { + c = 2 + } else { + this.fromRadix(a, b) + return + } + this.s = this.t = 0 + for (var d = a.length, e = !1, f = 0; 0 <= --d;) { + var g = 8 == c ? a[d] & 255 : intAt(a, d) + 0 > g ? '-' == a.charAt(d) && (e = !0) : (e = !1, + 0 == f ? this[this.t++] = g : f + c > this.DB ? (this[this.t - 1] |= (g & (1 << this.DB - f) - 1) << f, + this[this.t++] = g >> this.DB - f) : this[this.t - 1] |= g << f, + f += c, + f >= this.DB && (f -= this.DB)) + } + 8 == c && 0 != (a[0] & 128) && (this.s = -1, + 0 < f && (this[this.t - 1] |= (1 << this.DB - f) - 1 << f)) + this.clamp() + e && BigInteger.ZERO.subTo(this, this) + } + + function bnpClamp () { + for (var a = this.s & this.DM; 0 < this.t && this[this.t - 1] == a;) { + --this.t + } + } + + function bnToString (a) { + if (0 > this.s) { + return '-' + this.negate().toString(a) + } + if (16 == a) { + a = 4 + } else if (8 == a) { + a = 3 + } else if (2 == a) { + a = 1 + } else if (32 == a) { + a = 5 + } else if (4 == a) { + a = 2 + } else { + return this.toRadix(a) + } + var b = (1 << a) - 1, + c, d = !1, + e = '', + f = this.t, + g = this.DB - f * this.DB % a + if (0 < f--) { + for (g < this.DB && 0 < (c = this[f] >> g) && (d = !0, + e = int2char(c)); 0 <= f;) { + g < a ? (c = (this[f] & (1 << g) - 1) << a - g, + c |= this[--f] >> (g += this.DB - a)) : (c = this[f] >> (g -= a) & b, + 0 >= g && (g += this.DB, + --f)), + 0 < c && (d = !0), + d && (e += int2char(c)) + } + } + return d ? e : '0' + } + + function bnNegate () { + var a = nbi() + BigInteger.ZERO.subTo(this, a) + return a + } + + function bnAbs () { + return 0 > this.s ? this.negate() : this + } + + function bnCompareTo (a) { + var b = this.s - a.s + if (0 != b) { + return b + } + var c = this.t, + b = c - a.t + if (0 != b) { + return 0 > this.s ? -b : b + } + for (; 0 <= --c;) { + if (0 != (b = this[c] - a[c])) { + return b + } + } + return 0 + } + + function nbits (a) { + var b = 1, + c + 0 != (c = a >>> 16) && (a = c, + b += 16) + 0 != (c = a >> 8) && (a = c, + b += 8) + 0 != (c = a >> 4) && (a = c, + b += 4) + 0 != (c = a >> 2) && (a = c, + b += 2) + 0 != a >> 1 && (b += 1) + return b + } + + function bnBitLength () { + return 0 >= this.t ? 0 : this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM) + } + + function bnpDLShiftTo (a, b) { + var c + for (c = this.t - 1; 0 <= c; --c) { + b[c + a] = this[c] + } + for (c = a - 1; 0 <= c; --c) { + b[c] = 0 + } + b.t = this.t + a + b.s = this.s + } + + function bnpDRShiftTo (a, b) { + for (var c = a; c < this.t; ++c) { + b[c - a] = this[c] + } + b.t = Math.max(this.t - a, 0) + b.s = this.s + } + + function bnpLShiftTo (a, b) { + var c = a % this.DB, + d = this.DB - c, + e = (1 << d) - 1, + f = Math.floor(a / this.DB), + g = this.s << c & this.DM, + h + for (h = this.t - 1; 0 <= h; --h) { + b[h + f + 1] = this[h] >> d | g, + g = (this[h] & e) << c + } + for (h = f - 1; 0 <= h; --h) { + b[h] = 0 + } + b[f] = g + b.t = this.t + f + 1 + b.s = this.s + b.clamp() + } + + function bnpRShiftTo (a, b) { + b.s = this.s + var c = Math.floor(a / this.DB) + if (c >= this.t) { + b.t = 0 + } else { + var d = a % this.DB, + e = this.DB - d, + f = (1 << d) - 1 + b[0] = this[c] >> d + for (var g = c + 1; g < this.t; ++g) { + b[g - c - 1] |= (this[g] & f) << e, + b[g - c] = this[g] >> d + } + 0 < d && (b[this.t - c - 1] |= (this.s & f) << e) + b.t = this.t - c + b.clamp() + } + } + + function bnpSubTo (a, b) { + for (var c = 0, d = 0, e = Math.min(a.t, this.t); c < e;) { + d += this[c] - a[c], + b[c++] = d & this.DM, + d >>= this.DB + } + if (a.t < this.t) { + for (d -= a.s; c < this.t;) { + d += this[c], + b[c++] = d & this.DM, + d >>= this.DB + } + d += this.s + } else { + for (d += this.s; c < a.t;) { + d -= a[c], + b[c++] = d & this.DM, + d >>= this.DB + } + d -= a.s + } + b.s = 0 > d ? -1 : 0; + - + 1 > d ? b[c++] = this.DV + d : 0 < d && (b[c++] = d) + b.t = c + b.clamp() + } + + function bnpMultiplyTo (a, b) { + var c = this.abs(), + d = a.abs(), + e = c.t + for (b.t = e + d.t; 0 <= --e;) { + b[e] = 0 + } + for (e = 0; e < d.t; ++e) { + b[e + c.t] = c.am(0, d[e], b, e, 0, c.t) + } + b.s = 0 + b.clamp() + this.s != a.s && BigInteger.ZERO.subTo(b, b) + } + + function bnpSquareTo (a) { + for (var b = this.abs(), c = a.t = 2 * b.t; 0 <= --c;) { + a[c] = 0 + } + for (c = 0; c < b.t - 1; ++c) { + var d = b.am(c, b[c], a, 2 * c, 0, 1); + (a[c + b.t] += b.am(c + 1, 2 * b[c], a, 2 * c + 1, d, b.t - c - 1)) >= b.DV && (a[c + b.t] -= b.DV, + a[c + b.t + 1] = 1) + } + 0 < a.t && (a[a.t - 1] += b.am(c, b[c], a, 2 * c, 0, 1)) + a.s = 0 + a.clamp() + } + + function bnpDivRemTo (a, b, c) { + var d = a.abs() + if (!(0 >= d.t)) { + var e = this.abs() + if (e.t < d.t) { + null != b && b.fromInt(0), + null != c && this.copyTo(c) + } else { + null == c && (c = nbi()) + var f = nbi(), + g = this.s + a = a.s + var h = this.DB - nbits(d[d.t - 1]) + 0 < h ? (d.lShiftTo(h, f), + e.lShiftTo(h, c)) : (d.copyTo(f), + e.copyTo(c)) + d = f.t + e = f[d - 1] + if (0 != e) { + var k = e * (1 << this.F1) + (1 < d ? f[d - 2] >> this.F2 : 0), + l = this.FV / k, + k = (1 << this.F1) / k, + p = 1 << this.F2, + n = c.t, + q = n - d, + m = null == b ? nbi() : b + f.dlShiftTo(q, m) + 0 <= c.compareTo(m) && (c[c.t++] = 1, + c.subTo(m, c)) + BigInteger.ONE.dlShiftTo(d, m) + for (m.subTo(f, f); f.t < d;) { + f[f.t++] = 0 + } + for (; 0 <= --q;) { + var r = c[--n] == e ? this.DM : Math.floor(c[n] * l + (c[n - 1] + p) * k) + if ((c[n] += f.am(0, r, c, q, 0, d)) < r) { + for (f.dlShiftTo(q, m), + c.subTo(m, c); c[n] < --r;) { + c.subTo(m, c) + } + } + } + null != b && (c.drShiftTo(d, b), + g != a && BigInteger.ZERO.subTo(b, b)) + c.t = d + c.clamp() + 0 < h && c.rShiftTo(h, c) + 0 > g && BigInteger.ZERO.subTo(c, c) + } + } + } + } + + function bnMod (a) { + var b = nbi() + this.abs().divRemTo(a, null, b) + 0 > this.s && 0 < b.compareTo(BigInteger.ZERO) && a.subTo(b, b) + return b + } + + function Classic (a) { + this.m = a + } + + function cConvert (a) { + return 0 > a.s || 0 <= a.compareTo(this.m) ? a.mod(this.m) : a + } + + function cRevert (a) { + return a + } + + function cReduce (a) { + a.divRemTo(this.m, null, a) + } + + function cMulTo (a, b, c) { + a.multiplyTo(b, c) + this.reduce(c) + } + + function cSqrTo (a, b) { + a.squareTo(b) + this.reduce(b) + } + + Classic.prototype.convert = cConvert + Classic.prototype.revert = cRevert + Classic.prototype.reduce = cReduce + Classic.prototype.mulTo = cMulTo + Classic.prototype.sqrTo = cSqrTo + + function bnpInvDigit () { + if (1 > this.t) { + return 0 + } + var a = this[0] + if (0 == (a & 1)) { + return 0 + } + var b = a & 3, + b = b * (2 - (a & 15) * b) & 15, + b = b * (2 - (a & 255) * b) & 255, + b = b * (2 - ((a & 65535) * b & 65535)) & 65535, + b = b * (2 - a * b % this.DV) % this.DV + return 0 < b ? this.DV - b : -b + } + + function Montgomery (a) { + this.m = a + this.mp = a.invDigit() + this.mpl = this.mp & 32767 + this.mph = this.mp >> 15 + this.um = (1 << a.DB - 15) - 1 + this.mt2 = 2 * a.t + } + + function montConvert (a) { + var b = nbi() + a.abs().dlShiftTo(this.m.t, b) + b.divRemTo(this.m, null, b) + 0 > a.s && 0 < b.compareTo(BigInteger.ZERO) && this.m.subTo(b, b) + return b + } + + function montRevert (a) { + var b = nbi() + a.copyTo(b) + this.reduce(b) + return b + } + + function montReduce (a) { + for (; a.t <= this.mt2;) { + a[a.t++] = 0 + } + for (var b = 0; b < this.m.t; ++b) { + var c = a[b] & 32767, + d = c * this.mpl + ((c * this.mph + (a[b] >> 15) * this.mpl & this.um) << 15) & a.DM, + c = b + this.m.t + for (a[c] += this.m.am(0, d, a, b, 0, this.m.t); a[c] >= a.DV;) { + a[c] -= a.DV, + a[++c]++ + } + } + a.clamp() + a.drShiftTo(this.m.t, a) + 0 <= a.compareTo(this.m) && a.subTo(this.m, a) + } + + function montSqrTo (a, b) { + a.squareTo(b) + this.reduce(b) + } + + function montMulTo (a, b, c) { + a.multiplyTo(b, c) + this.reduce(c) + } + + Montgomery.prototype.convert = montConvert + Montgomery.prototype.revert = montRevert + Montgomery.prototype.reduce = montReduce + Montgomery.prototype.mulTo = montMulTo + Montgomery.prototype.sqrTo = montSqrTo + + function bnpIsEven () { + return 0 == (0 < this.t ? this[0] & 1 : this.s) + } + + function bnpExp (a, b) { + if (4294967295 < a || 1 > a) { + return BigInteger.ONE + } + var c = nbi(), + d = nbi(), + e = b.convert(this), + f = nbits(a) - 1 + for (e.copyTo(c); 0 <= --f;) { + if (b.sqrTo(c, d), + 0 < (a & 1 << f)) { + b.mulTo(d, e, c) + } else { + var g = c, + c = d, + d = g + } + } + return b.revert(c) + } + + function bnModPowInt (a, b) { + var c + c = 256 > a || b.isEven() ? new Classic(b) : new Montgomery(b) + return this.exp(a, c) + } + + BigInteger.prototype.copyTo = bnpCopyTo + BigInteger.prototype.fromInt = bnpFromInt + BigInteger.prototype.fromString = bnpFromString + BigInteger.prototype.clamp = bnpClamp + BigInteger.prototype.dlShiftTo = bnpDLShiftTo + BigInteger.prototype.drShiftTo = bnpDRShiftTo + BigInteger.prototype.lShiftTo = bnpLShiftTo + BigInteger.prototype.rShiftTo = bnpRShiftTo + BigInteger.prototype.subTo = bnpSubTo + BigInteger.prototype.multiplyTo = bnpMultiplyTo + BigInteger.prototype.squareTo = bnpSquareTo + BigInteger.prototype.divRemTo = bnpDivRemTo + BigInteger.prototype.invDigit = bnpInvDigit + BigInteger.prototype.isEven = bnpIsEven + BigInteger.prototype.exp = bnpExp + BigInteger.prototype.toString = bnToString + BigInteger.prototype.negate = bnNegate + BigInteger.prototype.abs = bnAbs + BigInteger.prototype.compareTo = bnCompareTo + BigInteger.prototype.bitLength = bnBitLength + BigInteger.prototype.mod = bnMod + BigInteger.prototype.modPowInt = bnModPowInt + BigInteger.ZERO = nbv(0) + BigInteger.ONE = nbv(1) + + function bnClone () { + var a = nbi() + this.copyTo(a) + return a + } + + function bnIntValue () { + if (0 > this.s) { + if (1 == this.t) { + return this[0] - this.DV + } + if (0 == this.t) { + return -1 + } + } else { + if (1 == this.t) { + return this[0] + } + if (0 == this.t) { + return 0 + } + } + return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0] + } + + function bnByteValue () { + return 0 == this.t ? this.s : this[0] << 24 >> 24 + } + + function bnShortValue () { + return 0 == this.t ? this.s : this[0] << 16 >> 16 + } + + function bnpChunkSize (a) { + return Math.floor(Math.LN2 * this.DB / Math.log(a)) + } + + function bnSigNum () { + return 0 > this.s ? -1 : 0 >= this.t || 1 == this.t && 0 >= this[0] ? 0 : 1 + } + + function bnpToRadix (a) { + null == a && (a = 10) + if (0 == this.signum() || 2 > a || 36 < a) { + return '0' + } + var b = this.chunkSize(a), + b = Math.pow(a, b), + c = nbv(b), + d = nbi(), + e = nbi(), + f = '' + for (this.divRemTo(c, d, e); 0 < d.signum();) { + f = (b + e.intValue()).toString(a).substr(1) + f, + d.divRemTo(c, d, e) + } + return e.intValue().toString(a) + f + } + + function bnpFromRadix (a, b) { + this.fromInt(0) + null == b && (b = 10) + for (var c = this.chunkSize(b), d = Math.pow(b, c), e = !1, f = 0, g = 0, h = 0; h < a.length; ++h) { + var k = intAt(a, h) + 0 > k ? '-' == a.charAt(h) && 0 == this.signum() && (e = !0) : (g = b * g + k, + ++f >= c && (this.dMultiply(d), + this.dAddOffset(g, 0), + g = f = 0)) + } + 0 < f && (this.dMultiply(Math.pow(b, f)), + this.dAddOffset(g, 0)) + e && BigInteger.ZERO.subTo(this, this) + } + + function bnpFromNumber (a, b, c) { + if ('number' == typeof b) { + if (2 > a) { + this.fromInt(1) + } else { + for (this.fromNumber(a, c), + this.testBit(a - 1) || this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this), + this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(b);) { + this.dAddOffset(2, 0), + this.bitLength() > a && this.subTo(BigInteger.ONE.shiftLeft(a - 1), this) + } + } + } else { + c = [] + var d = a & 7 + c.length = (a >> 3) + 1 + b.nextBytes(c) + c[0] = 0 < d ? c[0] & (1 << d) - 1 : 0 + this.fromString(c, 256) + } + } + + function bnToByteArray () { + var a = this.t, + b = [] + b[0] = this.s + var c = this.DB - a * this.DB % 8, + d, e = 0 + if (0 < a--) { + for (c < this.DB && (d = this[a] >> c) != (this.s & this.DM) >> c && (b[e++] = d | this.s << this.DB - c); 0 <= a;) { + if (8 > c ? (d = (this[a] & (1 << c) - 1) << 8 - c, + d |= this[--a] >> (c += this.DB - 8)) : (d = this[a] >> (c -= 8) & 255, + 0 >= c && (c += this.DB, + --a)), + 0 != (d & 128) && (d |= -256), + 0 == e && (this.s & 128) != (d & 128) && ++e, + 0 < e || d != this.s) { + b[e++] = d + } + } + } + return b + } + + function bnEquals (a) { + return 0 == this.compareTo(a) + } + + function bnMin (a) { + return 0 > this.compareTo(a) ? this : a + } + + function bnMax (a) { + return 0 < this.compareTo(a) ? this : a + } + + function bnpBitwiseTo (a, b, c) { + var d, e, f = Math.min(a.t, this.t) + for (d = 0; d < f; ++d) { + c[d] = b(this[d], a[d]) + } + if (a.t < this.t) { + e = a.s & this.DM + for (d = f; d < this.t; ++d) { + c[d] = b(this[d], e) + } + c.t = this.t + } else { + e = this.s & this.DM + for (d = f; d < a.t; ++d) { + c[d] = b(e, a[d]) + } + c.t = a.t + } + c.s = b(this.s, a.s) + c.clamp() + } + + function op_and (a, b) { + return a & b + } + + function bnAnd (a) { + var b = nbi() + this.bitwiseTo(a, op_and, b) + return b + } + + function op_or (a, b) { + return a | b + } + + function bnOr (a) { + var b = nbi() + this.bitwiseTo(a, op_or, b) + return b + } + + function op_xor (a, b) { + return a ^ b + } + + function bnXor (a) { + var b = nbi() + this.bitwiseTo(a, op_xor, b) + return b + } + + function op_andnot (a, b) { + return a & ~b + } + + function bnAndNot (a) { + var b = nbi() + this.bitwiseTo(a, op_andnot, b) + return b + } + + function bnNot () { + for (var a = nbi(), b = 0; b < this.t; ++b) { + a[b] = this.DM & ~this[b] + } + a.t = this.t + a.s = ~this.s + return a + } + + function bnShiftLeft (a) { + var b = nbi() + 0 > a ? this.rShiftTo(-a, b) : this.lShiftTo(a, b) + return b + } + + function bnShiftRight (a) { + var b = nbi() + 0 > a ? this.lShiftTo(-a, b) : this.rShiftTo(a, b) + return b + } + + function lbit (a) { + if (0 == a) { + return -1 + } + var b = 0 + 0 == (a & 65535) && (a >>= 16, + b += 16) + 0 == (a & 255) && (a >>= 8, + b += 8) + 0 == (a & 15) && (a >>= 4, + b += 4) + 0 == (a & 3) && (a >>= 2, + b += 2) + 0 == (a & 1) && ++b + return b + } + + function bnGetLowestSetBit () { + for (var a = 0; a < this.t; ++a) { + if (0 != this[a]) { + return a * this.DB + lbit(this[a]) + } + } + return 0 > this.s ? this.t * this.DB : -1 + } + + function cbit (a) { + for (var b = 0; 0 != a;) { + a &= a - 1, + ++b + } + return b + } + + function bnBitCount () { + for (var a = 0, b = this.s & this.DM, c = 0; c < this.t; ++c) { + a += cbit(this[c] ^ b) + } + return a + } + + function bnTestBit (a) { + var b = Math.floor(a / this.DB) + return b >= this.t ? 0 != this.s : 0 != (this[b] & 1 << a % this.DB) + } + + function bnpChangeBit (a, b) { + var c = BigInteger.ONE.shiftLeft(a) + this.bitwiseTo(c, b, c) + return c + } + + function bnSetBit (a) { + return this.changeBit(a, op_or) + } + + function bnClearBit (a) { + return this.changeBit(a, op_andnot) + } + + function bnFlipBit (a) { + return this.changeBit(a, op_xor) + } + + function bnpAddTo (a, b) { + for (var c = 0, d = 0, e = Math.min(a.t, this.t); c < e;) { + d += this[c] + a[c], + b[c++] = d & this.DM, + d >>= this.DB + } + if (a.t < this.t) { + for (d += a.s; c < this.t;) { + d += this[c], + b[c++] = d & this.DM, + d >>= this.DB + } + d += this.s + } else { + for (d += this.s; c < a.t;) { + d += a[c], + b[c++] = d & this.DM, + d >>= this.DB + } + d += a.s + } + b.s = 0 > d ? -1 : 0 + 0 < d ? b[c++] = d : -1 > d && (b[c++] = this.DV + d) + b.t = c + b.clamp() + } + + function bnAdd (a) { + var b = nbi() + this.addTo(a, b) + return b + } + + function bnSubtract (a) { + var b = nbi() + this.subTo(a, b) + return b + } + + function bnMultiply (a) { + var b = nbi() + this.multiplyTo(a, b) + return b + } + + function bnSquare () { + var a = nbi() + this.squareTo(a) + return a + } + + function bnDivide (a) { + var b = nbi() + this.divRemTo(a, b, null) + return b + } + + function bnRemainder (a) { + var b = nbi() + this.divRemTo(a, null, b) + return b + } + + function bnDivideAndRemainder (a) { + var b = nbi(), + c = nbi() + this.divRemTo(a, b, c) + return [b, c] + } + + function bnpDMultiply (a) { + this[this.t] = this.am(0, a - 1, this, 0, 0, this.t) + ++this.t + this.clamp() + } + + function bnpDAddOffset (a, b) { + if (0 != a) { + for (; this.t <= b;) { + this[this.t++] = 0 + } + for (this[b] += a; this[b] >= this.DV;) { + this[b] -= this.DV, + ++b >= this.t && (this[this.t++] = 0), + ++this[b] + } + } + } + + function NullExp () { + } + + function nNop (a) { + return a + } + + function nMulTo (a, b, c) { + a.multiplyTo(b, c) + } + + function nSqrTo (a, b) { + a.squareTo(b) + } + + NullExp.prototype.convert = nNop + NullExp.prototype.revert = nNop + NullExp.prototype.mulTo = nMulTo + NullExp.prototype.sqrTo = nSqrTo + + function bnPow (a) { + return this.exp(a, new NullExp) + } + + function bnpMultiplyLowerTo (a, b, c) { + var d = Math.min(this.t + a.t, b) + c.s = 0 + for (c.t = d; 0 < d;) { + c[--d] = 0 + } + var e + for (e = c.t - this.t; d < e; ++d) { + c[d + this.t] = this.am(0, a[d], c, d, 0, this.t) + } + for (e = Math.min(a.t, b); d < e; ++d) { + this.am(0, a[d], c, d, 0, b - d) + } + c.clamp() + } + + function bnpMultiplyUpperTo (a, b, c) { + --b + var d = c.t = this.t + a.t - b + for (c.s = 0; 0 <= --d;) { + c[d] = 0 + } + for (d = Math.max(b - this.t, 0); d < a.t; ++d) { + c[this.t + d - b] = this.am(b - d, a[d], c, 0, 0, this.t + d - b) + } + c.clamp() + c.drShiftTo(1, c) + } + + function Barrett (a) { + this.r2 = nbi() + this.q3 = nbi() + BigInteger.ONE.dlShiftTo(2 * a.t, this.r2) + this.mu = this.r2.divide(a) + this.m = a + } + + function barrettConvert (a) { + if (0 > a.s || a.t > 2 * this.m.t) { + return a.mod(this.m) + } + if (0 > a.compareTo(this.m)) { + return a + } + var b = nbi() + a.copyTo(b) + this.reduce(b) + return b + } + + function barrettRevert (a) { + return a + } + + function barrettReduce (a) { + a.drShiftTo(this.m.t - 1, this.r2) + a.t > this.m.t + 1 && (a.t = this.m.t + 1, + a.clamp()) + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3) + for (this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); 0 > a.compareTo(this.r2);) { + a.dAddOffset(1, this.m.t + 1) + } + for (a.subTo(this.r2, a); 0 <= a.compareTo(this.m);) { + a.subTo(this.m, a) + } + } + + function barrettSqrTo (a, b) { + a.squareTo(b) + this.reduce(b) + } + + function barrettMulTo (a, b, c) { + a.multiplyTo(b, c) + this.reduce(c) + } + + Barrett.prototype.convert = barrettConvert + Barrett.prototype.revert = barrettRevert + Barrett.prototype.reduce = barrettReduce + Barrett.prototype.mulTo = barrettMulTo + Barrett.prototype.sqrTo = barrettSqrTo + + function bnModPow (a, b) { + var c = a.bitLength(), + d, e = nbv(1), + f + if (0 >= c) { + return e + } + d = 18 > c ? 1 : 48 > c ? 3 : 144 > c ? 4 : 768 > c ? 5 : 6 + f = 8 > c ? new Classic(b) : b.isEven() ? new Barrett(b) : new Montgomery(b) + var g = [], + h = 3, + k = d - 1, + l = (1 << d) - 1 + g[1] = f.convert(this) + if (1 < d) { + for (c = nbi(), + f.sqrTo(g[1], c); h <= l;) { + g[h] = nbi(), + f.mulTo(c, g[h - 2], g[h]), + h += 2 + } + } + for (var p = a.t - 1, n, q = !0, m = nbi(), c = nbits(a[p]) - 1; 0 <= p;) { + c >= k ? n = a[p] >> c - k & l : (n = (a[p] & (1 << c + 1) - 1) << k - c, + 0 < p && (n |= a[p - 1] >> this.DB + c - k)) + for (h = d; 0 == (n & 1);) { + n >>= 1, + --h + } + 0 > (c -= h) && (c += this.DB, + --p) + if (q) { + g[n].copyTo(e), + q = !1 + } else { + for (; 1 < h;) { + f.sqrTo(e, m), + f.sqrTo(m, e), + h -= 2 + } + 0 < h ? f.sqrTo(e, m) : (h = e, + e = m, + m = h) + f.mulTo(m, g[n], e) + } + for (; 0 <= p && 0 == (a[p] & 1 << c);) { + f.sqrTo(e, m), + h = e, + e = m, + m = h, + 0 > --c && (c = this.DB - 1, + --p) + } + } + return f.revert(e) + } + + function bnGCD (a) { + var b = 0 > this.s ? this.negate() : this.clone() + a = 0 > a.s ? a.negate() : a.clone() + if (0 > b.compareTo(a)) { + var c = b, + b = a + a = c + } + var c = b.getLowestSetBit(), + d = a.getLowestSetBit() + if (0 > d) { + return b + } + c < d && (d = c) + 0 < d && (b.rShiftTo(d, b), + a.rShiftTo(d, a)) + for (; 0 < b.signum();) { + 0 < (c = b.getLowestSetBit()) && b.rShiftTo(c, b), + 0 < (c = a.getLowestSetBit()) && a.rShiftTo(c, a), + 0 <= b.compareTo(a) ? (b.subTo(a, b), + b.rShiftTo(1, b)) : (a.subTo(b, a), + a.rShiftTo(1, a)) + } + 0 < d && a.lShiftTo(d, a) + return a + } + + function bnpModInt (a) { + if (0 >= a) { + return 0 + } + var b = this.DV % a, + c = 0 > this.s ? a - 1 : 0 + if (0 < this.t) { + if (0 == b) { + c = this[0] % a + } else { + for (var d = this.t - 1; 0 <= d; --d) { + c = (b * c + this[d]) % a + } + } + } + return c + } + + function bnModInverse (a) { + var b = a.isEven() + if (this.isEven() && b || 0 == a.signum()) { + return BigInteger.ZERO + } + for (var c = a.clone(), d = this.clone(), e = nbv(1), f = nbv(0), g = nbv(0), h = nbv(1); 0 != c.signum();) { + for (; c.isEven();) { + c.rShiftTo(1, c), + b ? (e.isEven() && f.isEven() || (e.addTo(this, e), + f.subTo(a, f)), + e.rShiftTo(1, e)) : f.isEven() || f.subTo(a, f), + f.rShiftTo(1, f) + } + for (; d.isEven();) { + d.rShiftTo(1, d), + b ? (g.isEven() && h.isEven() || (g.addTo(this, g), + h.subTo(a, h)), + g.rShiftTo(1, g)) : h.isEven() || h.subTo(a, h), + h.rShiftTo(1, h) + } + 0 <= c.compareTo(d) ? (c.subTo(d, c), + b && e.subTo(g, e), + f.subTo(h, f)) : (d.subTo(c, d), + b && g.subTo(e, g), + h.subTo(f, h)) + } + if (0 != d.compareTo(BigInteger.ONE)) { + return BigInteger.ZERO + } + if (0 <= h.compareTo(a)) { + return h.subtract(a) + } + if (0 > h.signum()) { + h.addTo(a, h) + } else { + return h + } + return 0 > h.signum() ? h.add(a) : h + } + + var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], + lplim = 67108864 / lowprimes[lowprimes.length - 1] + + function bnIsProbablePrime (a) { + var b, c = this.abs() + if (1 == c.t && c[0] <= lowprimes[lowprimes.length - 1]) { + for (b = 0; b < lowprimes.length; ++b) { + if (c[0] == lowprimes[b]) { + return !0 + } + } + return !1 + } + if (c.isEven()) { + return !1 + } + for (b = 1; b < lowprimes.length;) { + for (var d = lowprimes[b], e = b + 1; e < lowprimes.length && d < lplim;) { + d *= lowprimes[e++] + } + for (d = c.modInt(d); b < e;) { + if (0 == d % lowprimes[b++]) { + return !1 + } + } + } + return c.millerRabin(a) + } + + function bnpMillerRabin (a) { + var b = this.subtract(BigInteger.ONE), + c = b.getLowestSetBit() + if (0 >= c) { + return !1 + } + var d = b.shiftRight(c) + a = a + 1 >> 1 + a > lowprimes.length && (a = lowprimes.length) + for (var e = nbi(), f = 0; f < a; ++f) { + e.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]) + var g = e.modPow(d, this) + if (0 != g.compareTo(BigInteger.ONE) && 0 != g.compareTo(b)) { + for (var h = 1; h++ < c && 0 != g.compareTo(b);) { + if (g = g.modPowInt(2, this), + 0 == g.compareTo(BigInteger.ONE)) { + return !1 + } + } + if (0 != g.compareTo(b)) { + return !1 + } + } + } + return !0 + } + + BigInteger.prototype.chunkSize = bnpChunkSize + BigInteger.prototype.toRadix = bnpToRadix + BigInteger.prototype.fromRadix = bnpFromRadix + BigInteger.prototype.fromNumber = bnpFromNumber + BigInteger.prototype.bitwiseTo = bnpBitwiseTo + BigInteger.prototype.changeBit = bnpChangeBit + BigInteger.prototype.addTo = bnpAddTo + BigInteger.prototype.dMultiply = bnpDMultiply + BigInteger.prototype.dAddOffset = bnpDAddOffset + BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo + BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo + BigInteger.prototype.modInt = bnpModInt + BigInteger.prototype.millerRabin = bnpMillerRabin + BigInteger.prototype.clone = bnClone + BigInteger.prototype.intValue = bnIntValue + BigInteger.prototype.byteValue = bnByteValue + BigInteger.prototype.shortValue = bnShortValue + BigInteger.prototype.signum = bnSigNum + BigInteger.prototype.toByteArray = bnToByteArray + BigInteger.prototype.equals = bnEquals + BigInteger.prototype.min = bnMin + BigInteger.prototype.max = bnMax + BigInteger.prototype.and = bnAnd + BigInteger.prototype.or = bnOr + BigInteger.prototype.xor = bnXor + BigInteger.prototype.andNot = bnAndNot + BigInteger.prototype.not = bnNot + BigInteger.prototype.shiftLeft = bnShiftLeft + BigInteger.prototype.shiftRight = bnShiftRight + BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit + BigInteger.prototype.bitCount = bnBitCount + BigInteger.prototype.testBit = bnTestBit + BigInteger.prototype.setBit = bnSetBit + BigInteger.prototype.clearBit = bnClearBit + BigInteger.prototype.flipBit = bnFlipBit + BigInteger.prototype.add = bnAdd + BigInteger.prototype.subtract = bnSubtract + BigInteger.prototype.multiply = bnMultiply + BigInteger.prototype.divide = bnDivide + BigInteger.prototype.remainder = bnRemainder + BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder + BigInteger.prototype.modPow = bnModPow + BigInteger.prototype.modInverse = bnModInverse + BigInteger.prototype.pow = bnPow + BigInteger.prototype.gcd = bnGCD + BigInteger.prototype.isProbablePrime = bnIsProbablePrime + BigInteger.prototype.square = bnSquare + + function Arcfour () { + this.j = this.i = 0 + this.S = [] + } + + function ARC4init (a) { + var b, c, d + for (b = 0; 256 > b; ++b) { + this.S[b] = b + } + for (b = c = 0; 256 > b; ++b) { + c = c + this.S[b] + a[b % a.length] & 255, + d = this.S[b], + this.S[b] = this.S[c], + this.S[c] = d + } + this.j = this.i = 0 + } + + function ARC4next () { + var a + this.i = this.i + 1 & 255 + this.j = this.j + this.S[this.i] & 255 + a = this.S[this.i] + this.S[this.i] = this.S[this.j] + this.S[this.j] = a + return this.S[a + this.S[this.i] & 255] + } + + Arcfour.prototype.init = ARC4init + Arcfour.prototype.next = ARC4next + + function prng_newstate () { + return new Arcfour + } + + var rng_psize = 256, + rng_state, rng_pool, rng_pptr + + function rng_seed_int (a) { + rng_pool[rng_pptr++] ^= a & 255 + rng_pool[rng_pptr++] ^= a >> 8 & 255 + rng_pool[rng_pptr++] ^= a >> 16 & 255 + rng_pool[rng_pptr++] ^= a >> 24 & 255 + rng_pptr >= rng_psize && (rng_pptr -= rng_psize) + } + + function rng_seed_time () { + rng_seed_int((new Date).getTime()) + } + + if (null == rng_pool) { + rng_pool = [] + rng_pptr = 0 + var t + if ('Netscape' == navigator.appName && '5' > navigator.appVersion && window.crypto) { + var z = window.crypto.random(32) + for (t = 0; t < z.length; ++t) { + rng_pool[rng_pptr++] = z.charCodeAt(t) & 255 + } + } + for (; rng_pptr < rng_psize;) { + t = Math.floor(65536 * Math.random()), + rng_pool[rng_pptr++] = t >>> 8, + rng_pool[rng_pptr++] = t & 255 + } + rng_pptr = 0 + rng_seed_time() + } + + function rng_get_byte () { + if (null == rng_state) { + rng_seed_time() + rng_state = prng_newstate() + rng_state.init(rng_pool) + for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { + rng_pool[rng_pptr] = 0 + } + rng_pptr = 0 + } + return rng_state.next() + } + + function rng_get_bytes (a) { + var b + for (b = 0; b < a.length; ++b) { + a[b] = rng_get_byte() + } + } + + function SecureRandom () { + } + + SecureRandom.prototype.nextBytes = rng_get_bytes + var KJUR = {} + //"undefined" != typeof KJUR && KJUR || (KJUR = {}); + 'undefined' != typeof KJUR.crypto && KJUR.crypto || (KJUR.crypto = {}) + KJUR.crypto.Util = new function () { + this.DIGESTINFOHEAD = { + sha1: '3021300906052b0e03021a05000414', + sha224: '302d300d06096086480165030402040500041c', + sha256: '3031300d060960864801650304020105000420', + sha384: '3041300d060960864801650304020205000430', + sha512: '3051300d060960864801650304020305000440', + md2: '3020300c06082a864886f70d020205000410', + md5: '3020300c06082a864886f70d020505000410', + ripemd160: '3021300906052b2403020105000414' + } + this.DEFAULTPROVIDER = { + md5: 'cryptojs', + sha1: 'cryptojs', + sha224: 'cryptojs', + sha256: 'cryptojs', + sha384: 'cryptojs', + sha512: 'cryptojs', + ripemd160: 'cryptojs', + hmacmd5: 'cryptojs', + hmacsha1: 'cryptojs', + hmacsha224: 'cryptojs', + hmacsha256: 'cryptojs', + hmacsha384: 'cryptojs', + hmacsha512: 'cryptojs', + hmacripemd160: 'cryptojs', + sm3: 'cryptojs', + MD5withRSA: 'cryptojs/jsrsa', + SHA1withRSA: 'cryptojs/jsrsa', + SHA224withRSA: 'cryptojs/jsrsa', + SHA256withRSA: 'cryptojs/jsrsa', + SHA384withRSA: 'cryptojs/jsrsa', + SHA512withRSA: 'cryptojs/jsrsa', + RIPEMD160withRSA: 'cryptojs/jsrsa', + MD5withECDSA: 'cryptojs/jsrsa', + SHA1withECDSA: 'cryptojs/jsrsa', + SHA224withECDSA: 'cryptojs/jsrsa', + SHA256withECDSA: 'cryptojs/jsrsa', + SHA384withECDSA: 'cryptojs/jsrsa', + SHA512withECDSA: 'cryptojs/jsrsa', + RIPEMD160withECDSA: 'cryptojs/jsrsa', + SHA1withDSA: 'cryptojs/jsrsa', + SHA224withDSA: 'cryptojs/jsrsa', + SHA256withDSA: 'cryptojs/jsrsa', + MD5withRSAandMGF1: 'cryptojs/jsrsa', + SHA1withRSAandMGF1: 'cryptojs/jsrsa', + SHA224withRSAandMGF1: 'cryptojs/jsrsa', + SHA256withRSAandMGF1: 'cryptojs/jsrsa', + SHA384withRSAandMGF1: 'cryptojs/jsrsa', + SHA512withRSAandMGF1: 'cryptojs/jsrsa', + RIPEMD160withRSAandMGF1: 'cryptojs/jsrsa' + } + this.CRYPTOJSMESSAGEDIGESTNAME = { + md5: 'CryptoJS.algo.MD5', + sha1: 'CryptoJS.algo.SHA1', + sha224: 'CryptoJS.algo.SHA224', + sha256: 'CryptoJS.algo.SHA256', + sha384: 'CryptoJS.algo.SHA384', + sha512: 'CryptoJS.algo.SHA512', + ripemd160: 'CryptoJS.algo.RIPEMD160', + sm3: 'CryptoJS.algo.SM3' + } + this.getDigestInfoHex = function (a, b) { + if ('undefined' == typeof this.DIGESTINFOHEAD[b]) { + throw 'alg not supported in Util.DIGESTINFOHEAD: ' + b + } + return this.DIGESTINFOHEAD[b] + a + } + this.getPaddedDigestInfoHex = function (a, b, c) { + var d = this.getDigestInfoHex(a, b) + a = c / 4 + if (d.length + 22 > a) { + throw 'key is too short for SigAlg: keylen=' + c + ',' + b + } + b = '00' + d + c = '' + a = a - 4 - b.length + for (d = 0; d < a; d += 2) { + c += 'ff' + } + return '0001' + c + b + } + this.hashString = function (a, b) { + return (new KJUR.crypto.MessageDigest({ + alg: b + })).digestString(a) + } + this.hashHex = function (a, b) { + return (new KJUR.crypto.MessageDigest({ + alg: b + })).digestHex(a) + } + this.sha1 = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'sha1', + prov: 'cryptojs' + })).digestString(a) + } + this.sha256 = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'sha256', + prov: 'cryptojs' + })).digestString(a) + } + this.sha256Hex = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'sha256', + prov: 'cryptojs' + })).digestHex(a) + } + this.sha512 = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'sha512', + prov: 'cryptojs' + })).digestString(a) + } + this.sha512Hex = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'sha512', + prov: 'cryptojs' + })).digestHex(a) + } + this.md5 = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'md5', + prov: 'cryptojs' + })).digestString(a) + } + this.ripemd160 = function (a) { + return (new KJUR.crypto.MessageDigest({ + alg: 'ripemd160', + prov: 'cryptojs' + })).digestString(a) + } + this.getCryptoJSMDByName = function (a) { + } + } + KJUR.crypto.MessageDigest = function (a) { + this.setAlgAndProvider = function (a, c) { + null != a && void 0 === c && (c = KJUR.crypto.Util.DEFAULTPROVIDER[a]) + if (-1 != ':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:sm3:'.indexOf(a) && 'cryptojs' == c) { + try { + this.md = eval(KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[a]).create() + } catch (d) { + throw 'setAlgAndProvider hash alg set fail alg=' + a + '/' + d + } + this.updateString = function (a) { + this.md.update(a) + } + this.updateHex = function (a) { + a = CryptoJS.enc.Hex.parse(a) + this.md.update(a) + } + this.digest = function () { + return this.md.finalize().toString(CryptoJS.enc.Hex) + } + this.digestString = function (a) { + this.updateString(a) + return this.digest() + } + this.digestHex = function (a) { + this.updateHex(a) + return this.digest() + } + } + if (-1 != ':sha256:'.indexOf(a) && 'sjcl' == c) { + try { + this.md = new sjcl.hash.sha256 + } catch (d) { + throw 'setAlgAndProvider hash alg set fail alg=' + a + '/' + d + } + this.updateString = function (a) { + this.md.update(a) + } + this.updateHex = function (a) { + a = sjcl.codec.hex.toBits(a) + this.md.update(a) + } + this.digest = function () { + var a = this.md.finalize() + return sjcl.codec.hex.fromBits(a) + } + this.digestString = function (a) { + this.updateString(a) + return this.digest() + } + this.digestHex = function (a) { + this.updateHex(a) + return this.digest() + } + } + } + this.updateString = function (a) { + throw 'updateString(str) not supported for this alg/prov: ' + this.algName + '/' + this.provName + } + this.updateHex = function (a) { + throw 'updateHex(hex) not supported for this alg/prov: ' + this.algName + '/' + this.provName + } + this.digest = function () { + throw 'digest() not supported for this alg/prov: ' + this.algName + '/' + this.provName + } + this.digestString = function (a) { + throw 'digestString(str) not supported for this alg/prov: ' + this.algName + '/' + this.provName + } + this.digestHex = function (a) { + throw 'digestHex(hex) not supported for this alg/prov: ' + this.algName + '/' + this.provName + } + void 0 !== a && void 0 !== a.alg && (this.algName = a.alg, + void 0 === a.prov && (this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]), + this.setAlgAndProvider(this.algName, this.provName)) + } + KJUR.crypto.Mac = function (a) { + this.setAlgAndProvider = function (a, c) { + null == a && (a = 'hmacsha1') + a = a.toLowerCase() + if ('hmac' != a.substr(0, 4)) { + throw 'setAlgAndProvider unsupported HMAC alg: ' + a + } + void 0 === c && (c = KJUR.crypto.Util.DEFAULTPROVIDER[a]) + this.algProv = a + '/' + c + var d = a.substr(4) + if (-1 != ':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:'.indexOf(d) && 'cryptojs' == c) { + try { + var e = eval(KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[d]) + this.mac = CryptoJS.algo.HMAC.create(e, this.pass) + } catch (f) { + throw 'setAlgAndProvider hash alg set fail hashAlg=' + d + '/' + f + } + this.updateString = function (a) { + this.mac.update(a) + } + this.updateHex = function (a) { + a = CryptoJS.enc.Hex.parse(a) + this.mac.update(a) + } + this.doFinal = function () { + return this.mac.finalize().toString(CryptoJS.enc.Hex) + } + this.doFinalString = function (a) { + this.updateString(a) + return this.doFinal() + } + this.doFinalHex = function (a) { + this.updateHex(a) + return this.doFinal() + } + } + } + this.updateString = function (a) { + throw 'updateString(str) not supported for this alg/prov: ' + this.algProv + } + this.updateHex = function (a) { + throw 'updateHex(hex) not supported for this alg/prov: ' + this.algProv + } + this.doFinal = function () { + throw 'digest() not supported for this alg/prov: ' + this.algProv + } + this.doFinalString = function (a) { + throw 'digestString(str) not supported for this alg/prov: ' + this.algProv + } + this.doFinalHex = function (a) { + throw 'digestHex(hex) not supported for this alg/prov: ' + this.algProv + } + void 0 !== a && (void 0 !== a.pass && (this.pass = a.pass), + void 0 !== a.alg && (this.algName = a.alg, + void 0 === a.prov && (this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]), + this.setAlgAndProvider(this.algName, this.provName))) + } + KJUR.crypto.Signature = function (a) { + var b = null + this._setAlgNames = function () { + this.algName.match(/^(.+)with(.+)$/) && (this.mdAlgName = RegExp.$1.toLowerCase(), + this.pubkeyAlgName = RegExp.$2.toLowerCase()) + } + this._zeroPaddingOfSignature = function (a, b) { + for (var e = '', f = b / 4 - a.length, g = 0; g < f; g++) { + e += '0' + } + return e + a + } + this.setAlgAndProvider = function (a, b) { + this._setAlgNames() + if ('cryptojs/jsrsa' != b) { + throw 'provider not supported: ' + b + } + if (-1 != ':md5:sha1:sha224:sha256:sha384:sha512:ripemd160:sm3:'.indexOf(this.mdAlgName)) { + try { + this.md = new KJUR.crypto.MessageDigest({ + alg: this.mdAlgName + }) + } catch (e) { + throw 'setAlgAndProvider hash alg set fail alg=' + this.mdAlgName + '/' + e + } + this.init = function (a, c) { + var b = null + try { + b = void 0 === c ? KEYUTIL.getKey(a) : KEYUTIL.getKey(a, c) + } catch (d) { + throw 'init failed:' + d + } + if (!0 === b.isPrivate) { + this.prvKey = b, + this.state = 'SIGN' + } else if (!0 === b.isPublic) { + this.pubKey = b, + this.state = 'VERIFY' + } else { + throw 'init failed.:' + b + } + } + this.initSign = function (a) { + 'string' == typeof a.ecprvhex && 'string' == typeof a.eccurvename ? (this.ecprvhex = a.ecprvhex, + this.eccurvename = a.eccurvename) : this.prvKey = a + this.state = 'SIGN' + } + this.initVerifyByPublicKey = function (a) { + 'string' == typeof a.ecpubhex && 'string' == typeof a.eccurvename ? (this.ecpubhex = a.ecpubhex, + this.eccurvename = a.eccurvename) : a instanceof KJUR.crypto.ECDSA ? this.pubKey = a : a instanceof RSAKey && (this.pubKey = a) + this.state = 'VERIFY' + } + this.initVerifyByCertificatePEM = function (a) { + var c = new X509 + c.readCertPEM(a) + this.pubKey = c.subjectPublicKeyRSA + this.state = 'VERIFY' + } + this.updateString = function (a) { + this.md.updateString(a) + } + this.updateHex = function (a) { + this.md.updateHex(a) + } + this.sign = function () { + 'sm2' != this.eccurvename && (this.sHashHex = this.md.digest()) + if ('undefined' != typeof this.ecprvhex && 'undefined' != typeof this.eccurvename) { + if ('sm2' == this.eccurvename) { + var a = new KJUR.crypto.SM3withSM2({ + curve: this.eccurvename + }), + c = a.ecparams.G, + b = c.multiply(new BigInteger(this.ecprvhex, 16)), + d = b.getX().toBigInteger().toRadix(16) + b.getY().toBigInteger().toRadix(16), + b = new SM3Digest, + c = (new SM3Digest).GetZ(c, d), + c = b.GetWords(b.GetHex(c).toString()), + d = CryptoJS.enc.Utf8.stringify(this.md.md._data), + d = CryptoJS.enc.Utf8.parse(d).toString(), + d = b.GetWords(d), + k = Array(b.GetDigestSize()) + b.BlockUpdate(c, 0, c.length) + b.BlockUpdate(d, 0, d.length) + b.DoFinal(k, 0) + this.sHashHex = b.GetHex(k).toString() + } else { + a = new KJUR.crypto.ECDSA({ + curve: this.eccurvename + }) + } + this.hSign = a.signHex(this.sHashHex, this.ecprvhex) + } else if ('rsaandmgf1' == this.pubkeyAlgName) { + this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen) + } else if ('rsa' == this.pubkeyAlgName) { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName) + } else if (this.prvKey instanceof KJUR.crypto.ECDSA) { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex) + } else if (this.prvKey instanceof KJUR.crypto.DSA) { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex) + } else { + throw 'Signature: unsupported public key alg: ' + this.pubkeyAlgName + } + return this.hSign + } + this.signString = function (a) { + this.updateString(a) + this.sign() + } + this.signHex = function (a) { + this.updateHex(a) + this.sign() + } + this.verify = function (a) { + 'sm2' != this.eccurvename && (this.sHashHex = this.md.digest()) + if ('undefined' != typeof this.ecpubhex && 'undefined' != typeof this.eccurvename) { + if ('sm2' == this.eccurvename) { + var c = new KJUR.crypto.SM3withSM2({ + curve: this.eccurvename + }), + b = c.ecparams.G, + d = this.ecpubhex.substr(2, 128), + k = new SM3Digest, + b = (new SM3Digest).GetZ(b, d), + b = k.GetWords(k.GetHex(b).toString()), + d = CryptoJS.enc.Utf8.stringify(this.md.md._data), + d = CryptoJS.enc.Utf8.parse(d).toString(), + d = k.GetWords(d), + l = Array(k.GetDigestSize()) + k.BlockUpdate(b, 0, b.length) + k.BlockUpdate(d, 0, d.length) + k.DoFinal(l, 0) + this.sHashHex = k.GetHex(l).toString() + } else { + c = new KJUR.crypto.ECDSA({ + curve: this.eccurvename + }) + } + return c.verifyHex(this.sHashHex, a, this.ecpubhex) + } + if ('rsaandmgf1' == this.pubkeyAlgName) { + return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, a, this.mdAlgName, this.pssSaltLen) + } + if ('rsa' == this.pubkeyAlgName || this.pubKey instanceof KJUR.crypto.ECDSA || this.pubKey instanceof KJUR.crypto.DSA) { + return this.pubKey.verifyWithMessageHash(this.sHashHex, a) + } + throw 'Signature: unsupported public key alg: ' + this.pubkeyAlgName + } + } + } + this.init = function (a, b) { + throw 'init(key, pass) not supported for this alg:prov=' + this.algProvName + } + this.initVerifyByPublicKey = function (a) { + throw 'initVerifyByPublicKey(rsaPubKeyy) not supported for this alg:prov=' + this.algProvName + } + this.initVerifyByCertificatePEM = function (a) { + throw 'initVerifyByCertificatePEM(certPEM) not supported for this alg:prov=' + this.algProvName + } + this.initSign = function (a) { + throw 'initSign(prvKey) not supported for this alg:prov=' + this.algProvName + } + this.updateString = function (a) { + throw 'updateString(str) not supported for this alg:prov=' + this.algProvName + } + this.updateHex = function (a) { + throw 'updateHex(hex) not supported for this alg:prov=' + this.algProvName + } + this.sign = function () { + throw 'sign() not supported for this alg:prov=' + this.algProvName + } + this.signString = function (a) { + throw 'digestString(str) not supported for this alg:prov=' + this.algProvName + } + this.signHex = function (a) { + throw 'digestHex(hex) not supported for this alg:prov=' + this.algProvName + } + this.verify = function (a) { + throw 'verify(hSigVal) not supported for this alg:prov=' + this.algProvName + } + this.initParams = a + if (void 0 !== a && (void 0 !== a.alg && (this.algName = a.alg, + this.provName = void 0 === a.prov ? KJUR.crypto.Util.DEFAULTPROVIDER[this.algName] : a.prov, + this.algProvName = this.algName + ':' + this.provName, + this.setAlgAndProvider(this.algName, this.provName), + this._setAlgNames()), + void 0 !== a.psssaltlen && (this.pssSaltLen = a.psssaltlen), + void 0 !== a.prvkeypem)) { + if (void 0 !== a.prvkeypas) { + throw 'both prvkeypem and prvkeypas parameters not supported' + } + try { + b = new RSAKey, + b.readPrivateKeyFromPEMString(a.prvkeypem), + this.initSign(b) + } catch (c) { + throw 'fatal error to load pem private key: ' + c + } + } + } + KJUR.crypto.OID = new function () { + this.oidhex2name = { + '2a864886f70d010101': 'rsaEncryption', + '2a8648ce3d0201': 'ecPublicKey', + '2a8648ce380401': 'dsa', + '2a8648ce3d030107': 'secp256r1', + '2b8104001f': 'secp192k1', + '2b81040021': 'secp224r1', + '2b8104000a': 'secp256k1', + '2b81040023': 'secp521r1', + '2b81040022': 'secp384r1', + '2a8648ce380403': 'SHA1withDSA', + '608648016503040301': 'SHA224withDSA', + '608648016503040302': 'SHA256withDSA' + } + } + + function ECFieldElementFp (a, b) { + this.x = b + this.q = a + } + + function feFpEquals (a) { + return a == this ? !0 : this.q.equals(a.q) && this.x.equals(a.x) + } + + function feFpToBigInteger () { + return this.x + } + + function feFpNegate () { + return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)) + } + + function feFpAdd (a) { + return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q)) + } + + function feFpSubtract (a) { + return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q)) + } + + function feFpMultiply (a) { + return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q)) + } + + function feFpSquare () { + return new ECFieldElementFp(this.q, this.x.square().mod(this.q)) + } + + function feFpDivide (a) { + return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q)) + } + + ECFieldElementFp.prototype.equals = feFpEquals + ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger + ECFieldElementFp.prototype.negate = feFpNegate + ECFieldElementFp.prototype.add = feFpAdd + ECFieldElementFp.prototype.subtract = feFpSubtract + ECFieldElementFp.prototype.multiply = feFpMultiply + ECFieldElementFp.prototype.square = feFpSquare + ECFieldElementFp.prototype.divide = feFpDivide + + function ECPointFp (a, b, c, d) { + this.curve = a + this.x = b + this.y = c + this.z = null == d ? BigInteger.ONE : d + this.zinv = null + } + + function pointFpGetX () { + null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)) + return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q)) + } + + function pointFpGetY () { + null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)) + return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q)) + } + + function pointFpEquals (a) { + return a == this ? !0 : this.isInfinity() ? a.isInfinity() : a.isInfinity() ? this.isInfinity() : a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q).equals(BigInteger.ZERO) ? a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q).equals(BigInteger.ZERO) : !1 + } + + function pointFpIsInfinity () { + return null == this.x && null == this.y ? !0 : this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO) + } + + function pointFpNegate () { + return new ECPointFp(this.curve, this.x, this.y.negate(), this.z) + } + + function pointFpAdd (a) { + if (this.isInfinity()) { + return a + } + if (a.isInfinity()) { + return this + } + var b = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q), + c = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q) + if (BigInteger.ZERO.equals(c)) { + return BigInteger.ZERO.equals(b) ? this.twice() : this.curve.getInfinity() + } + var d = new BigInteger('3'), + e = this.x.toBigInteger(), + f = this.y.toBigInteger() + a.x.toBigInteger() + a.y.toBigInteger() + var g = c.square(), + h = g.multiply(c), + e = e.multiply(g), + g = b.square().multiply(this.z), + c = g.subtract(e.shiftLeft(1)).multiply(a.z).subtract(h).multiply(c).mod(this.curve.q), + b = e.multiply(d).multiply(b).subtract(f.multiply(h)).subtract(g.multiply(b)).multiply(a.z).add(b.multiply(h)).mod(this.curve.q) + a = h.multiply(this.z).multiply(a.z).mod(this.curve.q) + return new ECPointFp(this.curve, this.curve.fromBigInteger(c), this.curve.fromBigInteger(b), a) + } + + function pointFpTwice () { + if (this.isInfinity()) { + return this + } + if (0 == this.y.toBigInteger().signum()) { + return this.curve.getInfinity() + } + var a = new BigInteger('3'), + b = this.x.toBigInteger(), + c = this.y.toBigInteger(), + d = c.multiply(this.z), + e = d.multiply(c).mod(this.curve.q), + c = this.curve.a.toBigInteger(), + f = b.square().multiply(a) + BigInteger.ZERO.equals(c) || (f = f.add(this.z.square().multiply(c))) + f = f.mod(this.curve.q) + c = f.square().subtract(b.shiftLeft(3).multiply(e)).shiftLeft(1).multiply(d).mod(this.curve.q) + a = f.multiply(a).multiply(b).subtract(e.shiftLeft(1)).shiftLeft(2).multiply(e).subtract(f.square().multiply(f)).mod(this.curve.q) + d = d.square().multiply(d).shiftLeft(3).mod(this.curve.q) + return new ECPointFp(this.curve, this.curve.fromBigInteger(c), this.curve.fromBigInteger(a), d) + } + + function pointFpMultiply (a) { + if (this.isInfinity()) { + return this + } + if (0 == a.signum()) { + return this.curve.getInfinity() + } + var b = a.multiply(new BigInteger('3')), + c = this.negate(), + d = this, + e + for (e = b.bitLength() - 2; 0 < e; --e) { + var d = d.twice(), + f = b.testBit(e), + g = a.testBit(e) + f != g && (d = d.add(f ? this : c)) + } + return d + } + + function pointFpMultiplyTwo (a, b, c) { + var d + d = a.bitLength() > c.bitLength() ? a.bitLength() - 1 : c.bitLength() - 1 + for (var e = this.curve.getInfinity(), f = this.add(b); 0 <= d;) { + e = e.twice(), + a.testBit(d) ? e = c.testBit(d) ? e.add(f) : e.add(this) : c.testBit(d) && (e = e.add(b)), + --d + } + return e + } + + ECPointFp.prototype.getX = pointFpGetX + ECPointFp.prototype.getY = pointFpGetY + ECPointFp.prototype.equals = pointFpEquals + ECPointFp.prototype.isInfinity = pointFpIsInfinity + ECPointFp.prototype.negate = pointFpNegate + ECPointFp.prototype.add = pointFpAdd + ECPointFp.prototype.twice = pointFpTwice + ECPointFp.prototype.multiply = pointFpMultiply + ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo + + function ECCurveFp (a, b, c) { + this.q = a + this.a = this.fromBigInteger(b) + this.b = this.fromBigInteger(c) + this.infinity = new ECPointFp(this, null, null) + } + + function curveFpGetQ () { + return this.q + } + + function curveFpGetA () { + return this.a + } + + function curveFpGetB () { + return this.b + } + + function curveFpEquals (a) { + return a == this ? !0 : this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b) + } + + function curveFpGetInfinity () { + return this.infinity + } + + function curveFpFromBigInteger (a) { + return new ECFieldElementFp(this.q, a) + } + + function curveFpDecodePointHex (a) { + switch (parseInt(a.substr(0, 2), 16)) { + case 0: + return this.infinity + case 2: + case 3: + return null + case 4: + case 6: + case 7: + var b = (a.length - 2) / 2, + c = a.substr(2, b) + a = a.substr(b + 2, b) + return new ECPointFp(this, this.fromBigInteger(new BigInteger(c, 16)), this.fromBigInteger(new BigInteger(a, 16))) + default: + return null + } + } + + ECCurveFp.prototype.getQ = curveFpGetQ + ECCurveFp.prototype.getA = curveFpGetA + ECCurveFp.prototype.getB = curveFpGetB + ECCurveFp.prototype.equals = curveFpEquals + ECCurveFp.prototype.getInfinity = curveFpGetInfinity + ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger + ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex + ECFieldElementFp.prototype.getByteLength = function () { + return Math.floor((this.toBigInteger().bitLength() + 7) / 8) + } + ECPointFp.prototype.getEncoded = function (a) { + var b = function (a, c) { + var b = a.toByteArrayUnsigned() + if (c < b.length) { + b = b.slice(b.length - c) + } else { + for (; c > b.length;) { + b.unshift(0) + } + } + return b + }, + c = this.getX().toBigInteger(), + d = this.getY().toBigInteger(), + c = b(c, 32) + a ? d.isEven() ? c.unshift(2) : c.unshift(3) : (c.unshift(4), + c = c.concat(b(d, 32))) + return c + } + ECPointFp.decodeFrom = function (a, b) { + var c = b.length - 1, + d = b.slice(1, 1 + c / 2), + c = b.slice(1 + c / 2, 1 + c) + d.unshift(0) + c.unshift(0) + d = new BigInteger(d) + c = new BigInteger(c) + return new ECPointFp(a, a.fromBigInteger(d), a.fromBigInteger(c)) + } + ECPointFp.decodeFromHex = function (a, b) { + b.substr(0, 2) + var c = b.length - 2, + d = b.substr(2, c / 2), + c = b.substr(2 + c / 2, c / 2), + d = new BigInteger(d, 16), + c = new BigInteger(c, 16) + return new ECPointFp(a, a.fromBigInteger(d), a.fromBigInteger(c)) + } + ECPointFp.prototype.add2D = function (a) { + if (this.isInfinity()) { + return a + } + if (a.isInfinity()) { + return this + } + if (this.x.equals(a.x)) { + return this.y.equals(a.y) ? this.twice() : this.curve.getInfinity() + } + var b = a.x.subtract(this.x), + b = a.y.subtract(this.y).divide(b) + a = b.square().subtract(this.x).subtract(a.x) + b = b.multiply(this.x.subtract(a)).subtract(this.y) + return new ECPointFp(this.curve, a, b) + } + ECPointFp.prototype.twice2D = function () { + if (this.isInfinity()) { + return this + } + if (0 == this.y.toBigInteger().signum()) { + return this.curve.getInfinity() + } + var a = this.curve.fromBigInteger(BigInteger.valueOf(2)), + b = this.curve.fromBigInteger(BigInteger.valueOf(3)), + b = this.x.square().multiply(b).add(this.curve.a).divide(this.y.multiply(a)), + a = b.square().subtract(this.x.multiply(a)), + b = b.multiply(this.x.subtract(a)).subtract(this.y) + return new ECPointFp(this.curve, a, b) + } + ECPointFp.prototype.multiply2D = function (a) { + if (this.isInfinity()) { + return this + } + if (0 == a.signum()) { + return this.curve.getInfinity() + } + var b = a.multiply(new BigInteger('3')), + c = this.negate(), + d = this, + e + for (e = b.bitLength() - 2; 0 < e; --e) { + var d = d.twice(), + f = b.testBit(e), + g = a.testBit(e) + f != g && (d = d.add2D(f ? this : c)) + } + return d + } + ECPointFp.prototype.isOnCurve = function () { + var a = this.getX().toBigInteger(), + b = this.getY().toBigInteger(), + c = this.curve.getA().toBigInteger(), + d = this.curve.getB().toBigInteger(), + e = this.curve.getQ(), + b = b.multiply(b).mod(e), + a = a.multiply(a).multiply(a).add(c.multiply(a)).add(d).mod(e) + return b.equals(a) + } + ECPointFp.prototype.toString = function () { + return '(' + this.getX().toBigInteger().toString() + ',' + this.getY().toBigInteger().toString() + ')' + } + ECPointFp.prototype.validate = function () { + var a = this.curve.getQ() + if (this.isInfinity()) { + throw Error('Point is at infinity.') + } + var b = this.getX().toBigInteger(), + c = this.getY().toBigInteger() + if (0 > b.compareTo(BigInteger.ONE) || 0 < b.compareTo(a.subtract(BigInteger.ONE))) { + throw Error('x coordinate out of bounds') + } + if (0 > c.compareTo(BigInteger.ONE) || 0 < c.compareTo(a.subtract(BigInteger.ONE))) { + throw Error('y coordinate out of bounds') + } + if (!this.isOnCurve()) { + throw Error('Point is not on the curve.') + } + if (this.multiply(a).isInfinity()) { + throw Error('Point is not a scalar multiple of G.') + } + return !0 + } + 'undefined' != typeof KJUR && KJUR || (KJUR = {}) + 'undefined' != typeof KJUR.crypto && KJUR.crypto || (KJUR.crypto = {}) + KJUR.crypto.ECDSA = function (a) { + var b = new SecureRandom + this.type = 'EC' + this.getBigRandom = function (a) { + return (new BigInteger(a.bitLength(), b)).mod(a.subtract(BigInteger.ONE)).add(BigInteger.ONE) + } + this.setNamedCurve = function (a) { + this.ecparams = KJUR.crypto.ECParameterDB.getByName(a) + this.pubKeyHex = this.prvKeyHex = null + this.curveName = a + } + this.setPrivateKeyHex = function (a) { + this.isPrivate = !0 + this.prvKeyHex = a + } + this.setPublicKeyHex = function (a) { + this.isPublic = !0 + this.pubKeyHex = a + } + this.generateKeyPairHex = function () { + var a = this.getBigRandom(this.ecparams.n), + b = this.ecparams.G.multiply(a), + e = b.getX().toBigInteger(), + b = b.getY().toBigInteger(), + f = this.ecparams.keylen / 4, + a = ('0000000000' + a.toString(16)).slice(-f), + e = ('0000000000' + e.toString(16)).slice(-f), + b = ('0000000000' + b.toString(16)).slice(-f), + e = '04' + e + b + this.setPrivateKeyHex(a) + this.setPublicKeyHex(e) + return { + ecprvhex: a, + ecpubhex: e + } + } + this.signWithMessageHash = function (a) { + return this.signHex(a, this.prvKeyHex) + } + this.signHex = function (a, b) { + var e = new BigInteger(b, 16), + f = this.ecparams.n, + g = new BigInteger(a, 16) + do { + var h = this.getBigRandom(f), + k = this.ecparams.G.multiply(h).getX().toBigInteger().mod(f) + } while (0 >= k.compareTo(BigInteger.ZERO)) + e = h.modInverse(f).multiply(g.add(e.multiply(k))).mod(f) + return KJUR.crypto.ECDSA.biRSSigToASN1Sig(k, e) + } + this.sign = function (a, b) { + var e = this.ecparams.n, + f = BigInteger.fromByteArrayUnsigned(a) + do { + var g = this.getBigRandom(e), + h = this.ecparams.G.multiply(g).getX().toBigInteger().mod(e) + } while (0 >= h.compareTo(BigInteger.ZERO)) + e = g.modInverse(e).multiply(f.add(b.multiply(h))).mod(e) + return this.serializeSig(h, e) + } + this.verifyWithMessageHash = function (a, b) { + return this.verifyHex(a, b, this.pubKeyHex) + } + this.verifyHex = function (a, b, e) { + var f + f = KJUR.crypto.ECDSA.parseSigHex(b) + b = f.r + f = f.s + e = ECPointFp.decodeFromHex(this.ecparams.curve, e) + a = new BigInteger(a, 16) + return this.verifyRaw(a, b, f, e) + } + this.verify = function (a, b, e) { + var f + if (Bitcoin.Util.isArray(b)) { + b = this.parseSig(b), + f = b.r, + b = b.s + } else if ('object' === typeof b && b.r && b.s) { + f = b.r, + b = b.s + } else { + throw 'Invalid value for signature' + } + if (!(e instanceof ECPointFp)) { + if (Bitcoin.Util.isArray(e)) { + e = ECPointFp.decodeFrom(this.ecparams.curve, e) + } else { + throw 'Invalid format for pubkey value, must be byte array or ECPointFp' + } + } + a = BigInteger.fromByteArrayUnsigned(a) + return this.verifyRaw(a, f, b, e) + } + this.verifyRaw = function (a, b, e, f) { + var g = this.ecparams.n, + h = this.ecparams.G + if (0 > b.compareTo(BigInteger.ONE) || 0 <= b.compareTo(g) || 0 > e.compareTo(BigInteger.ONE) || 0 <= e.compareTo(g)) { + return !1 + } + e = e.modInverse(g) + a = a.multiply(e).mod(g) + e = b.multiply(e).mod(g) + return h.multiply(a).add(f.multiply(e)).getX().toBigInteger().mod(g).equals(b) + } + this.serializeSig = function (a, b) { + var e = a.toByteArraySigned(), + f = b.toByteArraySigned(), + g = [] + g.push(2) + g.push(e.length) + g = g.concat(e) + g.push(2) + g.push(f.length) + g = g.concat(f) + g.unshift(g.length) + g.unshift(48) + return g + } + this.parseSig = function (a) { + var b + if (48 != a[0]) { + throw Error('Signature not a valid DERSequence') + } + b = 2 + if (2 != a[b]) { + throw Error('First element in signature must be a DERInteger') + } + var e = a.slice(b + 2, b + 2 + a[b + 1]) + b += 2 + a[b + 1] + if (2 != a[b]) { + throw Error('Second element in signature must be a DERInteger') + } + a = a.slice(b + 2, b + 2 + a[b + 1]) + e = BigInteger.fromByteArrayUnsigned(e) + a = BigInteger.fromByteArrayUnsigned(a) + return { + r: e, + s: a + } + } + this.parseSigCompact = function (a) { + if (65 !== a.length) { + throw 'Signature has the wrong length' + } + var b = a[0] - 27 + if (0 > b || 7 < b) { + throw 'Invalid signature type' + } + var e = this.ecparams.n, + f = BigInteger.fromByteArrayUnsigned(a.slice(1, 33)).mod(e) + a = BigInteger.fromByteArrayUnsigned(a.slice(33, 65)).mod(e) + return { + r: f, + s: a, + i: b + } + } + void 0 !== a && void 0 !== a.curve && (this.curveName = a.curve) + void 0 === this.curveName && (this.curveName = 'secp256r1') + this.setNamedCurve(this.curveName) + void 0 !== a && (void 0 !== a.prv && this.setPrivateKeyHex(a.prv), + void 0 !== a.pub && this.setPublicKeyHex(a.pub)) + } + KJUR.crypto.ECDSA.parseSigHex = function (a) { + var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a) + a = new BigInteger(b.r, 16) + b = new BigInteger(b.s, 16) + return { + r: a, + s: b + } + } + KJUR.crypto.ECDSA.parseSigHexInHexRS = function (a) { + if ('30' != a.substr(0, 2)) { + throw 'signature is not a ASN.1 sequence' + } + var b = ASN1HEX.getPosArrayOfChildren_AtObj(a, 0) + if (2 != b.length) { + throw 'number of signature ASN.1 sequence elements seem wrong' + } + var c = b[0], + b = b[1] + if ('02' != a.substr(c, 2)) { + throw '1st item of sequene of signature is not ASN.1 integer' + } + if ('02' != a.substr(b, 2)) { + throw '2nd item of sequene of signature is not ASN.1 integer' + } + c = ASN1HEX.getHexOfV_AtObj(a, c) + a = ASN1HEX.getHexOfV_AtObj(a, b) + return { + r: c, + s: a + } + } + KJUR.crypto.ECDSA.asn1SigToConcatSig = function (a) { + var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a) + a = b.r + b = b.s + '00' == a.substr(0, 2) && 8 == a.length / 2 * 8 % 128 && (a = a.substr(2)) + '00' == b.substr(0, 2) && 8 == b.length / 2 * 8 % 128 && (b = b.substr(2)) + if (0 != a.length / 2 * 8 % 128) { + throw 'unknown ECDSA sig r length error' + } + if (0 != b.length / 2 * 8 % 128) { + throw 'unknown ECDSA sig s length error' + } + return a + b + } + KJUR.crypto.ECDSA.concatSigToASN1Sig = function (a) { + if (0 != a.length / 2 * 8 % 128) { + throw 'unknown ECDSA concatinated r-s sig length error' + } + var b = a.substr(0, a.length / 2) + a = a.substr(a.length / 2) + return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(b, a) + } + KJUR.crypto.ECDSA.hexRSSigToASN1Sig = function (a, b) { + var c = new BigInteger(a, 16), + d = new BigInteger(b, 16) + return KJUR.crypto.ECDSA.biRSSigToASN1Sig(c, d) + } + KJUR.crypto.ECDSA.biRSSigToASN1Sig = function (a, b) { + var c = new KJUR.asn1.DERInteger({ + bigint: a + }), + d = new KJUR.asn1.DERInteger({ + bigint: b + }) + return (new KJUR.asn1.DERSequence({ + array: [c, d] + })).getEncodedHex() + }; + (function () { + var a = CryptoJS, + b = a.lib, + c = b.WordArray, + d = b.Hasher, + e = [], + b = a.algo.SM3 = d.extend({ + _doReset: function () { + this._hash = new c.init([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]) + }, + _doProcessBlock: function (a, b) { + for (var c = this._hash.words, d = c[0], l = c[1], p = c[2], n = c[3], q = c[4], m = 0; 80 > m; m++) { + if (16 > m) { + e[m] = a[b + m] | 0 + } else { + var r = e[m - 3] ^ e[m - 8] ^ e[m - 14] ^ e[m - 16] + e[m] = r << 1 | r >>> 31 + } + r = (d << 5 | d >>> 27) + q + e[m] + r = 20 > m ? r + ((l & p | ~l & n) + 1518500249) : 40 > m ? r + ((l ^ p ^ n) + 1859775393) : 60 > m ? r + ((l & p | l & n | p & n) - 1894007588) : r + ((l ^ p ^ n) - 899497514) + q = n + n = p + p = l << 30 | l >>> 2 + l = d + d = r + } + c[0] = c[0] + d | 0 + c[1] = c[1] + l | 0 + c[2] = c[2] + p | 0 + c[3] = c[3] + n | 0 + c[4] = c[4] + q | 0 + }, + _doFinalize: function () { + var a = this._data, + b = a.words, + c = 8 * this._nDataBytes, + d = 8 * a.sigBytes + b[d >>> 5] |= 128 << 24 - d % 32 + b[(d + 64 >>> 9 << 4) + 14] = Math.floor(c / 4294967296) + b[(d + 64 >>> 9 << 4) + 15] = c + a.sigBytes = 4 * b.length + this._process() + return this._hash + }, + clone: function () { + var a = d.clone.call(this) + a._hash = this._hash.clone() + return a + } + }) + a.SM3 = d._createHelper(b) + a.HmacSM3 = d._createHmacHelper(b) + })() + + function SM3Digest () { + this.BYTE_LENGTH = 64 + this.xBuf = [] + this.byteCount = this.xBufOff = 0 + this.DIGEST_LENGTH = 32 + this.v0 = [1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214] + this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082] + this.v = Array(8) + this.v_ = Array(8) + this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + this.X = Array(68) + this.xOff = 0 + this.T_00_15 = 2043430169 + this.T_16_63 = 2055708042 + 0 < arguments.length ? this.InitDigest(arguments[0]) : this.Init() + } + + SM3Digest.prototype = { + Init: function () { + this.xBuf = Array(4) + this.Reset() + }, + InitDigest: function (a) { + this.xBuf = Array(a.xBuf.length) + Array.Copy(a.xBuf, 0, this.xBuf, 0, a.xBuf.length) + this.xBufOff = a.xBufOff + this.byteCount = a.byteCount + Array.Copy(a.X, 0, this.X, 0, a.X.length) + this.xOff = a.xOff + Array.Copy(a.v, 0, this.v, 0, a.v.length) + }, + GetDigestSize: function () { + return this.DIGEST_LENGTH + }, + Reset: function () { + this.xBufOff = this.byteCount = 0 + Array.Clear(this.xBuf, 0, this.xBuf.length) + Array.Copy(this.v0, 0, this.v, 0, this.v0.length) + this.xOff = 0 + Array.Copy(this.X0, 0, this.X, 0, this.X0.length) + }, + GetByteLength: function () { + return this.BYTE_LENGTH + }, + ProcessBlock: function () { + var a, b = this.X, + c = Array(64) + for (a = 16; 68 > a; a++) { + b[a] = this.P1(b[a - 16] ^ b[a - 9] ^ this.ROTATE(b[a - 3], 15)) ^ this.ROTATE(b[a - 13], 7) ^ b[a - 6] + } + for (a = 0; 64 > a; a++) { + c[a] = b[a] ^ b[a + 4] + } + var d = this.v, + e = this.v_ + Array.Copy(d, 0, e, 0, this.v0.length) + var f, g + for (a = 0; 16 > a; a++) { + g = this.ROTATE(e[0], 12), + f = Int32.parse(Int32.parse(g + e[4]) + this.ROTATE(this.T_00_15, a)), + f = this.ROTATE(f, 7), + g ^= f, + g = Int32.parse(Int32.parse(this.FF_00_15(e[0], e[1], e[2]) + e[3]) + g) + c[a], + f = Int32.parse(Int32.parse(this.GG_00_15(e[4], e[5], e[6]) + e[7]) + f) + b[a], + e[3] = e[2], + e[2] = this.ROTATE(e[1], 9), + e[1] = e[0], + e[0] = g, + e[7] = e[6], + e[6] = this.ROTATE(e[5], 19), + e[5] = e[4], + e[4] = this.P0(f) + } + for (a = 16; 64 > a; a++) { + g = this.ROTATE(e[0], 12), + f = Int32.parse(Int32.parse(g + e[4]) + this.ROTATE(this.T_16_63, a)), + f = this.ROTATE(f, 7), + g ^= f, + g = Int32.parse(Int32.parse(this.FF_16_63(e[0], e[1], e[2]) + e[3]) + g) + c[a], + f = Int32.parse(Int32.parse(this.GG_16_63(e[4], e[5], e[6]) + e[7]) + f) + b[a], + e[3] = e[2], + e[2] = this.ROTATE(e[1], 9), + e[1] = e[0], + e[0] = g, + e[7] = e[6], + e[6] = this.ROTATE(e[5], 19), + e[5] = e[4], + e[4] = this.P0(f) + } + for (a = 0; 8 > a; a++) { + d[a] ^= Int32.parse(e[a]) + } + this.xOff = 0 + Array.Copy(this.X0, 0, this.X, 0, this.X0.length) + }, + ProcessWord: function (a, b) { + var c = a[b] << 24, + c = c | (a[++b] & 255) << 16, + c = c | (a[++b] & 255) << 8, + c = c | a[++b] & 255 + this.X[this.xOff] = c + 16 == ++this.xOff && this.ProcessBlock() + }, + ProcessLength: function (a) { + 14 < this.xOff && this.ProcessBlock() + this.X[14] = this.URShiftLong(a, 32) + this.X[15] = a & 4294967295 + }, + IntToBigEndian: function (a, b, c) { + b[c] = Int32.parseByte(this.URShift(a, 24)) + b[++c] = Int32.parseByte(this.URShift(a, 16)) + b[++c] = Int32.parseByte(this.URShift(a, 8)) + b[++c] = Int32.parseByte(a) + }, + DoFinal: function (a, b) { + this.Finish() + for (var c = 0; 8 > c; c++) { + this.IntToBigEndian(this.v[c], a, b + 4 * c) + } + this.Reset() + for (var d = a.length, c = 0; c < d; c++) { + a[c] &= 255 + } + return this.DIGEST_LENGTH + }, + Update: function (a) { + this.xBuf[this.xBufOff++] = a + this.xBufOff == this.xBuf.length && (this.ProcessWord(this.xBuf, 0), + this.xBufOff = 0) + this.byteCount++ + }, + BlockUpdate: function (a, b, c) { + for (; 0 != this.xBufOff && 0 < c;) { + this.Update(a[b]), + b++, + c-- + } + for (; c > this.xBuf.length;) { + this.ProcessWord(a, b), + b += this.xBuf.length, + c -= this.xBuf.length, + this.byteCount += this.xBuf.length + } + for (; 0 < c;) { + this.Update(a[b]), + b++, + c-- + } + }, + Finish: function () { + var a = this.byteCount << 3 + for (this.Update(128); 0 != this.xBufOff;) { + this.Update(0) + } + this.ProcessLength(a) + this.ProcessBlock() + }, + ROTATE: function (a, b) { + return a << b | this.URShift(a, 32 - b) + }, + P0: function (a) { + return a ^ this.ROTATE(a, 9) ^ this.ROTATE(a, 17) + }, + P1: function (a) { + return a ^ this.ROTATE(a, 15) ^ this.ROTATE(a, 23) + }, + FF_00_15: function (a, b, c) { + return a ^ b ^ c + }, + FF_16_63: function (a, b, c) { + return a & b | a & c | b & c + }, + GG_00_15: function (a, b, c) { + return a ^ b ^ c + }, + GG_16_63: function (a, b, c) { + return a & b | ~a & c + }, + URShift: function (a, b) { + if (a > Int32.maxValue || a < Int32.minValue) { + a = Int32.parse(a) + } + return 0 <= a ? a >> b : (a >> b) + (2 << ~b) + }, + URShiftLong: function (a, b) { + var c + c = new BigInteger + c.fromInt(a) + if (0 <= c.signum()) { + c = c.shiftRight(b).intValue() + } else { + var d = new BigInteger + d.fromInt(2) + var e = ~b + c = '' + if (0 > e) { + d = 64 + e + for (e = 0; e < d; e++) { + c += '0' + } + d = new BigInteger + d.fromInt(a >> b) + c = new BigInteger('10' + c, 2) + c.toRadix(10) + c = c.add(d).toRadix(10) + } else { + c = d.shiftLeft(~b).intValue(), + c = (a >> b) + c + } + } + return c + }, + GetZ: function (a, b) { + var c = CryptoJS.enc.Utf8.parse('1234567812345678'), + d = 32 * c.words.length + this.Update(d >> 8 & 255) + this.Update(d & 255) + c = this.GetWords(c.toString()) + this.BlockUpdate(c, 0, c.length) + var c = this.GetWords(a.curve.a.toBigInteger().toRadix(16)), + d = this.GetWords(a.curve.b.toBigInteger().toRadix(16)), + e = this.GetWords(a.getX().toBigInteger().toRadix(16)), + f = this.GetWords(a.getY().toBigInteger().toRadix(16)), + g = this.GetWords(b.substr(0, 64)), + h = this.GetWords(b.substr(64, 64)) + this.BlockUpdate(c, 0, c.length) + this.BlockUpdate(d, 0, d.length) + this.BlockUpdate(e, 0, e.length) + this.BlockUpdate(f, 0, f.length) + this.BlockUpdate(g, 0, g.length) + this.BlockUpdate(h, 0, h.length) + c = Array(this.GetDigestSize()) + this.DoFinal(c, 0) + return c + }, + GetWords: function (a) { + for (var b = [], c = a.length, d = 0; d < c; d += 2) { + b[b.length] = parseInt(a.substr(d, 2), 16) + } + return b + }, + GetHex: function (a) { + for (var b = [], c = 0, d = 0; d < 2 * a.length; d += 2) { + b[d >>> 3] |= parseInt(a[c]) << 24 - d % 8 * 4, + c++ + } + return new CryptoJS.lib.WordArray.init(b, a.length) + } + } + Array.Clear = function (a, b, c) { + for (var elm in a) { + a[elm] = null + } + } + Array.Copy = function (a, b, c, d, e) { + a = a.slice(b, b + e) + for (b = 0; b < a.length; b++) { + c[d] = a[b], + d++ + } + } + var Int32 = { //zdk + minValue: -parseInt('10000000000000000000000000000000', 2), + maxValue: 2147483647, + parse: function (a) { + if (a < this.minValue) { + a = new Number(-a) + a = a.toString(2) + a = a.substr(a.length - 31, 31) + for (var b = '', c = 0; c < a.length; c++) { + var d = a.substr(c, 1), + b = b + ('0' == d ? '1' : '0') + } + a = parseInt(b, 2) + return a + 1 + } + if (a > this.maxValue) { + a = Number(a) + a = a.toString(2) + a = a.substr(a.length - 31, 31) + b = '' + for (c = 0; c < a.length; c++) { + d = a.substr(c, 1), + b += '0' == d ? '1' : '0' + } + a = parseInt(b, 2) + return -(a + 1) + } + return a + }, + parseByte: function (a) { + if (0 > a) { + a = new Number(-a) + a = a.toString(2) + a = a.substr(a.length - 8, 8) + for (var b = '', c = 0; c < a.length; c++) { + var d = a.substr(c, 1), + b = b + ('0' == d ? '1' : '0') + } + return parseInt(b, 2) + 1 + } + return 255 < a ? (a = Number(a), + a = a.toString(2), + parseInt(a.substr(a.length - 8, 8), 2)) : a + } + } + 'undefined' != typeof KJUR && KJUR || (KJUR = {}) + 'undefined' != typeof KJUR.crypto && KJUR.crypto || (KJUR.crypto = {}) + KJUR.crypto.SM3withSM2 = function (a) { + var b = new SecureRandom + this.type = 'SM2' + this.getBigRandom = function (a) { + return (new BigInteger(a.bitLength(), b)).mod(a.subtract(BigInteger.ONE)).add(BigInteger.ONE) + } + this.setNamedCurve = function (a) { + this.ecparams = KJUR.crypto.ECParameterDB.getByName(a) + this.pubKeyHex = this.prvKeyHex = null + this.curveName = a + } + this.setPrivateKeyHex = function (a) { + this.isPrivate = !0 + this.prvKeyHex = a + } + this.setPublicKeyHex = function (a) { + this.isPublic = !0 + this.pubKeyHex = a + } + this.generateKeyPairHex = function () { + var a = this.getBigRandom(this.ecparams.n), + b = this.ecparams.G.multiply(a), + e = b.getX().toBigInteger(), + b = b.getY().toBigInteger(), + f = this.ecparams.keylen / 4, + a = ('0000000000' + a.toString(16)).slice(-f), + e = ('0000000000' + e.toString(16)).slice(-f), + b = ('0000000000' + b.toString(16)).slice(-f), + e = '04' + e + b + this.setPrivateKeyHex(a) + this.setPublicKeyHex(e) + return { + ecprvhex: a, + ecpubhex: e + } + } + this.signWithMessageHash = function (a) { + return this.signHex(a, this.prvKeyHex) + } + this.signHex = function (a, b) { + var e = new BigInteger(b, 16), + f = this.ecparams.n, + g = new BigInteger(a, 16), + h = null, + k = null, + l = k = null + do { + do { + k = this.generateKeyPairHex(), + h = new BigInteger(k.ecprvhex, 16), + k = ECPointFp.decodeFromHex(this.ecparams.curve, k.ecpubhex), + k = g.add(k.getX().toBigInteger()), + k = k.mod(f) + } while (k.equals(BigInteger.ZERO) || k.add(h).equals(f)) + var p = e.add(BigInteger.ONE), + p = p.modInverse(f), + l = k.multiply(e), + l = h.subtract(l).mod(f), + l = p.multiply(l).mod(f) + } while (l.equals(BigInteger.ZERO)) + return KJUR.crypto.ECDSA.biRSSigToASN1Sig(k, l) + } + this.sign = function (a, b) { + var e = this.ecparams.n, + f = BigInteger.fromByteArrayUnsigned(a) + do { + var g = this.getBigRandom(e), + h = this.ecparams.G.multiply(g).getX().toBigInteger().mod(e) + } while (0 >= h.compareTo(BigInteger.ZERO)) + e = g.modInverse(e).multiply(f.add(b.multiply(h))).mod(e) + return this.serializeSig(h, e) + } + this.verifyWithMessageHash = function (a, b) { + return this.verifyHex(a, b, this.pubKeyHex) + } + this.verifyHex = function (a, b, e) { + var f + f = KJUR.crypto.ECDSA.parseSigHex(b) + b = f.r + f = f.s + e = ECPointFp.decodeFromHex(this.ecparams.curve, e) + a = new BigInteger(a, 16) + return this.verifyRaw(a, b, f, e) + } + this.verify = function (a, b, e) { + var f + if (Bitcoin.Util.isArray(b)) { + b = this.parseSig(b), + f = b.r, + b = b.s + } else if ('object' === typeof b && b.r && b.s) { + f = b.r, + b = b.s + } else { + throw 'Invalid value for signature' + } + if (!(e instanceof ECPointFp)) { + if (Bitcoin.Util.isArray(e)) { + e = ECPointFp.decodeFrom(this.ecparams.curve, e) + } else { + throw 'Invalid format for pubkey value, must be byte array or ECPointFp' + } + } + a = BigInteger.fromByteArrayUnsigned(a) + return this.verifyRaw(a, f, b, e) + } + this.verifyRaw = function (a, b, e, f) { + var g = this.ecparams.n, + h = this.ecparams.G, + k = b.add(e).mod(g) + if (k.equals(BigInteger.ZERO)) { + return !1 + } + e = h.multiply(e) + e = e.add(f.multiply(k)) + a = a.add(e.getX().toBigInteger()).mod(g) + return b.equals(a) + } + this.serializeSig = function (a, b) { + var e = a.toByteArraySigned(), + f = b.toByteArraySigned(), + g = [] + g.push(2) + g.push(e.length) + g = g.concat(e) + g.push(2) + g.push(f.length) + g = g.concat(f) + g.unshift(g.length) + g.unshift(48) + return g + } + this.parseSig = function (a) { + var b + if (48 != a[0]) { + throw Error('Signature not a valid DERSequence') + } + b = 2 + if (2 != a[b]) { + throw Error('First element in signature must be a DERInteger') + } + var e = a.slice(b + 2, b + 2 + a[b + 1]) + b += 2 + a[b + 1] + if (2 != a[b]) { + throw Error('Second element in signature must be a DERInteger') + } + a = a.slice(b + 2, b + 2 + a[b + 1]) + e = BigInteger.fromByteArrayUnsigned(e) + a = BigInteger.fromByteArrayUnsigned(a) + return { + r: e, + s: a + } + } + this.parseSigCompact = function (a) { + if (65 !== a.length) { + throw 'Signature has the wrong length' + } + var b = a[0] - 27 + if (0 > b || 7 < b) { + throw 'Invalid signature type' + } + var e = this.ecparams.n, + f = BigInteger.fromByteArrayUnsigned(a.slice(1, 33)).mod(e) + a = BigInteger.fromByteArrayUnsigned(a.slice(33, 65)).mod(e) + return { + r: f, + s: a, + i: b + } + } + void 0 !== a && void 0 !== a.curve && (this.curveName = a.curve) + void 0 === this.curveName && (this.curveName = 'sm2') + this.setNamedCurve(this.curveName) + void 0 !== a && (void 0 !== a.prv && this.setPrivateKeyHex(a.prv), + void 0 !== a.pub && this.setPublicKeyHex(a.pub)) + } + 'undefined' != typeof KJUR && KJUR || (KJUR = {}) + 'undefined' != typeof KJUR.crypto && KJUR.crypto || (KJUR.crypto = {}) + KJUR.crypto.ECParameterDB = new function () { + var a = {}, + b = {} + this.getByName = function (c) { + var d = c + 'undefined' != typeof b[d] && (d = b[c]) + if ('undefined' != typeof a[d]) { + return a[d] + } + throw 'unregistered EC curve name: ' + d + } + this.regist = function (c, d, e, f, g, h, k, l, p, n, q, m) { + a[c] = {} + e = new BigInteger(e, 16) + f = new BigInteger(f, 16) + g = new BigInteger(g, 16) + h = new BigInteger(h, 16) + k = new BigInteger(k, 16) + e = new ECCurveFp(e, f, g) + l = e.decodePointHex('04' + l + p) + a[c].name = c + a[c].keylen = d + a[c].curve = e + a[c].G = l + a[c].n = h + a[c].h = k + a[c].oid = q + a[c].info = m + for (d = 0; d < n.length; d++) { + b[n[d]] = c + } + } + } + KJUR.crypto.ECParameterDB.regist('secp128r1', 128, 'FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF', 'FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC', 'E87579C11079F43DD824993C2CEE5ED3', 'FFFFFFFE0000000075A30D1B9038A115', '1', '161FF7528B899B2D0C28607CA52C5B86', 'CF5AC8395BAFEB13C02DA292DDED7A83', [], '', 'secp128r1 : SECG curve over a 128 bit prime field') + KJUR.crypto.ECParameterDB.regist('secp160k1', 160, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73', '0', '7', '0100000000000000000001B8FA16DFAB9ACA16B6B3', '1', '3B4C382CE37AA192A4019E763036F4F5DD4D7EBB', '938CF935318FDCED6BC28286531733C3F03C4FEE', [], '', 'secp160k1 : SECG curve over a 160 bit prime field') + KJUR.crypto.ECParameterDB.regist('secp160r1', 160, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC', '1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45', '0100000000000000000001F4C8F927AED3CA752257', '1', '4A96B5688EF573284664698968C38BB913CBFC82', '23A628553168947D59DCC912042351377AC5FB32', [], '', 'secp160r1 : SECG curve over a 160 bit prime field') + KJUR.crypto.ECParameterDB.regist('secp192k1', 192, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37', '0', '3', 'FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D', '1', 'DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D', '9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D', []) + KJUR.crypto.ECParameterDB.regist('secp192r1', 192, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', '64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', 'FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831', '1', '188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012', '07192B95FFC8DA78631011ED6B24CDD573F977A11E794811', []) + KJUR.crypto.ECParameterDB.regist('secp224r1', 224, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE', 'B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D', '1', 'B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21', 'BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34', []) + KJUR.crypto.ECParameterDB.regist('secp256k1', 256, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F', '0', '7', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141', '1', '79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798', '483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8', []) + KJUR.crypto.ECParameterDB.regist('secp256r1', 256, 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC', '5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B', 'FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551', '1', '6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296', '4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5', ['NIST P-256', 'P-256', 'prime256v1']) + KJUR.crypto.ECParameterDB.regist('secp384r1', 384, 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC', 'B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973', '1', 'AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7', '3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f', ['NIST P-384', 'P-384']) + KJUR.crypto.ECParameterDB.regist('secp521r1', 521, '1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', '1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC', '051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00', '1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409', '1', 'C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66', '011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650', ['NIST P-521', 'P-521']) + KJUR.crypto.ECParameterDB.regist('sm2', 256, 'FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF', 'FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC', '28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93', 'FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123', '1', '32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7', 'BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0', ['sm2', 'SM2']) + + SM2Cipher.prototype = { + Reset: function () { + this.sm3keybase = new SM3Digest + this.sm3c3 = new SM3Digest + for (var a = this.p2.getX().toBigInteger().toRadix(16); 64 > a.length;) { + a = '0' + a + } + for (var a = this.GetWords(a), b = this.p2.getY().toBigInteger().toRadix(16); 64 > b.length;) { + b = '0' + b + } + b = this.GetWords(b) + this.sm3keybase.BlockUpdate(a, 0, a.length) + this.sm3c3.BlockUpdate(a, 0, a.length) + this.sm3keybase.BlockUpdate(b, 0, b.length) + this.ct = 1 + this.NextKey() + }, + NextKey: function () { + var a = new SM3Digest(this.sm3keybase) + a.Update(this.ct >> 24 & 255) + a.Update(this.ct >> 16 & 255) + a.Update(this.ct >> 8 & 255) + a.Update(this.ct & 255) + a.DoFinal(this.key, 0) + this.keyOff = 0 + this.ct++ + }, + KDF: function (a) { + var b = Array(a), + c = new SM3Digest, + d = Array(32), + e = 1, + f = a / 32 + a %= 32 + for (var g = this.p2.getX().toBigInteger().toRadix(16); 64 > g.length;) { + g = '0' + g + } + for (var g = this.GetWords(g), h = this.p2.getY().toBigInteger().toRadix(16); 64 > h.length;) { + h = '0' + h + } + for (var h = this.GetWords(h), k = 0, l = 0; l < f; l++) { + c.BlockUpdate(g, 0, g.length), + c.BlockUpdate(h, 0, h.length), + c.Update(e >> 24 & 255), + c.Update(e >> 16 & 255), + c.Update(e >> 8 & 255), + c.Update(e & 255), + c.DoFinal(b, k), + k += 32, + e++ + } + 0 != a && (c.BlockUpdate(g, 0, g.length), + c.BlockUpdate(h, 0, h.length), + c.Update(e >> 24 & 255), + c.Update(e >> 16 & 255), + c.Update(e >> 8 & 255), + c.Update(e & 255), + c.DoFinal(d, 0)) + Array.Copy(d, 0, b, k, a) + for (l = 0; l < b.length; l++) { + b[l] &= 255 + } + return b + }, + InitEncipher: function (a) { + var b = null, + c = null, + c = new KJUR.crypto.ECDSA({ + curve: 'sm2' + }), + d = c.generateKeyPairHex(), + b = new BigInteger(d.ecprvhex, 16), + c = ECPointFp.decodeFromHex(c.ecparams.curve, d.ecpubhex) + this.p2 = a.multiply(b) + this.Reset() + return c + }, + EncryptBlock: function (a) { + this.sm3c3.BlockUpdate(a, 0, a.length) + for (var b = this.KDF(a.length), c = 0; c < a.length; c++) { + a[c] ^= b[c] + } + }, + InitDecipher: function (a, b) { + this.p2 = b.multiply(a) + this.p2.getX().toBigInteger().toRadix(16) + this.p2.getY().toBigInteger().toRadix(16) + this.Reset() + }, + DecryptBlock: function (a) { + for (var b = this.KDF(a.length), c = 0, d = '', c = 0; c < b.length; c++) { + d += b[c].toString(16) + } + for (c = 0; c < a.length; c++) { + a[c] ^= b[c] + } + this.sm3c3.BlockUpdate(a, 0, a.length) + }, + Dofinal: function (a) { + for (var b = this.p2.getY().toBigInteger().toRadix(16); 64 > b.length;) { + b = '0' + b + } + b = this.GetWords(b) + this.sm3c3.BlockUpdate(b, 0, b.length) + this.sm3c3.DoFinal(a, 0); + this.Reset() + }, + Encrypt: function (a, b) { + var c = Array(b.length); + Array.Copy(b, 0, c, 0, b.length); + var d = this.InitEncipher(a); + this.EncryptBlock(c); + var e = Array(32); + this.Dofinal(e); + for (var f = d.getX().toBigInteger().toRadix(16), d = d.getY().toBigInteger().toRadix(16); 64 > f.length;) { + f = "0" + f; + } + for (; 64 > d.length;) { + d = "0" + d; + } + f += d; + c = this.GetHex(c).toString(); + 0 != c.length % 2 && (c = "0" + c); + e = this.GetHex(e).toString(); + d = f + c + e; + this.cipherMode == SM2CipherMode.C1C3C2 && (d = f + e + c); + return d + }, + GetWords: function (a) { + for (var b = [], c = a.length, d = 0; d < c; d += 2) { + b[b.length] = parseInt(a.substr(d, 2), 16); + } + return b + }, + GetHex: function (a) { + for (var b = [], c = 0, d = 0; d < 2 * a.length; d += 2) { + b[d >>> 3] |= parseInt(a[c]) << 24 - d % 8 * 4, + c++; + } + return new CryptoJS.lib.WordArray.init(b, a.length) + }, + Decrypt: function (a, b) { + var c = b.substr(0, 64), + d = b.substr(0 + c.length, 64), + e = b.substr(c.length + d.length, b.length - c.length - d.length - 64), + f = b.substr(b.length - 64); + this.cipherMode == SM2CipherMode.C1C3C2 && (f = b.substr(c.length + d.length, 64), + e = b.substr(c.length + d.length + 64)); + e = this.GetWords(e); + c = this.CreatePoint(c, d); + this.InitDecipher(a, c); + this.DecryptBlock(e); + c = Array(32); + this.Dofinal(c); + return this.GetHex(c).toString() == f ? (f = this.GetHex(e), + CryptoJS.enc.Utf8.stringify(f)) : "" + }, + CreatePoint: function (a, b) { + var c = new KJUR.crypto.ECDSA({ + curve: "sm2" + }); + return ECPointFp.decodeFromHex(c.ecparams.curve, "04" + a + b) + } + }; + + /*-------------下面修改----------*/ + + var SM2Key = function (key) { + this.setKey(key); + }; + + function SM2SetKey (key) { + if (key && typeof key === 'object') { + this.eccX = key.eccX; + this.eccY = key.eccY; + } else { + this.eccX = "F1342ADB38855E1F8C37D1181378DE446E52788389F7DB3DEA022A1FC4D4D856"; + this.eccY = "66FC6DE253C822F1E52914D9E0B80C5D825759CE696CF039A8449F98017510B7"; + } + } + + /* + *加密数据 + */ + function SM2Encrypt (text) { + var cipherMode = SM2CipherMode.C1C3C2, + cipher = new SM2Cipher(cipherMode), + textData = CryptoJS.enc.Utf8.parse(text); + var cipher = new SM2Cipher(cipherMode); + var userKey = cipher.CreatePoint(this.eccX, this.eccY); + var msgData = cipher.GetWords(textData.toString()); + + return cipher.Encrypt(userKey, msgData); + } + + SM2Key.prototype.setKey = SM2SetKey; + SM2Key.prototype.encrypt = SM2Encrypt; + + //export default SM2Key; + global.SM2 = { + SM2CipherMode: SM2CipherMode, + SM2Cipher: SM2Cipher, + CryptoJS: CryptoJS + } +}(window)); + +window.SM2Utils = {}; + +function sm2Encrypt (data, publickey, cipherMode) { + cipherMode = cipherMode == 0 ? cipherMode : 1; + // msg = SM2.utf8tob64(msg); + var msgData = CryptoJS.enc.Utf8.parse(data); + + msgData = CryptoJS.enc.Base64.stringify(msgData); + //在转utf-8 + msgData = CryptoJS.enc.Utf8.parse(msgData); + + var pubkeyHex = publickey; + if (pubkeyHex.length > 64 * 2) { + pubkeyHex = pubkeyHex.substr(pubkeyHex.length - 64 * 2); + } + var xHex = pubkeyHex.substr(0, 64); + var yHex = pubkeyHex.substr(64); + var cipher = new SM2Cipher(cipherMode); + var userKey = cipher.CreatePoint(xHex, yHex); + msgData = cipher.GetWords(msgData.toString()); + var encryptData = cipher.Encrypt(userKey, msgData); + + return '04' + encryptData; +} + +/** + * 根据公钥进行加密 + */ +SM2Utils.encs = function (key, s, cipherMode) { + if (s == null || s.length == 0) { + return ""; + } + return sm2Encrypt(s, key, cipherMode); +} diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..8066248 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,9 @@ + + + diff --git a/web/src/api/index.js b/web/src/api/index.js new file mode 100644 index 0000000..195af4d --- /dev/null +++ b/web/src/api/index.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +/** + * get请求接口 + */ +export function getRequest (data) { + return request({ + url: '/test/getRequest', + method: 'get', + params: data + }) +} + +/** + * get请求接口 + */ +export function postRequest (data) { + return request({ + url: '/test/postRequest', + method: 'post', + data: data + }) +} diff --git a/web/src/assets/logo.png b/web/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 zcmaKRcUV(fvo}bjDT-7nLI_nlK}sT_69H+`qzVWDA|yaU?}j417wLi^B1KB1SLsC& zL0ag7$U(XW5YR7p&Ux?sP$d4lvMt8C^+TcQu4F zQqv!UF!I+kw)c0jhd6+g6oCr9P?7)?!qX1ui*iL{p}sKCAGuJ{{W)0z1pLF|=>h}& zt(2Lr0Z`2ig8<5i%Zk}cO5Fm=LByqGWaS`oqChZdEFmc`0hSb#gg|Aap^{+WKOYcj zHjINK)KDG%&s?Mt4CL(T=?;~U@bU2x_mLKN!#GJuK_CzbNw5SMEJorG!}_5;?R>@1 zSl)jns3WlU7^J%=(hUtfmuUCU&C3%8B5C^f5>W2Cy8jW3#{Od{lF1}|?c61##3dzA zsPlFG;l_FzBK}8>|H_Ru_H#!_7$UH4UKo3lKOA}g1(R&|e@}GINYVzX?q=_WLZCgh z)L|eJMce`D0EIwgRaNETDsr+?vQknSGAi=7H00r`QnI%oQnFxm`G2umXso9l+8*&Q z7WqF|$p49js$mdzo^BXpH#gURy=UO;=IMrYc5?@+sR4y_?d*~0^YP7d+y0{}0)zBM zIKVM(DBvICK#~7N0a+PY6)7;u=dutmNqK3AlsrUU9U`d;msiucB_|8|2kY=(7XA;G zwDA8AR)VCA#JOkxm#6oHNS^YVuOU;8p$N)2{`;oF|rQ?B~K$%rHDxXs+_G zF5|-uqHZvSzq}L;5Kcy_P+x0${33}Ofb6+TX&=y;;PkEOpz%+_bCw_{<&~ zeLV|!bP%l1qxywfVr9Z9JI+++EO^x>ZuCK);=$VIG1`kxK8F2M8AdC$iOe3cj1fo(ce4l-9 z7*zKy3={MixvUk=enQE;ED~7tv%qh&3lR<0m??@w{ILF|e#QOyPkFYK!&Up7xWNtL zOW%1QMC<3o;G9_S1;NkPB6bqbCOjeztEc6TsBM<(q9((JKiH{01+Ud=uw9B@{;(JJ z-DxI2*{pMq`q1RQc;V8@gYAY44Z!%#W~M9pRxI(R?SJ7sy7em=Z5DbuDlr@*q|25V)($-f}9c#?D%dU^RS<(wz?{P zFFHtCab*!rl(~j@0(Nadvwg8q|4!}L^>d?0al6}Rrv9$0M#^&@zjbfJy_n!%mVHK4 z6pLRIQ^Uq~dnyy$`ay51Us6WaP%&O;@49m&{G3z7xV3dLtt1VTOMYl3UW~Rm{Eq4m zF?Zl_v;?7EFx1_+#WFUXxcK78IV)FO>42@cm@}2I%pVbZqQ}3;p;sDIm&knay03a^ zn$5}Q$G!@fTwD$e(x-~aWP0h+4NRz$KlnO_H2c< z(XX#lPuW_%H#Q+c&(nRyX1-IadKR-%$4FYC0fsCmL9ky3 zKpxyjd^JFR+vg2!=HWf}2Z?@Td`0EG`kU?{8zKrvtsm)|7>pPk9nu@2^z96aU2<#` z2QhvH5w&V;wER?mopu+nqu*n8p~(%QkwSs&*0eJwa zMXR05`OSFpfyRb!Y_+H@O%Y z0=K^y6B8Gcbl?SA)qMP3Z+=C(?8zL@=74R=EVnE?vY!1BQy2@q*RUgRx4yJ$k}MnL zs!?74QciNb-LcG*&o<9=DSL>1n}ZNd)w1z3-0Pd^4ED1{qd=9|!!N?xnXjM!EuylY z5=!H>&hSofh8V?Jofyd!h`xDI1fYAuV(sZwwN~{$a}MX^=+0TH*SFp$vyxmUv7C*W zv^3Gl0+eTFgBi3FVD;$nhcp)ka*4gSskYIqQ&+M}xP9yLAkWzBI^I%zR^l1e?bW_6 zIn{mo{dD=)9@V?s^fa55jh78rP*Ze<3`tRCN4*mpO$@7a^*2B*7N_|A(Ve2VB|)_o z$=#_=aBkhe(ifX}MLT()@5?OV+~7cXC3r!%{QJxriXo9I%*3q4KT4Xxzyd{ z9;_%=W%q!Vw$Z7F3lUnY+1HZ*lO;4;VR2+i4+D(m#01OYq|L_fbnT;KN<^dkkCwtd zF7n+O7KvAw8c`JUh6LmeIrk4`F3o|AagKSMK3))_5Cv~y2Bb2!Ibg9BO7Vkz?pAYX zoI=B}+$R22&IL`NCYUYjrdhwjnMx_v=-Qcx-jmtN>!Zqf|n1^SWrHy zK|MwJ?Z#^>)rfT5YSY{qjZ&`Fjd;^vv&gF-Yj6$9-Dy$<6zeP4s+78gS2|t%Z309b z0^fp~ue_}i`U9j!<|qF92_3oB09NqgAoehQ`)<)dSfKoJl_A6Ec#*Mx9Cpd-p#$Ez z={AM*r-bQs6*z$!*VA4|QE7bf@-4vb?Q+pPKLkY2{yKsw{&udv_2v8{Dbd zm~8VAv!G~s)`O3|Q6vFUV%8%+?ZSVUa(;fhPNg#vab@J*9XE4#D%)$UU-T5`fwjz! z6&gA^`OGu6aUk{l*h9eB?opVdrHK>Q@U>&JQ_2pR%}TyOXGq_6s56_`U(WoOaAb+K zXQr#6H}>a-GYs9^bGP2Y&hSP5gEtW+GVC4=wy0wQk=~%CSXj=GH6q z-T#s!BV`xZVxm{~jr_ezYRpqqIcXC=Oq`b{lu`Rt(IYr4B91hhVC?yg{ol4WUr3v9 zOAk2LG>CIECZ-WIs0$N}F#eoIUEtZudc7DPYIjzGqDLWk_A4#(LgacooD z2K4IWs@N`Bddm-{%oy}!k0^i6Yh)uJ1S*90>|bm3TOZxcV|ywHUb(+CeX-o1|LTZM zwU>dY3R&U)T(}5#Neh?-CWT~@{6Ke@sI)uSuzoah8COy)w)B)aslJmp`WUcjdia-0 zl2Y}&L~XfA`uYQboAJ1;J{XLhYjH){cObH3FDva+^8ioOQy%Z=xyjGLmWMrzfFoH; zEi3AG`_v+%)&lDJE;iJWJDI@-X9K5O)LD~j*PBe(wu+|%ar~C+LK1+-+lK=t# z+Xc+J7qp~5q=B~rD!x78)?1+KUIbYr^5rcl&tB-cTtj+e%{gpZZ4G~6r15+d|J(ky zjg@@UzMW0k9@S#W(1H{u;Nq(7llJbq;;4t$awM;l&(2s+$l!Ay9^Ge|34CVhr7|BG z?dAR83smef^frq9V(OH+a+ki#q&-7TkWfFM=5bsGbU(8mC;>QTCWL5ydz9s6k@?+V zcjiH`VI=59P-(-DWXZ~5DH>B^_H~;4$)KUhnmGo*G!Tq8^LjfUDO)lASN*=#AY_yS zqW9UX(VOCO&p@kHdUUgsBO0KhXxn1sprK5h8}+>IhX(nSXZKwlNsjk^M|RAaqmCZB zHBolOHYBas@&{PT=R+?d8pZu zUHfyucQ`(umXSW7o?HQ3H21M`ZJal+%*)SH1B1j6rxTlG3hx1IGJN^M7{$j(9V;MZ zRKybgVuxKo#XVM+?*yTy{W+XHaU5Jbt-UG33x{u(N-2wmw;zzPH&4DE103HV@ER86 z|FZEmQb|&1s5#`$4!Cm}&`^{(4V}OP$bk`}v6q6rm;P!H)W|2i^e{7lTk2W@jo_9q z*aw|U7#+g59Fv(5qI`#O-qPj#@_P>PC#I(GSp3DLv7x-dmYK=C7lPF8a)bxb=@)B1 zUZ`EqpXV2dR}B&r`uM}N(TS99ZT0UB%IN|0H%DcVO#T%L_chrgn#m6%x4KE*IMfjX zJ%4veCEqbXZ`H`F_+fELMC@wuy_ch%t*+Z+1I}wN#C+dRrf2X{1C8=yZ_%Pt6wL_~ zZ2NN-hXOT4P4n$QFO7yYHS-4wF1Xfr-meG9Pn;uK51?hfel`d38k{W)F*|gJLT2#T z<~>spMu4(mul-8Q3*pf=N4DcI)zzjqAgbE2eOT7~&f1W3VsdD44Ffe;3mJp-V@8UC z)|qnPc12o~$X-+U@L_lWqv-RtvB~%hLF($%Ew5w>^NR82qC_0FB z)=hP1-OEx?lLi#jnLzH}a;Nvr@JDO-zQWd}#k^an$Kwml;MrD&)sC5b`s0ZkVyPkb zt}-jOq^%_9>YZe7Y}PhW{a)c39G`kg(P4@kxjcYfgB4XOOcmezdUI7j-!gs7oAo2o zx(Ph{G+YZ`a%~kzK!HTAA5NXE-7vOFRr5oqY$rH>WI6SFvWmahFav!CfRMM3%8J&c z*p+%|-fNS_@QrFr(at!JY9jCg9F-%5{nb5Bo~z@Y9m&SHYV`49GAJjA5h~h4(G!Se zZmK{Bo7ivCfvl}@A-ptkFGcWXAzj3xfl{evi-OG(TaCn1FAHxRc{}B|x+Ua1D=I6M z!C^ZIvK6aS_c&(=OQDZfm>O`Nxsw{ta&yiYPA~@e#c%N>>#rq)k6Aru-qD4(D^v)y z*>Rs;YUbD1S8^D(ps6Jbj0K3wJw>L4m)0e(6Pee3Y?gy9i0^bZO?$*sv+xKV?WBlh zAp*;v6w!a8;A7sLB*g-^<$Z4L7|5jXxxP1}hQZ<55f9<^KJ>^mKlWSGaLcO0=$jem zWyZkRwe~u{{tU63DlCaS9$Y4CP4f?+wwa(&1ou)b>72ydrFvm`Rj-0`kBJgK@nd(*Eh!(NC{F-@=FnF&Y!q`7){YsLLHf0_B6aHc# z>WIuHTyJwIH{BJ4)2RtEauC7Yq7Cytc|S)4^*t8Va3HR zg=~sN^tp9re@w=GTx$;zOWMjcg-7X3Wk^N$n;&Kf1RgVG2}2L-(0o)54C509C&77i zrjSi{X*WV=%C17((N^6R4Ya*4#6s_L99RtQ>m(%#nQ#wrRC8Y%yxkH;d!MdY+Tw@r zjpSnK`;C-U{ATcgaxoEpP0Gf+tx);buOMlK=01D|J+ROu37qc*rD(w`#O=3*O*w9?biwNoq3WN1`&Wp8TvKj3C z3HR9ssH7a&Vr<6waJrU zdLg!ieYz%U^bmpn%;(V%%ugMk92&?_XX1K@mwnVSE6!&%P%Wdi7_h`CpScvspMx?N zQUR>oadnG17#hNc$pkTp+9lW+MBKHRZ~74XWUryd)4yd zj98$%XmIL4(9OnoeO5Fnyn&fpQ9b0h4e6EHHw*l68j;>(ya`g^S&y2{O8U>1*>4zR zq*WSI_2o$CHQ?x0!wl9bpx|Cm2+kFMR)oMud1%n2=qn5nE&t@Fgr#=Zv2?}wtEz^T z9rrj=?IH*qI5{G@Rn&}^Z{+TW}mQeb9=8b<_a`&Cm#n%n~ zU47MvCBsdXFB1+adOO)03+nczfWa#vwk#r{o{dF)QWya9v2nv43Zp3%Ps}($lA02*_g25t;|T{A5snSY?3A zrRQ~(Ygh_ebltHo1VCbJb*eOAr;4cnlXLvI>*$-#AVsGg6B1r7@;g^L zFlJ_th0vxO7;-opU@WAFe;<}?!2q?RBrFK5U{*ai@NLKZ^};Ul}beukveh?TQn;$%9=R+DX07m82gP$=}Uo_%&ngV`}Hyv8g{u z3SWzTGV|cwQuFIs7ZDOqO_fGf8Q`8MwL}eUp>q?4eqCmOTcwQuXtQckPy|4F1on8l zP*h>d+cH#XQf|+6c|S{7SF(Lg>bR~l(0uY?O{OEVlaxa5@e%T&xju=o1`=OD#qc16 zSvyH*my(dcp6~VqR;o(#@m44Lug@~_qw+HA=mS#Z^4reBy8iV?H~I;{LQWk3aKK8$bLRyt$g?- h(App) +}).$mount('#app') diff --git a/web/src/router/index.js b/web/src/router/index.js new file mode 100644 index 0000000..18e1abc --- /dev/null +++ b/web/src/router/index.js @@ -0,0 +1,34 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) + +const routes = [ + { + path: '/', + name: 'index', + component: () => import('../views/Index') + } +] + +const router = new VueRouter({ + routes +}) + +// 导航守卫 +// 使用 router.beforeEach 注册一个全局前置守卫,判断用户是否登陆 +router.beforeEach((to, from, next) => { + if (to.path === '/login') { + next(); + } else { + let token = localStorage.getItem('Authorization'); + + if (token === 'null' || token === '') { + next('/login'); + } else { + next(); + } + } +}); + +export default router diff --git a/web/src/store/index.js b/web/src/store/index.js new file mode 100644 index 0000000..332b916 --- /dev/null +++ b/web/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) diff --git a/web/src/utils/request.js b/web/src/utils/request.js new file mode 100644 index 0000000..64afc74 --- /dev/null +++ b/web/src/utils/request.js @@ -0,0 +1,102 @@ +import axios from 'axios' +import { + sm4KeyGenerator, + getRequestKey, + encryptRequestData, + getResponseJson +} from '@/utils/sm' + +// sm4秘钥 +const sm4Key = sm4KeyGenerator() +// 是否加密 +const isAddSm = true +// sm4Key数组 +const sm4KeyArr = [] + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 10000 +}) +// request拦截器 +service.interceptors.request.use(config => { + // 将秘钥加密后放到请求头中 + config.headers.RequestKey = getRequestKey(sm4Key, false) // 请求key + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + for (const propName of Object.keys(config.params)) { + const value = config.params[propName] + const part = encodeURIComponent(propName) + '=' + if (value !== null && typeof (value) !== 'undefined') { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + const params = propName + '[' + key + ']' + const subPart = encodeURIComponent(params) + '=' + url += subPart + encodeURIComponent(value[key]) + '&' + } + } else { + url += part + encodeURIComponent(value) + '&' + } + } + } + url = url.slice(0, -1) + config.params = {} + config.url = url + } else if (config.method === 'post') { + if (isAddSm && config.url.indexOf('upload') === -1) { + config.data = encryptRequestData(config.data, sm4Key, config.method) + const obj = {} + obj.url = config.url + obj.sm4keyNum = sm4Key + obj.cis_req_params = config.data.cis_req_params + sm4KeyArr.push(obj) + } + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}) + +// 响应拦截器 +service.interceptors.response.use(res => { + // 未设置状态码则默认成功状态 + const code = res.data.code || 200 + // 返回值解密 + if (isAddSm) { + if (res.config.method !== 'OPTIONS') { + let i + let myKey + if (res.config.method === 'post') { + for (const item in sm4KeyArr) { + if (sm4KeyArr[item].cis_req_params === JSON.parse(res.config.data).cis_req_params) { + myKey = sm4KeyArr[item].sm4keyNum + i = item + } + } + if (code === 200) { + res.data = getResponseJson(res.data, myKey) + } + sm4KeyArr.splice(i, 1) + } + } else { + return + } + } + if (code !== 200) { + // eslint-disable-next-line prefer-promise-reject-errors + return Promise.reject('error') + } else { + return res.data + } +}, +error => { + console.log('err' + error) + return Promise.reject(error) +}) + +export default service diff --git a/web/src/utils/sm.js b/web/src/utils/sm.js new file mode 100644 index 0000000..cf25b15 --- /dev/null +++ b/web/src/utils/sm.js @@ -0,0 +1,87 @@ +// 引入sm +const sm = require('sm-crypto') + +// sm2公钥 +const sm2Key = '04813d4d97ad31bd9d18d785f337f683233099d5abed09cb397152d50ac28cc0ba43711960e811d90453db5f5a9518d660858a8d0c57e359a8bf83427760ebcbba' + +/** + * 生成SMKey + * @returns {string} + */ +export function sm4KeyGenerator () { + const sm4KeySeed = '123456789abcdef' + const keySize = 32 + let sm4key = '' + while (sm4key.length < keySize) { + const randomIndex = Math.floor(Math.random() * 100) % 16 + sm4key += sm4KeySeed.charAt(randomIndex) + } + return sm4key +} + +/** + * 生成SM2随机请求Key + * @param sm4key + * @param isStream + * @returns {*} + */ +export function getRequestKey (sm4key, isStream) { + let key = sm4key + '-' + Date.now() + if (isStream) { + key = '1-' + key + } else { + key = '0-' + key + } + // 1 - C1C3C2,0 - C1C2C3,默认为1 + const cipherMode = 0 + // 解密结果 + // sm.sm2.doDecrypt(sm.sm2.doEncrypt(key, publicKey, cipherMode), privateKey, cipherMode); + // 加密结果 + return sm2Encrypt(key, sm2Key, cipherMode) +} + +/** + * 对请求参数加密 + * */ +export function encryptRequestData (data, sm4key, type) { + let params + let obj + if (!data) { + if (type === 'get') { + params = 'tp=' + Date.now() + } else { + data = { + tp: Date.now() + } + params = JSON.stringify(data) + } + obj = { + cis_req_params: sm.sm4.encrypt(params, sm4key), + cis_fingerprint: sm.sm3(params) + } + } else { + if (type === 'get') { + params = Object.keys(data).map(function (key) { + return key + '=' + data[key] + }).join('&') + } else { + params = JSON.stringify(data) + } + obj = { + cis_req_params: sm.sm4.encrypt(params, sm4key), + cis_fingerprint: sm.sm3(params) + } + } + return obj +} + +/** + * 返回数据解密 + * @param data + * @param sm4key + * @returns {any} + */ +export function getResponseJson (data, sm4key) { + const result = sm.sm4.decrypt(data, sm4key) + return JSON.parse(result) +} diff --git a/web/src/views/Index.vue b/web/src/views/Index.vue new file mode 100644 index 0000000..0245689 --- /dev/null +++ b/web/src/views/Index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/web/vue.config.js b/web/vue.config.js new file mode 100644 index 0000000..9d43bf1 --- /dev/null +++ b/web/vue.config.js @@ -0,0 +1,65 @@ +module.exports = { + // 基本路径 + publicPath: '/', + // 输出文件目录 + outputDir: 'dist', + // eslint-loader 是否在保存的时候检查 + lintOnSave: false, + // use the full build with in-browser compiler? + // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only + runtimeCompiler: false, + // webpack配置 + // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md + chainWebpack: () => {}, + configureWebpack: () => {}, + // vue-loader 配置项 + // https://vue-loader.vuejs.org/en/options.html + // vueLoader: {}, + // 生产环境是否生成 sourceMap 文件 + productionSourceMap: false, + // css相关配置 + /* css: { + // 是否使用css分离插件 ExtractTextPlugin + extract: true, + // 开启 CSS source maps? + sourceMap: false, + // css预设器配置项 + loaderOptions: {}, + // 启用 CSS modules for all css / pre-processor files. + modules: false + }, */ + // use thread-loader for babel & TS in production build + // enabled by default if the machine has more than 1 cores + parallel: require('os').cpus().length > 1, + // 是否启用dll + // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode + // dll: false, + // PWA 插件相关配置 + // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa + pwa: {}, + // webpack-dev-server 相关配置 + devServer: { + // open: process.platform === 'darwin', + // 将服务启动后默认打开浏览器 + open: true, + host: '0.0.0.0', + port: 8080, + https: false, + hotOnly: false, + proxy: { + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VUE_APP_BASE_API]: { + target: 'http://localhost:8686', + changeOrigin: true, + pathRewrite: { + ['^' + process.env.VUE_APP_BASE_API]: '' + } + } + }, + before: app => {} + }, + // 第三方插件配置 + pluginOptions: { + // ... + } +}