paypro: a lot of parser debugging.
This commit is contained in:
parent
4eec70205c
commit
69f3fbd03d
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…
Reference in New Issue
Block a user