diff options
author | Michael Brown | 2016-07-28 17:16:55 +0200 |
---|---|---|
committer | Michael Brown | 2016-07-29 01:41:36 +0200 |
commit | ef50608029d9f5821dd4567ee8d9aa78294e3091 (patch) | |
tree | 25b4baf3b46106ecd425f8a2f54c17f270e7dbc3 /src/core/image.c | |
parent | [crypto] Allow for parsing of partial ASN.1 cursors (diff) | |
download | ipxe-ef50608029d9f5821dd4567ee8d9aa78294e3091.tar.gz ipxe-ef50608029d9f5821dd4567ee8d9aa78294e3091.tar.xz ipxe-ef50608029d9f5821dd4567ee8d9aa78294e3091.zip |
[image] Add image_asn1() to extract ASN.1 objects from image
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/image.c')
-rw-r--r-- | src/core/image.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/core/image.c b/src/core/image.c index a185b82f..b4785269 100644 --- a/src/core/image.c +++ b/src/core/image.c @@ -505,3 +505,38 @@ int image_pixbuf ( struct image *image, struct pixel_buffer **pixbuf ) { return 0; } + +/** + * Extract ASN.1 object from image + * + * @v image Image + * @v offset Offset within image + * @v cursor ASN.1 cursor to fill in + * @ret next Offset to next image, or negative error + * + * The caller is responsible for eventually calling free() on the + * allocated ASN.1 cursor. + */ +int image_asn1 ( struct image *image, size_t offset, + struct asn1_cursor **cursor ) { + int next; + int rc; + + /* Sanity check */ + assert ( offset <= image->len ); + + /* Check that this image can be used to extract an ASN.1 object */ + if ( ! ( image->type && image->type->asn1 ) ) + return -ENOTSUP; + + /* Try creating ASN.1 cursor */ + next = image->type->asn1 ( image, offset, cursor ); + if ( next < 0 ) { + rc = next; + DBGC ( image, "IMAGE %s could not extract ASN.1 object: %s\n", + image->name, strerror ( rc ) ); + return rc; + } + + return next; +} |