UNPKG

ecpay-einvoice-ts

Version:

ECPay e-invoice SDK for TypeScript

54 lines (53 loc) 1.99 kB
"use strict"; // CBC , AES-128 , PKCS7 var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const crypto_1 = __importDefault(require("crypto")); const utils = (init) => { const encrypt = (data) => { if (typeof data !== 'object') throw new Error('data must be an object'); const jsonStr = JSON.stringify(data); const urlEncode = encodeURIComponent(jsonStr); // convert to dotnet url encode const urlEncodeDotNet = urlEncode.replace(/%[0-9a-f]{2}/g, (match) => { switch (match) { case '%20': return '+'; case '%2d': return '-'; case '%2e': return '.'; case '%5f': return '_'; case '%2a': return '*'; case '%28': return '('; case '%29': return ')'; case '%21': return '!'; default: return match; } }); const cipher = crypto_1.default.createCipheriv('aes-128-cbc', init.HashKey, init.HashIV); let encrypted = cipher.update(urlEncodeDotNet, 'utf8', 'hex'); encrypted += cipher.final('hex'); return Buffer.from(encrypted, 'hex').toString('base64'); }; const decrypt = (data) => { const decipher = crypto_1.default.createDecipheriv('aes-128-cbc', init.HashKey, init.HashIV); let decrypted = decipher.update(data, 'base64', 'utf8'); decrypted += decipher.final('utf8'); return decodeURIComponent(decrypted); }; return { encode: encrypt, decode: decrypt }; }; exports.default = utils;