[crypto] Centralise mechanisms for identifying X.509 certificates

Centralise all current mechanisms for identifying an X.509 certificate
(by raw content, by subject, by issuer and serial number, and by
matching public key), and remove the certstore-specific and
CMS-specific variants of these functions.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2024-08-12 12:26:52 +01:00
parent 59e2b03e6a
commit d85590b658
6 changed files with 139 additions and 93 deletions
-4
View File
@@ -9,14 +9,10 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <ipxe/asn1.h>
#include <ipxe/x509.h>
#include <ipxe/privkey.h>
extern struct x509_chain certstore;
extern struct x509_certificate * certstore_find ( struct asn1_cursor *raw );
extern struct x509_certificate * certstore_find_key ( struct private_key *key );
extern void certstore_add ( struct x509_certificate *cert );
extern void certstore_del ( struct x509_certificate *cert );
+19
View File
@@ -17,6 +17,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <ipxe/list.h>
struct image;
struct private_key;
/** An X.509 serial number */
struct x509_serial {
@@ -201,6 +202,13 @@ struct x509_chain {
struct refcnt refcnt;
/** List of links */
struct list_head links;
/** Mark certificate as found
*
* @v certs X.509 certificate list
* @v cert X.509 certificate
*/
void ( * found ) ( struct x509_chain *certs,
struct x509_certificate *cert );
};
/** An X.509 certificate */
@@ -424,6 +432,17 @@ extern int x509_append ( struct x509_chain *chain,
extern int x509_append_raw ( struct x509_chain *chain, const void *data,
size_t len );
extern void x509_truncate ( struct x509_chain *chain, struct x509_link *link );
extern struct x509_certificate * x509_find ( struct x509_chain *certs,
const struct asn1_cursor *raw );
extern struct x509_certificate *
x509_find_subject ( struct x509_chain *certs,
const struct asn1_cursor *subject );
extern struct x509_certificate *
x509_find_issuer_serial ( struct x509_chain *certs,
const struct asn1_cursor *issuer,
const struct asn1_cursor *serial );
extern struct x509_certificate * x509_find_key ( struct x509_chain *certs,
struct private_key *key );
extern int x509_auto_append ( struct x509_chain *chain,
struct x509_chain *certs );
extern int x509_validate_chain ( struct x509_chain *chain, time_t time,