Encryption of the Data in Node JS for the Bank integration

Here is the encryption doing for the request body from the node js application

const express = require(‘express’);

const router = express.Router();

const axios = require(‘axios’).default;

const mycrypto = require(“../../../javascript/crypto”);

const fs = require(‘fs’);

const path = require(‘path’);

const aesjs = require(“aes-js”);

const { RSA, Crypt } = require(‘hybrid-crypto-js’);

const rsa = new RSA();

const crypt = new Crypt();

require(‘dotenv’).config();

const GTEN_PRIKEY_PATH = path.resolve(__dirname, “../../../../keys/iciciprivate.txt”);

const ICICI_PUBKEY_PATH = path.resolve(__dirname, “../../../../keys/icicipublic_uat.txt”);

console.log(“GTEN_PRIKEY_PATH:”, GTEN_PRIKEY_PATH);

console.log(“ICICI_PUBKEY_PATH:”, ICICI_PUBKEY_PATH);

const ICICI_BANK_URL = process.env.ICICI_UAT_BANK_API;

const apiKey = process.env.UAT_API_KEY;

const PASS = “”;

router.post(‘/’, async (req, response) => {

 try {

  const { CORPID, USERID, AGGRID, ACCOUNTNO, FROMDATE, TODATE, URN } = req.body;

  const requestData = {

   CORPID,

   USERID,

   AGGRID,

   URN,

   ACCOUNTNO,

   FROMDATE,

   TODATE

  };

  var params = {

   “CORPID”: “PRACHICIB1”,

   “USERID”: “USER3”,

   “AGGRID”: “OTOE0832”,

   “URN”: “SR256689761”,

   “ACCOUNTNO”: “000451000301”,

   “FROMDATE”: “01-01-2016”,

   “TODATE”: “30-01-2016”

 };

 console.log(“params: “, JSON.stringify(params));

 console.log(“Requestbody”, requestData);

 var request = await mycrypto.encryptViaPublicKey(JSON.stringify(params), ICICI_PUBKEY_PATH, PASS);

 console.log(“Enc(Public):”, request);

  } catch (error) {

   console.error(“**** This is Error”, error);

   response.status(500).json({ “data”: “Failed”, “code”: 400, “error”: error.message });

  }

 } catch (error) {

  response.status(500).json({ “data”: “Failed”, “code”: 400, “error”: error.message });

  console.log(“Error Msg”, error);

  next(error); // Forwarding error to the error handler middleware

 }

});

module.exports = router;

Crypto Module for the encryption

const crypto = require(‘crypto’)

const path = require(‘path’)

const fs = require(‘fs’)

module.exports = {

  encryptViaPrivateKey: async function (input, pathToKey, passphrase) {

    console.log(“==> encryptViaPrivateKey”);

    const absolutePath = path.resolve(pathToKey);

    const key = fs.readFileSync(absolutePath, ‘utf8’);

    const buffer = Buffer.from(input, ‘utf8’);

    const output = crypto.privateEncrypt(

      {

        key: key.toString(),

        passphrase: passphrase,

        padding: crypto.constants.RSA_PKCS1_PADDING

      },

      buffer,

    )

    return output.toString(‘base64’);

  },

  decryptViaPrivateKey: async function (input, pathToKey, passphrase) {

    console.log(“==> decryptViaPrivateKey”);

    const absolutePath = path.resolve(pathToKey);

    const key = fs.readFileSync(absolutePath, ‘utf8’);

    const buffer = Buffer.from(input, ‘base64’);

    const output = crypto.privateDecrypt(

      {

        key: key.toString(),

        passphrase: passphrase,

        padding: crypto.constants.RSA_PKCS1_PADDING

      },

      buffer,

    )

    return output.toString(‘utf8’);

  },

  encryptViaPublicKey: async function (input, pathToKey, passphrase) {

    console.log(“==> encryptViaPublicKey”);

    const absolutePath = path.resolve(pathToKey);

    const key = fs.readFileSync(absolutePath, ‘utf8’);

    const buffer = Buffer.from(input, ‘utf8’);

    const output = crypto.publicEncrypt(

      {

        key: key.toString(),

        passphrase: passphrase,

        padding: crypto.constants.RSA_PKCS1_PADDING

      },

      buffer,

    )

    return output.toString(‘base64’);

  },

  decryptViaPublicKey: async function (input, pathToKey, passphrase) {

    console.log(“==> decryptViaPublicKey”);

    const absolutePath = path.resolve(pathToKey);

    const key = fs.readFileSync(absolutePath, ‘utf8’);

    const buffer = Buffer.from(input, ‘base64’);

    const output = crypto.publicDecrypt(

      {

        key: key.toString(),

        passphrase: passphrase,

        padding: crypto.constants.RSA_PKCS1_PADDING

      },

      buffer,

    )

    return output.toString(‘utf8’);

  },

   

}

Leave a comment

Your email address will not be published. Required fields are marked *