ecpay-einvoice-ts
Version:
ECPay e-invoice SDK for TypeScript
54 lines (53 loc) • 1.99 kB
JavaScript
;
// 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;