From dcea85107a1c9abec5cfc254bd23cb4bc26c9255 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Sun, 16 Sep 2012 21:21:28 +0200 Subject: updated minitasn1 to 2.14. --- lib/minitasn1/coding.c | 4 ++-- lib/minitasn1/decoding.c | 21 ++++++++++---------- lib/minitasn1/element.c | 20 +++++++++++++++++++ lib/minitasn1/errors.c | 2 +- lib/minitasn1/gstr.c | 2 +- lib/minitasn1/int.h | 48 +++++++++++++++++++++++----------------------- lib/minitasn1/libtasn1.h | 42 +++++++++++++++++++++++++++++++++++++--- lib/minitasn1/parser_aux.c | 3 ++- lib/minitasn1/version.c | 2 +- 9 files changed, 101 insertions(+), 43 deletions(-) diff --git a/lib/minitasn1/coding.c b/lib/minitasn1/coding.c index 8b72eba3f4..307dd40d20 100644 --- a/lib/minitasn1/coding.c +++ b/lib/minitasn1/coding.c @@ -256,7 +256,7 @@ _asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len) char *temp, *n_end, *n_start; unsigned char bit7; unsigned long val, val1 = 0; - int str_len = _asn1_strlen(str); + int str_len = _asn1_strlen (str); max_len = *der_len; @@ -266,7 +266,7 @@ _asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len) memcpy (temp, str, str_len); temp[str_len] = '.'; - temp[str_len+1] = 0; + temp[str_len + 1] = 0; counter = 0; n_start = temp; diff --git a/lib/minitasn1/decoding.c b/lib/minitasn1/decoding.c index 1cfad3556b..e6cdb9850b 100644 --- a/lib/minitasn1/decoding.c +++ b/lib/minitasn1/decoding.c @@ -58,11 +58,11 @@ _asn1_error_description_tag_error (ASN1_TYPE node, char *ErrorDescription) * length, or -2 when the value was too big to fit in a int, or -4 * when the decoded length value plus @len would exceed @der_len. **/ -signed long +long asn1_get_length_der (const unsigned char *der, int der_len, int *len) { unsigned int ans, sum, last; - unsigned int k, punt; + int k, punt; *len = 0; if (der_len <= 0) @@ -87,7 +87,7 @@ asn1_get_length_der (const unsigned char *der, int der_len, int *len) last = ans; ans = (ans*256) + der[punt++]; - if (ans < last) + if (ans < last) /* we wrapped around, no bignum support... */ return -2; } @@ -102,13 +102,13 @@ asn1_get_length_der (const unsigned char *der, int der_len, int *len) } sum = ans + *len; - + /* check for overflow as well INT_MAX as a maximum upper * limit for length */ if (sum >= INT_MAX || sum < ans) return -2; - - if (sum > der_len) + + if (((int) sum) > der_len) return -4; return ans; @@ -130,7 +130,8 @@ int asn1_get_tag_der (const unsigned char *der, int der_len, unsigned char *cls, int *len, unsigned long *tag) { - unsigned int punt, ris; + unsigned int ris; + int punt; unsigned int last; if (der == NULL || der_len < 2 || len == NULL) @@ -162,10 +163,10 @@ asn1_get_tag_der (const unsigned char *der, int der_len, return ASN1_DER_ERROR; last = ris; - + ris = (ris * 128) + (der[punt++] & 0x7F); if (ris < last) - return ASN1_DER_ERROR; + return ASN1_DER_ERROR; *len = punt; } @@ -189,7 +190,7 @@ asn1_get_tag_der (const unsigned char *der, int der_len, * * Since: 2.0 **/ -signed long +long asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len) { int ret; diff --git a/lib/minitasn1/element.c b/lib/minitasn1/element.c index ead899c953..8e8807b02a 100644 --- a/lib/minitasn1/element.c +++ b/lib/minitasn1/element.c @@ -976,3 +976,23 @@ asn1_read_tag (ASN1_TYPE root, const char *name, int *tagValue, return ASN1_SUCCESS; } + +/** + * asn1_read_node_value: + * @node: pointer to a node. + * @data: a point to a node_data_struct + * + * Returns the value a data node inside a ASN1_TYPE structure. + * The data returned should be handled as constant values. + * + * Returns: %ASN1_SUCCESS if the node exists. + **/ +asn1_retCode asn1_read_node_value (ASN1_TYPE node, ASN1_DATA_NODE* data) +{ + data->name = node->name; + data->value = node->value; + data->value_len = node->value_len; + data->type = type_field(node->type); + + return ASN1_SUCCESS; +} diff --git a/lib/minitasn1/errors.c b/lib/minitasn1/errors.c index 7878c50af5..76611d8177 100644 --- a/lib/minitasn1/errors.c +++ b/lib/minitasn1/errors.c @@ -21,7 +21,7 @@ #include #ifdef STDC_HEADERS -# include +#include #endif #define LIBTASN1_ERROR_ENTRY(name) { #name, name } diff --git a/lib/minitasn1/gstr.c b/lib/minitasn1/gstr.c index 9590b45a00..4785073847 100644 --- a/lib/minitasn1/gstr.c +++ b/lib/minitasn1/gstr.c @@ -61,7 +61,7 @@ _asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src) { if (dest_tot_size > 0) { - strncpy (dest, src, (dest_tot_size) - 1); + memcpy (dest, src, dest_tot_size - 1); dest[dest_tot_size - 1] = 0; } } diff --git a/lib/minitasn1/int.h b/lib/minitasn1/int.h index fcaf0d8d09..aad7ba63b8 100644 --- a/lib/minitasn1/int.h +++ b/lib/minitasn1/int.h @@ -23,7 +23,7 @@ #define INT_H #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -33,7 +33,7 @@ #include #ifdef HAVE_SYS_TYPES_H -# include +#include #endif #include @@ -83,28 +83,28 @@ struct node_asn_struct #define type_field(x) (x&0xFF) /* List of constants for field type of typedef node_asn */ -#define TYPE_CONSTANT 1 -#define TYPE_IDENTIFIER 2 -#define TYPE_INTEGER 3 -#define TYPE_BOOLEAN 4 -#define TYPE_SEQUENCE 5 -#define TYPE_BIT_STRING 6 -#define TYPE_OCTET_STRING 7 -#define TYPE_TAG 8 -#define TYPE_DEFAULT 9 -#define TYPE_SIZE 10 -#define TYPE_SEQUENCE_OF 11 -#define TYPE_OBJECT_ID 12 -#define TYPE_ANY 13 -#define TYPE_SET 14 -#define TYPE_SET_OF 15 -#define TYPE_DEFINITIONS 16 -#define TYPE_TIME 17 -#define TYPE_CHOICE 18 -#define TYPE_IMPORTS 19 -#define TYPE_NULL 20 -#define TYPE_ENUMERATED 21 -#define TYPE_GENERALSTRING 27 +#define TYPE_CONSTANT ASN1_ETYPE_CONSTANT +#define TYPE_IDENTIFIER ASN1_ETYPE_IDENTIFIER +#define TYPE_INTEGER ASN1_ETYPE_INTEGER +#define TYPE_BOOLEAN ASN1_ETYPE_BOOLEAN +#define TYPE_SEQUENCE ASN1_ETYPE_SEQUENCE +#define TYPE_BIT_STRING ASN1_ETYPE_BIT_STRING +#define TYPE_OCTET_STRING ASN1_ETYPE_OCTET_STRING +#define TYPE_TAG ASN1_ETYPE_TAG +#define TYPE_DEFAULT ASN1_ETYPE_DEFAULT +#define TYPE_SIZE ASN1_ETYPE_SIZE +#define TYPE_SEQUENCE_OF ASN1_ETYPE_SEQUENCE_OF +#define TYPE_OBJECT_ID ASN1_ETYPE_OBJECT_ID +#define TYPE_ANY ASN1_ETYPE_ANY +#define TYPE_SET ASN1_ETYPE_SET +#define TYPE_SET_OF ASN1_ETYPE_SET_OF +#define TYPE_DEFINITIONS ASN1_ETYPE_DEFINITIONS +#define TYPE_TIME ASN1_ETYPE_TIME +#define TYPE_CHOICE ASN1_ETYPE_CHOICE +#define TYPE_IMPORTS ASN1_ETYPE_IMPORTS +#define TYPE_NULL ASN1_ETYPE_NULL +#define TYPE_ENUMERATED ASN1_ETYPE_ENUMERATED +#define TYPE_GENERALSTRING ASN1_ETYPE_GENERALSTRING /***********************************************************************/ diff --git a/lib/minitasn1/libtasn1.h b/lib/minitasn1/libtasn1.h index 289fb5792a..e9337e2d8a 100644 --- a/lib/minitasn1/libtasn1.h +++ b/lib/minitasn1/libtasn1.h @@ -44,7 +44,7 @@ extern "C" { #endif -#define ASN1_VERSION "2.12" +#define ASN1_VERSION "2.14" typedef int asn1_retCode; /* type returned by libtasn1 functions */ @@ -141,6 +141,39 @@ extern "C" }; typedef struct static_struct_asn ASN1_ARRAY_TYPE; +/* List of constants for field type of typedef node_asn */ +#define ASN1_ETYPE_CONSTANT 1 +#define ASN1_ETYPE_IDENTIFIER 2 +#define ASN1_ETYPE_INTEGER 3 +#define ASN1_ETYPE_BOOLEAN 4 +#define ASN1_ETYPE_SEQUENCE 5 +#define ASN1_ETYPE_BIT_STRING 6 +#define ASN1_ETYPE_OCTET_STRING 7 +#define ASN1_ETYPE_TAG 8 +#define ASN1_ETYPE_DEFAULT 9 +#define ASN1_ETYPE_SIZE 10 +#define ASN1_ETYPE_SEQUENCE_OF 11 +#define ASN1_ETYPE_OBJECT_ID 12 +#define ASN1_ETYPE_ANY 13 +#define ASN1_ETYPE_SET 14 +#define ASN1_ETYPE_SET_OF 15 +#define ASN1_ETYPE_DEFINITIONS 16 +#define ASN1_ETYPE_TIME 17 +#define ASN1_ETYPE_CHOICE 18 +#define ASN1_ETYPE_IMPORTS 19 +#define ASN1_ETYPE_NULL 20 +#define ASN1_ETYPE_ENUMERATED 21 +#define ASN1_ETYPE_GENERALSTRING 27 + + struct node_data_struct + { + const char *name; /* Node name */ + const void *value; /* Node value */ + unsigned int value_len; /* Node value size */ + unsigned int type; /* Node value type (ASN1_ETYPE_*) */ + }; + typedef struct node_data_struct ASN1_DATA_NODE; + /***********************************/ /* Fixed constants */ /***********************************/ @@ -192,6 +225,9 @@ extern "C" asn1_read_value (ASN1_TYPE root, const char *name, void *ivalue, int *len); + extern ASN1_API asn1_retCode + asn1_read_node_value (ASN1_TYPE node, ASN1_DATA_NODE* data); + extern ASN1_API asn1_retCode asn1_number_of_elements (ASN1_TYPE element, const char *name, int *num); @@ -261,10 +297,10 @@ extern "C" int *ret_len, unsigned char *str, int str_size, int *bit_len); - extern ASN1_API signed long + extern ASN1_API long asn1_get_length_der (const unsigned char *der, int der_len, int *len); - extern ASN1_API signed long + extern ASN1_API long asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); extern ASN1_API void diff --git a/lib/minitasn1/parser_aux.c b/lib/minitasn1/parser_aux.c index ce55253f05..2e1f7eeecb 100644 --- a/lib/minitasn1/parser_aux.c +++ b/lib/minitasn1/parser_aux.c @@ -718,7 +718,8 @@ _asn1_expand_object_id (ASN1_TYPE node) { _asn1_str_cpy (name2, sizeof (name2), name_root); _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); + _asn1_str_cat (name2, sizeof (name2), + (char *) p2->value); p3 = asn1_find_node (node, name2); if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) || !(p3->type & CONST_ASSIGN)) diff --git a/lib/minitasn1/version.c b/lib/minitasn1/version.c index fb17223995..83d70c9623 100644 --- a/lib/minitasn1/version.c +++ b/lib/minitasn1/version.c @@ -20,7 +20,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include /* for strverscmp */ -- cgit v1.2.1