mirror of
https://github.com/cuberite/polarssl.git
synced 2025-09-05 21:25:27 -04:00
Merge pull request #6919 from valeriosetti/issue6843-backport
Backport: Improve X.509 cert writing serial number management
This commit is contained in:
commit
4b7cb8c737
@ -0,0 +1,5 @@
|
|||||||
|
Bugfix
|
||||||
|
* mbedtls_x509write_crt_set_serial() now explicitly rejects serial numbers
|
||||||
|
whose binary representation is longer than 20 bytes. This was already
|
||||||
|
forbidden by the standard (RFC5280 - section 4.1.2.2) and now it's being
|
||||||
|
enforced also at code level.
|
@ -100,6 +100,10 @@ int mbedtls_x509write_crt_set_serial(mbedtls_x509write_cert *ctx,
|
|||||||
{
|
{
|
||||||
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
||||||
|
|
||||||
|
if (mbedtls_mpi_size(serial) > MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN) {
|
||||||
|
return MBEDTLS_ERR_X509_BAD_INPUT_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = mbedtls_mpi_copy(&ctx->serial, serial)) != 0) {
|
if ((ret = mbedtls_mpi_copy(&ctx->serial, serial)) != 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -132,3 +132,6 @@ mbedtls_x509_string_to_names:"C=NL, O=Offspark\a Inc., OU=PolarSSL":"":MBEDTLS_E
|
|||||||
|
|
||||||
X509 String to Names #6 (Escape at end)
|
X509 String to Names #6 (Escape at end)
|
||||||
mbedtls_x509_string_to_names:"C=NL, O=Offspark\":"":MBEDTLS_ERR_X509_INVALID_NAME
|
mbedtls_x509_string_to_names:"C=NL, O=Offspark\":"":MBEDTLS_ERR_X509_INVALID_NAME
|
||||||
|
|
||||||
|
Check max serial length
|
||||||
|
x509_set_serial_check:
|
||||||
|
@ -425,6 +425,26 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
/* BEGIN_CASE depends_on:MBEDTLS_X509_CRT_WRITE_C */
|
||||||
|
void x509_set_serial_check()
|
||||||
|
{
|
||||||
|
mbedtls_x509write_cert ctx;
|
||||||
|
mbedtls_mpi serial_mpi;
|
||||||
|
uint8_t invalid_serial[MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN + 1];
|
||||||
|
|
||||||
|
memset(invalid_serial, 0x01, sizeof(invalid_serial));
|
||||||
|
|
||||||
|
mbedtls_mpi_init(&serial_mpi);
|
||||||
|
TEST_EQUAL(mbedtls_mpi_read_binary(&serial_mpi, invalid_serial,
|
||||||
|
sizeof(invalid_serial)), 0);
|
||||||
|
TEST_EQUAL(mbedtls_x509write_crt_set_serial(&ctx, &serial_mpi),
|
||||||
|
MBEDTLS_ERR_X509_BAD_INPUT_DATA);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_mpi_free(&serial_mpi);
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_X509_CREATE_C:MBEDTLS_X509_USE_C */
|
/* BEGIN_CASE depends_on:MBEDTLS_X509_CREATE_C:MBEDTLS_X509_USE_C */
|
||||||
void mbedtls_x509_string_to_names(char *name, char *parsed_name, int result
|
void mbedtls_x509_string_to_names(char *name, char *parsed_name, int result
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user