gamemoney-frorff
Version:
GameMoney API wrapper for Node.js
65 lines • 2.33 kB
JavaScript
;
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.paramsToString = void 0;
const crypto_1 = __importDefault(require("crypto"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const publicCert = fs_1.default.readFileSync(path_1.default.join(__dirname, '../certs/gm.crt')).toString();
function paramsToString(body) {
let paramsString = '';
let keys = Object.keys(body).sort();
if (Array.isArray(body)) {
keys = keys.sort((a, b) => +a - +b);
}
keys.forEach((key) => {
let value = body[key];
if (key === 'signature') {
return;
}
if (value == null) {
value = '';
}
if (typeof value === 'object') {
value = paramsToString(value);
}
paramsString += `${key}:${value};`;
});
return paramsString;
}
exports.paramsToString = paramsToString;
function verifyRsaSignature(body) {
const paramsString = paramsToString(body);
const signature = body.signature;
return crypto_1.default
.createVerify('RSA-SHA256')
.update(paramsString, 'utf8')
.verify(publicCert, signature, 'base64');
}
exports.verifyRsaSignature = verifyRsaSignature;
function generateRsaSignature(body, privateKey) {
const paramsString = paramsToString(body);
return crypto_1.default
.createSign('RSA-SHA256')
.update(paramsString, 'utf8')
.sign(privateKey, 'base64');
}
exports.generateRsaSignature = generateRsaSignature;
function generateHmacSignature(body, key) {
const paramsString = paramsToString(body);
return crypto_1.default
.createHmac('sha256', key)
.update(paramsString, 'utf8')
.digest('hex');
}
exports.generateHmacSignature = generateHmacSignature;
function getRandomString(length) {
return crypto_1.default
.randomBytes(Math.ceil(length / 2))
.toString('hex')
.slice(0, length);
}
exports.getRandomString = getRandomString;
//# sourceMappingURL=utils.js.map