Files
qingdao-employment-service/lib/encryption/SM.js

168 lines
92 KiB
JavaScript
Raw Normal View History

2025-11-18 17:25:39 +08:00
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
var SM;
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./index.js":
/*!******************!*\
!*** ./index.js ***!
\******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decrypt\": () => (/* reexport safe */ _src_encrypt__WEBPACK_IMPORTED_MODULE_0__.decrypt),\n/* harmony export */ \"encrypt\": () => (/* reexport safe */ _src_encrypt__WEBPACK_IMPORTED_MODULE_0__.encrypt)\n/* harmony export */ });\n/* harmony import */ var _src_encrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/encrypt */ \"./src/encrypt.js\");\n\r\n\n\n//# sourceURL=webpack://SM/./index.js?");
/***/ }),
/***/ "./src/encrypt.js":
/*!************************!*\
!*** ./src/encrypt.js ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decrypt\": () => (/* binding */ decrypt),\n/* harmony export */ \"encrypt\": () => (/* binding */ encrypt)\n/* harmony export */ });\n/* harmony import */ var _sm2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sm2 */ \"./src/sm2/index.js\");\n\r\n\r\nfunction encrypt(str, pubk) {\r\n return '04' + _sm2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].doEncrypt(str, pubk, 1)\r\n}\r\nfunction decrypt(str, pri) {\r\n str = str.substring(2)\r\n return _sm2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].doDecrypt(str, pri, 1)\r\n}\r\n\r\n\r\n\n\n//# sourceURL=webpack://SM/./src/encrypt.js?");
/***/ }),
/***/ "./src/sm2/asn1.js":
/*!*************************!*\
!*** ./src/sm2/asn1.js ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeDer\": () => (/* binding */ decodeDer),\n/* harmony export */ \"encodeDer\": () => (/* binding */ encodeDer)\n/* harmony export */ });\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* eslint-disable eqeqeq */\r\n\r\n\r\nfunction bigIntToMinTwosComplementsHex (bigIntegerValue) {\r\n let h = bigIntegerValue.toString(16)\r\n if (h.substr(0, 1) != '-') {\r\n if (h.length % 2 == 1) {\r\n h = '0' + h\r\n } else if (!h.match(/^[0-7]/)) {\r\n h = '00' + h\r\n }\r\n } else {\r\n const hPos = h.substr(1)\r\n let xorLen = hPos.length\r\n if (xorLen % 2 == 1) {\r\n xorLen += 1\r\n } else if (!h.match(/^[0-7]/)) {\r\n xorLen += 2\r\n }\r\n let hMask = ''\r\n for (let i = 0; i < xorLen; i++) {\r\n hMask += 'f'\r\n }\r\n const biMask = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16)\r\n const biNeg = biMask.xor(bigIntegerValue).add(_jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE)\r\n h = biNeg.toString(16).replace(/^-/, '')\r\n }\r\n return h\r\n}\r\n\r\n/**\r\n * base class for ASN.1 DER encoder object\r\n */\r\nclass ASN1Object {\r\n constructor () {\r\n this.isModified = true\r\n this.hTLV = null\r\n this.hT = '00'\r\n this.hL = '00'\r\n this.hV = ''\r\n }\r\n\r\n /**\r\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\r\n */\r\n getLengthHexFromValue () {\r\n const n = this.hV.length / 2\r\n let hN = n.toString(16)\r\n if (hN.length % 2 == 1) {\r\n hN = '0' + hN\r\n }\r\n if (n < 128) {\r\n return hN\r\n } else {\r\n const hNlen = hN.length / 2\r\n const head = 128 + hNlen\r\n return head.toString(16) + hN\r\n }\r\n }\r\n\r\n /**\r\n * get hexadecimal string of ASN.1 TLV bytes\r\n */\r\n getEncodedHex () {\r\n if (this.hTLV == null || this.isModified) {\r\n this.hV = this.getFreshValueHex()\r\n this.hL = this.getLengthHexFromValue()\r\n this.hTLV = this.hT + this.hL + this.hV\r\n this.isModified = false\r\n }\r\n return this.hTLV\r\n }\r\n\r\n getFreshValueHex () {\r\n return ''\r\n }\r\n};\r\n\r\n/**\r\n * class for ASN.1 DER Integer\r\n */\r\nclass DERInteger extends ASN1Object {\r\n constructor (options) {\r\n super()\r\n\r\n this.hT = '02'\r\n if (options && options.bigint) {\r\n this.hTLV = null\r\n this.isModified = true\r\n this.hV = bigIntToMinTwosComplementsHex(options.bigint)\r\n }\r\n }\r\n\r\n getFreshValueHex () {\r\n return this.hV\r\n }\r\n}\r\n\r\n/**\r\n * class for ASN.1 DER Sequence\r\n */\r\nclass DERSequence extends ASN1Object {\r\n constructor (options) {\r\n super()\r\n\r\n this.hT = '30'\r\n this.asn1Array = []\r\n if (options && options.array) {\r\n this.asn1Array = options.array\r\n }\r\n }\r\n\r\n getFreshValueHex () {\r\n let h = ''\r\n for (let i = 0; i < this.asn1Array.length; i++) {\r\n const asn1Obj = this.asn1Array[i]\r\n h += asn1Obj.getEncodedHex()\r\n }\r\n this.hV = h\r\n return this.hV\r\n }\r\n}\r\n\r\n/**\r\n * get byte length for ASN.1 L(length) bytes\r\n */\r\nfunction getByteLengthOfL (s, pos) {\r\n if (s.substring(pos + 2, pos + 3) != '8') return 1\r\n const i = parseInt(s.substring(pos + 3, pos + 4))\r\n if (i == 0) return -1 // length octet '80' indefinite length\r\n if (i > 0 && i < 10) return i + 1 // including '8?' octet;\r\n return -2 // malformed format\r\n}\r\n\r\n/**\r\n * get hexadecimal string for ASN.1 L(length) bytes\r\n */\r\nfunction getHexOfL (s, pos) {\r\n const len = getByteLengthOfL(s, pos)\r\n if (len < 1) return ''\r\n return s.substring(pos + 2, pos + 2 + len * 2)\r\n}\r\n\r\n/**\r\n * get integer value of ASN.1 length for ASN.1 data\r\n */\r\nfunction getIntOfL (s, pos) {\r\n const hLength = getHexOfL(s, pos)\r\n if (hLengt
/***/ }),
/***/ "./src/sm2/ec.js":
/*!***********************!*\
!*** ./src/sm2/ec.js ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ECCurveFp\": () => (/* binding */ ECCurveFp),\n/* harmony export */ \"ECPointFp\": () => (/* binding */ ECPointFp)\n/* harmony export */ });\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* eslint-disable eqeqeq */\r\n\r\n\r\n/**\r\n * thanks for Tom Wu : http://www-cs-students.stanford.edu/~tjw/jsbn/\r\n *\r\n * Basic Javascript Elliptic Curve implementation\r\n * Ported loosely from BouncyCastle's Java EC code\r\n * Only Fp curves implemented for now\r\n */\r\n\r\nconst THREE = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger('3')\r\n\r\n/**\r\n * 椭圆曲线域元素\r\n */\r\nclass ECFieldElementFp {\r\n constructor (q, x) {\r\n this.x = x\r\n this.q = q\r\n }\r\n\r\n /**\r\n * 判断相等\r\n */\r\n equals (other) {\r\n if (other == this) return true\r\n return (this.q.equals(other.q) && this.x.equals(other.x))\r\n }\r\n\r\n /**\r\n * 返回具体数值\r\n */\r\n toBigInteger () {\r\n return this.x\r\n }\r\n\r\n /**\r\n * 取反\r\n */\r\n negate () {\r\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q))\r\n }\r\n\r\n /**\r\n * 相加\r\n */\r\n add (b) {\r\n return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q))\r\n }\r\n\r\n /**\r\n * 相减\r\n */\r\n subtract (b) {\r\n return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q))\r\n }\r\n\r\n /**\r\n * 相乘\r\n */\r\n multiply (b) {\r\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q))\r\n }\r\n\r\n /**\r\n * 相除\r\n */\r\n divide (b) {\r\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q))\r\n }\r\n\r\n /**\r\n * 平方\r\n */\r\n square () {\r\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q))\r\n }\r\n}\r\n\r\nclass ECPointFp {\r\n constructor (curve, x, y, z) {\r\n this.curve = curve\r\n this.x = x\r\n this.y = y\r\n // 标准射影坐标系zinv == null 或 z * zinv == 1\r\n this.z = z == undefined ? _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE : z\r\n this.zinv = null\r\n // TODO: compression flag\r\n }\r\n\r\n getX () {\r\n if (this.zinv == null) this.zinv = this.z.modInverse(this.curve.q)\r\n\r\n return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))\r\n }\r\n\r\n getY () {\r\n if (this.zinv == null) this.zinv = this.z.modInverse(this.curve.q)\r\n\r\n return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))\r\n }\r\n\r\n /**\r\n * 判断相等\r\n */\r\n equals (other) {\r\n if (other == this) return true\r\n if (this.isInfinity()) return other.isInfinity()\r\n if (other.isInfinity()) return this.isInfinity()\r\n\r\n // u = y2 * z1 - y1 * z2\r\n const u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q)\r\n if (!u.equals(_jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ZERO)) return false\r\n\r\n // v = x2 * z1 - x1 * z2\r\n const v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q)\r\n return v.equals(_jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ZERO)\r\n }\r\n\r\n /**\r\n * 是否是无穷远点\r\n */\r\n isInfinity () {\r\n if ((this.x == null) && (this.y == null)) return true\r\n return this.z.equals(_jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ZERO) && !this.y.toBigInteger().equals(_jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ZERO)\r\n }\r\n\r\n /**\r\n * 取反x 轴对称点\r\n */\r\n negate () {\r\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z)\r\n }\r\n\r\n /**\r\n * 相加\r\n *\r\
/***/ }),
/***/ "./src/sm2/index.js":
/*!**************************!*\
!*** ./src/sm2/index.js ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* harmony import */ var _asn1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./asn1 */ \"./src/sm2/asn1.js\");\n/* harmony import */ var _sm2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sm2 */ \"./src/sm2/sm2.js\");\n/* harmony import */ var _sm3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sm3 */ \"./src/sm2/sm3.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ \"./src/sm2/utils.js\");\n/* eslint-disable eqeqeq */\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst { G, curve, n } = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].generateEcparam()\r\nconst C1C2C3 = 0\r\n\r\n/**\r\n * 加密\r\n */\r\nfunction doEncrypt (msg, publicKey, cipherMode = 1) {\r\n const cipher = new _sm2__WEBPACK_IMPORTED_MODULE_2__[\"default\"]()\r\n msg = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].hexToArray(_utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].parseUtf8StringToHex(msg))\r\n\r\n if (publicKey.length > 128) {\r\n publicKey = publicKey.substr(publicKey.length - 128)\r\n }\r\n const xHex = publicKey.substr(0, 64)\r\n const yHex = publicKey.substr(64)\r\n publicKey = cipher.createPoint(xHex, yHex)\r\n\r\n const c1 = cipher.initEncipher(publicKey)\r\n\r\n cipher.encryptBlock(msg)\r\n const c2 = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].arrayToHex(msg)\r\n\r\n let c3 = new Array(32)\r\n cipher.doFinal(c3)\r\n c3 = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].arrayToHex(c3)\r\n\r\n return cipherMode == C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2\r\n}\r\n\r\n/**\r\n * 解密\r\n */\r\nfunction doDecrypt (encryptData, privateKey, cipherMode = 1) {\r\n const cipher = new _sm2__WEBPACK_IMPORTED_MODULE_2__[\"default\"]()\r\n\r\n privateKey = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger(privateKey, 16)\r\n\r\n const c1X = encryptData.substr(0, 64)\r\n const c1Y = encryptData.substr(0 + c1X.length, 64)\r\n const c1Length = c1X.length + c1Y.length\r\n\r\n let c3 = encryptData.substr(c1Length, 64)\r\n let c2 = encryptData.substr(c1Length + 64)\r\n\r\n if (cipherMode == C1C2C3) {\r\n c3 = encryptData.substr(encryptData.length - 64)\r\n c2 = encryptData.substr(c1Length, encryptData.length - c1Length - 64)\r\n }\r\n\r\n const data = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].hexToArray(c2)\r\n\r\n const c1 = cipher.createPoint(c1X, c1Y)\r\n cipher.initDecipher(privateKey, c1)\r\n cipher.decryptBlock(data)\r\n const c3_ = new Array(32)\r\n cipher.doFinal(c3_)\r\n\r\n const isDecrypt = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].arrayToHex(c3_) == c3\r\n\r\n if (isDecrypt) {\r\n const decryptData = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].arrayToUtf8(data)\r\n return decryptData\r\n } else {\r\n return ''\r\n }\r\n}\r\n\r\n/**\r\n * 签名\r\n */\r\nfunction doSignature (msg, privateKey, { pointPool, der, hash, publicKey } = {}) {\r\n let hashHex = typeof msg === 'string' ? _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].parseUtf8StringToHex(msg) : _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].parseArrayBufferToHex(msg)\r\n\r\n if (hash) {\r\n // sm3杂凑\r\n publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey)\r\n hashHex = doSm3Hash(hashHex, publicKey)\r\n }\r\n\r\n const dA = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger(privateKey, 16)\r\n const e = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hashHex, 16)\r\n\r\n // k\r\n let k = null\r\n let r = null\r\n let s = null\r\n\r\n do {\r\n do {\r\n let point\r\n if (pointPool && pointPool.length) {\r\n point = pointPool.pop()\r\n } else {\r\n point = getPoint()\r\n }\r\n k = point.k\r\n\r\n // r = (e + x1) mod
/***/ }),
/***/ "./src/sm2/jsbn.js":
/*!*************************!*\
!*** ./src/sm2/jsbn.js ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom),\n/* harmony export */ \"default\": () => (/* binding */ BigInteger)\n/* harmony export */ });\n/* eslint-disable eqeqeq */\r\n/* eslint-disable camelcase */\r\n// Copyright (c) 2005 Tom Wu\r\n// All Rights Reserved.\r\n// See \"LICENSE\" for details.\r\n\r\n// Basic JavaScript BN library - subset useful for RSA encryption.\r\n\r\n// Bits per digit\r\nvar dbits\r\n\r\n// JavaScript engine analysis\r\nvar canary = 0xdeadbeefcafe\r\nvar j_lm = ((canary & 0xffffff) == 0xefcafe)\r\n\r\n// (public) Constructor\r\nfunction BigInteger (a, b, c) {\r\n if (a != null) {\r\n if (typeof a === 'number') this.fromNumber(a, b, c)\r\n else if (b == null && typeof a !== 'string') this.fromString(a, 256)\r\n else this.fromString(a, b)\r\n }\r\n}\r\n\r\n// return new, unset BigInteger\r\nfunction nbi () { return new BigInteger(null) }\r\n\r\n// am: Compute w_j += (x*this_i), propagate carries,\r\n// c is initial carry, returns final carry.\r\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\r\n// We need to select the fastest one that works in this environment.\r\n\r\n// am1: use a single mult and divide to get the high bits,\r\n// max digit bits should be 26 because\r\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\r\nfunction am1 (i, x, w, j, c, n) {\r\n while (--n >= 0) {\r\n var v = x * this[i++] + w[j] + c\r\n c = Math.floor(v / 0x4000000)\r\n w[j++] = v & 0x3ffffff\r\n }\r\n return c\r\n}\r\n// am2 avoids a big mult-and-extract completely.\r\n// Max digit bits should be <= 30 because we do bitwise ops\r\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\r\nfunction am2 (i, x, w, j, c, n) {\r\n var xl = x & 0x7fff; var xh = x >> 15\r\n while (--n >= 0) {\r\n var l = this[i] & 0x7fff\r\n var h = this[i++] >> 15\r\n var m = xh * l + h * xl\r\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)\r\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)\r\n w[j++] = l & 0x3fffffff\r\n }\r\n return c\r\n}\r\n// Alternately, set max digit bits to 28 since some\r\n// browsers slow down when dealing with 32-bit numbers.\r\nfunction am3 (i, x, w, j, c, n) {\r\n var xl = x & 0x3fff; var xh = x >> 14\r\n while (--n >= 0) {\r\n var l = this[i] & 0x3fff\r\n var h = this[i++] >> 14\r\n var m = xh * l + h * xl\r\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c\r\n c = (l >> 28) + (m >> 14) + xh * h\r\n w[j++] = l & 0xfffffff\r\n }\r\n return c\r\n}\r\nvar inBrowser = typeof navigator !== 'undefined'\r\nif (inBrowser && j_lm && (navigator.appName == 'Microsoft Internet Explorer')) {\r\n BigInteger.prototype.am = am2\r\n dbits = 30\r\n} else if (inBrowser && j_lm && (navigator.appName != 'Netscape')) {\r\n BigInteger.prototype.am = am1\r\n dbits = 26\r\n} else { // Mozilla/Netscape seems to prefer am3\r\n BigInteger.prototype.am = am3\r\n dbits = 28\r\n}\r\n\r\nBigInteger.prototype.DB = dbits\r\nBigInteger.prototype.DM = ((1 << dbits) - 1)\r\nBigInteger.prototype.DV = (1 << dbits)\r\n\r\nvar BI_FP = 52\r\nBigInteger.prototype.FV = Math.pow(2, BI_FP)\r\nBigInteger.prototype.F1 = BI_FP - dbits\r\nBigInteger.prototype.F2 = 2 * dbits - BI_FP\r\n\r\n// Digit conversions\r\nvar BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz'\r\nvar BI_RC = []\r\nvar rr, vv\r\nrr = '0'.charCodeAt(0)\r\nfor (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv\r\nrr = 'a'.charCodeAt(0)\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv\r\nrr = 'A'.charCodeAt(0)\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv\r\n\r\nfunction int2char (n) { return BI_RM.charAt(n) }\r\nfunction intAt (s, i) {\r\n var c = BI_RC[s.charCodeAt(i)]\r\n return (c == null) ? -1 : c\r\n}\r\n\r\n// (protected) copy this to r\r\nfunction bnpCopyTo (r) {\r\n for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]\r\n r.t = this.t\r\n r.s = this.s\r\n}\r\n\r\n// (protected) s
/***/ }),
/***/ "./src/sm2/sm2.js":
/*!************************!*\
!*** ./src/sm2/sm2.js ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* harmony import */ var _sm3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sm3 */ \"./src/sm2/sm3.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/sm2/utils.js\");\n/* eslint-disable eqeqeq */\r\n\r\n\r\n\r\n\r\nclass SM2Cipher {\r\n constructor () {\r\n this.ct = 1\r\n this.p2 = null\r\n this.sm3keybase = null\r\n this.sm3c3 = null\r\n this.key = new Array(32)\r\n this.keyOff = 0\r\n }\r\n\r\n reset () {\r\n this.sm3keybase = new _sm3__WEBPACK_IMPORTED_MODULE_1__[\"default\"]()\r\n this.sm3c3 = new _sm3__WEBPACK_IMPORTED_MODULE_1__[\"default\"]()\r\n const xWords = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].hexToArray(this.p2.getX().toBigInteger().toRadix(16))\r\n const yWords = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].hexToArray(this.p2.getY().toBigInteger().toRadix(16))\r\n this.sm3keybase.blockUpdate(xWords, 0, xWords.length)\r\n this.sm3c3.blockUpdate(xWords, 0, xWords.length)\r\n this.sm3keybase.blockUpdate(yWords, 0, yWords.length)\r\n this.ct = 1\r\n this.nextKey()\r\n }\r\n\r\n nextKey () {\r\n const sm3keycur = new _sm3__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this.sm3keybase)\r\n sm3keycur.update((this.ct >> 24 & 0x00ff))\r\n sm3keycur.update((this.ct >> 16 & 0x00ff))\r\n sm3keycur.update((this.ct >> 8 & 0x00ff))\r\n sm3keycur.update((this.ct & 0x00ff))\r\n sm3keycur.doFinal(this.key, 0)\r\n this.keyOff = 0\r\n this.ct++\r\n }\r\n\r\n initEncipher (userKey) {\r\n const keypair = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].generateKeyPairHex()\r\n const k = new _jsbn_js__WEBPACK_IMPORTED_MODULE_0__.BigInteger(keypair.privateKey, 16)\r\n let publicKey = keypair.publicKey\r\n\r\n this.p2 = userKey.multiply(k) // [k](Pb)\r\n this.reset()\r\n\r\n if (publicKey.length > 128) {\r\n publicKey = publicKey.substr(publicKey.length - 128)\r\n }\r\n\r\n return publicKey\r\n }\r\n\r\n encryptBlock (data) {\r\n this.sm3c3.blockUpdate(data, 0, data.length)\r\n for (let i = 0; i < data.length; i++) {\r\n if (this.keyOff == this.key.length) {\r\n this.nextKey()\r\n }\r\n data[i] ^= this.key[this.keyOff++] & 0xff\r\n }\r\n }\r\n\r\n initDecipher (userD, c1) {\r\n this.p2 = c1.multiply(userD)\r\n this.reset()\r\n }\r\n\r\n decryptBlock (data) {\r\n for (let i = 0; i < data.length; i++) {\r\n if (this.keyOff == this.key.length) {\r\n this.nextKey()\r\n }\r\n data[i] ^= this.key[this.keyOff++] & 0xff\r\n }\r\n this.sm3c3.blockUpdate(data, 0, data.length)\r\n }\r\n\r\n doFinal (c3) {\r\n const yWords = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].hexToArray(this.p2.getY().toBigInteger().toRadix(16))\r\n this.sm3c3.blockUpdate(yWords, 0, yWords.length)\r\n this.sm3c3.doFinal(c3, 0)\r\n this.reset()\r\n }\r\n\r\n createPoint (x, y) {\r\n const publicKey = '04' + x + y\r\n const point = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getGlobalCurve().decodePointHex(publicKey)\r\n return point\r\n }\r\n}\r\n\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SM2Cipher);\r\n\n\n//# sourceURL=webpack://SM/./src/sm2/sm2.js?");
/***/ }),
/***/ "./src/sm2/sm3.js":
/*!************************!*\
!*** ./src/sm2/sm3.js ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/sm2/utils.js\");\n/* eslint-disable eqeqeq */\r\n/* eslint-disable camelcase */\r\n\r\n\r\n\r\nconst copyArray = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\r\n for (let i = 0; i < length; i++) destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]\r\n}\r\n\r\nconst Int32 = {\r\n minValue: -parseInt('10000000000000000000000000000000', 2),\r\n maxValue: parseInt('1111111111111111111111111111111', 2),\r\n parse: function (n) {\r\n if (n < this.minValue) {\r\n const bigInteger = -n\r\n const bigIntegerRadix = bigInteger.toString(2)\r\n const subBigIntegerRadix = bigIntegerRadix.substr(bigIntegerRadix.length - 31, 31)\r\n let reBigIntegerRadix = ''\r\n for (let i = 0; i < subBigIntegerRadix.length; i++) {\r\n const subBigIntegerRadixItem = subBigIntegerRadix.substr(i, 1)\r\n reBigIntegerRadix += subBigIntegerRadixItem == '0' ? '1' : '0'\r\n }\r\n const result = parseInt(reBigIntegerRadix, 2)\r\n return (result + 1)\r\n } else if (n > this.maxValue) {\r\n const bigInteger = Number(n)\r\n const bigIntegerRadix = bigInteger.toString(2)\r\n const subBigIntegerRadix = bigIntegerRadix.substr(bigIntegerRadix.length - 31, 31)\r\n let reBigIntegerRadix = ''\r\n for (let i = 0; i < subBigIntegerRadix.length; i++) {\r\n const subBigIntegerRadixItem = subBigIntegerRadix.substr(i, 1)\r\n reBigIntegerRadix += subBigIntegerRadixItem == '0' ? '1' : '0'\r\n }\r\n const result = parseInt(reBigIntegerRadix, 2)\r\n return -(result + 1)\r\n } else {\r\n return n\r\n }\r\n },\r\n parseByte: function (n) {\r\n if (n < 0) {\r\n const bigInteger = -n\r\n const bigIntegerRadix = bigInteger.toString(2)\r\n const subBigIntegerRadix = bigIntegerRadix.substr(bigIntegerRadix.length - 8, 8)\r\n let reBigIntegerRadix = ''\r\n for (let i = 0; i < subBigIntegerRadix.length; i++) {\r\n const subBigIntegerRadixItem = subBigIntegerRadix.substr(i, 1)\r\n reBigIntegerRadix += subBigIntegerRadixItem == '0' ? '1' : '0'\r\n }\r\n const result = parseInt(reBigIntegerRadix, 2)\r\n return (result + 1)\r\n } else if (n > 255) {\r\n const bigInteger = Number(n)\r\n const bigIntegerRadix = bigInteger.toString(2)\r\n return parseInt(bigIntegerRadix.substr(bigIntegerRadix.length - 8, 8), 2)\r\n } else {\r\n return n\r\n }\r\n }\r\n}\r\n\r\nclass SM3Digest {\r\n constructor () {\r\n this.xBuf = []\r\n this.xBufOff = 0\r\n this.byteCount = 0\r\n this.DIGEST_LENGTH = 32\r\n this.v0 = [0x7380166f, 0x4914b2b9, 0x172442d7, 0xda8a0600, 0xa96f30bc, 0x163138aa, 0xe38dee4d, 0xb0fb0e4e]\r\n this.v0 = [0x7380166f, 0x4914b2b9, 0x172442d7, -628488704, -1452330820, 0x163138aa, -477237683, -1325724082]\r\n this.v = new Array(8)\r\n this.v_ = new Array(8)\r\n this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\r\n this.X = new Array(68)\r\n this.xOff = 0\r\n this.T_00_15 = 0x79cc4519\r\n this.T_16_63 = 0x7a879d8a\r\n if (arguments.length > 0) {\r\n this.initDigest(arguments[0])\r\n } else {\r\n this.init()\r\n }\r\n }\r\n\r\n init () {\r\n this.xBuf = new Array(4)\r\n this.reset()\r\n }\r\n\r\n initDigest (t) {\r\n this.xBuf = [].concat(t.xBuf)\r\n this.xBufOff = t.xBufOff\r\n this.byteCount = t.byteCount\r\n copyArray(t.X, 0, this.X, 0, t.X.length)\r\n this.xOff = t.xOff\r\n copyArray(t.v, 0, this.v, 0, t.v.length)\r\n }\r\n\r\n getDigestSize () {\r\n return this.DIGEST_LENGTH\r\n }\r\
/***/ }),
/***/ "./src/sm2/utils.js":
/*!**************************!*\
!*** ./src/sm2/utils.js ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ec */ \"./src/sm2/ec.js\");\n/* harmony import */ var _jsbn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsbn.js */ \"./src/sm2/jsbn.js\");\n/* eslint-disable eqeqeq */\r\n\r\n\r\n\r\nconst rng = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.SecureRandom()\r\nconst { curve, G, n } = generateEcparam()\r\n\r\n/**\r\n * 获取公共椭圆曲线\r\n */\r\nfunction getGlobalCurve () {\r\n return curve\r\n}\r\n\r\n/**\r\n * 生成ecparam\r\n */\r\nfunction generateEcparam () {\r\n // 椭圆曲线\r\n const p = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF', 16)\r\n const a = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC', 16)\r\n const b = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger('28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93', 16)\r\n const curve = new _ec__WEBPACK_IMPORTED_MODULE_0__.ECCurveFp(p, a, b)\r\n\r\n // 基点\r\n const gxHex = '32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7'\r\n const gyHex = 'BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0'\r\n const G = curve.decodePointHex('04' + gxHex + gyHex)\r\n\r\n const n = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123', 16)\r\n\r\n return { curve, G, n }\r\n}\r\n\r\n/**\r\n * 生成密钥对\r\n */\r\nfunction generateKeyPairHex () {\r\n const d = new _jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger(n.bitLength(), rng).mod(n.subtract(_jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger.ONE)).add(_jsbn_js__WEBPACK_IMPORTED_MODULE_1__.BigInteger.ONE) // 随机数\r\n const privateKey = leftPad(d.toString(16), 64)\r\n\r\n const P = G.multiply(d) // P = dGp 为公钥d 为私钥\r\n const Px = leftPad(P.getX().toBigInteger().toString(16), 64)\r\n const Py = leftPad(P.getY().toBigInteger().toString(16), 64)\r\n const publicKey = '04' + Px + Py\r\n\r\n return { privateKey, publicKey }\r\n}\r\n\r\n/**\r\n * 解析utf8字符串到16进制\r\n */\r\nfunction parseUtf8StringToHex (input) {\r\n input = unescape(encodeURIComponent(input))\r\n\r\n const length = input.length\r\n\r\n // 转换到字数组\r\n const words = []\r\n for (let i = 0; i < length; i++) {\r\n words[i >>> 2] |= (input.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8)\r\n }\r\n\r\n // 转换到16进制\r\n const hexChars = []\r\n for (let i = 0; i < length; i++) {\r\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff\r\n hexChars.push((bite >>> 4).toString(16))\r\n hexChars.push((bite & 0x0f).toString(16))\r\n }\r\n\r\n return hexChars.join('')\r\n}\r\n\r\n/**\r\n * 解析arrayBuffer到16进制字符串\r\n */\r\nfunction parseArrayBufferToHex (input) {\r\n return Array.prototype.map.call(new Uint8Array(input), x => ('00' + x.toString(16)).slice(-2)).join('')\r\n}\r\n\r\n/**\r\n * 补全16进制字符串\r\n */\r\nfunction leftPad (input, num) {\r\n if (input.length >= num) return input\r\n\r\n return (new Array(num - input.length + 1)).join('0') + input\r\n}\r\n\r\n/**\r\n * 转成16进制串\r\n */\r\nfunction arrayToHex (arr) {\r\n const words = []\r\n let j = 0\r\n for (let i = 0; i < arr.length * 2; i += 2) {\r\n words[i >>> 3] |= parseInt(arr[j], 10) << (24 - (i % 8) * 4)\r\n j++\r\n }\r\n\r\n // 转换到16进制\r\n const hexChars = []\r\n for (let i = 0; i < arr.length; i++) {\r\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff\r\n hexChars.push((bite >>> 4).toString(16))\r\n hexChars.push((bite & 0x0f).toString(16))\r\n }\r\n\r\n return hexChars.join('')\r\n}\r\n\r\n/**\r\n * 转成utf8串\r\n */\r\nfunction arrayToUtf8 (arr) {\r\
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./index.js");
/******/ SM = __webpack_exports__;
/******/
/******/ })()
;