From ce6ae233cb61e1bedf30da79b4aa71b097a509b8 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Fri, 28 Jun 2013 18:05:35 +0200 Subject: [PATCH] Macro-ized the final internal OID functions --- library/oid.c | 77 ++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/library/oid.c b/library/oid.c index c4edcc58b..5cd9a5990 100644 --- a/library/oid.c +++ b/library/oid.c @@ -83,6 +83,43 @@ int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \ return( 0 ); \ } +/* + * Macro to generate a function for retrieving the OID based on a single + * attribute from a oid_descriptor_t wrapper. + */ +#define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \ +int FN_NAME( ATTR1_TYPE ATTR1, const char **oid_str ) \ +{ \ + const TYPE_T *cur = LIST; \ + while( cur->descriptor.asn1 != NULL ) { \ + if( cur->ATTR1 == ATTR1 ) { \ + *oid_str = cur->descriptor.asn1; \ + return( 0 ); \ + } \ + cur++; \ + } \ + return( POLARSSL_ERR_OID_NOT_FOUND ); \ +} + +/* + * Macro to generate a function for retrieving the OID based on two + * attributes from a oid_descriptor_t wrapper. + */ +#define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \ + ATTR2_TYPE, ATTR2) \ +int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid_str ) \ +{ \ + const TYPE_T *cur = LIST; \ + while( cur->descriptor.asn1 != NULL ) { \ + if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \ + *oid_str = cur->descriptor.asn1; \ + return( 0 ); \ + } \ + cur++; \ + } \ + return( POLARSSL_ERR_OID_NOT_FOUND ); \ +} + /* * Core generic function */ @@ -271,26 +308,7 @@ static const oid_sig_alg_t oid_sig_alg[] = FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg); FN_OID_GET_DESCRIPTOR_ATTR1(oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg, const char *, description); FN_OID_GET_ATTR2(oid_get_sig_alg, oid_sig_alg_t, sig_alg, md_type_t, md_alg, pk_type_t, pk_alg); - -int oid_get_oid_by_sig_alg( pk_type_t pk_alg, md_type_t md_alg, - const char **oid_str ) -{ - const oid_sig_alg_t *cur = oid_sig_alg; - - while( cur->descriptor.asn1 != NULL ) - { - if( cur->pk_alg == pk_alg && - cur->md_alg == md_alg ) - { - *oid_str = cur->descriptor.asn1; - return( 0 ); - } - - cur++; - } - - return( POLARSSL_ERR_OID_NOT_FOUND ); -} +FN_OID_GET_OID_BY_ATTR2(oid_get_oid_by_sig_alg, oid_sig_alg_t, oid_sig_alg, pk_type_t, pk_alg, md_type_t, md_alg); #endif /* POLARSSL_MD_C */ /* @@ -400,24 +418,7 @@ static const oid_md_alg_t oid_md_alg[] = FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg); FN_OID_GET_ATTR1(oid_get_md_alg, oid_md_alg_t, md_alg, md_type_t, md_alg); - -int oid_get_oid_by_md( md_type_t md_alg, const char **oid_str ) -{ - const oid_md_alg_t *cur = oid_md_alg; - - while( cur->descriptor.asn1 != NULL ) - { - if( cur->md_alg == md_alg ) - { - *oid_str = cur->descriptor.asn1; - return( 0 ); - } - - cur++; - } - - return( POLARSSL_ERR_OID_NOT_FOUND ); -} +FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, md_type_t, md_alg); #endif /* POLARSSL_MD_C */ #if defined(POLARSSL_PKCS12_C)