aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/asn1.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2024-08-26 23:36:06 +0100
committerMichael Brown <mcb30@ipxe.org>2024-08-28 13:03:55 +0100
commit4b4a362f0713ffa08c9236d66a1881d6234d7717 (patch)
tree70fca07b5f66b4b66a47fe405a04b577c150add4 /src/include/ipxe/asn1.h
parentbdb5b4aef46ed34b47094652f3eefc7d0463d166 (diff)
downloadipxe-4b4a362f0713ffa08c9236d66a1881d6234d7717.tar.gz
[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 <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/asn1.h')
-rw-r--r--src/include/ipxe/asn1.h19
1 files changed, 17 insertions, 2 deletions
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 );