x509: Fix some whitespaces and do some minor style cleanups in acert
This commit is contained in:
@@ -169,42 +169,41 @@ extern void x509_parse_generalNames(chunk_t blob, int level0, bool implicit,
|
|||||||
/**
|
/**
|
||||||
* parses a directoryName
|
* parses a directoryName
|
||||||
*/
|
*/
|
||||||
static bool parse_directoryName(chunk_t blob, int level, bool implicit, identification_t **name)
|
static bool parse_directoryName(chunk_t blob, int level, bool implicit,
|
||||||
|
identification_t **name)
|
||||||
{
|
{
|
||||||
bool has_directoryName;
|
identification_t *directoryName;
|
||||||
linked_list_t *list = linked_list_create();
|
enumerator_t *enumerator;
|
||||||
|
bool first = TRUE;
|
||||||
|
linked_list_t *list;
|
||||||
|
|
||||||
|
list = linked_list_create();
|
||||||
x509_parse_generalNames(blob, level, implicit, list);
|
x509_parse_generalNames(blob, level, implicit, list);
|
||||||
has_directoryName = list->get_count(list) > 0;
|
|
||||||
|
|
||||||
if (has_directoryName)
|
enumerator = list->create_enumerator(list);
|
||||||
|
while (enumerator->enumerate(enumerator, &directoryName))
|
||||||
{
|
{
|
||||||
enumerator_t *enumerator = list->create_enumerator(list);
|
if (first)
|
||||||
identification_t *directoryName;
|
|
||||||
bool first = TRUE;
|
|
||||||
|
|
||||||
while (enumerator->enumerate(enumerator, (void**)&directoryName))
|
|
||||||
{
|
{
|
||||||
if (first)
|
*name = directoryName;
|
||||||
{
|
first = FALSE;
|
||||||
*name = directoryName;
|
}
|
||||||
first = FALSE;
|
else
|
||||||
}
|
{
|
||||||
else
|
DBG1(DBG_ASN, "more than one directory name - first selected");
|
||||||
{
|
directoryName->destroy(directoryName);
|
||||||
DBG1(DBG_ASN, "more than one directory name - first selected");
|
break;
|
||||||
directoryName->destroy(directoryName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
|
||||||
}
|
}
|
||||||
else
|
enumerator->destroy(enumerator);
|
||||||
|
list->destroy(list);
|
||||||
|
|
||||||
|
if (first)
|
||||||
{
|
{
|
||||||
DBG1(DBG_ASN, "no directoryName found");
|
DBG1(DBG_ASN, "no directoryName found");
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
list->destroy(list);
|
|
||||||
return has_directoryName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -250,57 +249,57 @@ static const asn1Object_t acObjects[] =
|
|||||||
{
|
{
|
||||||
{ 0, "AttributeCertificate", ASN1_SEQUENCE, ASN1_OBJ }, /* 0 */
|
{ 0, "AttributeCertificate", ASN1_SEQUENCE, ASN1_OBJ }, /* 0 */
|
||||||
{ 1, "AttributeCertificateInfo", ASN1_SEQUENCE, ASN1_OBJ }, /* 1 */
|
{ 1, "AttributeCertificateInfo", ASN1_SEQUENCE, ASN1_OBJ }, /* 1 */
|
||||||
{ 2, "version", ASN1_INTEGER, ASN1_DEF |
|
{ 2, "version", ASN1_INTEGER, ASN1_DEF |
|
||||||
ASN1_BODY }, /* 2 */
|
ASN1_BODY }, /* 2 */
|
||||||
{ 2, "holder", ASN1_SEQUENCE, ASN1_NONE }, /* 3 */
|
{ 2, "holder", ASN1_SEQUENCE, ASN1_NONE }, /* 3 */
|
||||||
{ 3, "baseCertificateID", ASN1_CONTEXT_C_0, ASN1_OPT }, /* 4 */
|
{ 3, "baseCertificateID", ASN1_CONTEXT_C_0, ASN1_OPT }, /* 4 */
|
||||||
{ 4, "issuer", ASN1_SEQUENCE, ASN1_OBJ }, /* 5 */
|
{ 4, "issuer", ASN1_SEQUENCE, ASN1_OBJ }, /* 5 */
|
||||||
{ 4, "serial", ASN1_INTEGER, ASN1_BODY }, /* 6 */
|
{ 4, "serial", ASN1_INTEGER, ASN1_BODY }, /* 6 */
|
||||||
{ 4, "issuerUID", ASN1_BIT_STRING, ASN1_OPT |
|
{ 4, "issuerUID", ASN1_BIT_STRING, ASN1_OPT |
|
||||||
ASN1_BODY }, /* 7 */
|
ASN1_BODY }, /* 7 */
|
||||||
{ 4, "end opt", ASN1_EOC, ASN1_END }, /* 8 */
|
{ 4, "end opt", ASN1_EOC, ASN1_END }, /* 8 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 9 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 9 */
|
||||||
{ 3, "entityName", ASN1_CONTEXT_C_1, ASN1_OPT |
|
{ 3, "entityName", ASN1_CONTEXT_C_1, ASN1_OPT |
|
||||||
ASN1_OBJ }, /* 10 */
|
ASN1_OBJ }, /* 10 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 11 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 11 */
|
||||||
{ 3, "objectDigestInfo", ASN1_CONTEXT_C_2, ASN1_OPT }, /* 12 */
|
{ 3, "objectDigestInfo", ASN1_CONTEXT_C_2, ASN1_OPT }, /* 12 */
|
||||||
{ 4, "digestedObjectType", ASN1_ENUMERATED, ASN1_BODY }, /* 13 */
|
{ 4, "digestedObjectType", ASN1_ENUMERATED, ASN1_BODY }, /* 13 */
|
||||||
{ 4, "otherObjectTypeID", ASN1_OID, ASN1_OPT |
|
{ 4, "otherObjectTypeID", ASN1_OID, ASN1_OPT |
|
||||||
ASN1_BODY }, /* 14 */
|
ASN1_BODY }, /* 14 */
|
||||||
{ 4, "end opt", ASN1_EOC, ASN1_END }, /* 15 */
|
{ 4, "end opt", ASN1_EOC, ASN1_END }, /* 15 */
|
||||||
{ 4, "digestAlgorithm", ASN1_EOC, ASN1_RAW }, /* 16 */
|
{ 4, "digestAlgorithm", ASN1_EOC, ASN1_RAW }, /* 16 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 17 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 17 */
|
||||||
{ 2, "v2Form", ASN1_CONTEXT_C_0, ASN1_NONE }, /* 18 */
|
{ 2, "v2Form", ASN1_CONTEXT_C_0, ASN1_NONE }, /* 18 */
|
||||||
{ 3, "issuerName", ASN1_SEQUENCE, ASN1_OPT |
|
{ 3, "issuerName", ASN1_SEQUENCE, ASN1_OPT |
|
||||||
ASN1_OBJ }, /* 19 */
|
ASN1_OBJ }, /* 19 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 20 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 20 */
|
||||||
{ 3, "baseCertificateID", ASN1_CONTEXT_C_0, ASN1_OPT }, /* 21 */
|
{ 3, "baseCertificateID", ASN1_CONTEXT_C_0, ASN1_OPT }, /* 21 */
|
||||||
{ 4, "issuerSerial", ASN1_SEQUENCE, ASN1_NONE }, /* 22 */
|
{ 4, "issuerSerial", ASN1_SEQUENCE, ASN1_NONE }, /* 22 */
|
||||||
{ 5, "issuer", ASN1_SEQUENCE, ASN1_OBJ }, /* 23 */
|
{ 5, "issuer", ASN1_SEQUENCE, ASN1_OBJ }, /* 23 */
|
||||||
{ 5, "serial", ASN1_INTEGER, ASN1_BODY }, /* 24 */
|
{ 5, "serial", ASN1_INTEGER, ASN1_BODY }, /* 24 */
|
||||||
{ 5, "issuerUID", ASN1_BIT_STRING, ASN1_OPT |
|
{ 5, "issuerUID", ASN1_BIT_STRING, ASN1_OPT |
|
||||||
ASN1_BODY }, /* 25 */
|
ASN1_BODY }, /* 25 */
|
||||||
{ 5, "end opt", ASN1_EOC, ASN1_END }, /* 26 */
|
{ 5, "end opt", ASN1_EOC, ASN1_END }, /* 26 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 27 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 27 */
|
||||||
{ 3, "objectDigestInfo", ASN1_CONTEXT_C_1, ASN1_OPT }, /* 28 */
|
{ 3, "objectDigestInfo", ASN1_CONTEXT_C_1, ASN1_OPT }, /* 28 */
|
||||||
{ 4, "digestInfo", ASN1_SEQUENCE, ASN1_OBJ }, /* 29 */
|
{ 4, "digestInfo", ASN1_SEQUENCE, ASN1_OBJ }, /* 29 */
|
||||||
{ 5, "digestedObjectType", ASN1_ENUMERATED, ASN1_BODY }, /* 30 */
|
{ 5, "digestedObjectType", ASN1_ENUMERATED, ASN1_BODY }, /* 30 */
|
||||||
{ 5, "otherObjectTypeID", ASN1_OID, ASN1_OPT |
|
{ 5, "otherObjectTypeID", ASN1_OID, ASN1_OPT |
|
||||||
ASN1_BODY }, /* 31 */
|
ASN1_BODY }, /* 31 */
|
||||||
{ 5, "end opt", ASN1_EOC, ASN1_END }, /* 32 */
|
{ 5, "end opt", ASN1_EOC, ASN1_END }, /* 32 */
|
||||||
{ 5, "digestAlgorithm", ASN1_EOC, ASN1_RAW }, /* 33 */
|
{ 5, "digestAlgorithm", ASN1_EOC, ASN1_RAW }, /* 33 */
|
||||||
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 34 */
|
{ 3, "end opt", ASN1_EOC, ASN1_END }, /* 34 */
|
||||||
{ 2, "signature", ASN1_EOC, ASN1_RAW }, /* 35 */
|
{ 2, "signature", ASN1_EOC, ASN1_RAW }, /* 35 */
|
||||||
{ 2, "serialNumber", ASN1_INTEGER, ASN1_BODY }, /* 36 */
|
{ 2, "serialNumber", ASN1_INTEGER, ASN1_BODY }, /* 36 */
|
||||||
{ 2, "attrCertValidityPeriod", ASN1_SEQUENCE, ASN1_NONE }, /* 37 */
|
{ 2, "attrCertValidityPeriod", ASN1_SEQUENCE, ASN1_NONE }, /* 37 */
|
||||||
{ 3, "notBeforeTime", ASN1_GENERALIZEDTIME, ASN1_BODY }, /* 38 */
|
{ 3, "notBeforeTime", ASN1_GENERALIZEDTIME, ASN1_BODY }, /* 38 */
|
||||||
{ 3, "notAfterTime", ASN1_GENERALIZEDTIME, ASN1_BODY }, /* 39 */
|
{ 3, "notAfterTime", ASN1_GENERALIZEDTIME, ASN1_BODY }, /* 39 */
|
||||||
{ 2, "attributes", ASN1_SEQUENCE, ASN1_LOOP }, /* 40 */
|
{ 2, "attributes", ASN1_SEQUENCE, ASN1_LOOP }, /* 40 */
|
||||||
{ 3, "attribute", ASN1_SEQUENCE, ASN1_NONE }, /* 41 */
|
{ 3, "attribute", ASN1_SEQUENCE, ASN1_NONE }, /* 41 */
|
||||||
{ 4, "type", ASN1_OID, ASN1_BODY }, /* 42 */
|
{ 4, "type", ASN1_OID, ASN1_BODY }, /* 42 */
|
||||||
{ 4, "values", ASN1_SET, ASN1_LOOP }, /* 43 */
|
{ 4, "values", ASN1_SET, ASN1_LOOP }, /* 43 */
|
||||||
{ 5, "value", ASN1_EOC, ASN1_RAW }, /* 44 */
|
{ 5, "value", ASN1_EOC, ASN1_RAW }, /* 44 */
|
||||||
{ 4, "end loop", ASN1_EOC, ASN1_END }, /* 45 */
|
{ 4, "end loop", ASN1_EOC, ASN1_END }, /* 45 */
|
||||||
{ 2, "end loop", ASN1_EOC, ASN1_END }, /* 46 */
|
{ 2, "end loop", ASN1_EOC, ASN1_END }, /* 46 */
|
||||||
{ 2, "extensions", ASN1_SEQUENCE, ASN1_LOOP }, /* 47 */
|
{ 2, "extensions", ASN1_SEQUENCE, ASN1_LOOP }, /* 47 */
|
||||||
{ 3, "extension", ASN1_SEQUENCE, ASN1_NONE }, /* 48 */
|
{ 3, "extension", ASN1_SEQUENCE, ASN1_NONE }, /* 48 */
|
||||||
@@ -368,7 +367,8 @@ static bool parse_certificate(private_x509_ac_t *this)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_HOLDER_ISSUER:
|
case AC_OBJ_HOLDER_ISSUER:
|
||||||
if (!parse_directoryName(object, level, FALSE, &this->holderIssuer))
|
if (!parse_directoryName(object, level, FALSE,
|
||||||
|
&this->holderIssuer))
|
||||||
{
|
{
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@@ -377,13 +377,15 @@ static bool parse_certificate(private_x509_ac_t *this)
|
|||||||
this->holderSerial = object;
|
this->holderSerial = object;
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_ENTITY_NAME:
|
case AC_OBJ_ENTITY_NAME:
|
||||||
if (!parse_directoryName(object, level, TRUE, &this->entityName))
|
if (!parse_directoryName(object, level, TRUE,
|
||||||
|
&this->entityName))
|
||||||
{
|
{
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_ISSUER_NAME:
|
case AC_OBJ_ISSUER_NAME:
|
||||||
if (!parse_directoryName(object, level, FALSE, &this->issuerName))
|
if (!parse_directoryName(object, level, FALSE,
|
||||||
|
&this->issuerName))
|
||||||
{
|
{
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@@ -446,8 +448,9 @@ static bool parse_certificate(private_x509_ac_t *this)
|
|||||||
DBG2(DBG_ASN, " need to parse crlDistributionPoints");
|
DBG2(DBG_ASN, " need to parse crlDistributionPoints");
|
||||||
break;
|
break;
|
||||||
case OID_AUTHORITY_KEY_ID:
|
case OID_AUTHORITY_KEY_ID:
|
||||||
this->authKeyIdentifier = x509_parse_authorityKeyIdentifier(object,
|
this->authKeyIdentifier =
|
||||||
level, &this->authKeySerialNumber);
|
x509_parse_authorityKeyIdentifier(object,
|
||||||
|
level, &this->authKeySerialNumber);
|
||||||
break;
|
break;
|
||||||
case OID_TARGET_INFORMATION:
|
case OID_TARGET_INFORMATION:
|
||||||
DBG2(DBG_ASN, " need to parse targetInformation");
|
DBG2(DBG_ASN, " need to parse targetInformation");
|
||||||
@@ -490,7 +493,7 @@ end:
|
|||||||
static chunk_t build_directoryName(asn1_t tag, chunk_t name)
|
static chunk_t build_directoryName(asn1_t tag, chunk_t name)
|
||||||
{
|
{
|
||||||
return asn1_wrap(tag, "m",
|
return asn1_wrap(tag, "m",
|
||||||
asn1_simple_object(ASN1_CONTEXT_C_4, name));
|
asn1_simple_object(ASN1_CONTEXT_C_4, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -499,14 +502,15 @@ static chunk_t build_directoryName(asn1_t tag, chunk_t name)
|
|||||||
static chunk_t build_holder(private_x509_ac_t *this)
|
static chunk_t build_holder(private_x509_ac_t *this)
|
||||||
{
|
{
|
||||||
x509_t* x509 = (x509_t*)this->holderCert;
|
x509_t* x509 = (x509_t*)this->holderCert;
|
||||||
identification_t *issuer = this->holderCert->get_issuer(this->holderCert);
|
identification_t *issuer, *subject;
|
||||||
identification_t *subject = this->holderCert->get_subject(this->holderCert);
|
|
||||||
|
issuer = this->holderCert->get_issuer(this->holderCert);
|
||||||
|
subject = this->holderCert->get_subject(this->holderCert);
|
||||||
|
|
||||||
return asn1_wrap(ASN1_SEQUENCE, "mm",
|
return asn1_wrap(ASN1_SEQUENCE, "mm",
|
||||||
asn1_wrap(ASN1_CONTEXT_C_0, "mm",
|
asn1_wrap(ASN1_CONTEXT_C_0, "mm",
|
||||||
build_directoryName(ASN1_SEQUENCE, issuer->get_encoding(issuer)),
|
build_directoryName(ASN1_SEQUENCE, issuer->get_encoding(issuer)),
|
||||||
asn1_simple_object(ASN1_INTEGER, x509->get_serial(x509))
|
asn1_simple_object(ASN1_INTEGER, x509->get_serial(x509))),
|
||||||
),
|
|
||||||
build_directoryName(ASN1_CONTEXT_C_1, subject->get_encoding(subject)));
|
build_directoryName(ASN1_CONTEXT_C_1, subject->get_encoding(subject)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,10 +519,12 @@ static chunk_t build_holder(private_x509_ac_t *this)
|
|||||||
*/
|
*/
|
||||||
static chunk_t build_v2_form(private_x509_ac_t *this)
|
static chunk_t build_v2_form(private_x509_ac_t *this)
|
||||||
{
|
{
|
||||||
identification_t *subject = this->signerCert->get_subject(this->signerCert);
|
identification_t *subject;
|
||||||
|
|
||||||
|
subject = this->signerCert->get_subject(this->signerCert);
|
||||||
return asn1_wrap(ASN1_CONTEXT_C_0, "m",
|
return asn1_wrap(ASN1_CONTEXT_C_0, "m",
|
||||||
build_directoryName(ASN1_SEQUENCE, subject->get_encoding(subject)));
|
build_directoryName(ASN1_SEQUENCE,
|
||||||
|
subject->get_encoding(subject)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -531,7 +537,6 @@ static chunk_t build_attr_cert_validity(private_x509_ac_t *this)
|
|||||||
asn1_from_time(&this->notAfter, ASN1_GENERALIZEDTIME));
|
asn1_from_time(&this->notAfter, ASN1_GENERALIZEDTIME));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* build attribute type
|
* build attribute type
|
||||||
*/
|
*/
|
||||||
@@ -548,7 +553,8 @@ static chunk_t build_attribute_type(int type, chunk_t content)
|
|||||||
static chunk_t build_attributes(private_x509_ac_t *this)
|
static chunk_t build_attributes(private_x509_ac_t *this)
|
||||||
{
|
{
|
||||||
return asn1_wrap(ASN1_SEQUENCE, "m",
|
return asn1_wrap(ASN1_SEQUENCE, "m",
|
||||||
build_attribute_type(OID_GROUP, this->groups->get_encoding(this->groups)));
|
build_attribute_type(OID_GROUP,
|
||||||
|
this->groups->get_encoding(this->groups)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -621,14 +627,11 @@ static chunk_t build_attr_cert_info(private_x509_ac_t *this)
|
|||||||
*/
|
*/
|
||||||
static chunk_t build_ac(private_x509_ac_t *this)
|
static chunk_t build_ac(private_x509_ac_t *this)
|
||||||
{
|
{
|
||||||
chunk_t signatureValue;
|
chunk_t signatureValue, attributeCertificateInfo;
|
||||||
chunk_t attributeCertificateInfo;
|
|
||||||
|
|
||||||
attributeCertificateInfo = build_attr_cert_info(this);
|
attributeCertificateInfo = build_attr_cert_info(this);
|
||||||
|
|
||||||
this->signerKey->sign(this->signerKey, SIGN_RSA_EMSA_PKCS1_SHA1,
|
this->signerKey->sign(this->signerKey, SIGN_RSA_EMSA_PKCS1_SHA1,
|
||||||
attributeCertificateInfo, &signatureValue);
|
attributeCertificateInfo, &signatureValue);
|
||||||
|
|
||||||
return asn1_wrap(ASN1_SEQUENCE, "mmm",
|
return asn1_wrap(ASN1_SEQUENCE, "mmm",
|
||||||
attributeCertificateInfo,
|
attributeCertificateInfo,
|
||||||
asn1_algorithmIdentifier(OID_SHA1_WITH_RSA),
|
asn1_algorithmIdentifier(OID_SHA1_WITH_RSA),
|
||||||
@@ -692,7 +695,8 @@ METHOD(certificate_t, has_subject, id_match_t,
|
|||||||
METHOD(certificate_t, has_issuer, id_match_t,
|
METHOD(certificate_t, has_issuer, id_match_t,
|
||||||
private_x509_ac_t *this, identification_t *issuer)
|
private_x509_ac_t *this, identification_t *issuer)
|
||||||
{
|
{
|
||||||
if (issuer->get_type(issuer) == ID_KEY_ID && this->authKeyIdentifier.ptr &&
|
if (issuer->get_type(issuer) == ID_KEY_ID &&
|
||||||
|
this->authKeyIdentifier.ptr &&
|
||||||
chunk_equals(this->authKeyIdentifier, issuer->get_encoding(issuer)))
|
chunk_equals(this->authKeyIdentifier, issuer->get_encoding(issuer)))
|
||||||
{
|
{
|
||||||
return ID_MATCH_PERFECT;
|
return ID_MATCH_PERFECT;
|
||||||
@@ -808,9 +812,10 @@ METHOD(certificate_t, equals, bool,
|
|||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (other->equals == (void*)equals)
|
if (other->equals == _equals)
|
||||||
{ /* skip allocation if we have the same implementation */
|
{ /* skip allocation if we have the same implementation */
|
||||||
return chunk_equals(this->encoding, ((private_x509_ac_t*)other)->encoding);
|
return chunk_equals(this->encoding,
|
||||||
|
((private_x509_ac_t*)other)->encoding);
|
||||||
}
|
}
|
||||||
if (!other->get_encoding(other, CERT_ASN1_DER, &encoding))
|
if (!other->get_encoding(other, CERT_ASN1_DER, &encoding))
|
||||||
{
|
{
|
||||||
@@ -968,4 +973,3 @@ x509_ac_t *x509_ac_gen(certificate_type_t type, va_list args)
|
|||||||
destroy(ac);
|
destroy(ac);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user