libtasn1

libtasn1

Synopsis

#define             ASN1_API
#define             ASN1_VERSION
typedef             asn1_retCode;
#define             ASN1_SUCCESS
#define             ASN1_FILE_NOT_FOUND
#define             ASN1_ELEMENT_NOT_FOUND
#define             ASN1_IDENTIFIER_NOT_FOUND
#define             ASN1_DER_ERROR
#define             ASN1_VALUE_NOT_FOUND
#define             ASN1_GENERIC_ERROR
#define             ASN1_VALUE_NOT_VALID
#define             ASN1_TAG_ERROR
#define             ASN1_TAG_IMPLICIT
#define             ASN1_ERROR_TYPE_ANY
#define             ASN1_SYNTAX_ERROR
#define             ASN1_MEM_ERROR
#define             ASN1_MEM_ALLOC_ERROR
#define             ASN1_DER_OVERFLOW
#define             ASN1_NAME_TOO_LONG
#define             ASN1_ARRAY_ERROR
#define             ASN1_ELEMENT_NOT_EMPTY
#define             ASN1_PRINT_NAME
#define             ASN1_PRINT_NAME_TYPE
#define             ASN1_PRINT_NAME_TYPE_VALUE
#define             ASN1_PRINT_ALL
#define             ASN1_CLASS_UNIVERSAL
#define             ASN1_CLASS_APPLICATION
#define             ASN1_CLASS_CONTEXT_SPECIFIC
#define             ASN1_CLASS_PRIVATE
#define             ASN1_CLASS_STRUCTURED
#define             ASN1_TAG_BOOLEAN
#define             ASN1_TAG_INTEGER
#define             ASN1_TAG_SEQUENCE
#define             ASN1_TAG_SET
#define             ASN1_TAG_OCTET_STRING
#define             ASN1_TAG_BIT_STRING
#define             ASN1_TAG_UTCTime
#define             ASN1_TAG_GENERALIZEDTime
#define             ASN1_TAG_OBJECT_ID
#define             ASN1_TAG_ENUMERATED
#define             ASN1_TAG_NULL
#define             ASN1_TAG_GENERALSTRING
typedef             node_asn;
typedef             ASN1_TYPE;
#define             ASN1_TYPE_EMPTY
typedef             ASN1_ARRAY_TYPE;
#define             ASN1_MAX_NAME_SIZE
#define             ASN1_MAX_ERROR_DESCRIPTION_SIZE
asn1_retCode        asn1_parser2tree                    (const char *file_name,
                                                         ASN1_TYPE *definitions,
                                                         char *errorDescription);
asn1_retCode        asn1_parser2array                   (const char *inputFileName,
                                                         const char *outputFileName,
                                                         const char *vectorName,
                                                         char *errorDescription);
asn1_retCode        asn1_array2tree                     (const ASN1_ARRAY_TYPE *array,
                                                         ASN1_TYPE *definitions,
                                                         char *errorDescription);
void                asn1_print_structure                (FILE *out,
                                                         ASN1_TYPE structure,
                                                         const char *name,
                                                         int mode);
asn1_retCode        asn1_create_element                 (ASN1_TYPE definitions,
                                                         const char *source_name,
                                                         ASN1_TYPE *element);
asn1_retCode        asn1_delete_structure               (ASN1_TYPE *structure);
asn1_retCode        asn1_delete_element                 (ASN1_TYPE structure,
                                                         const char *element_name);
asn1_retCode        asn1_write_value                    (ASN1_TYPE node_root,
                                                         const char *name,
                                                         const void *ivalue,
                                                         int len);
asn1_retCode        asn1_read_value                     (ASN1_TYPE root,
                                                         const char *name,
                                                         void *ivalue,
                                                         int *len);
asn1_retCode        asn1_number_of_elements             (ASN1_TYPE element,
                                                         const char *name,
                                                         int *num);
asn1_retCode        asn1_der_coding                     (ASN1_TYPE element,
                                                         const char *name,
                                                         void *ider,
                                                         int *len,
                                                         char *ErrorDescription);
asn1_retCode        asn1_der_decoding                   (ASN1_TYPE *element,
                                                         const void *ider,
                                                         int len,
                                                         char *errorDescription);
asn1_retCode        asn1_der_decoding_element           (ASN1_TYPE *structure,
                                                         const char *elementName,
                                                         const void *ider,
                                                         int len,
                                                         char *errorDescription);
