Eduard Lascu wrote:
Hello ASN.1 experts,
I have a CHOICE type that is defined like this:
time-SecondFractions CHOICE { deci-seconds INTEGER (0..9), centi-seconds INTEGER (0..99), milliseconds INTEGER (0..999) ) DEFAULT(0)
I have a problem interpreting what the BER standard says about encoding such a field. On one hand, members having the Default value are not to be encoded.
BER does not impose such a requirement. This member may or may not be included,
both ways are explicitly allowed.
On the other hand, DER and CER actually do have such restriction.
In a SEQUENCE, the class of the members is context specific and the tag numbers are used too determine which member is present and which is absent.
Do you have "AUTOMATIC TAGS" somewhere in the beginning of your ASN.1 module? If you do, the time-SecondFractions is actually this:
time-SecondFractions [???] EXPLICIT CHOICE {
deci-seconds [0] IMPLICIT INTEGER (0..9),
centi-seconds [1] IMPLICIT INTEGER (0..99),
milliseconds [2] IMPLICIT INTEGER (0..999) ) DEFAULT(0)so all tags are distinct and there's no confusion of what happens if you don't encode time-SecondFractions.
On the other hand, BER says that the encoding of a choice value shall be the same as the encoding of the value of the chosen type. If the inner members are not OPTIONAL and cannot have a DEFAULT VALUE everything is fine. But if they are OPTIONAL or if they can have a DEFAULT VALUE (such as my case, above described) I am confused.
If my chosen type has exactly the default value, how do I encode the Choice?
You should skip that time-SecondFractions field altogether.
-- Lev Walkin [EMAIL PROTECTED] _______________________________________________ ASN1 mailing list [email protected] http://lists.asn1.org/mailman/listinfo/asn1
