Skip to content

Commit fa9cffa

Browse files
committed
os_stub/cryptlib_mbedtls: x509: Fixup setting the CSR constraints
We were incorrectly not actually copying the OIDs from the existing cert. This ensures that we do apply the OIDs Fixes: 6f798df "os_stub: cryptlib: CSR: Allow copying attributes from an existing cert" Signed-off-by: Alistair Francis <[email protected]>
1 parent 087adce commit fa9cffa

File tree

1 file changed

+28
-28
lines changed
  • os_stub/cryptlib_mbedtls/pk

1 file changed

+28
-28
lines changed

os_stub/cryptlib_mbedtls/pk/x509.c

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,15 +1951,15 @@ bool libspdm_gen_x509_csr(size_t hash_nid, size_t asym_nid,
19511951
mbedtls_x509write_csr req;
19521952
mbedtls_md_type_t md_alg;
19531953
mbedtls_asn1_sequence extns;
1954-
mbedtls_asn1_sequence *next;
1954+
mbedtls_asn1_sequence *next_oid;
19551955
mbedtls_x509_buf buf;
19561956
mbedtls_x509_crt *cert;
19571957
mbedtls_pk_context key;
19581958

19591959
uint8_t pubkey_buffer[LIBSPDM_MAX_PUBKEY_DER_BUFFER_SIZE];
19601960
uint8_t *pubkey_der_data;
19611961
size_t pubkey_der_len;
1962-
size_t tag_len;
1962+
size_t oid_tag_len;
19631963

19641964
/*basic_constraints: CA: false */
19651965
#define BASIC_CONSTRAINTS_STRING_FALSE {0x30, 0x00}
@@ -1973,7 +1973,7 @@ bool libspdm_gen_x509_csr(size_t hash_nid, size_t asym_nid,
19731973
mbedtls_x509write_csr_init(&req);
19741974
mbedtls_pk_init(&key);
19751975
csr_buffer_size = *csr_len;
1976-
next = NULL;
1976+
next_oid = NULL;
19771977

19781978
ret = 1;
19791979
switch (asym_nid)
@@ -2073,55 +2073,55 @@ bool libspdm_gen_x509_csr(size_t hash_nid, size_t asym_nid,
20732073
/* Set key */
20742074
mbedtls_x509write_csr_set_key(&req, &key);
20752075

2076+
/*set basicConstraints*/
2077+
if (mbedtls_x509write_csr_set_extension(&req, MBEDTLS_OID_BASIC_CONSTRAINTS,
2078+
MBEDTLS_OID_SIZE(MBEDTLS_OID_BASIC_CONSTRAINTS),
2079+
is_ca ? basic_constraints_true : basic_constraints_false,
2080+
is_ca ?
2081+
sizeof(basic_constraints_true) :
2082+
sizeof(basic_constraints_false)
2083+
) != 0) {
2084+
ret = 1;
2085+
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
2086+
"mbedtls_x509write_csr_set_extension set basicConstraints failed \n"));
2087+
goto free_all;
2088+
}
2089+
20762090
if (base_cert != NULL) {
20772091
cert = base_cert;
20782092
buf = cert->v3_ext;
20792093
if (mbedtls_asn1_get_sequence_of(&buf.p, buf.p + buf.len, &extns,
20802094
MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)) {
20812095
ret = 1;
20822096
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
2083-
"mbedtls_x509write_csr_set_extension unable to get tag\n"));
2097+
"mbedtls_x509write_csr_set_extension unable to get sequence\n"));
20842098
goto free_all;
20852099
}
20862100

2087-
next = &extns;
2101+
next_oid = &extns;
20882102
}
20892103

2090-
while (next) {
2091-
if (mbedtls_asn1_get_tag(&(next->buf.p), next->buf.p + next->buf.len, &tag_len,
2092-
MBEDTLS_ASN1_OID)) {
2104+
while (next_oid) {
2105+
if (mbedtls_asn1_get_tag(&(next_oid->buf.p), next_oid->buf.p + next_oid->buf.len,
2106+
&oid_tag_len, MBEDTLS_ASN1_OID)) {
20932107
ret = 1;
20942108
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
2095-
"mbedtls_x509write_csr_set_extension unable to get tag\n"));
2109+
"mbedtls_x509write_csr_set_extension unable to get OID tag\n"));
20962110
goto free_all;
20972111
}
20982112

2099-
if (mbedtls_x509write_csr_set_extension(&req, MBEDTLS_OID_BASIC_CONSTRAINTS,
2100-
MBEDTLS_OID_SIZE(MBEDTLS_OID_BASIC_CONSTRAINTS),
2101-
next->buf.p,
2102-
tag_len
2113+
if (mbedtls_x509write_csr_set_extension(&req, next_oid->buf.p,
2114+
oid_tag_len,
2115+
next_oid->buf.p + oid_tag_len,
2116+
next_oid->buf.len - oid_tag_len
21032117
) != 0) {
21042118
ret = 1;
21052119
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
21062120
"mbedtls_x509write_csr_set_extension set custom OID failed \n"));
21072121
goto free_all;
21082122
}
21092123

2110-
next = next->next;
2111-
}
2112-
2113-
/*set basicConstraints*/
2114-
if (mbedtls_x509write_csr_set_extension(&req, MBEDTLS_OID_BASIC_CONSTRAINTS,
2115-
MBEDTLS_OID_SIZE(MBEDTLS_OID_BASIC_CONSTRAINTS),
2116-
is_ca ? basic_constraints_true : basic_constraints_false,
2117-
is_ca ?
2118-
sizeof(basic_constraints_true) :
2119-
sizeof(basic_constraints_false)
2120-
) != 0) {
2121-
ret = 1;
2122-
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
2123-
"mbedtls_x509write_csr_set_extension set basicConstraints failed \n"));
2124-
goto free_all;
2124+
next_oid = next_oid->next;
21252125
}
21262126

21272127
/*csr data is written at the end of the buffer*/

0 commit comments

Comments
 (0)