Skip to content

Commit 44da18a

Browse files
author
Hanno Becker
committed
Duplicate mbedtls_asn1_find_named_data in asn1write.c to avoid dep.
This commit duplicates the public function mbedtls_asn1_find_named_data() defined in library/asn1parse.c within library/asn1write.c in order to avoid a dependency of the ASN.1 writing module on the ASN.1 parsing module. The duplication is unproblematic from a semantic and an efficiency perspective becasue it is just a short list traversal that doesn't actually do any ASN.1 parsing.
1 parent 1ea604d commit 44da18a

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

library/asn1write.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,36 @@ int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start,
328328
return( (int) len );
329329
}
330330

331-
mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **head,
331+
332+
/* This is a copy of the ASN.1 parsing function mbedtls_asn1_find_named_data(),
333+
* which is replicated to avoid a dependency ASN1_WRITE_C on ASN1_PARSE_C. */
334+
static mbedtls_asn1_named_data *asn1_find_named_data(
335+
mbedtls_asn1_named_data *list,
336+
const char *oid, size_t len )
337+
{
338+
while( list != NULL )
339+
{
340+
if( list->oid.len == len &&
341+
memcmp( list->oid.p, oid, len ) == 0 )
342+
{
343+
break;
344+
}
345+
346+
list = list->next;
347+
}
348+
349+
return( list );
350+
}
351+
352+
mbedtls_asn1_named_data *mbedtls_asn1_store_named_data(
353+
mbedtls_asn1_named_data **head,
332354
const char *oid, size_t oid_len,
333355
const unsigned char *val,
334356
size_t val_len )
335357
{
336358
mbedtls_asn1_named_data *cur;
337359

338-
if( ( cur = mbedtls_asn1_find_named_data( *head, oid, oid_len ) ) == NULL )
360+
if( ( cur = asn1_find_named_data( *head, oid, oid_len ) ) == NULL )
339361
{
340362
// Add new entry if not present yet based on OID
341363
//

0 commit comments

Comments
 (0)