@dioxide-js/silas
Version:
RPC utility for Silas
1 lines • 8.77 kB
Source Map (JSON)
{"version":3,"file":"asn1.mjs","sources":["../../../../../../node_modules/sm-crypto/src/sm2/asn1.js"],"sourcesContent":["/* eslint-disable class-methods-use-this */\r\nconst {BigInteger} = require('jsbn')\r\n\r\nfunction bigintToValue(bigint) {\r\n let h = bigint.toString(16)\r\n if (h[0] !== '-') {\r\n // 正数\r\n if (h.length % 2 === 1) h = '0' + h // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) h = '00' + h // 非0开头,则补一个全0字节\r\n } else {\r\n // 负数\r\n h = h.substr(1)\r\n\r\n let len = h.length\r\n if (len % 2 === 1) len += 1 // 补齐到整字节\r\n else if (!h.match(/^[0-7]/)) len += 2 // 非0开头,则补一个全0字节\r\n\r\n let mask = ''\r\n for (let i = 0; i < len; i++) mask += 'f'\r\n mask = new BigInteger(mask, 16)\r\n\r\n // 对绝对值取反,加1\r\n h = mask.xor(bigint).add(BigInteger.ONE)\r\n h = h.toString(16).replace(/^-/, '')\r\n }\r\n return h\r\n}\r\n\r\nclass ASN1Object {\r\n constructor() {\r\n this.tlv = null\r\n this.t = '00'\r\n this.l = '00'\r\n this.v = ''\r\n }\r\n\r\n /**\r\n * 获取 der 编码比特流16进制串\r\n */\r\n getEncodedHex() {\r\n if (!this.tlv) {\r\n this.v = this.getValue()\r\n this.l = this.getLength()\r\n this.tlv = this.t + this.l + this.v\r\n }\r\n return this.tlv\r\n }\r\n\r\n getLength() {\r\n const n = this.v.length / 2 // 字节数\r\n let nHex = n.toString(16)\r\n if (nHex.length % 2 === 1) nHex = '0' + nHex // 补齐到整字节\r\n\r\n if (n < 128) {\r\n // 短格式,以 0 开头\r\n return nHex\r\n } else {\r\n // 长格式,以 1 开头\r\n const head = 128 + nHex.length / 2 // 1(1位) + 真正的长度占用字节数(7位) + 真正的长度\r\n return head.toString(16) + nHex\r\n }\r\n }\r\n\r\n getValue() {\r\n return ''\r\n }\r\n}\r\n\r\nclass DERInteger extends ASN1Object {\r\n constructor(bigint) {\r\n super()\r\n\r\n this.t = '02' // 整型标签说明\r\n if (bigint) this.v = bigintToValue(bigint)\r\n }\r\n\r\n getValue() {\r\n return this.v\r\n }\r\n}\r\n\r\nclass DERSequence extends ASN1Object {\r\n constructor(asn1Array) {\r\n super()\r\n\r\n this.t = '30' // 序列标签说明\r\n this.asn1Array = asn1Array\r\n }\r\n\r\n getValue() {\r\n this.v = this.asn1Array.map(asn1Object => asn1Object.getEncodedHex()).join('')\r\n return this.v\r\n }\r\n}\r\n\r\n/**\r\n * 获取 l 占用字节数\r\n */\r\nfunction getLenOfL(str, start) {\r\n if (+str[start + 2] < 8) return 1 // l 以0开头,则表示短格式,只占一个字节\r\n return +str.substr(start + 2, 2) & 0x7f + 1 // 长格式,取第一个字节后7位作为长度真正占用字节数,再加上本身\r\n}\r\n\r\n/**\r\n * 获取 l\r\n */\r\nfunction getL(str, start) {\r\n // 获取 l\r\n const len = getLenOfL(str, start)\r\n const l = str.substr(start + 2, len * 2)\r\n\r\n if (!l) return -1\r\n const bigint = +l[0] < 8 ? new BigInteger(l, 16) : new BigInteger(l.substr(2), 16)\r\n\r\n return bigint.intValue()\r\n}\r\n\r\n/**\r\n * 获取 v 的位置\r\n */\r\nfunction getStartOfV(str, start) {\r\n const len = getLenOfL(str, start)\r\n return start + (len + 1) * 2\r\n}\r\n\r\nmodule.exports = {\r\n /**\r\n * ASN.1 der 编码,针对 sm2 签名\r\n */\r\n encodeDer(r, s) {\r\n const derR = new DERInteger(r)\r\n const derS = new DERInteger(s)\r\n const derSeq = new DERSequence([derR, derS])\r\n\r\n return derSeq.getEncodedHex()\r\n },\r\n\r\n /**\r\n * 解析 ASN.1 der,针对 sm2 验签\r\n */\r\n decodeDer(input) {\r\n // 结构:\r\n // input = | tSeq | lSeq | vSeq |\r\n // vSeq = | tR | lR | vR | tS | lS | vS |\r\n const start = getStartOfV(input, 0)\r\n\r\n const vIndexR = getStartOfV(input, start)\r\n const lR = getL(input, start)\r\n const vR = input.substr(vIndexR, lR * 2)\r\n\r\n const nextStart = vIndexR + vR.length\r\n const vIndexS = getStartOfV(input, nextStart)\r\n const lS = getL(input, nextStart)\r\n const vS = input.substr(vIndexS, lS * 2)\r\n\r\n const r = new BigInteger(vR, 16)\r\n const s = new BigInteger(vS, 16)\r\n\r\n return {r, s}\r\n }\r\n}\r\n"],"names":["require$$0"],"mappings":"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","x_google_ignoreList":[0]}