summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-09-16 21:21:28 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-09-16 21:23:31 +0200
commitdcea85107a1c9abec5cfc254bd23cb4bc26c9255 (patch)
tree9d9b0c9e6731d0f4fb6caffdd38118b7b07b7c0a
parentc0e1ab2ee4acb94c9a16070dae3850609501eee9 (diff)
downloadgnutls-dcea85107a1c9abec5cfc254bd23cb4bc26c9255.tar.gz
updated minitasn1 to 2.14.
-rw-r--r--lib/minitasn1/coding.c4
-rw-r--r--lib/minitasn1/decoding.c21
-rw-r--r--lib/minitasn1/element.c20
-rw-r--r--lib/minitasn1/errors.c2
-rw-r--r--lib/minitasn1/gstr.c2
-rw-r--r--lib/minitasn1/int.h48
-rw-r--r--lib/minitasn1/libtasn1.h42
-rw-r--r--lib/minitasn1/parser_aux.c3
-rw-r--r--lib/minitasn1/version.c2
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 <int.h>
#ifdef STDC_HEADERS
-# include <stdarg.h>
+#include <stdarg.h>
#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 <config.h>
+#include <config.h>
#endif
#include <string.h>
@@ -33,7 +33,7 @@
#include <stdint.h>
#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <sys/types.h>
#endif
#include <libtasn1.h>
@@ -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 */
/***********************************/
@@ -193,6 +226,9 @@ extern "C"
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);
extern ASN1_API asn1_retCode
@@ -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 <config.h>
+#include <config.h>
#endif
#include <string.h> /* for strverscmp */