asn1_retCode        asn1_der_decoding_startEnd          (ASN1_TYPE element,
                                                         const void *ider,
                                                         int len,
                                                         const char *name_element,
                                                         int *start,
                                                         int *end);
asn1_retCode        asn1_expand_any_defined_by          (ASN1_TYPE definitions,
                                                         ASN1_TYPE *element);
asn1_retCode        asn1_expand_octet_string            (ASN1_TYPE definitions,
                                                         ASN1_TYPE *element,
                                                         const char *octetName,
                                                         const char *objectName);
asn1_retCode        asn1_read_tag                       (ASN1_TYPE root,
                                                         const char *name,
                                                         int *tagValue,
                                                         int *classValue);
const char *        asn1_find_structure_from_oid        (ASN1_TYPE definitions,
                                                         const char *oidValue);
const char *        asn1_check_version                  (const char *req_version);
const char *        asn1_strerror                       (asn1_retCode error);
void                asn1_perror                         (asn1_retCode error);
int                 asn1_get_tag_der                    (unsigned char *der,
                                                         int der_len,
                                                         unsigned char *cls,
                                                         int *len,
                                                         unsigned long *tag);
void                asn1_octet_der                      (unsigned char *str,
                                                         int str_len,
                                                         unsigned char *der,
                                                         int *der_len);
asn1_retCode        asn1_get_octet_der                  (unsigned char *der,
                                                         int der_len,
                                                         int *ret_len,
                                                         unsigned char *str,
                                                         int str_size,
                                                         int *str_len);
void                asn1_bit_der                        (unsigned char *str,
                                                         int bit_len,
                                                         unsigned char *der,
                                                         int *der_len);
asn1_retCode        asn1_get_bit_der                    (unsigned char *der,
                                                         int der_len,
                                                         int *ret_len,
                                                         unsigned char *str,
                                                         int str_size,
                                                         int *bit_len);
signed long         asn1_get_length_der                 (unsigned char *der,
                                                         int der_len,
                                                         int *len);
signed long         asn1_get_length_ber                 (unsigned char *ber,
                                                         int ber_len,
                                                         int *len);
void                asn1_length_der                     (unsigned long int len,
                                                         unsigned char *ans,
                                                         int *ans_len);
ASN1_TYPE           asn1_find_node                      (ASN1_TYPE pointer,
                                                         const char *name);
asn1_retCode        asn1_copy_node                      (ASN1_TYPE dst,
                                                         const char *dst_name,
                                                         ASN1_TYPE src,
                                                         const char *src_name);
#define             LIBTASN1_VERSION
#define             MAX_NAME_SIZE
#define             MAX_ERROR_DESCRIPTION_SIZE
const char *        libtasn1_strerror                   (asn1_retCode error);
void                libtasn1_perror                     (asn1_retCode error);

Description

Details

ASN1_API

#define             ASN1_API


ASN1_VERSION

#define ASN1_VERSION "2.3"


asn1_retCode

  typedef int asn1_retCode; /* type returned by libtasn1 functions */


ASN1_SUCCESS

#define ASN1_SUCCESS			0


ASN1_FILE_NOT_FOUND

#define ASN1_FILE_NOT_FOUND		1


ASN1_ELEMENT_NOT_FOUND

#define ASN1_ELEMENT_NOT_FOUND		2


ASN1_IDENTIFIER_NOT_FOUND

#define ASN1_IDENTIFIER_NOT_FOUND 3


ASN1_DER_ERROR

#define ASN1_DER_ERROR			4


ASN1_VALUE_NOT_FOUND

#define ASN1_VALUE_NOT_FOUND		5


ASN1_GENERIC_ERROR

#define ASN1_GENERIC_ERROR		6


ASN1_VALUE_NOT_VALID

#define ASN1_VALUE_NOT_VALID		7


ASN1_TAG_ERROR

#define ASN1_TAG_ERROR			8


ASN1_TAG_IMPLICIT

#define ASN1_TAG_IMPLICIT		9


ASN1_ERROR_TYPE_ANY

#define ASN1_ERROR_TYPE_ANY		10


ASN1_SYNTAX_ERROR

#define ASN1_SYNTAX_ERROR		11


ASN1_MEM_ERROR

#define ASN1_MEM_ERROR			12


ASN1_MEM_ALLOC_ERROR

#define ASN1_MEM_ALLOC_ERROR		13


ASN1_DER_OVERFLOW

#define ASN1_DER_OVERFLOW		14


ASN1_NAME_TOO_LONG

#define ASN1_NAME_TOO_LONG		15


