Skip to content
Snippets Groups Projects
Commit 391fb47f authored by Henrik (Grubba) Grubbström's avatar Henrik (Grubba) Grubbström
Browse files

Standards.X509.TBSCertificate: Some bugfixes.

Fixed clearing of extensions state when reducing version from 3.

Now supports reducing version from 3 to 2.

Fixed some state handling when parsing version 2 fields.
parent 34689e23
No related branches found
No related tags found
Loading
...@@ -395,12 +395,25 @@ class TBSCertificate ...@@ -395,12 +395,25 @@ class TBSCertificate
internal_der = UNDEFINED; internal_der = UNDEFINED;
if (v == 1) { if (v == 1) {
if (sizeof(elements) > 6) { if (sizeof(elements) > 6) {
DBG("Reducing version to %d\n", v);
elements = elements[1..6]; elements = elements[1..6];
issuer_pos = subject_pos = extensions_pos = 0; issuer_pos = subject_pos = extensions_pos = 0;
internal_extensions = ([]);
internal_critical = (<>);
} }
} else if (sizeof(elements) == 6) { } else if (sizeof(elements) == 6) {
DBG("Bumping version to %d\n", v);
elements = ({ version_integer(Integer(v-1)) }) + elements; elements = ({ version_integer(Integer(v-1)) }) + elements;
} else { } else {
if ((v < 3) && extensions_pos) {
DBG("Reducing version to %d\n", v);
elements = elements[..extensions_pos-1];
extensions_pos = 0;
internal_extensions = ([]);
internal_critical = (<>);
} else {
DBG("Bumping version to %d\n", v);
}
elements[0] = version_integer(Integer(v-1)); elements[0] = version_integer(Integer(v-1));
} }
} }
...@@ -648,7 +661,7 @@ class TBSCertificate ...@@ -648,7 +661,7 @@ class TBSCertificate
} }
} }
if (extensions_pos) { if (!extensions_pos) {
if (version < 3) version = 3; if (version < 3) version = 3;
extensions_pos = sizeof(elements); extensions_pos = sizeof(elements);
elements = elements + ({ TaggedType3(r) }); elements = elements + ({ TaggedType3(r) });
...@@ -865,8 +878,6 @@ class TBSCertificate ...@@ -865,8 +878,6 @@ class TBSCertificate
subject_id = BitString()->decode_primitive(a[i]->raw); subject_id = BitString()->decode_primitive(a[i]->raw);
DBG("TBSCertificate: subject_id = %O\n", subject_id); DBG("TBSCertificate: subject_id = %O\n", subject_id);
i++; i++;
if (i == sizeof(a))
return this;
} }
} }
if (version >= 3) { if (version >= 3) {
...@@ -875,6 +886,7 @@ class TBSCertificate ...@@ -875,6 +886,7 @@ class TBSCertificate
sizeof(a[i])==1 && sizeof(a[i])==1 &&
a[i][0]->type_name == "SEQUENCE") { a[i][0]->type_name == "SEQUENCE") {
raw_extensions = a[i][0]; raw_extensions = a[i][0];
i++;
} }
} }
internal_der = asn1->get_der(); internal_der = asn1->get_der();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment