Introduce helpers for conversion between X.509 buffer structs
This commit introduces two static helpers
- `x509_buf_to_buf_raw()`
- `x509_buf_raw_to_buf()`
which convert to/from the old `mbedtls_x509_buf` and
the new `mbedtls_x509_buf_raw` (the latter omitting the
ASN.1 tag field).
diff --git a/library/x509_crt.c b/library/x509_crt.c
index bd452b6..04b227a 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -78,6 +78,22 @@
#endif /* !_WIN32 || EFIX64 || EFI32 */
#endif
+#if !defined(MBEDTLS_X509_ON_DEMAND_PARSING)
+static void x509_buf_to_buf_raw( mbedtls_x509_buf_raw *dst,
+ mbedtls_x509_buf const *src )
+{
+ dst->p = src->p;
+ dst->len = src->len;
+}
+
+static void x509_buf_raw_to_buf( mbedtls_x509_buf *dst,
+ mbedtls_x509_buf_raw const *src )
+{
+ dst->p = src->p;
+ dst->len = src->len;
+}
+#endif /* MBEDTLS_X509_ON_DEMAND_PARSING */
+
static int x509_crt_parse_frame( unsigned char *start,
unsigned char *end,
mbedtls_x509_crt_frame *frame );
@@ -118,26 +134,16 @@
frame->sig_pk = crt->sig_pk;
frame->valid_from = crt->valid_from;
frame->valid_to = crt->valid_to;
- frame->raw.p = crt->raw.p;
- frame->raw.len = crt->raw.len;
- frame->tbs.p = crt->tbs.p;
- frame->tbs.len = crt->tbs.len;
- frame->serial.p = crt->serial.p;
- frame->serial.len = crt->serial.len;
- frame->pubkey_raw.p = crt->pk_raw.p;
- frame->pubkey_raw.len = crt->pk_raw.len;
- frame->issuer_raw.p = crt->issuer_raw.p;
- frame->issuer_raw.len = crt->issuer_raw.len;
- frame->subject_raw.p = crt->subject_raw.p;
- frame->subject_raw.len = crt->subject_raw.len;
- frame->issuer_id.p = crt->issuer_id.p;
- frame->issuer_id.len = crt->issuer_id.len;
- frame->subject_id.p = crt->subject_id.p;
- frame->subject_id.len = crt->subject_id.len;
- frame->sig.p = crt->sig.p;
- frame->sig.len = crt->sig.len;
- frame->v3_ext.p = crt->v3_ext.p;
- frame->v3_ext.len = crt->v3_ext.len;
+ x509_buf_to_buf_raw( &frame->raw, &crt->raw );
+ x509_buf_to_buf_raw( &frame->tbs, &crt->tbs );
+ x509_buf_to_buf_raw( &frame->serial, &crt->serial );
+ x509_buf_to_buf_raw( &frame->pubkey_raw, &crt->pk_raw );
+ x509_buf_to_buf_raw( &frame->issuer_raw, &crt->issuer_raw );
+ x509_buf_to_buf_raw( &frame->subject_raw, &crt->subject_raw );
+ x509_buf_to_buf_raw( &frame->subject_id, &crt->subject_id );
+ x509_buf_to_buf_raw( &frame->issuer_id, &crt->issuer_id );
+ x509_buf_to_buf_raw( &frame->sig, &crt->sig );
+ x509_buf_to_buf_raw( &frame->v3_ext, &crt->v3_ext );
/* The legacy CRT structure doesn't explicitly contain
* the `AlgorithmIdentifier` bounds; however, those can
@@ -1439,26 +1445,17 @@
/* Copy frame to legacy CRT structure -- that's inefficient, but if
* memory matters, the new CRT structure should be used anyway. */
- crt->tbs.p = frame->tbs.p;
- crt->tbs.len = frame->tbs.len;
- crt->serial.p = frame->serial.p;
- crt->serial.len = frame->serial.len;
- crt->issuer_raw.p = frame->issuer_raw.p;
- crt->issuer_raw.len = frame->issuer_raw.len;
- crt->subject_raw.p = frame->subject_raw.p;
- crt->subject_raw.len = frame->subject_raw.len;
- crt->issuer_id.p = frame->issuer_id.p;
- crt->issuer_id.len = frame->issuer_id.len;
- crt->subject_id.p = frame->subject_id.p;
- crt->subject_id.len = frame->subject_id.len;
- crt->pk_raw.p = frame->pubkey_raw.p;
- crt->pk_raw.len = frame->pubkey_raw.len;
- crt->sig.p = frame->sig.p;
- crt->sig.len = frame->sig.len;
+ x509_buf_raw_to_buf( &crt->tbs, &frame->tbs );
+ x509_buf_raw_to_buf( &crt->serial, &frame->serial );
+ x509_buf_raw_to_buf( &crt->issuer_raw, &frame->issuer_raw );
+ x509_buf_raw_to_buf( &crt->subject_raw, &frame->subject_raw );
+ x509_buf_raw_to_buf( &crt->issuer_id, &frame->issuer_id );
+ x509_buf_raw_to_buf( &crt->subject_id, &frame->subject_id );
+ x509_buf_raw_to_buf( &crt->pk_raw, &frame->pubkey_raw );
+ x509_buf_raw_to_buf( &crt->sig, &frame->sig );
+ x509_buf_raw_to_buf( &crt->v3_ext, &frame->v3_ext );
crt->valid_from = frame->valid_from;
crt->valid_to = frame->valid_to;
- crt->v3_ext.p = frame->v3_ext.p;
- crt->v3_ext.len = frame->v3_ext.len;
crt->version = frame->version;
crt->ca_istrue = frame->ca_istrue;
crt->max_pathlen = frame->max_pathlen;