UNPKG

gamemoney-commonjs

Version:
55 lines (54 loc) 2.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRandomString = exports.generateHmacSignature = exports.generateRsaSignature = exports.verifyRsaSignature = exports.parametersToString = void 0; const node_url_1 = require("node:url"); const node_crypto_1 = __importDefault(require("node:crypto")); const node_fs_1 = __importDefault(require("node:fs")); const publicCert = node_fs_1.default.readFileSync(new node_url_1.URL('certs/gm.crt', (0, node_url_1.pathToFileURL)(__filename))).toString(); function parametersToString(body) { let parametersString = ''; const keys = Object.keys(body).sort(); if (Array.isArray(body)) { keys.sort((a, b) => Number(a) - Number(b)); } for (const key of keys) { let value = body[key]; if (key === 'signature') { continue; } if (value === null || value === undefined) { value = ''; } if (typeof value === 'object' && value !== null) { value = parametersToString(value); } parametersString += `${key}:${value};`; } return parametersString; } exports.parametersToString = parametersToString; function verifyRsaSignature(body) { return node_crypto_1.default .createVerify('RSA-SHA256') .update(parametersToString(body), 'utf8') .verify(publicCert, body.signature, 'base64'); } exports.verifyRsaSignature = verifyRsaSignature; function generateRsaSignature(body, key) { return node_crypto_1.default.createSign('RSA-SHA256').update(parametersToString(body), 'utf8').sign(key, 'base64'); } exports.generateRsaSignature = generateRsaSignature; function generateHmacSignature(body, key) { return node_crypto_1.default.createHmac('sha256', key).update(parametersToString(body), 'utf8').digest('hex'); } exports.generateHmacSignature = generateHmacSignature; function getRandomString(length) { return node_crypto_1.default .randomBytes(Math.ceil(length / 2)) .toString('hex') .slice(0, length); } exports.getRandomString = getRandomString;