ASN1_ARRAY_ERROR

#define ASN1_ARRAY_ERROR		16


ASN1_ELEMENT_NOT_EMPTY

#define ASN1_ELEMENT_NOT_EMPTY		17


ASN1_PRINT_NAME

#define ASN1_PRINT_NAME			1


ASN1_PRINT_NAME_TYPE

#define ASN1_PRINT_NAME_TYPE		2


ASN1_PRINT_NAME_TYPE_VALUE

#define ASN1_PRINT_NAME_TYPE_VALUE 3


ASN1_PRINT_ALL

#define ASN1_PRINT_ALL			4


ASN1_CLASS_UNIVERSAL

#define ASN1_CLASS_UNIVERSAL		0x00 /* old: 1 */


ASN1_CLASS_APPLICATION

#define ASN1_CLASS_APPLICATION		0x40 /* old: 2 */


ASN1_CLASS_CONTEXT_SPECIFIC

#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */


ASN1_CLASS_PRIVATE

#define ASN1_CLASS_PRIVATE		0xC0 /* old: 4 */


ASN1_CLASS_STRUCTURED

#define ASN1_CLASS_STRUCTURED		0x20


ASN1_TAG_BOOLEAN

#define ASN1_TAG_BOOLEAN		0x01


ASN1_TAG_INTEGER

#define ASN1_TAG_INTEGER		0x02


ASN1_TAG_SEQUENCE

#define ASN1_TAG_SEQUENCE		0x10


ASN1_TAG_SET

#define ASN1_TAG_SET			0x11


ASN1_TAG_OCTET_STRING

#define ASN1_TAG_OCTET_STRING		0x04


ASN1_TAG_BIT_STRING

#define ASN1_TAG_BIT_STRING		0x03


ASN1_TAG_UTCTime

#define ASN1_TAG_UTCTime		0x17


ASN1_TAG_GENERALIZEDTime

#define ASN1_TAG_GENERALIZEDTime 0x18


ASN1_TAG_OBJECT_ID

#define ASN1_TAG_OBJECT_ID		0x06


ASN1_TAG_ENUMERATED

#define ASN1_TAG_ENUMERATED		0x0A


ASN1_TAG_NULL

#define ASN1_TAG_NULL			0x05


ASN1_TAG_GENERALSTRING

#define ASN1_TAG_GENERALSTRING		0x1B


node_asn

  typedef struct node_asn_struct node_asn;


ASN1_TYPE

  typedef node_asn *ASN1_TYPE;


ASN1_TYPE_EMPTY

#define ASN1_TYPE_EMPTY  NULL


ASN1_ARRAY_TYPE

  typedef struct static_struct_asn ASN1_ARRAY_TYPE;


ASN1_MAX_NAME_SIZE

#define             ASN1_MAX_NAME_SIZE


ASN1_MAX_ERROR_DESCRIPTION_SIZE

#define             ASN1_MAX_ERROR_DESCRIPTION_SIZE


asn1_parser2tree ()

asn1_retCode        asn1_parser2tree                    (const char *file_name,
                                                         ASN1_TYPE *definitions,
                                                         char *errorDescription);

file_name :

definitions :

errorDescription :

Returns :


asn1_parser2array ()

asn1_retCode        asn1_parser2array                   (const char *inputFileName,
                                                         const char *outputFileName,
                                                         const char *vectorName,
                                                         char *errorDescription);

inputFileName :

outputFileName :

vectorName :

errorDescription :

Returns :


asn1_array2tree ()

asn1_retCode        asn1_array2tree                     (const ASN1_ARRAY_TYPE *array,
                                                         ASN1_TYPE *definitions,
                                                         char *errorDescription);

array :

definitions :

errorDescription :

Returns :


asn1_print_structure ()

void                asn1_print_structure                (FILE *out,
                                                         ASN1_TYPE structure,
                                                         const char *name,
                                                         int mode);

out :

structure :

name :

mode :


asn1_create_element ()

asn1_retCode        asn1_create_element                 (ASN1_TYPE definitions,
                                                         const char *source_name,
                                                         ASN1_TYPE *element);

definitions :

source_name :

element :

Returns :


asn1_delete_structure ()

asn1_retCode        asn1_delete_structure               (ASN1_TYPE *structure);

structure :

Returns :


asn1_delete_element ()

asn1_retCode        asn1_delete_element                 (ASN1_TYPE structure,
                                                         const char *element_name);

structure :

element_name :

Returns :


asn1_write_value ()

