@dioxide-js/silas
Version:
RPC utility for Silas
1 lines • 16.2 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../node_modules/sm-crypto/src/sm2/index.js"],"sourcesContent":["/* eslint-disable no-use-before-define */\nconst {BigInteger} = require('jsbn')\nconst {encodeDer, decodeDer} = require('./asn1')\nconst _ = require('./utils')\nconst sm3 = require('./sm3').sm3\n\nconst {G, curve, n} = _.generateEcparam()\nconst C1C2C3 = 0\n\n/**\n * 加密\n */\nfunction doEncrypt(msg, publicKey, cipherMode = 1) {\n msg = typeof msg === 'string' ? _.hexToArray(_.utf8ToHex(msg)) : Array.prototype.slice.call(msg)\n publicKey = _.getGlobalCurve().decodePointHex(publicKey) // 先将公钥转成点\n\n const keypair = _.generateKeyPairHex()\n const k = new BigInteger(keypair.privateKey, 16) // 随机数 k\n\n // c1 = k * G\n let c1 = keypair.publicKey\n if (c1.length > 128) c1 = c1.substr(c1.length - 128)\n\n // (x2, y2) = k * publicKey\n const p = publicKey.multiply(k)\n const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64))\n const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64))\n\n // c3 = hash(x2 || msg || y2)\n const c3 = _.arrayToHex(sm3([].concat(x2, msg, y2)))\n\n let ct = 1\n let offset = 0\n let t = [] // 256 位\n const z = [].concat(x2, y2)\n const nextT = () => {\n // (1) Hai = hash(z || ct)\n // (2) ct++\n t = sm3([...z, ct >> 24 & 0x00ff, ct >> 16 & 0x00ff, ct >> 8 & 0x00ff, ct & 0x00ff])\n ct++\n offset = 0\n }\n nextT() // 先生成 Ha1\n\n for (let i = 0, len = msg.length; i < len; i++) {\n // t = Ha1 || Ha2 || Ha3 || Ha4\n if (offset === t.length) nextT()\n\n // c2 = msg ^ t\n msg[i] ^= t[offset++] & 0xff\n }\n const c2 = _.arrayToHex(msg)\n\n return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2\n}\n\n/**\n * 解密\n */\nfunction doDecrypt(encryptData, privateKey, cipherMode = 1, {\n output = 'string',\n} = {}) {\n privateKey = new BigInteger(privateKey, 16)\n\n let c3 = encryptData.substr(128, 64)\n let c2 = encryptData.substr(128 + 64)\n\n if (cipherMode === C1C2C3) {\n c3 = encryptData.substr(encryptData.length - 64)\n c2 = encryptData.substr(128, encryptData.length - 128 - 64)\n }\n\n const msg = _.hexToArray(c2)\n const c1 = _.getGlobalCurve().decodePointHex('04' + encryptData.substr(0, 128))\n\n const p = c1.multiply(privateKey)\n const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64))\n const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64))\n\n let ct = 1\n let offset = 0\n let t = [] // 256 位\n const z = [].concat(x2, y2)\n const nextT = () => {\n // (1) Hai = hash(z || ct)\n // (2) ct++\n t = sm3([...z, ct >> 24 & 0x00ff, ct >> 16 & 0x00ff, ct >> 8 & 0x00ff, ct & 0x00ff])\n ct++\n offset = 0\n }\n nextT() // 先生成 Ha1\n\n for (let i = 0, len = msg.length; i < len; i++) {\n // t = Ha1 || Ha2 || Ha3 || Ha4\n if (offset === t.length) nextT()\n\n // c2 = msg ^ t\n msg[i] ^= t[offset++] & 0xff\n }\n\n // c3 = hash(x2 || msg || y2)\n const checkC3 = _.arrayToHex(sm3([].concat(x2, msg, y2)))\n\n if (checkC3 === c3.toLowerCase()) {\n return output === 'array' ? msg : _.arrayToUtf8(msg)\n } else {\n return output === 'array' ? [] : ''\n }\n}\n\n/**\n * 签名\n */\nfunction doSignature(msg, privateKey, {\n pointPool, der, hash, publicKey, userId\n} = {}) {\n let hashHex = typeof msg === 'string' ? _.utf8ToHex(msg) : _.arrayToHex(msg)\n\n if (hash) {\n // sm3杂凑\n publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey)\n hashHex = getHash(hashHex, publicKey, userId)\n }\n\n const dA = new BigInteger(privateKey, 16)\n const e = new BigInteger(hashHex, 16)\n\n // k\n let k = null\n let r = null\n let s = null\n\n do {\n do {\n let point\n if (pointPool && pointPool.length) {\n point = pointPool.pop()\n } else {\n point = getPoint()\n }\n k = point.k\n\n // r = (e + x1) mod n\n r = e.add(point.x1).mod(n)\n } while (r.equals(BigInteger.ZERO) || r.add(k).equals(n))\n\n // s = ((1 + dA)^-1 * (k - r * dA)) mod n\n s = dA.add(BigInteger.ONE).modInverse(n).multiply(k.subtract(r.multiply(dA))).mod(n)\n } while (s.equals(BigInteger.ZERO))\n\n if (der) return encodeDer(r, s) // asn.1 der 编码\n\n return _.leftPad(r.toString(16), 64) + _.leftPad(s.toString(16), 64)\n}\n\n/**\n * 验签\n */\nfunction doVerifySignature(msg, signHex, publicKey, {der, hash, userId} = {}) {\n let hashHex = typeof msg === 'string' ? _.utf8ToHex(msg) : _.arrayToHex(msg)\n\n if (hash) {\n // sm3杂凑\n hashHex = getHash(hashHex, publicKey, userId)\n }\n\n let r; let\n s\n if (der) {\n const decodeDerObj = decodeDer(signHex) // asn.1 der 解码\n r = decodeDerObj.r\n s = decodeDerObj.s\n } else {\n r = new BigInteger(signHex.substring(0, 64), 16)\n s = new BigInteger(signHex.substring(64), 16)\n }\n\n const PA = curve.decodePointHex(publicKey)\n const e = new BigInteger(hashHex, 16)\n\n // t = (r + s) mod n\n const t = r.add(s).mod(n)\n\n if (t.equals(BigInteger.ZERO)) return false\n\n // x1y1 = s * G + t * PA\n const x1y1 = G.multiply(s).add(PA.multiply(t))\n\n // R = (e + x1) mod n\n const R = e.add(x1y1.getX().toBigInteger()).mod(n)\n\n return r.equals(R)\n}\n\n/**\n * sm3杂凑算法\n */\nfunction getHash(hashHex, publicKey, userId = '1234567812345678') {\n // z = hash(entl || userId || a || b || gx || gy || px || py)\n userId = _.utf8ToHex(userId)\n const a = _.leftPad(G.curve.a.toBigInteger().toRadix(16), 64)\n const b = _.leftPad(G.curve.b.toBigInteger().toRadix(16), 64)\n const gx = _.leftPad(G.getX().toBigInteger().toRadix(16), 64)\n const gy = _.leftPad(G.getY().toBigInteger().toRadix(16), 64)\n let px\n let py\n if (publicKey.length === 128) {\n px = publicKey.substr(0, 64)\n py = publicKey.substr(64, 64)\n } else {\n const point = G.curve.decodePointHex(publicKey)\n px = _.leftPad(point.getX().toBigInteger().toRadix(16), 64)\n py = _.leftPad(point.getY().toBigInteger().toRadix(16), 64)\n }\n const data = _.hexToArray(userId + a + b + gx + gy + px + py)\n\n const entl = userId.length * 4\n data.unshift(entl & 0x00ff)\n data.unshift(entl >> 8 & 0x00ff)\n\n const z = sm3(data)\n\n // e = hash(z || msg)\n return _.arrayToHex(sm3(z.concat(_.hexToArray(hashHex))))\n}\n\n/**\n * 计算公钥\n */\nfunction getPublicKeyFromPrivateKey(privateKey) {\n const PA = G.multiply(new BigInteger(privateKey, 16))\n const x = _.leftPad(PA.getX().toBigInteger().toString(16), 64)\n const y = _.leftPad(PA.getY().toBigInteger().toString(16), 64)\n return '04' + x + y\n}\n\n/**\n * 获取椭圆曲线点\n */\nfunction getPoint() {\n const keypair = _.generateKeyPairHex()\n const PA = curve.decodePointHex(keypair.publicKey)\n\n keypair.k = new BigInteger(keypair.privateKey, 16)\n keypair.x1 = PA.getX().toBigInteger()\n\n return keypair\n}\n\nmodule.exports = {\n generateKeyPairHex: _.generateKeyPairHex,\n compressPublicKeyHex: _.compressPublicKeyHex,\n comparePublicKeyHex: _.comparePublicKeyHex,\n doEncrypt,\n doDecrypt,\n doSignature,\n doVerifySignature,\n getPublicKeyFromPrivateKey,\n getPoint,\n verifyPublicKey: _.verifyPublicKey,\n}\n"],"names":["require$$0","require$$1","require$$2","require$$3"],"mappings":"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","x_google_ignoreList":[0]}