console.info("ondertekening.js geladen"); let publiekeSleutel = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" + "\n" + "mQENBF3FuR0BCACxaQrLc53zFD1ch9lY9tsCcQpmBPRT1x9yPphMcJl+0K3Lu8AB\n" + "F2Nktvol3oV8LT3JCOT9WXwV2srN3CbTAI2h9P6Bu5tHztCfhotNtgFSeX31r2fc\n" + "raDaDgWS8iKOHk2SCRaOk4UqkZkjSnKGs56MWCqDjtKYOl3pCvTPzCsEiduJGPtj\n" + "83xI9WyF3mkGvh9EVcbfGDywfDpZ6zmRfWiAniteZuXLgDtQ4aDC9rfjg6vVTNZz\n" + "Q6ntVzC5bVLHcIpk4fSEXL0M/0yFwycGkbf2mZbbAMJCnXPKo8EEoZwh4d4SusSy\n" + "coJzTUV9Azo57eO25iUdvWeDXtukqvMttapJABEBAAG0IENocmlzIEpvc3RlbiA8\n" + "YmV0YWxlbkBuZXRzb2oubmw+iQFUBBMBCAA+FiEE9y0e0M5kgwkiGmLb2y0MgIMO\n" + "E30FAl3FuR0CGwMFCQPDShMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ2y0M\n" + "gIMOE32Cnwf/aFTKv5vxQTDkvTyKPLh/i/AfA4PEDyRF+oX0INTnZ3BwfUZxFoCs\n" + "XBcxolqtjZdOUPmGEIj0GbDCQs/NyHuqESdiUYdAlodACepqALnIrT2DdlLL5OMx\n" + "NgyakbrsLSWAKVayDbljuEQ0pU+NfkYFgZFDDRM9dVMRw3CEfnEnjiGmU+S6dx6b\n" + "011UCtICWS50d0hXxyjCOM+0BEpYD6mH7ZEx+8CIXkAAZgVwGdmRzvbe2KAtgxGo\n" + "vF+3DzsPfP/GguaUwpFblz6IUnjVKvdc7FYv+1TlJRvCJgKCXWHHtq6eOthIoQgv\n" + "eJGglnQla0Sys+druwpYPAF/08aWXSBW1bkBDQRdxbkdAQgAtySuGbe3+CDetv5A\n" + "vodDVSZu9MzreT1zVUce2EDKWYzukEOuqJLU/49sB11Nh59Q+mV7TRle8+0KXsLq\n" + "3DxZejuN7JBGWKF/6HU8huIunDXkbixK6bPOcXTBKxUJJkW6gRPtwtP03uJqDblq\n" + "U4huA1NNKTJXdz3kiHRyNIZYVFMDaWiX+btRFr3Vcplo9Gyn+uklzArZZjrdIzwv\n" + "xBIRDu+cy8uvREy1KRx+AFWUAidKUldrUZ2kMpaOWG663/4Byvv7HcOTKhdiqVLU\n" + "N9gkeZnr+JQGwme5/+2aZJVuYgjIf89lsYF2y+C4ByNhkaaYkilv7RGhBw+srAdj\n" + "WDHWvwARAQABiQE8BBgBCAAmFiEE9y0e0M5kgwkiGmLb2y0MgIMOE30FAl3FuR0C\n" + "GwwFCQPDShMACgkQ2y0MgIMOE32+dAf/doJBIiNn1WqS7jUmek4Yz71AzzsLVo+z\n" + "5/Q4hDoSaQAXxYZcNt2SUqtmwdZ4vctEWp5xXn9g5ysd82LIT2QR8PRCWdWbiK9Z\n" + "kGYDjabMsOt/+aACfvxbqrL48oXMdTgAET2t6LSKJHoyNlXPvgwtHxKk5O4tANJR\n" + "8DmL1H1UlI9mSuipHYPPRTMxMdknnVaiKwVIXdkTm514XxLWLJB3Hkjrb2AHhwxb\n" + "Lih5kdsxL/DoZ1Ss73SZWVATbpUAtkXbOAcePjGdpUS91krHGFacYSH4plnHGhcT\n" + "2HfZWiN/fi2hfE9gXhRGYXiS8pRd0eMemt+gUIUkAyRy33BHvzkW2Q==\n" + " =hGsM\n" + "-----END PGP PUBLIC KEY BLOCK-----"; let TEKST_FOUT_ENGELS = 0; let TEKST_FOUT_MISSENDE_PARAMETERS = 1; let TEKST_FOUT_ONJUISTE_HANDTEKENING = 2; let TEKST_FOUT_CORRUPTE_HANDTEKENING = 3; let TEKST_FOUT_VERLOPEN = 4; let teksten = []; teksten[TEKST_FOUT_ENGELS] = "Helaas hebben we alleen een Engelse foutmelding voor deze fout. Als u dit aankunt, lees dan de onderstaande tekst:"; teksten[TEKST_FOUT_MISSENDE_PARAMETERS] = "Ongeldige URL: missende parameters."; teksten[TEKST_FOUT_ONJUISTE_HANDTEKENING] = "Ongeldige URL: ongeldige handtekening."; teksten[TEKST_FOUT_CORRUPTE_HANDTEKENING] = "Ongeldige URL: handtekening corrupt."; teksten[TEKST_FOUT_VERLOPEN] = "Betaalverzoek is verlopen."; let vertaaldeFouten = {}; vertaaldeFouten["Error during parsing. This message / key probably does not conform to a valid OpenPGP format."] = TEKST_FOUT_CORRUPTE_HANDTEKENING; function toonFout(tekstId, opties) { vulVeldIn("foutmelding", teksten[tekstId]); document.getElementById("betaal-fout").style.display = "block"; if (opties) { if (opties["toonHandtekening"]) { document.getElementById("fout-handtekening").style.display = "block"; } if (opties["engelseFout"]) { vulVeldIn("fout-engels", opties["engelseFout"]); document.getElementById("fout-engels").style.display = "block"; } } } function vulVeldIn(veld, data) { let velden = document.querySelectorAll("*[data-veld='" + veld + "']"); for (let i = 0; i < velden.length; i++) { velden[i].innerText = data; } } function goeieOuweOntkink(object) { return; //alert(JSON.stringify(object)); } document.addEventListener("DOMContentLoaded", function() { try { //goeieOuweOntkink("Verkrijgen parameters") // Verkrijg parameters let aanvraagParameters = new URLSearchParams(window.location.search); let aan = aanvraagParameters.get("aan"); let betreft = aanvraagParameters.get("betreft"); let bedrag = aanvraagParameters.get("bedrag"); let iban = aanvraagParameters.get("iban"); let datum = aanvraagParameters.get("datum"); let handtekening = aanvraagParameters.get("handtekening"); goeieOuweOntkink(aanvraagParameters); //Controleer of ze allemaal zijn ingevuld. if (aan === null || betreft === null || bedrag === null || iban === null || datum === null || handtekening === null) { toonFout(TEKST_FOUT_MISSENDE_PARAMETERS); return; } // Maak een tekenreeks van alle parameters let nakijkParameters = new URLSearchParams(); nakijkParameters.append("aan", aan); nakijkParameters.append("betreft", betreft); nakijkParameters.append("bedrag", bedrag); nakijkParameters.append("iban", iban); nakijkParameters.append("datum", datum); handtekening = "-----BEGIN PGP SIGNATURE-----\n\n" + handtekening + "\n-----END PGP SIGNATURE-----"; belofte1 = openpgp.cleartext.fromText(nakijkParameters.toString()) belofte2 = openpgp.signature.readArmored(handtekening) belofte3 = openpgp.key.readArmored(publiekeSleutel) Promise.all([belofte1, belofte2, belofte3]) .then(function(waardes) { console.log(waardes); opties = { message: waardes[0], signature: waardes[1], publicKeys: waardes[2].keys } return openpgp.verify(opties).then(function(geverifieerd) { let handtekening2 = geverifieerd.signatures[0]; vulVeldIn("handtekening-vingerafdruk", handtekening2.keyid.toHex()); vulVeldIn("onderteken-datum", handtekening2.signature.packets[0].created.toLocaleString()); vulVeldIn("handtekening", handtekening); if (geverifieerd.signatures[0].valid) { console.info("Handtekekning juist"); return Promise.resolve(geverifieerd.signatures[0]); } else { console.info("Handtekening onjuist"); toonFout(TEKST_FOUT_ONJUISTE_HANDTEKENING, {"toonHandtekening": true}); return Promise.reject(); } }); }, function(fout) { console.error(fout.message); fout2 = vertaaldeFouten[fout.message]; if (fout2) { toonFout(fout2); } else { toonFout(TEKST_FOUT_ENGELS, {"engelseFout": fout.name + ": " + fout.message}); } return Promise.reject(); }).then(function(handtekening2) { console.log(handtekening2); vulVeldIn("aan", aan); vulVeldIn("betreft", betreft); vulVeldIn("bedrag", bedrag); vulVeldIn("iban", iban); document.getElementById("betaal-info").style.display = "block"; }); let ondertekendeTekst = nakijkParameters.toString(); console.log(ondertekendeTekst); } catch(e) { console.error(e); toonFout(TEKST_FOUT_ENGELS, {"engelseFout": e.name + ": " + e.message}); } });