asn1_retCode        asn1_write_value                    (ASN1_TYPE node_root,
                                                         const char *name,
                                                         const void *ivalue,
                                                         int len);

node_root :

name :

ivalue :

len :

Returns :


asn1_read_value ()

asn1_retCode        asn1_read_value                     (ASN1_TYPE root,
                                                         const char *name,
                                                         void *ivalue,
                                                         int *len);

root :

name :

ivalue :

len :

Returns :


asn1_number_of_elements ()

asn1_retCode        asn1_number_of_elements             (ASN1_TYPE element,
                                                         const char *name,
                                                         int *num);

element :

name :

num :

Returns :


asn1_der_coding ()

asn1_retCode        asn1_der_coding                     (ASN1_TYPE element,
                                                         const char *name,
                                                         void *ider,
                                                         int *len,
                                                         char *ErrorDescription);

element :

name :

ider :

len :

ErrorDescription :

Returns :


asn1_der_decoding ()

asn1_retCode        asn1_der_decoding                   (ASN1_TYPE *element,
                                                         const void *ider,
                                                         int len,
                                                         char *errorDescription);

element :

ider :

len :

errorDescription :

Returns :


asn1_der_decoding_element ()

asn1_retCode        asn1_der_decoding_element           (ASN1_TYPE *structure,
                                                         const char *elementName,
                                                         const void *ider,
                                                         int len,
                                                         char *errorDescription);

structure :

elementName :

ider :

len :

errorDescription :

Returns :


asn1_der_decoding_startEnd ()

asn1_retCode        asn1_der_decoding_startEnd          (ASN1_TYPE element,
                                                         const void *ider,
                                                         int len,
                                                         const char *name_element,
                                                         int *start,
                                                         int *end);

element :

ider :

len :

name_element :

start :

end :

Returns :


asn1_expand_any_defined_by ()

asn1_retCode        asn1_expand_any_defined_by          (ASN1_TYPE definitions,
                                                         ASN1_TYPE *element);

definitions :

element :

Returns :


asn1_expand_octet_string ()

asn1_retCode        asn1_expand_octet_string            (ASN1_TYPE definitions,
                                                         ASN1_TYPE *element,
                                                         const char *octetName,
                                                         const char *objectName);

definitions :

element :

octetName :

objectName :

Returns :


asn1_read_tag ()

asn1_retCode        asn1_read_tag                       (ASN1_TYPE root,
                                                         const char *name,
                                                         int *tagValue,
                                                         int *classValue);

root :

name :

tagValue :

classValue :

Returns :


asn1_find_structure_from_oid ()

const char *        asn1_find_structure_from_oid        (ASN1_TYPE definitions,
                                                         const char *oidValue);

definitions :

oidValue :

Returns :


asn1_check_version ()

const char *        asn1_check_version                  (const char *req_version);

req_version :

Returns :


asn1_strerror ()

const char *        asn1_strerror                       (asn1_retCode error);

error :

Returns :


asn1_perror ()

void                asn1_perror                         (asn1_retCode error);

error :


asn1_get_tag_der ()

int                 asn1_get_tag_der                    (unsigned char *der,
                                                         int der_len,
                                                         unsigned char *cls,
                                                         int *len,
                                                         unsigned long *tag);

Decode the class and TAG from DER code.

der :

DER data to decode.

der_len :

Length of DER data to decode.

cls :

Output variable containing decoded class.

len :

Output variable containing the length of the DER TAG data.

tag :

Output variable containing the decoded tag.

Returns :

Returns ASN1_SUCCESS on success, or an error.

asn1_octet_der ()

void                asn1_octet_der                      (unsigned char *str,
                                                         int str_len,
                                                         unsigned char *der,
                                                         int *der_len);

Creates the DER coding for an OCTET type (length included).

str :

OCTET string.

str_len :

STR length (str[0]..str[str_len-1]).

der :

string returned.

der_len :

number of meaningful bytes of DER (der[0]..der[ans_len-1]).

asn1_get_octet_der ()

asn1_retCode        asn1_get_octet_der                  (unsigned char *der,
                                                         int der_len,
                                                         int *ret_len,
                                                         unsigned char *str,
                                                         int str_size,
                                                         int *str_len);

Extract an OCTET SEQUENCE from DER data.

der :

DER data to decode containing the OCTET SEQUENCE.

der_len :

Length of DER data to decode.

ret_len :

Output variable containing the length of the DER data.

str :

Pre-allocated output buffer to put decoded OCTET SEQUENCE in.

