@dioxide-js/silas
Version:
RPC utility for Silas
1 lines • 27 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../node_modules/sm-crypto/src/sm4/index.js"],"sourcesContent":["/* eslint-disable no-bitwise, no-mixed-operators, complexity */\r\nconst DECRYPT = 0\r\nconst ROUND = 32\r\nconst BLOCK = 16\r\n\r\nconst Sbox = [\r\n 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05,\r\n 0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99,\r\n 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62,\r\n 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6,\r\n 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8,\r\n 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35,\r\n 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87,\r\n 0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e,\r\n 0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1,\r\n 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3,\r\n 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f,\r\n 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51,\r\n 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8,\r\n 0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0,\r\n 0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84,\r\n 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48\r\n]\r\n\r\nconst CK = [\r\n 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,\r\n 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,\r\n 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,\r\n 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,\r\n 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,\r\n 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,\r\n 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,\r\n 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279\r\n]\r\n\r\n/**\r\n * 16 进制串转字节数组\r\n */\r\nfunction hexToArray(str) {\r\n const arr = []\r\n for (let i = 0, len = str.length; i < len; i += 2) {\r\n arr.push(parseInt(str.substr(i, 2), 16))\r\n }\r\n return arr\r\n}\r\n\r\n/**\r\n * 字节数组转 16 进制串\r\n */\r\nfunction ArrayToHex(arr) {\r\n return arr.map(item => {\r\n item = item.toString(16)\r\n return item.length === 1 ? '0' + item : item\r\n }).join('')\r\n}\r\n\r\n/**\r\n * utf8 串转字节数组\r\n */\r\nfunction utf8ToArray(str) {\r\n const arr = []\r\n\r\n for (let i = 0, len = str.length; i < len; i++) {\r\n const point = str.codePointAt(i)\r\n\r\n if (point <= 0x007f) {\r\n // 单字节,标量值:00000000 00000000 0zzzzzzz\r\n arr.push(point)\r\n } else if (point <= 0x07ff) {\r\n // 双字节,标量值:00000000 00000yyy yyzzzzzz\r\n arr.push(0xc0 | (point >>> 6)) // 110yyyyy(0xc0-0xdf)\r\n arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)\r\n } else if (point <= 0xD7FF || (point >= 0xE000 && point <= 0xFFFF)) {\r\n // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz\r\n arr.push(0xe0 | (point >>> 12)) // 1110xxxx(0xe0-0xef)\r\n arr.push(0x80 | ((point >>> 6) & 0x3f)) // 10yyyyyy(0x80-0xbf)\r\n arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)\r\n } else if (point >= 0x010000 && point <= 0x10FFFF) {\r\n // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz\r\n i++\r\n arr.push((0xf0 | (point >>> 18) & 0x1c)) // 11110www(0xf0-0xf7)\r\n arr.push((0x80 | ((point >>> 12) & 0x3f))) // 10xxxxxx(0x80-0xbf)\r\n arr.push((0x80 | ((point >>> 6) & 0x3f))) // 10yyyyyy(0x80-0xbf)\r\n arr.push((0x80 | (point & 0x3f))) // 10zzzzzz(0x80-0xbf)\r\n } else {\r\n // 五、六字节,暂时不支持\r\n arr.push(point)\r\n throw new Error('input is not supported')\r\n }\r\n }\r\n\r\n return arr\r\n}\r\n\r\n/**\r\n * 字节数组转 utf8 串\r\n */\r\nfunction arrayToUtf8(arr) {\r\n const str = []\r\n for (let i = 0, len = arr.length; i < len; i++) {\r\n if (arr[i] >= 0xf0 && arr[i] <= 0xf7) {\r\n // 四字节\r\n str.push(String.fromCodePoint(((arr[i] & 0x07) << 18) + ((arr[i + 1] & 0x3f) << 12) + ((arr[i + 2] & 0x3f) << 6) + (arr[i + 3] & 0x3f)))\r\n i += 3\r\n } else if (arr[i] >= 0xe0 && arr[i] <= 0xef) {\r\n // 三字节\r\n str.push(String.fromCodePoint(((arr[i] & 0x0f) << 12) + ((arr[i + 1] & 0x3f) << 6) + (arr[i + 2] & 0x3f)))\r\n i += 2\r\n } else if (arr[i] >= 0xc0 && arr[i] <= 0xdf) {\r\n // 双字节\r\n str.push(String.fromCodePoint(((arr[i] & 0x1f) << 6) + (arr[i + 1] & 0x3f)))\r\n i++\r\n } else {\r\n // 单字节\r\n str.push(String.fromCodePoint(arr[i]))\r\n }\r\n }\r\n\r\n return str.join('')\r\n}\r\n\r\n/**\r\n * 32 比特循环左移\r\n */\r\nfunction rotl(x, n) {\r\n const s = n & 31\r\n return (x << s) | (x >>> (32 - s))\r\n}\r\n\r\n/**\r\n * 非线性变换\r\n */\r\nfunction byteSub(a) {\r\n return (Sbox[a >>> 24 & 0xFF] & 0xFF) << 24 |\r\n (Sbox[a >>> 16 & 0xFF] & 0xFF) << 16 |\r\n (Sbox[a >>> 8 & 0xFF] & 0xFF) << 8 |\r\n (Sbox[a & 0xFF] & 0xFF)\r\n}\r\n\r\n/**\r\n * 线性变换,加密/解密用\r\n */\r\nfunction l1(b) {\r\n return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24)\r\n}\r\n\r\n/**\r\n * 线性变换,生成轮密钥用\r\n */\r\nfunction l2(b) {\r\n return b ^ rotl(b, 13) ^ rotl(b, 23)\r\n}\r\n\r\n/**\r\n * 以一组 128 比特进行加密/解密操作\r\n */\r\nfunction sms4Crypt(input, output, roundKey) {\r\n const x = new Array(4)\r\n\r\n // 字节数组转成字数组(此处 1 字 = 32 比特)\r\n const tmp = new Array(4)\r\n for (let i = 0; i < 4; i++) {\r\n tmp[0] = input[4 * i] & 0xff\r\n tmp[1] = input[4 * i + 1] & 0xff\r\n tmp[2] = input[4 * i + 2] & 0xff\r\n tmp[3] = input[4 * i + 3] & 0xff\r\n x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]\r\n }\r\n\r\n // x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i]))\r\n for (let r = 0, mid; r < 32; r += 4) {\r\n mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0]\r\n x[0] ^= l1(byteSub(mid)) // x[4]\r\n\r\n mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1]\r\n x[1] ^= l1(byteSub(mid)) // x[5]\r\n\r\n mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2]\r\n x[2] ^= l1(byteSub(mid)) // x[6]\r\n\r\n mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3]\r\n x[3] ^= l1(byteSub(mid)) // x[7]\r\n }\r\n\r\n // 反序变换\r\n for (let j = 0; j < 16; j += 4) {\r\n output[j] = x[3 - j / 4] >>> 24 & 0xff\r\n output[j + 1] = x[3 - j / 4] >>> 16 & 0xff\r\n output[j + 2] = x[3 - j / 4] >>> 8 & 0xff\r\n output[j + 3] = x[3 - j / 4] & 0xff\r\n }\r\n}\r\n\r\n/**\r\n * 密钥扩展算法\r\n */\r\nfunction sms4KeyExt(key, roundKey, cryptFlag) {\r\n const x = new Array(4)\r\n\r\n // 字节数组转成字数组(此处 1 字 = 32 比特)\r\n const tmp = new Array(4)\r\n for (let i = 0; i < 4; i++) {\r\n tmp[0] = key[0 + 4 * i] & 0xff\r\n tmp[1] = key[1 + 4 * i] & 0xff\r\n tmp[2] = key[2 + 4 * i] & 0xff\r\n tmp[3] = key[3 + 4 * i] & 0xff\r\n x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]\r\n }\r\n\r\n // 与系统参数做异或\r\n x[0] ^= 0xa3b1bac6\r\n x[1] ^= 0x56aa3350\r\n x[2] ^= 0x677d9197\r\n x[3] ^= 0xb27022dc\r\n\r\n // roundKey[i] = x[i + 4] = x[i] ^ l2(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ CK[i]))\r\n for (let r = 0, mid; r < 32; r += 4) {\r\n mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0]\r\n roundKey[r + 0] = x[0] ^= l2(byteSub(mid)) // x[4]\r\n\r\n mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1]\r\n roundKey[r + 1] = x[1] ^= l2(byteSub(mid)) // x[5]\r\n\r\n mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2]\r\n roundKey[r + 2] = x[2] ^= l2(byteSub(mid)) // x[6]\r\n\r\n mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3]\r\n roundKey[r + 3] = x[3] ^= l2(byteSub(mid)) // x[7]\r\n }\r\n\r\n // 解密时使用反序的轮密钥\r\n if (cryptFlag === DECRYPT) {\r\n for (let r = 0, mid; r < 16; r++) {\r\n mid = roundKey[r]\r\n roundKey[r] = roundKey[31 - r]\r\n roundKey[31 - r] = mid\r\n }\r\n }\r\n}\r\n\r\nfunction sm4(inArray, key, cryptFlag, {\r\n padding = 'pkcs#7', mode, iv = [], output = 'string'\r\n} = {}) {\r\n if (mode === 'cbc') {\r\n // CBC 模式,默认走 ECB 模式\r\n if (typeof iv === 'string') iv = hexToArray(iv)\r\n if (iv.length !== (128 / 8)) {\r\n // iv 不是 128 比特\r\n throw new Error('iv is invalid')\r\n }\r\n }\r\n\r\n // 检查 key\r\n if (typeof key === 'string') key = hexToArray(key)\r\n if (key.length !== (128 / 8)) {\r\n // key 不是 128 比特\r\n throw new Error('key is invalid')\r\n }\r\n\r\n // 检查输入\r\n if (typeof inArray === 'string') {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密,输入为 utf8 串\r\n inArray = utf8ToArray(inArray)\r\n } else {\r\n // 解密,输入为 16 进制串\r\n inArray = hexToArray(inArray)\r\n }\r\n } else {\r\n inArray = [...inArray]\r\n }\r\n\r\n // 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7\r\n if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag !== DECRYPT) {\r\n const paddingCount = BLOCK - inArray.length % BLOCK\r\n for (let i = 0; i < paddingCount; i++) inArray.push(paddingCount)\r\n }\r\n\r\n // 生成轮密钥\r\n const roundKey = new Array(ROUND)\r\n sms4KeyExt(key, roundKey, cryptFlag)\r\n\r\n const outArray = []\r\n let lastVector = iv\r\n let restLen = inArray.length\r\n let point = 0\r\n while (restLen >= BLOCK) {\r\n const input = inArray.slice(point, point + 16)\r\n const output = new Array(16)\r\n\r\n if (mode === 'cbc') {\r\n for (let i = 0; i < BLOCK; i++) {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密过程在组加密前进行异或\r\n input[i] ^= lastVector[i]\r\n }\r\n }\r\n }\r\n\r\n sms4Crypt(input, output, roundKey)\r\n\r\n\r\n for (let i = 0; i < BLOCK; i++) {\r\n if (mode === 'cbc') {\r\n if (cryptFlag === DECRYPT) {\r\n // 解密过程在组解密后进行异或\r\n output[i] ^= lastVector[i]\r\n }\r\n }\r\n\r\n outArray[point + i] = output[i]\r\n }\r\n\r\n if (mode === 'cbc') {\r\n if (cryptFlag !== DECRYPT) {\r\n // 使用上一次输出作为加密向量\r\n lastVector = output\r\n } else {\r\n // 使用上一次输入作为解密向量\r\n lastVector = input\r\n }\r\n }\r\n\r\n restLen -= BLOCK\r\n point += BLOCK\r\n }\r\n\r\n // 去除填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7\r\n if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag === DECRYPT) {\r\n const len = outArray.length\r\n const paddingCount = outArray[len - 1]\r\n for (let i = 1; i <= paddingCount; i++) {\r\n if (outArray[len - i] !== paddingCount) throw new Error('padding is invalid')\r\n }\r\n outArray.splice(len - paddingCount, paddingCount)\r\n }\r\n\r\n // 调整输出\r\n if (output !== 'array') {\r\n if (cryptFlag !== DECRYPT) {\r\n // 加密,输出转 16 进制串\r\n return ArrayToHex(outArray)\r\n } else {\r\n // 解密,输出转 utf8 串\r\n return arrayToUtf8(outArray)\r\n }\r\n } else {\r\n return outArray\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n encrypt(inArray, key, options) {\r\n return sm4(inArray, key, 1, options)\r\n },\r\n decrypt(inArray, key, options) {\r\n return sm4(inArray, key, 0, options)\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;CACA,MAAM,OAAO,GAAG,EAAC;CACjB,MAAM,KAAK,GAAG,GAAE;CAChB,MAAM,KAAK,GAAG,GAAE;AAChB;AACA,CAAA,MAAM,IAAI,GAAG;AACb,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAChG,GAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,E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","x_google_ignoreList":[0]}