ASN.1 objects of arbitrary
int type, void *value);
int type, const void
*a, const ASN1_TYPE *b);
ASN1_TYPE represents the ASN.1 ANY type. An ASN1_TYPE object can store an ASN.1 value of arbitrary type, including constructed types such as a SEQUENCE. It also remembers internally which type it currently holds.
allocates and initializes an empty ASN1_TYPE object of
frees a including the value stored in it, if any. If
a is a
NULL pointer, no action
returns the type of a, represented by one of the
V_ASN1_* constants defined in
frees the value contained in a, if any, and sets
a to type and
value. This function uses the pointer
value internally so it must not be
freed up after the call.
sets the type of a to type and
its value to a copy of value. If copying succeeds, the
previous value that was contained in a is freed. If
copying fails, a remains unchanged.
The type and meaning of the
value argument of
ASN1_TYPE_set1() is determined by the
type argument. If type is
V_ASN1_NULL, value is ignored.
If type is
then the boolean is set to TRUE if value is not
NULL. If type is
V_ASN1_OBJECT, then value is
an ASN1_OBJECT structure. Otherwise
type is an ASN1_STRING
structure. If type corresponds to a primitive type or
a string type, then the contents of the ASN1_STRING
contains the content octets of the type. If type
corresponds to a constructed type or a tagged type
V_ASN1_OTHER), then the
ASN1_STRING contains the entire ASN.1 encoding
verbatim, including tag and length octets.
checks that a and b have the
same type, the same value, and are encoded in the same way.
If the types agree and the values have the
same meaning but are encoded differently, they are considered different. For
example, a boolean value is represented using a single content octet. Under
BER, any non-zero octet represents the TRUE value, but
will only report a match if the content octet is the same.
If either or both of the arguments passed to
NULL, the result is a mismatch. Technically, if
both arguments are
NULL, the two types could be
absent OPTIONAL fields and so should match, however passing
NULL values could also indicate a programming error
(for example an unparseable type which returns
for types which do not match. So applications should
handle the case of two absent values separately.
ASN1_TYPE_new() returns the new
ASN1_TYPE object or
NULL if an
ASN1_TYPE_get() returns the type of
a or 0 if an error occurs. The latter can happen if
a does not contain a value even though its type is not
V_ASN1_NULL. For example, it will always happen for
empty objects newly constructed with
ASN1_TYPE_set1() returns 1 if the copying
succeeds or 0 if it fails.
ASN1_TYPE_cmp() returns 0 for a match or
non-zero for a mismatch.
ASN1_generate_nconf(3), ASN1_item_free(3), ASN1_OBJECT_new(3), ASN1_put_object(3), ASN1_STRING_dup(3), ASN1_STRING_new(3), crypto(3), d2i_ASN1_NULL(3), d2i_ASN1_SEQUENCE_ANY(3), d2i_ASN1_TYPE(3), OBJ_dup(3)
ASN1_TYPE_free() first appeared in SSLeay 0.5.1.
ASN1_TYPE_set() first appeared in SSLeay 0.8.0.
These functions have been available since OpenBSD
ASN1_TYPE_set1() first appeared in OpenSSL
0.9.8h and has been available since OpenBSD 4.5.
ASN1_TYPE_cmp() first appeared in OpenSSL
0.9.8zd, 1.0.0p, and 1.0.1k and has been available since