Defines metadata for cap_v3's open type extensions.
Each extension has a collection of fields, including:
- an identifier field, whose value distinguishes this extension from others of the same class of extension;
- one or more type fields, whose types take the place of ASN.1 Open types in the class of extension;
- and zero or more value fields.
In actual values for extension fields (as opposed to metadata as defined here):
- the value of an identifier field is of type OpenId,
- the value of a type field is of type ContainingOctetString,
- and the value of a value field is of its declared type.
Such a ContainingOctetString provides a common representation regardless of which extension is used,
containing a DataObject for an extension with a recognised identifier,
or just the BER in a byte array for an extension with an unrecognised identifier.
The particular type of DataObject to use as the containedValue in a ContainingOctetString is specified in the metadata for the particular extension.
Beware that different versions of the protocol can add extensions with different identifiers,
and different (sub-)protocols can have extensions of the same class in which the same identifiers correspond to different extensions.