generic ASN.1 value constructor and
*val_in, const ASN1_ITEM *it);
allocates and initializes an empty ASN.1 value of the type described by the
global static object it.
If the item type described by
it is reference counted,
decrements the reference count of val_in. Otherwise,
or if the reference count reaches 0,
ASN1_item_free() frees val_in,
assuming that it is of the type described by it. If
the true type of val_in fails to match the specified
it, buffer overflows and segmentation faults are
likely to occur. It is not possible to recover the type of an
ASN1_VALUE object by inspecting it; the type always
needs to be remembered separately.
ASN1_VALUE is an incomplete type, and pointers to it always require casting to the correct complete type before they can be dereferenced. For all practical purposes, a pointer to ASN1_VALUE is equivalent to a void pointer.
Depending on it, there
are more than 150 different types that
may return. Most of them are pointers to structures or pointers to arrays of
structures, but there are a few exceptions, for example: If
ASN1_item_new() returns a specific invalid pointer
representing the unique ASN1_NULL object. If
ASN1_item_new() does not return a pointer at all,
but a long value cast to ASN1_VALUE
ASN1_item_new() function returns the
new ASN1_VALUE object if successful; otherwise
NULL is returned and an error code can be retrieved
ASN1_get_object(3), ASN1_item_d2i(3), ASN1_item_digest(3), ASN1_item_pack(3), ASN1_item_sign(3), ASN1_item_verify(3), ASN1_NULL_new(3), ASN1_TYPE_new(3), d2i_ASN1_NULL(3), OBJ_nid2obj(3)
ASN1_item_free() first appeared in OpenSSL 0.9.7 and
have been available since OpenBSD 3.2.
The ASN1_VALUE type compromises type safety and invites programming mistakes that will typically have severe consequences.