UNPKG

mpp-sdk

Version:

SDK to talk to the Memento Payments Platform

44 lines (43 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.keyPair = void 0; const tslib_1 = require("tslib"); const base64_arraybuffer_1 = require("base64-arraybuffer"); // This is not currently used but is kept in case we are able to use the key // exchange method again const keyPair = (getSensitiveDetails) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { // Generate key pair // RSA_ECB_OAEP_SHA256_MGF1_2048 const keyPair = yield crypto.subtle.generateKey({ name: "RSA-OAEP", modulusLength: 2048, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-256", }, true, ["decrypt", "encrypt"]); // Export the public key and PEM encode it const exported = yield crypto.subtle.exportKey("spki", keyPair.publicKey); const exportedAsBase64 = (0, base64_arraybuffer_1.encode)(exported); const pemPublicKey = `-----BEGIN PUBLIC KEY-----\n${exportedAsBase64}\n-----END PUBLIC KEY-----`; const response = yield getSensitiveDetails({ encryption_key: pemPublicKey, }); // If we got the encrypted card details we decrypt them if (response.data.card_details) { // Helper function that decrypts and returns the decrypted value as a // string const decrypt = (data) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const decrypted = yield crypto.subtle.decrypt({ name: "RSA-OAEP" }, keyPair.privateKey, (0, base64_arraybuffer_1.decode)(data)); // Encode to string return String.fromCharCode.apply(null, [...new Uint8Array(decrypted)]); }); // Decrypt card and cvv number at the same time const decryptCardNumber = decrypt(response.data.card_details.card_number); const decryptCvv = decrypt(response.data.card_details.cvv); yield Promise.all([decryptCardNumber, decryptCvv]); // Overwrite the response with the decrypted values response.data.card_details.card_number = yield decryptCardNumber; response.data.card_details.cvv = yield decryptCvv; } return response; }); exports.keyPair = keyPair;