summaryrefslogtreecommitdiff
path: root/trust/x509.c
diff options
context:
space:
mode:
authorStef Walter <stef@thewalter.net>2013-07-04 15:37:34 +0200
committerStef Walter <stef@thewalter.net>2013-07-04 15:42:16 +0200
commitec7c2ff2011d774217c1e35d664072d0487853c7 (patch)
treec2ff76fc08c9b237f101d4119451ef04229c7788 /trust/x509.c
parenta2165fe35e336fd807af053a21a396b020f90a23 (diff)
downloadp11-kit-ec7c2ff2011d774217c1e35d664072d0487853c7.tar.gz
trust: Add p11_asn1_read() and p11_asn1_free() functions
Some helpers for commonly used ASN.1 related stuff.
Diffstat (limited to 'trust/x509.c')
-rw-r--r--trust/x509.c42
1 files changed, 6 insertions, 36 deletions
diff --git a/trust/x509.c b/trust/x509.c
index aa6e171..2f81463 100644
--- a/trust/x509.c
+++ b/trust/x509.c
@@ -53,11 +53,9 @@ p11_x509_find_extension (node_asn *cert,
size_t *ext_len)
{
char field[128];
- char *value;
int start;
int end;
int ret;
- int len;
int i;
return_val_if_fail (cert != NULL, NULL);
@@ -87,18 +85,7 @@ p11_x509_find_extension (node_asn *cert,
if (snprintf (field, sizeof (field), "tbsCertificate.extensions.?%u.extnValue", i) < 0)
return_val_if_reached (NULL);
- len = 0;
- ret = asn1_read_value (cert, field, NULL, &len);
- return_val_if_fail (ret == ASN1_MEM_ERROR, NULL);
-
- value = malloc (len);
- return_val_if_fail (value != NULL, NULL);
-
- ret = asn1_read_value (cert, field, value, &len);
- return_val_if_fail (ret == ASN1_SUCCESS, NULL);
-
- *ext_len = len;
- return (unsigned char *)value;
+ return p11_asn1_read (cert, field, ext_len);
}
return NULL;
@@ -195,9 +182,8 @@ p11_x509_parse_extended_key_usage (p11_dict *asn1_defs,
node_asn *asn;
char field[128];
p11_array *ekus;
+ size_t len;
char *eku;
- int ret;
- int len;
int i;
asn = p11_asn1_decode (asn1_defs, "PKIX1.ExtKeyUsageSyntax", ext_der, ext_len, NULL);
@@ -210,19 +196,10 @@ p11_x509_parse_extended_key_usage (p11_dict *asn1_defs,
if (snprintf (field, sizeof (field), "?%u", i) < 0)
return_val_if_reached (NULL);
- len = 0;
- ret = asn1_read_value (asn, field, NULL, &len);
- if (ret == ASN1_ELEMENT_NOT_FOUND)
+ eku = p11_asn1_read (asn, field, &len);
+ if (eku == NULL)
break;
- return_val_if_fail (ret == ASN1_MEM_ERROR, NULL);
-
- eku = malloc (len + 1);
- return_val_if_fail (eku != NULL, NULL);
-
- ret = asn1_read_value (asn, field, eku, &len);
- return_val_if_fail (ret == ASN1_SUCCESS, NULL);
-
eku[len] = 0;
/* If it's our reserved OID, then skip */
@@ -321,7 +298,7 @@ p11_x509_lookup_dn_name (node_asn *asn,
{
unsigned char *value;
char field[128];
- int value_len;
+ size_t value_len;
char *part;
int i, j;
int start;
@@ -352,16 +329,9 @@ p11_x509_lookup_dn_name (node_asn *asn,
snprintf (field, sizeof (field), "%s%srdnSequence.?%d.?%d.value",
dn_field, dn_field ? "." : "", i, j);
- value_len = 0;
- ret = asn1_read_value (asn, field, NULL, &value_len);
- return_val_if_fail (ret == ASN1_MEM_ERROR, NULL);
-
- value = malloc (value_len + 1);
+ value = p11_asn1_read (asn, field, &value_len);
return_val_if_fail (value != NULL, NULL);
- ret = asn1_read_value (asn, field, value, &value_len);
- return_val_if_fail (ret == ASN1_SUCCESS, false);
-
part = p11_x509_parse_directory_string (value, value_len, NULL, NULL);
free (value);