paypro: treat pki_data as an array.

This commit is contained in:
Christopher Jeffrey 2014-07-17 17:15:25 -07:00
parent 47e1ca5f1e
commit cc7657d843
3 changed files with 32 additions and 40 deletions

View File

@ -224,14 +224,13 @@ PayPro.prototype.sign = function(key) {
var details = this.get('serialized_payment_details');
var type = pki_type.split('+')[1].toUpperCase();
pki_data = pki_data && Array.isArray(pki_data)
? pki_data[0]
: pki_data;
var trusted = [].concat(pki_data).every(function(cert) {
var der = cert.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
return !!Trusted[pem.replace(/\s+/g, '')];
});
var der = pki_data.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
if (!Trusted[pem.replace(/\s+/g, '')]) {
if (!trusted) {
// throw new Error('Unstrusted certificate.');
}
@ -269,18 +268,16 @@ PayPro.prototype.verify = function() {
var verifier = crypto.createVerify('RSA-' + type);
verifier.update(buf);
pki_data = Array.isArray(pki_data)
? pki_data[0]
: pki_data;
return [].concat(pki_data).every(function(cert) {
var der = cert.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
var der = pki_data.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
if (!Trusted[pem.replace(/\s+/g, '')]) {
// throw new Error('Unstrusted certificate.');
}
if (!Trusted[pem.replace(/\s+/g, '')]) {
// throw new Error('Unstrusted certificate.');
}
return verifier.verify(pem, sig);
return verifier.verify(pem, sig);
});
} else if (pki_type === 'none') {
return true;
}

View File

@ -29,14 +29,13 @@ PayPro.sign = function(key) {
var type = pki_type.split('+')[1].toUpperCase();
var buf = this.serializeForSig();
pki_data = pki_data && pki_data.unshift
? pki_data[0]
: pki_data;
var trusted = [].concat(pki_data).every(function(cert) {
var der = cert.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
return !!Trusted[pem.replace(/\s+/g, '')];
});
var der = pki_data.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
if (!Trusted[pem.replace(/\s+/g, '')]) {
if (!trusted) {
// throw new Error('Unstrusted certificate.');
}
@ -79,24 +78,20 @@ PayPro.verify = function() {
prov: 'cryptojs/jsrsa'
});
pki_data = pki_data && pki_data.unshift
? pki_data[0]
: pki_data;
return [].concat(pki_data).every(function(cert) {
var der = cert.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
var der = pki_data.toString('hex');
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(der, 'CERTIFICATE');
if (!Trusted[pem.replace(/\s+/g, '')]) {
// throw new Error('Unstrusted certificate.');
}
if (!Trusted[pem.replace(/\s+/g, '')]) {
// throw new Error('Unstrusted certificate.');
}
jsrsaSig.initVerifyByCertificatePEM(pem);
jsrsaSig.initVerifyByCertificatePEM(pem);
jsrsaSig.updateHex(buf.toString('hex'));
jsrsaSig.updateHex(buf.toString('hex'));
var result = jsrsaSig.verify(sig.toString('hex'));
return result;
return jsrsaSig.verify(sig.toString('hex'));
});
} else if (pki_type === 'none') {
return true;
}

View File

@ -339,7 +339,7 @@ describe('PayPro', function() {
paypro.set('serialized_payment_details', pdbuf);
paypro.set('pki_type', 'x509+sha256');
paypro.set('pki_data', x509.crt);
paypro.set('pki_data', [x509.crt]);
paypro.sign(x509.priv);
@ -362,7 +362,7 @@ describe('PayPro', function() {
paypro.set('pki_type', 'x509+sha256');
paypro.set('signature', x509.sig); // sig buffer
paypro.set('pki_data', x509.crt); // contains one or more x509 certs
paypro.set('pki_data', [x509.crt]); // contains one or more x509 certs
var verify = paypro.verify();
verify.should.equal(true);