renamed known_oid() to asn1_known_oid() and defined asn1_get_oid()
This commit is contained in:
+2
-2
@@ -519,7 +519,7 @@ parse_ac(chunk_t blob, x509acert_t *ac)
|
|||||||
ac->notAfter = asn1totime(&object, ASN1_GENERALIZEDTIME);
|
ac->notAfter = asn1totime(&object, ASN1_GENERALIZEDTIME);
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_ATTRIBUTE_TYPE:
|
case AC_OBJ_ATTRIBUTE_TYPE:
|
||||||
type = known_oid(object);
|
type = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_ATTRIBUTE_VALUE:
|
case AC_OBJ_ATTRIBUTE_VALUE:
|
||||||
{
|
{
|
||||||
@@ -549,7 +549,7 @@ parse_ac(chunk_t blob, x509acert_t *ac)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_EXTN_ID:
|
case AC_OBJ_EXTN_ID:
|
||||||
extn_oid = known_oid(object);
|
extn_oid = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case AC_OBJ_CRITICAL:
|
case AC_OBJ_CRITICAL:
|
||||||
critical = object.len && *object.ptr;
|
critical = object.len && *object.ptr;
|
||||||
|
|||||||
+39
-3
@@ -116,7 +116,7 @@ asn1_algorithmIdentifier(int oid)
|
|||||||
* position in the oid_names table is returned otherwise -1 is returned
|
* position in the oid_names table is returned otherwise -1 is returned
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
known_oid(chunk_t object)
|
asn1_known_oid(chunk_t object)
|
||||||
{
|
{
|
||||||
int oid = 0;
|
int oid = 0;
|
||||||
|
|
||||||
@@ -136,14 +136,50 @@ known_oid(chunk_t object)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (oid_names[oid].next)
|
if (oid_names[oid].next)
|
||||||
|
{
|
||||||
oid = oid_names[oid].next;
|
oid = oid_names[oid].next;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return OID_UNKNOWN;
|
return OID_UNKNOWN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Converts an known OID index to ASN.1 OID
|
||||||
|
*/
|
||||||
|
chunk_t
|
||||||
|
asn1_get_known_oid(int n)
|
||||||
|
{
|
||||||
|
chunk_t oid;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (n < 0 || n >= OID_MAX)
|
||||||
|
{
|
||||||
|
return empty_chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = oid_names[n].level + 1;
|
||||||
|
oid.ptr = alloc_bytes(i, "known oid");
|
||||||
|
oid.len = i;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (oid_names[n].level >= i)
|
||||||
|
{
|
||||||
|
n--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
oid.ptr[--i] = oid_names[n--].octet;
|
||||||
|
}
|
||||||
|
while (i > 0);
|
||||||
|
|
||||||
|
return oid;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decodes the length in bytes of an ASN.1 object
|
* Decodes the length in bytes of an ASN.1 object
|
||||||
*/
|
*/
|
||||||
@@ -484,7 +520,7 @@ debug_asn1_simple_object(chunk_t object, asn1_t type, u_int cond)
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case ASN1_OID:
|
case ASN1_OID:
|
||||||
oid = known_oid(object);
|
oid = asn1_known_oid(object);
|
||||||
if (oid != OID_UNKNOWN)
|
if (oid != OID_UNKNOWN)
|
||||||
{
|
{
|
||||||
DBG(DBG_PARSING,
|
DBG(DBG_PARSING,
|
||||||
@@ -735,7 +771,7 @@ parse_algorithmIdentifier(chunk_t blob, int level0, chunk_t *parameters)
|
|||||||
switch (objectID)
|
switch (objectID)
|
||||||
{
|
{
|
||||||
case ALGORITHM_ID_ALG:
|
case ALGORITHM_ID_ALG:
|
||||||
alg = known_oid(object);
|
alg = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case ALGORITHM_ID_PARAMETERS:
|
case ALGORITHM_ID_PARAMETERS:
|
||||||
if (parameters != NULL)
|
if (parameters != NULL)
|
||||||
|
|||||||
+2
-1
@@ -117,7 +117,8 @@ extern const chunk_t ASN1_md5WithRSA_id;
|
|||||||
extern const chunk_t ASN1_sha1WithRSA_id;
|
extern const chunk_t ASN1_sha1WithRSA_id;
|
||||||
|
|
||||||
extern chunk_t asn1_algorithmIdentifier(int oid);
|
extern chunk_t asn1_algorithmIdentifier(int oid);
|
||||||
extern int known_oid(chunk_t object);
|
extern int asn1_known_oid(chunk_t object);
|
||||||
|
extern chunk_t asn1_get_known_oid(int n);
|
||||||
extern u_int asn1_length(chunk_t *blob);
|
extern u_int asn1_length(chunk_t *blob);
|
||||||
extern void code_asn1_length(size_t length, chunk_t *code);
|
extern void code_asn1_length(size_t length, chunk_t *code);
|
||||||
extern u_char* build_asn1_object(chunk_t *object, asn1_t type, size_t datalen);
|
extern u_char* build_asn1_object(chunk_t *object, asn1_t type, size_t datalen);
|
||||||
|
|||||||
+1
-1
@@ -480,7 +480,7 @@ parse_x509crl(chunk_t blob, u_int level0, x509crl_t *crl)
|
|||||||
case CRL_OBJ_CRL_ENTRY_EXTN_VALUE:
|
case CRL_OBJ_CRL_ENTRY_EXTN_VALUE:
|
||||||
case CRL_OBJ_EXTN_VALUE:
|
case CRL_OBJ_EXTN_VALUE:
|
||||||
{
|
{
|
||||||
u_int extn_oid = known_oid(extnID);
|
u_int extn_oid = asn1_known_oid(extnID);
|
||||||
|
|
||||||
if (extn_oid == OID_CRL_REASON_CODE)
|
if (extn_oid == OID_CRL_REASON_CODE)
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-3
@@ -1134,7 +1134,7 @@ parse_basic_ocsp_response(chunk_t blob, int level0, response_t *res)
|
|||||||
res->responses = object;
|
res->responses = object;
|
||||||
break;
|
break;
|
||||||
case BASIC_RESPONSE_EXT_ID:
|
case BASIC_RESPONSE_EXT_ID:
|
||||||
extn_oid = known_oid(object);
|
extn_oid = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case BASIC_RESPONSE_CRITICAL:
|
case BASIC_RESPONSE_CRITICAL:
|
||||||
critical = object.len && *object.ptr;
|
critical = object.len && *object.ptr;
|
||||||
@@ -1223,7 +1223,7 @@ parse_ocsp_response(chunk_t blob, response_t * res)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OCSP_RESPONSE_TYPE:
|
case OCSP_RESPONSE_TYPE:
|
||||||
ocspResponseType = known_oid(object);
|
ocspResponseType = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case OCSP_RESPONSE:
|
case OCSP_RESPONSE:
|
||||||
{
|
{
|
||||||
@@ -1303,7 +1303,7 @@ parse_ocsp_single_response(chunk_t blob, int level0, single_response_t *sres)
|
|||||||
sres->nextUpdate = asn1totime(&object, ASN1_GENERALIZEDTIME);
|
sres->nextUpdate = asn1totime(&object, ASN1_GENERALIZEDTIME);
|
||||||
break;
|
break;
|
||||||
case SINGLE_RESPONSE_EXT_ID:
|
case SINGLE_RESPONSE_EXT_ID:
|
||||||
extn_oid = known_oid(object);
|
extn_oid = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case SINGLE_RESPONSE_CRITICAL:
|
case SINGLE_RESPONSE_CRITICAL:
|
||||||
critical = object.len && *object.ptr;
|
critical = object.len && *object.ptr;
|
||||||
|
|||||||
+2
-2
@@ -217,7 +217,7 @@ pkcs7_parse_contentInfo(chunk_t blob, u_int level0, contentInfo_t *cInfo)
|
|||||||
|
|
||||||
if (objectID == PKCS7_INFO_TYPE)
|
if (objectID == PKCS7_INFO_TYPE)
|
||||||
{
|
{
|
||||||
cInfo->type = known_oid(object);
|
cInfo->type = asn1_known_oid(object);
|
||||||
if (cInfo->type < OID_PKCS7_DATA
|
if (cInfo->type < OID_PKCS7_DATA
|
||||||
|| cInfo->type > OID_PKCS7_ENCRYPTED_DATA)
|
|| cInfo->type > OID_PKCS7_ENCRYPTED_DATA)
|
||||||
{
|
{
|
||||||
@@ -458,7 +458,7 @@ pkcs7_parse_envelopedData(chunk_t blob, chunk_t *data
|
|||||||
)
|
)
|
||||||
break;
|
break;
|
||||||
case PKCS7_CONTENT_TYPE:
|
case PKCS7_CONTENT_TYPE:
|
||||||
if (known_oid(object) != OID_PKCS7_DATA)
|
if (asn1_known_oid(object) != OID_PKCS7_DATA)
|
||||||
{
|
{
|
||||||
plog("encrypted content not of type pkcs7 data");
|
plog("encrypted content not of type pkcs7 data");
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|||||||
+7
-7
@@ -562,7 +562,7 @@ dn_parse(chunk_t dn, chunk_t *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* print OID */
|
/* print OID */
|
||||||
oid_code = known_oid(oid);
|
oid_code = asn1_known_oid(oid);
|
||||||
if (oid_code == OID_UNKNOWN) /* OID not found in list */
|
if (oid_code == OID_UNKNOWN) /* OID not found in list */
|
||||||
{
|
{
|
||||||
hex_str(oid, str);
|
hex_str(oid, str);
|
||||||
@@ -877,7 +877,7 @@ same_dn(chunk_t a, chunk_t b)
|
|||||||
|
|
||||||
/* printableStrings and email RDNs require uppercase comparison */
|
/* printableStrings and email RDNs require uppercase comparison */
|
||||||
if (type_a == type_b && (type_a == ASN1_PRINTABLESTRING ||
|
if (type_a == type_b && (type_a == ASN1_PRINTABLESTRING ||
|
||||||
(type_a == ASN1_IA5STRING && known_oid(oid_a) == OID_PKCS9_EMAIL)))
|
(type_a == ASN1_IA5STRING && asn1_known_oid(oid_a) == OID_PKCS9_EMAIL)))
|
||||||
{
|
{
|
||||||
if (strncasecmp(value_a.ptr, value_b.ptr, value_b.len) != 0)
|
if (strncasecmp(value_a.ptr, value_b.ptr, value_b.len) != 0)
|
||||||
{
|
{
|
||||||
@@ -955,7 +955,7 @@ match_dn(chunk_t a, chunk_t b, int *wildcards)
|
|||||||
|
|
||||||
/* printableStrings and email RDNs require uppercase comparison */
|
/* printableStrings and email RDNs require uppercase comparison */
|
||||||
if (type_a == type_b && (type_a == ASN1_PRINTABLESTRING ||
|
if (type_a == type_b && (type_a == ASN1_PRINTABLESTRING ||
|
||||||
(type_a == ASN1_IA5STRING && known_oid(oid_a) == OID_PKCS9_EMAIL)))
|
(type_a == ASN1_IA5STRING && asn1_known_oid(oid_a) == OID_PKCS9_EMAIL)))
|
||||||
{
|
{
|
||||||
if (strncasecmp(value_a.ptr, value_b.ptr, value_b.len) != 0)
|
if (strncasecmp(value_a.ptr, value_b.ptr, value_b.len) != 0)
|
||||||
{
|
{
|
||||||
@@ -1553,7 +1553,7 @@ parse_otherName(chunk_t blob, int level0)
|
|||||||
switch (objectID)
|
switch (objectID)
|
||||||
{
|
{
|
||||||
case ON_OBJ_ID_TYPE:
|
case ON_OBJ_ID_TYPE:
|
||||||
oid = known_oid(object);
|
oid = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case ON_OBJ_VALUE:
|
case ON_OBJ_VALUE:
|
||||||
if (oid == OID_XMPP_ADDR)
|
if (oid == OID_XMPP_ADDR)
|
||||||
@@ -1809,7 +1809,7 @@ parse_authorityInfoAccess(chunk_t blob, int level0, chunk_t *accessLocation)
|
|||||||
switch (objectID)
|
switch (objectID)
|
||||||
{
|
{
|
||||||
case AUTH_INFO_ACCESS_METHOD:
|
case AUTH_INFO_ACCESS_METHOD:
|
||||||
accessMethod = known_oid(object);
|
accessMethod = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case AUTH_INFO_ACCESS_LOCATION:
|
case AUTH_INFO_ACCESS_LOCATION:
|
||||||
{
|
{
|
||||||
@@ -1870,7 +1870,7 @@ parse_extendedKeyUsage(chunk_t blob, int level0)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (objectID == EXT_KEY_USAGE_PURPOSE_ID
|
if (objectID == EXT_KEY_USAGE_PURPOSE_ID
|
||||||
&& known_oid(object) == OID_OCSP_SIGNING)
|
&& asn1_known_oid(object) == OID_OCSP_SIGNING)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -2027,7 +2027,7 @@ parse_x509cert(chunk_t blob, u_int level0, x509cert_t *cert)
|
|||||||
cert->publicExponent = object;
|
cert->publicExponent = object;
|
||||||
break;
|
break;
|
||||||
case X509_OBJ_EXTN_ID:
|
case X509_OBJ_EXTN_ID:
|
||||||
extn_oid = known_oid(object);
|
extn_oid = asn1_known_oid(object);
|
||||||
break;
|
break;
|
||||||
case X509_OBJ_CRITICAL:
|
case X509_OBJ_CRITICAL:
|
||||||
critical = object.len && *object.ptr;
|
critical = object.len && *object.ptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user