UNPKG

paytm-pg-node-sdk

Version:
135 lines (134 loc) 5.23 kB
"use strict"; /** * Copyright (C) 2019 Paytm. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EncDecUtil = void 0; const crypto = require("crypto"); const _LoggingUtil = require("../utils/LoggingUtil"); /* class: EncDecUtil */ class EncDecUtil { /** * @param data string * @param key string * @return string */ static encrypt(data, key) { var algo = '256'; switch (key.length) { case 16: algo = '128'; break; case 24: algo = '192'; break; case 32: algo = '256'; break; } var cipher = crypto.createCipheriv('AES-' + algo + '-CBC', key, EncDecUtil.IV); var encrypted = cipher.update(data, 'binary', 'base64'); encrypted += cipher.final('base64'); return encrypted; } /** * @param data string * @param key string * @return string */ static decrypt(data, key) { var algo = '256'; switch (key.length) { case 16: algo = '128'; break; case 24: algo = '192'; break; case 32: algo = '256'; break; } var decipher = crypto.createDecipheriv('AES-' + algo + '-CBC', key, EncDecUtil.IV); var decrypted = decipher.update(data, 'base64', 'binary'); try { decrypted += decipher.final('binary'); } catch (e) { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", e); } return decrypted; } /** * @param len number * @return Promise */ static generateRandomString(len) { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "generateRandomString() called"); return new Promise(function (resolve, reject) { crypto.randomBytes((len * 3.0) / 4.0, function (err, buf) { if (!err) { var salt = buf.toString("base64"); _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "generateSalt returns: " + salt); resolve(salt); } else { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "error occurred in generateSalt: " + err); reject(err); } }); }); } /** * @param data string * @param key string * @return Promise */ static generateSignature(data, key) { return __awaiter(this, void 0, void 0, function* () { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "generateSignature() called"); const salt = yield EncDecUtil.generateRandomString(4); var sha256 = crypto.createHash('sha256') .update(data + '|' + salt) .digest('hex'); var final_str = sha256 + salt; var checksum = EncDecUtil.encrypt(final_str, key); _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "getChecksumFromString returns: " + checksum); return checksum; }); } /** * @param string params * @param string key * @param string checksumhash * @return boolean */ static verifySignature(params, key, checksumhash) { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "verifyChecksumByString called()"); if (typeof params !== "string") { _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.WARNING, "EncDecUtil", "param is expected to be string, " + (typeof params) + " given."); return false; } var checksum = EncDecUtil.decrypt(checksumhash, key); var salt = checksum.substr(checksum.length - 4); var sha256 = checksum.substr(0, checksum.length - 4); var hash = crypto.createHash('sha256').update(params + '|' + salt).digest('hex'); var res = (hash === sha256); _LoggingUtil.LoggingUtil.addLog(_LoggingUtil.LoggingUtil.LogLevel.INFO, "EncDecUtil", "verifyChecksumByString returns: " + res); return res; } } exports.EncDecUtil = EncDecUtil; /** * @var string */ EncDecUtil.IV = '@@@@&&&&####$$$$';