Browse Source

paypro: a lot of parser debugging.

patch-2
Christopher Jeffrey 11 years ago
parent
commit
69f3fbd03d
  1. 113
      lib/PayPro.js

113
lib/PayPro.js

@ -147,7 +147,7 @@ PayPro.prototype.x509Verify = function() {
// http://www.ietf.org/rfc/rfc5280.txt
// http://tools.ietf.org/html/rfc5280#section-4.2
//
var extensions = rfc5280.decodeExtensions(c, { partial: true });
var extensions = rfc5280.decodeExtensions(c, { partial: false });
var extensionsVerified = extensions.verified;
// Object.keys(extensions).forEach(function(key) {
@ -201,7 +201,15 @@ var rfc5280 = {};
var AuthorityKeyIdentifier =
rfc5280.AuthorityKeyIdentifier = asn1.define('AuthorityKeyIdentifier', function() {
// XXX Parse Error
this.any();
return;
// decodedTag: {"cls":"context","primitive":true,"tag":0,"tagStr":"end"}
// expectedTag: "octstr"
this.seq().obj(
// this.key('_unknown').end(),
this.key('keyIdentifier').optional().use(KeyIdentifier),
this.key('authorityCertIssuer').optional().use(GeneralNames),
this.key('authorityCertSerialNumber').optional().use(CertificateSerialNumber)
@ -242,7 +250,9 @@ rfc5280.GeneralNames = asn1.define('GeneralNames', function() {
var GeneralName =
rfc5280.GeneralName = asn1.define('GeneralName', function() {
this.choice({
otherName: this.use(OtherName),
_unknown: this.int(),
otherName: this.use(AnotherName),
// otherName: this.use(rfc3280.Name),
rfc822Name: this.ia5str(),
dNSName: this.ia5str(),
x400Address: this.use(ORAddress),
@ -255,11 +265,79 @@ rfc5280.GeneralName = asn1.define('GeneralName', function() {
});
/**
* #### OtherName
* #### AnotherName
* Also referenced as "OtherName"
*/
var OtherName =
rfc5280.OtherName = asn1.define('OtherName', function() {
var AnotherName =
rfc5280.AnotherName = asn1.define('AnotherName', function() {
// XXX Parse Error
// this.any();
// return;
// XXX THE ROOT OF THE PROBLEM LIES HERE:
// Used by Subject Alternative Name
// Fails on the objid()
// input._reporterState.path is empty array, which is why we get '(shallow)'
// { _reporterState: { obj: {}, path: [], options: { partial: false }, errors: [] },
// base: <Buffer 30 1a 82 0c 2a 2e 62 69 74 70 61 79 2e 63 6f 6d 82 0a 62 69 74 70 61 79 2e 63 6f 6d>,
// offset: 2,
// length: 28 }
// ~/work/node_modules/asn1.js/lib/asn1/decoders/der.js
// ~/work/node_modules/asn1.js/lib/asn1/base/node.js L459
// node._decode(input) call error.
// Failed to match tag: "seq" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "ia5str" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "ia5str" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "seq" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "seqof" at: (shallow)
// node._decode(input) call error.
// Choice not matched at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "seq" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "ia5str" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "octstr" at: (shallow)
// node._decode(input) call error.
// Failed to match tag: "objid" at: (shallow)
// ~/work/node_modules/asn1.js/lib/asn1/decoders/der.js L66
// It's decoding it as an int (decodedTag):
// It's describing GeneralNames:
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "seq"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "ia5str"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "ia5str"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "seq"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "seqof"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "seq"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "ia5str"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "octstr"
// decodedTag: {"cls":"context","primitive":true,"tag":2,"tagStr":"int"}
// expectedTag: "objid"
// Specification:
// this.seq().obj(
// this.key('typeId').objid(),
// this.key('value').explicit(0).any()
// );
this.seq().obj(
this.key('typeId').objid(),
this.key('value').explicit(0).any()
@ -748,16 +826,38 @@ rfc5280.DistributionPoint = asn1.define('DistributionPoint', function() {
var DistributionPointName =
rfc5280.DistributionPointName = asn1.define('DistributionPointName', function() {
// XXX Parse Error
// this.any();
// return;
// decodedTag: {"cls":"context","primitive":false,"tag":0,"tagStr":"end"}
// expectedTag: "seqof"
// decodedTag: {"cls":"context","primitive":false,"tag":0,"tagStr":"end"}
// expectedTag: "setof"
// Has tag "end":
// ~/work/node_modules/asn1.js/lib/asn1/constants/der.js
// ~/work/node_modules/asn1.js/lib/asn1/decoders/der.js
// function derDecodeTag(buf, fail) {
this.choice({
// _unknown: this.end(),
fullName: this.use(GeneralNames),
nameRelativeToCRLIssuer: this.use(RelativeDistinguishedName)
});
});
// rfc3280.Name;
// rfc3280.RDNSequence;
// rfc3280.RelativeDistinguishedName
/**
* #### Relative Distinguished Name
*/
var RelativeDistinguishedName =
rfc5280.RelativeDistinguishedName = rfc3280.RelativeDistinguishedName;
var RelativeDistinguishedName =
rfc5280.RelativeDistinguishedName = asn1.define('RelativeDistinguishedName', function() {
this.setof(AttributeTypeAndValue);
@ -850,11 +950,11 @@ rfc5280.extensions = {
name: 'Key Usage',
parse: function(decoded, cert, ext, edata) {
// For bitstr: KeyUsage
// NOTE: nonRepudiation was renamed to contentCommitment:
var data = decoded.data[0];
return {
digitalSignature: !!((data >> 0) & 1),
nonRepudiation: !!((data >> 1) & 1),
// nonRepudiation renamed to contentCommitment:
contentCommitment: !!((data >> 1) & 1),
keyEncipherment: !!((data >> 2) & 1),
dataEncipherment: !!((data >> 3) & 1),
@ -881,6 +981,7 @@ rfc5280.extensions = {
31: {
name: 'CRL Distribution Points',
parse: function(decoded, cert, ext, edata) {
return decoded;
// XXX Find the bitstr: ReasonFlags
print('@@@@@@@@@@@@@@@@@@@@@@@@@@@');
print(decoded);

Loading…
Cancel
Save