str_size :

Length of pre-allocated output buffer.

str_len :

Output variable containing the length of the OCTET SEQUENCE.

Returns :

Returns ASN1_SUCCESS on success, or an error.

asn1_bit_der ()

void                asn1_bit_der                        (unsigned char *str,
                                                         int bit_len,
                                                         unsigned char *der,
                                                         int *der_len);

Creates the DER coding for a BIT STRING type (length and pad included).

str :

BIT string.

bit_len :

number of meaningful bits in STR.

der :

string returned.

der_len :

number of meaningful bytes of DER (der[0]..der[ans_len-1]).

asn1_get_bit_der ()

asn1_retCode        asn1_get_bit_der                    (unsigned char *der,
                                                         int der_len,
                                                         int *ret_len,
                                                         unsigned char *str,
                                                         int str_size,
                                                         int *bit_len);

Extract a BIT SEQUENCE from DER data.

der :

DER data to decode containing the BIT SEQUENCE.

der_len :

Length of DER data to decode.

ret_len :

Output variable containing the length of the DER data.

str :

Pre-allocated output buffer to put decoded BIT SEQUENCE in.

str_size :

Length of pre-allocated output buffer.

bit_len :

Output variable containing the size of the BIT SEQUENCE.

Returns :

Return ASN1_SUCCESS on success, or an error.

asn1_get_length_der ()

signed long         asn1_get_length_der                 (unsigned char *der,
                                                         int der_len,
                                                         int *len);

Extract a length field from DER data.

der :

DER data to decode.

der_len :

Length of DER data to decode.

len :

Output variable containing the length of the DER length field.

Returns :

Return the decoded length value, or -1 on indefinite length, or -2 when the value was too big.

asn1_get_length_ber ()

signed long         asn1_get_length_ber                 (unsigned char *ber,
                                                         int ber_len,
                                                         int *len);

Extract a length field from BER data. The difference to asn1_get_length_der() is that this function will return a length even if the value has indefinite encoding.

ber :

BER data to decode.

ber_len :

Length of BER data to decode.

len :

Output variable containing the length of the BER length field.

Returns :

Return the decoded length value, or negative value when the value was too big.

Since 2.0


asn1_length_der ()

void                asn1_length_der                     (unsigned long int len,
                                                         unsigned char *ans,
                                                         int *ans_len);

Creates the DER coding for the LEN parameter (only the length). The ans buffer is pre-allocated and must have room for the output.

len :

value to convert.

ans :

string returned.

ans_len :

number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).

asn1_find_node ()

ASN1_TYPE           asn1_find_node                      (ASN1_TYPE pointer,
                                                         const char *name);

Searches for an element called NAME starting from POINTER. The name is composed by differents identifiers separated by dots. When *POINTER has a name, the first identifier must be the name of *POINTER, otherwise it must be the name of one child of *POINTER.

pointer :

NODE_ASN element pointer.

name :

null terminated string with the element's name to find.

Returns :

the searching result. NULL if not found.

asn1_copy_node ()

asn1_retCode        asn1_copy_node                      (ASN1_TYPE dst,
                                                         const char *dst_name,
                                                         ASN1_TYPE src,
                                                         const char *src_name);

Create a deep copy of a ASN1_TYPE variable.

dst :

Destination ASN1_TYPE node.

dst_name :

Field name in destination node.

src :

Source ASN1_TYPE node.

src_name :

Field name in source node.

Returns :

Return ASN1_SUCCESS on success.

LIBTASN1_VERSION

#define LIBTASN1_VERSION ASN1_VERSION

Warning

LIBTASN1_VERSION is deprecated and should not be used in newly-written code.


MAX_NAME_SIZE

# define MAX_NAME_SIZE ASN1_MAX_NAME_SIZE

Warning

MAX_NAME_SIZE is deprecated and should not be used in newly-written code.


MAX_ERROR_DESCRIPTION_SIZE

# define MAX_ERROR_DESCRIPTION_SIZE ASN1_MAX_ERROR_DESCRIPTION_SIZE

Warning

MAX_ERROR_DESCRIPTION_SIZE is deprecated and should not be used in newly-written code.


libtasn1_strerror ()

const char *        libtasn1_strerror                   (asn1_retCode error);

Warning

libtasn1_strerror is deprecated and should not be used in newly-written code.

error :

Returns :


libtasn1_perror ()

void                libtasn1_perror                     (asn1_retCode error);

Warning

libtasn1_perror is deprecated and should not be used in newly-written code.

error :