From the X.509 RFC, in the "Implicitly Tagged Module" section:
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
DistributionPoint ::= SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
reasons [1] ReasonFlags OPTIONAL,
cRLIssuer [2] GeneralNames OPTIONAL }
DistributionPointName ::= CHOICE {
fullName [0] GeneralNames,
nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
GeneralName ::= CHOICE {
otherName [0] AnotherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER }
How would x400Address be encoded? Like this?:
SEQUENCE {
SEQUENCE {
[0] {
[3] {
...
}
}
}
}
The first [0] is from DistributionPoint (which is replacing DistributionPointName's [0] tag) and the [3] is from GeneralName.
If that's how it's supposed to work, though, then why does DistributionPoint even have context-specific tags?