From 2f6938bad078ccea1f7b5c2ebfe3dcab93e8074d Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 23 Jul 2014 14:22:56 -0700 Subject: [PATCH 1/2] paypro: fix handling of pki_data - cert arrays. --- lib/PayPro.js | 4 ++++ lib/browser/PayPro.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/PayPro.js b/lib/PayPro.js index 4812f1483..5a073c3b9 100644 --- a/lib/PayPro.js +++ b/lib/PayPro.js @@ -11,6 +11,8 @@ PayPro.prototype.x509Sign = function(key) { var crypto = require('crypto'); var pki_type = this.get('pki_type'); var pki_data = this.get('pki_data'); // contains one or more x509 certs + pki_data = PayPro.X509Certificates.decode(pki_data); + pki_data = pki_data.certificate; var details = this.get('serialized_payment_details'); var type = pki_type.split('+')[1].toUpperCase(); @@ -38,6 +40,8 @@ PayPro.prototype.x509Verify = function() { var pki_type = this.get('pki_type'); var sig = this.get('signature'); var pki_data = this.get('pki_data'); + pki_data = PayPro.X509Certificates.decode(pki_data); + pki_data = pki_data.certificate; var details = this.get('serialized_payment_details'); var buf = this.serializeForSig(); var type = pki_type.split('+')[1].toUpperCase(); diff --git a/lib/browser/PayPro.js b/lib/browser/PayPro.js index 253d6ba68..e41a8e055 100644 --- a/lib/browser/PayPro.js +++ b/lib/browser/PayPro.js @@ -13,6 +13,8 @@ var RootCerts = require('../common/RootCerts'); PayPro.prototype.x509Sign = function(key) { var pki_type = this.get('pki_type'); var pki_data = this.get('pki_data'); // contains one or more x509 certs + pki_data = PayPro.X509Certificates.decode(pki_data); + pki_data = pki_data.certificate; var type = pki_type.split('+')[1].toUpperCase(); var buf = this.serializeForSig(); @@ -51,6 +53,8 @@ PayPro.prototype.x509Verify = function(key) { var sig = this.get('signature'); var pki_type = this.get('pki_type'); var pki_data = this.get('pki_data'); + pki_data = PayPro.X509Certificates.decode(pki_data); + pki_data = pki_data.certificate; var buf = this.serializeForSig(); var type = pki_type.split('+')[1].toUpperCase(); From f7c247fa12a3a41e283924b2e909e8e3b1caa59a Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 23 Jul 2014 14:23:15 -0700 Subject: [PATCH 2/2] paypro: alter tests to make sure this pki_data bug does not happen again. --- test/test.PayPro.js | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/test/test.PayPro.js b/test/test.PayPro.js index dd943ed57..70969c57b 100644 --- a/test/test.PayPro.js +++ b/test/test.PayPro.js @@ -353,7 +353,13 @@ describe('PayPro', function() { paypro.makePaymentRequest(); paypro.set('serialized_payment_details', pdbuf); paypro.set('pki_type', 'x509+sha256'); - paypro.set('pki_data', x509.der); + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs + paypro.sign(x509.priv); x509.sig1 = paypro.get('signature'); x509.sig1.length.should.be.greaterThan(0); @@ -388,7 +394,13 @@ describe('PayPro', function() { paypro.set('serialized_payment_details', pdbuf); paypro.set('pki_type', 'x509+sha256'); paypro.set('signature', x509.sig1); // sig buffer - paypro.set('pki_data', x509.der); // contains one or more x509 certs + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs + var verify = paypro.verify(); verify.should.equal(true); }); @@ -446,7 +458,12 @@ describe('PayPro', function() { paypro.set('serialized_payment_details', pdbuf); paypro.set('pki_type', 'x509+sha256'); - paypro.set('pki_data', x509.der); + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs var sig = paypro.x509Sign(x509.priv); paypro.set('signature', sig); @@ -470,7 +487,12 @@ describe('PayPro', function() { paypro.set('pki_type', 'x509+sha256'); paypro.set('signature', x509.sig2); // sig buffer - paypro.set('pki_data', x509.der); // contains one or more x509 certs + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs var verify = paypro.x509Verify(); verify.should.equal(true); @@ -489,7 +511,12 @@ describe('PayPro', function() { paypro.set('serialized_payment_details', pdbuf); paypro.set('pki_type', 'x509+sha1'); - paypro.set('pki_data', x509.der); + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs var sig = paypro.x509Sign(x509.priv); paypro.set('signature', sig); @@ -513,7 +540,12 @@ describe('PayPro', function() { paypro.set('pki_type', 'x509+sha1'); paypro.set('signature', x509.sig3); // sig buffer - paypro.set('pki_data', x509.der); // contains one or more x509 certs + + var cr = new PayPro(); + cr = cr.makeX509Certificates(); + cr.set('certificate', [x509.der]); + + paypro.set('pki_data', cr.serialize()); // contains one or more x509 certs var verify = paypro.x509Verify(); verify.should.equal(true);