On 1/10/03 6:58 pm, Graham Barr <[EMAIL PROTECTED]> wrote:

> On 1 Oct 2003, at 18:10, Chris Ridd wrote:
>>>  extnValue [UNIVERSAL 4] EXPLICIT ANY DEFINED BY extnID
>>> 
>>> But that causes a parse error as it is expecting the tag to have the
>>> constructor bit set :(
>>> 
>>> Maybe I could add an extension so we can write
>>> 
>>>  extnValue [UNIVERSAL 4] CONTAINING ANY DEFINED BY extnID
>>> 
>>> Which is identical to explicit, but does not set the constructor bit
>> 
>> 'ANY DEFINED BY' just encodes the actual value in place of the 'ANY',
>> as far
>> as I know. This X.509 stuff is different - it encodes the value and
>> then
>> encodes a real OCTET STRING containing the encoded value.
> 
> I know, and that is basically what EXPLICIT does. C::ASN1 already

Yes, assuming UNIVERSAL 4 is OCTET STRING (which I'd overlooked in your
mail)...

What X.509 is doing is not formally describable (read "is indescribable") in
ASN.1, and X.509(2000) resorts to this:

Extension ::= SEQUENCE {
    extnId    EXTENSION.&id ({ExtensionSet}),
    critical  BOOLEAN DEFAULT FALSE,
    extnValue OCTET STRING
              -- contains a DER encoding of a value of type &ExtnType
              -- for the extension object identified by extnId -- }

> accepts the syntax above, but it sets the constructor bit. CONTAINING
> would be a way around it.

Yup. Not especially clean, but a useful extension nonetheless. If there were
a way of embedding the inner value inside a BIT STRING as well, that would
also be useful. (So you can't just stick a tag at the front, you'd have to
add the extra leading octet in the value describing the unused bits.)

Cheers,

Chris

Reply via email to