@dioxide-js/silas
Version:
RPC utility for Silas
1 lines • 10.5 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../../../node_modules/sm-crypto/src/sm2/utils.js"],"sourcesContent":["/* eslint-disable no-bitwise, no-mixed-operators, no-use-before-define, max-len */\nconst {BigInteger, SecureRandom} = require('jsbn')\nconst {ECCurveFp} = require('./ec')\n\nconst rng = new SecureRandom()\nconst {curve, G, n} = generateEcparam()\n\n/**\n * 获取公共椭圆曲线\n */\nfunction getGlobalCurve() {\n return curve\n}\n\n/**\n * 生成ecparam\n */\nfunction generateEcparam() {\n // 椭圆曲线\n const p = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF', 16)\n const a = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC', 16)\n const b = new BigInteger('28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93', 16)\n const curve = new ECCurveFp(p, a, b)\n\n // 基点\n const gxHex = '32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7'\n const gyHex = 'BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0'\n const G = curve.decodePointHex('04' + gxHex + gyHex)\n\n const n = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123', 16)\n\n return {curve, G, n}\n}\n\n/**\n * 生成密钥对:publicKey = privateKey * G\n */\nfunction generateKeyPairHex(a, b, c) {\n const random = a ? new BigInteger(a, b, c) : new BigInteger(n.bitLength(), rng)\n const d = random.mod(n.subtract(BigInteger.ONE)).add(BigInteger.ONE) // 随机数\n const privateKey = leftPad(d.toString(16), 64)\n\n const P = G.multiply(d) // P = dG,p 为公钥,d 为私钥\n const Px = leftPad(P.getX().toBigInteger().toString(16), 64)\n const Py = leftPad(P.getY().toBigInteger().toString(16), 64)\n const publicKey = '04' + Px + Py\n\n return {privateKey, publicKey}\n}\n\n/**\n * 生成压缩公钥\n */\nfunction compressPublicKeyHex(s) {\n if (s.length !== 130) throw new Error('Invalid public key to compress')\n\n const len = (s.length - 2) / 2\n const xHex = s.substr(2, len)\n const y = new BigInteger(s.substr(len + 2, len), 16)\n\n let prefix = '03'\n if (y.mod(new BigInteger('2')).equals(BigInteger.ZERO)) prefix = '02'\n\n return prefix + xHex\n}\n\n/**\n * utf8串转16进制串\n */\nfunction utf8ToHex(input) {\n input = unescape(encodeURIComponent(input))\n\n const length = input.length\n\n // 转换到字数组\n const words = []\n for (let i = 0; i < length; i++) {\n words[i >>> 2] |= (input.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8)\n }\n\n // 转换到16进制\n const hexChars = []\n for (let i = 0; i < length; i++) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff\n hexChars.push((bite >>> 4).toString(16))\n hexChars.push((bite & 0x0f).toString(16))\n }\n\n return hexChars.join('')\n}\n\n/**\n * 补全16进制字符串\n */\nfunction leftPad(input, num) {\n if (input.length >= num) return input\n\n return (new Array(num - input.length + 1)).join('0') + input\n}\n\n/**\n * 转成16进制串\n */\nfunction arrayToHex(arr) {\n return arr.map(item => {\n item = item.toString(16)\n return item.length === 1 ? '0' + item : item\n }).join('')\n}\n\n/**\n * 转成utf8串\n */\nfunction arrayToUtf8(arr) {\n const words = []\n let j = 0\n for (let i = 0; i < arr.length * 2; i += 2) {\n words[i >>> 3] |= parseInt(arr[j], 10) << (24 - (i % 8) * 4)\n j++\n }\n\n try {\n const latin1Chars = []\n\n for (let i = 0; i < arr.length; i++) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff\n latin1Chars.push(String.fromCharCode(bite))\n }\n\n return decodeURIComponent(escape(latin1Chars.join('')))\n } catch (e) {\n throw new Error('Malformed UTF-8 data')\n }\n}\n\n/**\n * 转成字节数组\n */\nfunction hexToArray(hexStr) {\n const words = []\n let hexStrLength = hexStr.length\n\n if (hexStrLength % 2 !== 0) {\n hexStr = leftPad(hexStr, hexStrLength + 1)\n }\n\n hexStrLength = hexStr.length\n\n for (let i = 0; i < hexStrLength; i += 2) {\n words.push(parseInt(hexStr.substr(i, 2), 16))\n }\n return words\n}\n\n/**\n * 验证公钥是否为椭圆曲线上的点\n */\nfunction verifyPublicKey(publicKey) {\n const point = curve.decodePointHex(publicKey)\n if (!point) return false\n\n const x = point.getX()\n const y = point.getY()\n\n // 验证 y^2 是否等于 x^3 + ax + b\n return y.square().equals(x.multiply(x.square()).add(x.multiply(curve.a)).add(curve.b))\n}\n\n/**\n * 验证公钥是否等价,等价返回true\n */\nfunction comparePublicKeyHex(publicKey1, publicKey2) {\n const point1 = curve.decodePointHex(publicKey1)\n if (!point1) return false\n\n const point2 = curve.decodePointHex(publicKey2)\n if (!point2) return false\n\n return point1.equals(point2)\n}\n\nmodule.exports = {\n getGlobalCurve,\n generateEcparam,\n generateKeyPairHex,\n compressPublicKeyHex,\n utf8ToHex,\n leftPad,\n arrayToHex,\n arrayToUtf8,\n hexToArray,\n verifyPublicKey,\n comparePublicKeyHex,\n}\n"],"names":["require$$0","require$$1"],"mappings":"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","x_google_ignoreList":[0]}