aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/crypto
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-11-23 16:00:15 +0100
committerMartin Willi <martin@revosec.ch>2012-12-19 10:32:07 +0100
commitc1005c120c63f727e8ee2cb7d8deb3a834376bc8 (patch)
tree148a50536cfdfbf06f86be61e3620a461c2cbb28 /src/libstrongswan/crypto
parentf0c02e27c4c5dd84b865f0ed60354013621593a9 (diff)
downloadstrongswan-c1005c120c63f727e8ee2cb7d8deb3a834376bc8.tar.bz2
strongswan-c1005c120c63f727e8ee2cb7d8deb3a834376bc8.tar.xz
PKCS#9 coding style cleanups
Diffstat (limited to 'src/libstrongswan/crypto')
-rw-r--r--src/libstrongswan/crypto/pkcs9.c141
-rw-r--r--src/libstrongswan/crypto/pkcs9.h10
2 files changed, 41 insertions, 110 deletions
diff --git a/src/libstrongswan/crypto/pkcs9.c b/src/libstrongswan/crypto/pkcs9.c
index 15800d57d..d30d02efc 100644
--- a/src/libstrongswan/crypto/pkcs9.c
+++ b/src/libstrongswan/crypto/pkcs9.c
@@ -25,6 +25,7 @@
#include "pkcs9.h"
typedef struct private_pkcs9_t private_pkcs9_t;
+typedef struct attribute_t attribute_t;
/**
* Private data of a pkcs9_t attribute list.
@@ -46,12 +47,11 @@ struct private_pkcs9_t {
linked_list_t *attributes;
};
-typedef struct attribute_t attribute_t;
-
/**
* Definition of an attribute_t object.
*/
struct attribute_t {
+
/**
* Object Identifier (OID)
*/
@@ -66,54 +66,32 @@ struct attribute_t {
* ASN.1 encoding
*/
chunk_t encoding;
-
- /**
- * Destroys the attribute.
- */
- void (*destroy) (attribute_t *this);
-
};
/**
* return the ASN.1 encoding of a PKCS#9 attribute
*/
-static asn1_t asn1_attributeType(int oid)
+static asn1_t get_attribute_type(int oid)
{
- asn1_t type;
-
switch (oid)
{
case OID_PKCS9_CONTENT_TYPE:
- type = ASN1_OID;
- break;
+ return ASN1_OID;
case OID_PKCS9_SIGNING_TIME:
- type = ASN1_UTCTIME;
- break;
- case OID_PKCS9_MESSAGE_DIGEST:
- type = ASN1_OCTET_STRING;
- break;
+ return ASN1_UTCTIME;
case OID_PKI_MESSAGE_TYPE:
- type = ASN1_PRINTABLESTRING;
- break;
case OID_PKI_STATUS:
- type = ASN1_PRINTABLESTRING;
- break;
case OID_PKI_FAIL_INFO:
- type = ASN1_PRINTABLESTRING;
- break;
+ return ASN1_PRINTABLESTRING;
case OID_PKI_SENDER_NONCE:
- type = ASN1_OCTET_STRING;
- break;
case OID_PKI_RECIPIENT_NONCE:
- type = ASN1_OCTET_STRING;
- break;
+ case OID_PKCS9_MESSAGE_DIGEST:
+ return ASN1_OCTET_STRING;
case OID_PKI_TRANS_ID:
- type = ASN1_PRINTABLESTRING;
- break;
+ return ASN1_PRINTABLESTRING;
default:
- type = ASN1_EOC;
+ return ASN1_EOC;
}
- return type;
}
/**
@@ -134,12 +112,11 @@ static attribute_t *attribute_create(int oid, chunk_t value)
attribute_t *this;
INIT(this,
- .destroy = attribute_destroy,
.oid = oid,
.value = chunk_clone(value),
.encoding = asn1_wrap(ASN1_SEQUENCE, "mm",
- asn1_build_known_oid(oid),
- asn1_simple_object(ASN1_SET, value)),
+ asn1_build_known_oid(oid),
+ asn1_wrap(ASN1_SET, "c", value)),
);
return this;
@@ -152,39 +129,26 @@ static void build_encoding(private_pkcs9_t *this)
{
enumerator_t *enumerator;
attribute_t *attribute;
- u_int attributes_len = 0;
-
- if (this->encoding.ptr)
- {
- chunk_free(&this->encoding);
- }
- if (this->attributes->get_count(this->attributes) == 0)
- {
- return;
- }
+ u_int len = 0;
+ u_char *pos;
/* compute the total length of the encoded attributes */
enumerator = this->attributes->create_enumerator(this->attributes);
-
- while (enumerator->enumerate(enumerator, (void**)&attribute))
+ while (enumerator->enumerate(enumerator, &attribute))
{
- attributes_len += attribute->encoding.len;
+ len += attribute->encoding.len;
}
enumerator->destroy(enumerator);
/* allocate memory for the attributes and build the encoding */
+ pos = asn1_build_object(&this->encoding, ASN1_SET, len);
+ enumerator = this->attributes->create_enumerator(this->attributes);
+ while (enumerator->enumerate(enumerator, &attribute))
{
- u_char *pos = asn1_build_object(&this->encoding, ASN1_SET, attributes_len);
-
- enumerator = this->attributes->create_enumerator(this->attributes);
-
- while (enumerator->enumerate(enumerator, (void**)&attribute))
- {
- memcpy(pos, attribute->encoding.ptr, attribute->encoding.len);
- pos += attribute->encoding.len;
- }
- enumerator->destroy(enumerator);
+ memcpy(pos, attribute->encoding.ptr, attribute->encoding.len);
+ pos += attribute->encoding.len;
}
+ enumerator->destroy(enumerator);
}
METHOD(pkcs9_t, get_encoding, chunk_t,
@@ -205,7 +169,7 @@ METHOD(pkcs9_t, get_attribute, chunk_t,
attribute_t *attribute;
enumerator = this->attributes->create_enumerator(this->attributes);
- while (enumerator->enumerate(enumerator, (void**)&attribute))
+ while (enumerator->enumerate(enumerator, &attribute))
{
if (attribute->oid == oid)
{
@@ -214,13 +178,11 @@ METHOD(pkcs9_t, get_attribute, chunk_t,
}
}
enumerator->destroy(enumerator);
- if (value.ptr &&
- !asn1_parse_simple_object(&value, asn1_attributeType(oid), 0,
- oid_names[oid].name))
+ if (value.len && asn1_unwrap(&value, &value) != ASN1_INVALID)
{
- return chunk_empty;
+ return value;
}
- return value;
+ return chunk_empty;
}
METHOD(pkcs9_t, set_attribute_raw, void,
@@ -235,7 +197,7 @@ METHOD(pkcs9_t, set_attribute_raw, void,
METHOD(pkcs9_t, set_attribute, void,
private_pkcs9_t *this, int oid, chunk_t value)
{
- chunk_t attr = asn1_simple_object(asn1_attributeType(oid), value);
+ chunk_t attr = asn1_simple_object(get_attribute_type(oid), value);
set_attribute_raw(this, oid, attr);
}
@@ -243,15 +205,16 @@ METHOD(pkcs9_t, set_attribute, void,
METHOD(pkcs9_t, destroy, void,
private_pkcs9_t *this)
{
- this->attributes->destroy_offset(this->attributes, offsetof(attribute_t, destroy));
+ this->attributes->destroy_function(this->attributes,
+ (void*)attribute_destroy);
free(this->encoding.ptr);
free(this);
}
-/**
- * Generic private constructor
+/*
+ * Described in header.
*/
-static private_pkcs9_t *pkcs9_create_empty(void)
+pkcs9_t *pkcs9_create(void)
{
private_pkcs9_t *this;
@@ -266,16 +229,6 @@ static private_pkcs9_t *pkcs9_create_empty(void)
.attributes = linked_list_create(),
);
- return this;
-}
-
-/*
- * Described in header.
- */
-pkcs9_t *pkcs9_create(void)
-{
- private_pkcs9_t *this = pkcs9_create_empty();
-
return &this->public;
}
@@ -317,50 +270,28 @@ static bool parse_attributes(chunk_t chunk, int level0, private_pkcs9_t* this)
oid = asn1_known_oid(object);
break;
case ATTRIBUTE_OBJ_VALUE:
- if (oid == OID_UNKNOWN)
- {
- break;
- }
- /* add the attribute to a linked list */
+ if (oid != OID_UNKNOWN)
{
- attribute_t *attribute = attribute_create(oid, object);
-
this->attributes->insert_last(this->attributes,
- (void*)attribute);
- }
- /* parse known attributes */
- {
- asn1_t type = asn1_attributeType(oid);
-
- if (type != ASN1_EOC)
- {
- if (!asn1_parse_simple_object(&object, type,
- parser->get_level(parser)+1,
- oid_names[oid].name))
- {
- goto end;
- }
- }
+ attribute_create(oid, object));
}
+ break;
}
}
success = parser->success(parser);
-end:
parser->destroy(parser);
return success;
}
-
/*
* Described in header.
*/
pkcs9_t *pkcs9_create_from_chunk(chunk_t chunk, u_int level)
{
- private_pkcs9_t *this = pkcs9_create_empty();
+ private_pkcs9_t *this = (private_pkcs9_t*)pkcs9_create();
this->encoding = chunk_clone(chunk);
-
if (!parse_attributes(chunk, level, this))
{
destroy(this);
diff --git a/src/libstrongswan/crypto/pkcs9.h b/src/libstrongswan/crypto/pkcs9.h
index 2c60aaf5f..3af000616 100644
--- a/src/libstrongswan/crypto/pkcs9.h
+++ b/src/libstrongswan/crypto/pkcs9.h
@@ -27,19 +27,19 @@ typedef struct pkcs9_t pkcs9_t;
#include <library.h>
/**
- * PKCS#9 attributes.
+ * PKCS#9 attribute lists.
*/
struct pkcs9_t {
/**
- * Gets ASN.1 encoding of PKCS#9 attribute list
+ * Gets ASN.1 encoding of PKCS#9 attribute list.
*
* @return ASN.1 encoded PKCSI#9 list
*/
chunk_t (*get_encoding) (pkcs9_t *this);
/**
- * Gets a PKCS#9 attribute
+ * Gets a PKCS#9 attribute from the list.
*
* @param oid OID of the attribute
* @return value of the attribute (internal data)
@@ -47,7 +47,7 @@ struct pkcs9_t {
chunk_t (*get_attribute) (pkcs9_t *this, int oid);
/**
- * Adds a PKCS#9 attribute
+ * Adds a PKCS#9 attribute.
*
* @param oid OID of the attribute
* @param value value of the attribute (gets cloned)
@@ -55,7 +55,7 @@ struct pkcs9_t {
void (*set_attribute) (pkcs9_t *this, int oid, chunk_t value);
/**
- * Adds a ASN.1 encoded PKCS#9 attribute
+ * Adds a ASN.1 encoded PKCS#9 attribute.
*
* @param oid OID of the attribute
* @param value ASN.1 encoded value of the attribute (gets adopted)