paypro: fix payment protocol for DER certs.
This commit is contained in:
parent
119ef0d611
commit
2e422c001e
|
@ -209,16 +209,14 @@ PayPro.prototype.sign = function(key) {
|
||||||
if (pki_type === 'SIN') {
|
if (pki_type === 'SIN') {
|
||||||
var sig = this.sinSign(key);
|
var sig = this.sinSign(key);
|
||||||
} else if (pki_type === 'x509+sha1' || pki_type === 'x509+sha256') {
|
} else if (pki_type === 'x509+sha1' || pki_type === 'x509+sha256') {
|
||||||
// XXX node only
|
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
var pki_data = this.get('pki_data'); // contains one or more x509 certs
|
var pki_data = this.get('pki_data'); // contains one or more x509 certs
|
||||||
//var details = this.get('serialized_payment_details');
|
var details = this.get('serialized_payment_details');
|
||||||
var type = pki_type.split('+').toUpperCase();
|
var type = pki_type.split('+').toUpperCase();
|
||||||
var signature = crypto.createSign('RSA-' + type);
|
var signature = crypto.createSign('RSA-' + type);
|
||||||
var buf = this.serializeForSig();
|
var buf = this.serializeForSig();
|
||||||
signature.update(buf);
|
signature.update(buf);
|
||||||
//var pki_data = require('fs').readFileSync(__dirname + '/../test/data/x509.pem');
|
var sig = signature.sign(key);
|
||||||
var sig = signature.sign(pki_data);
|
|
||||||
} else if (pki_type === 'none') {
|
} else if (pki_type === 'none') {
|
||||||
return this;
|
return this;
|
||||||
} else {
|
} else {
|
||||||
|
@ -239,11 +237,10 @@ PayPro.prototype.verify = function() {
|
||||||
if (pki_type === 'SIN') {
|
if (pki_type === 'SIN') {
|
||||||
return this.sinVerify();
|
return this.sinVerify();
|
||||||
} else if (pki_type === 'x509+sha1' || pki_type === 'x509+sha256') {
|
} else if (pki_type === 'x509+sha1' || pki_type === 'x509+sha256') {
|
||||||
// XXX node only
|
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
var sig = this.get('signature');
|
var sig = this.get('signature');
|
||||||
var pki_data = this.get('pki_data');
|
var pki_data = this.get('pki_data');
|
||||||
// var details = this.get('serialized_payment_details');
|
var details = this.get('serialized_payment_details');
|
||||||
var buf = this.serializeForSig();
|
var buf = this.serializeForSig();
|
||||||
var type = pki_type.split('+').toUpperCase();
|
var type = pki_type.split('+').toUpperCase();
|
||||||
var verifier = crypto.createVerify('RSA-' + type);
|
var verifier = crypto.createVerify('RSA-' + type);
|
||||||
|
|
|
@ -7,7 +7,7 @@ var PayPro = require('../PayPro');
|
||||||
var Trusted = require('./Trusted');
|
var Trusted = require('./Trusted');
|
||||||
|
|
||||||
// Use hash table for efficiency:
|
// Use hash table for efficiency:
|
||||||
var trustHash = Trusted.reduce(function(out, cert) {
|
Trusted = Trusted.reduce(function(out, cert) {
|
||||||
cert = cert.replace(/\s+/g, '');
|
cert = cert.replace(/\s+/g, '');
|
||||||
trusted[cert] = true;
|
trusted[cert] = true;
|
||||||
return trusted;
|
return trusted;
|
||||||
|
@ -31,7 +31,7 @@ PayPro.sign = function(key) {
|
||||||
|
|
||||||
// TODO: parse all certs
|
// TODO: parse all certs
|
||||||
var cert = pki_data.split(/-----BEGIN[^\n]*KEY-----/)[0].replace(/\s+/g, '');
|
var cert = pki_data.split(/-----BEGIN[^\n]*KEY-----/)[0].replace(/\s+/g, '');
|
||||||
if (!trustHash[cert])) {
|
if (!Trusted[cert])) {
|
||||||
; // untrusted cert
|
; // untrusted cert
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +39,11 @@ PayPro.sign = function(key) {
|
||||||
alg: type + 'withRSA',
|
alg: type + 'withRSA',
|
||||||
prov: 'cryptojs/jsrsa'
|
prov: 'cryptojs/jsrsa'
|
||||||
});
|
});
|
||||||
|
|
||||||
jsrsaSig.initSign(pki_data);
|
jsrsaSig.initSign(pki_data);
|
||||||
|
|
||||||
jsrsaSig.updateHex(buf.toString('hex'));
|
jsrsaSig.updateHex(buf.toString('hex'));
|
||||||
|
|
||||||
var sig = new Buffer(jsrsasig.sign(), 'hex');
|
var sig = new Buffer(jsrsasig.sign(), 'hex');
|
||||||
} else if (pki_type === 'none') {
|
} else if (pki_type === 'none') {
|
||||||
return this;
|
return this;
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxTJuK2aGLn1dXJKDh4Mw
|
||||||
|
PLUkl3HI5pGnG5ac4l/0ihmq8cwC+FVPgZMS59aykisB+zC7vtvkJk/bv+BSOX7o
|
||||||
|
xdIsuL3dKQFpuXXVfrdb95wYn4M+/njEhXMlhVMH/OCiAg9JKhTKWL6GRWZAAhA7
|
||||||
|
lBRhgSNDTiTC51CbiK7xA6pN4+tQHxomJPXrZRkbB2klOfWwbv93Y3J1KFD+i0PM
|
||||||
|
QHLw7rhEumxC93+HHUVYVH7H1TPZH1bdUJJ02gQeylJssYCJydZPzNT/zuts/KJW
|
||||||
|
dRv5lxwG9u9tMNMghJbmAaMkMGi+o7PNEyP3qHFrYpYhs5pqLHMRNB78QM9IeNjL
|
||||||
|
FwIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
|
@ -320,9 +320,12 @@ describe('PayPro', function() {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var x509sig = new Buffer(0);
|
var x509 = {
|
||||||
var x509path = __dirname + '/data/x509.pem';
|
priv: fs.readFileSync(__dirname + '/data/x509.key'),
|
||||||
var x509pem = fs.readFileSync(x509path);
|
pub: fs.readFileSync(__dirname + '/data/x509.pub'),
|
||||||
|
crt: fs.readFileSync(__dirname + '/data/x509.der'),
|
||||||
|
sig: new Buffer(0)
|
||||||
|
};
|
||||||
|
|
||||||
describe('#x509Sign', function() {
|
describe('#x509Sign', function() {
|
||||||
it('should sign assuming pki_type is x509', function() {
|
it('should sign assuming pki_type is x509', function() {
|
||||||
|
@ -336,17 +339,12 @@ describe('PayPro', function() {
|
||||||
|
|
||||||
paypro.set('serialized_payment_details', pdbuf);
|
paypro.set('serialized_payment_details', pdbuf);
|
||||||
paypro.set('pki_type', 'x509+sha256');
|
paypro.set('pki_type', 'x509+sha256');
|
||||||
paypro.set('pki_data', x509pem);
|
paypro.set('pki_data', x509.crt);
|
||||||
|
|
||||||
var key = new bitcore.Key();
|
paypro.sign(x509.priv);
|
||||||
key.private = bitcore.util.sha256('test key');
|
|
||||||
key.regenerateSync();
|
|
||||||
|
|
||||||
paypro.sign(key);
|
x509.sig = paypro.get('signature');
|
||||||
|
x509.sig.length.should.be.greaterThan(0);
|
||||||
var sig = paypro.get('signature');
|
|
||||||
x509sig = sig;
|
|
||||||
sig.length.should.be.greaterThan(0);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -363,8 +361,8 @@ describe('PayPro', function() {
|
||||||
paypro.set('serialized_payment_details', pdbuf);
|
paypro.set('serialized_payment_details', pdbuf);
|
||||||
paypro.set('pki_type', 'x509+sha256');
|
paypro.set('pki_type', 'x509+sha256');
|
||||||
|
|
||||||
paypro.set('signature', x509sig); // sig buffer
|
paypro.set('signature', x509.sig); // sig buffer
|
||||||
paypro.set('pki_data', x509pem); // contains one or more x509 certs
|
paypro.set('pki_data', x509.crt); // contains one or more x509 certs
|
||||||
|
|
||||||
var verify = paypro.verify();
|
var verify = paypro.verify();
|
||||||
verify.should.equal(true);
|
verify.should.equal(true);
|
||||||
|
|
Loading…
Reference in New Issue