From 4b4a362f0713ffa08c9236d66a1881d6234d7717 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 26 Aug 2024 23:36:06 +0100 Subject: [crypto] Allow for extraction of ASN.1 algorithm parameters Some ASN.1 OID-identified algorithms require additional parameters, such as an initialisation vector for a block cipher. The structure of the parameters is defined by the individual algorithm. Extend asn1_algorithm() to allow these additional parameters to be returned via a separate ASN.1 cursor. Signed-off-by: Michael Brown --- src/include/ipxe/asn1.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/include/ipxe/asn1.h') diff --git a/src/include/ipxe/asn1.h b/src/include/ipxe/asn1.h index 26dc47992..fac94c52e 100644 --- a/src/include/ipxe/asn1.h +++ b/src/include/ipxe/asn1.h @@ -363,6 +363,15 @@ struct asn1_algorithm { struct cipher_algorithm *cipher; /** Elliptic curve (if applicable) */ struct elliptic_curve *curve; + /** + * Parse algorithm parameters (optional) + * + * @v algorithm Algorithm + * @v param Parameters to parse (and potentially modify) + * @ret rc Return status code + */ + int ( * parse ) ( struct asn1_algorithm *algorithm, + struct asn1_cursor *params ); }; /** ASN.1 OID-identified algorithms */ @@ -467,17 +476,23 @@ extern int asn1_integral_bit_string ( const struct asn1_cursor *cursor, extern int asn1_compare ( const struct asn1_cursor *cursor1, const struct asn1_cursor *cursor2 ); extern int asn1_algorithm ( const struct asn1_cursor *cursor, - struct asn1_algorithm **algorithm ); + struct asn1_algorithm **algorithm, + struct asn1_cursor *params ); extern int asn1_pubkey_algorithm ( const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm ); extern int asn1_digest_algorithm ( const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm ); extern int asn1_cipher_algorithm ( const struct asn1_cursor *cursor, - struct asn1_algorithm **algorithm ); + struct asn1_algorithm **algorithm, + struct asn1_cursor *params ); extern int asn1_signature_algorithm ( const struct asn1_cursor *cursor, struct asn1_algorithm **algorithm ); extern int asn1_check_algorithm ( const struct asn1_cursor *cursor, struct asn1_algorithm *expected ); +extern int asn1_parse_cbc ( struct asn1_algorithm *algorithm, + struct asn1_cursor *params ); +extern int asn1_parse_gcm ( struct asn1_algorithm *algorithm, + struct asn1_cursor *params ); extern int asn1_generalized_time ( const struct asn1_cursor *cursor, time_t *time ); extern int asn1_grow ( struct asn1_builder *builder, size_t extra ); -- cgit