mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-01-27 14:51:11 +00:00
Don't search twice for a non-existing parent
This commit is contained in:
parent
b8acfd2ba8
commit
c61e5c9304
|
@ -1906,13 +1906,13 @@ static int x509_crt_check_parent( const mbedtls_x509_crt *child,
|
||||||
* - this happens in cases 1, 2 and 3 of the comment on verify()
|
* - this happens in cases 1, 2 and 3 of the comment on verify()
|
||||||
* - case 1 is special as child and trust_ca point to copies of the same
|
* - case 1 is special as child and trust_ca point to copies of the same
|
||||||
* certificate then
|
* certificate then
|
||||||
* - child was found to have no parent either in the chain or in trusted CAs
|
* - child was found to have no parent either in the chain or in trusted CAs,
|
||||||
|
* in which case we're called with trust_ca set to NULL
|
||||||
* - this is cases 4 and 5 of the comment on verify()
|
* - this is cases 4 and 5 of the comment on verify()
|
||||||
*
|
*
|
||||||
* For historical reasons, the function currently does not assume that
|
* For historical reasons, the function currently does not assume that
|
||||||
* trust_ca points directly to the right root in the first case, and it
|
* trust_ca points directly to the right root in the first case, so it always
|
||||||
* doesn't know in which case it starts, so it always starts by searching for
|
* starts by searching for a parent in trust_ca.
|
||||||
* a parent in trust_ca.
|
|
||||||
*/
|
*/
|
||||||
static int x509_crt_verify_top(
|
static int x509_crt_verify_top(
|
||||||
mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca,
|
mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca,
|
||||||
|
@ -1946,6 +1946,10 @@ static int x509_crt_verify_top(
|
||||||
*/
|
*/
|
||||||
*flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED;
|
*flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED;
|
||||||
|
|
||||||
|
/* Special case #1: no root, stop here */
|
||||||
|
if( trust_ca == NULL )
|
||||||
|
goto callback;
|
||||||
|
|
||||||
md_info = mbedtls_md_info_from_type( child->sig_md );
|
md_info = mbedtls_md_info_from_type( child->sig_md );
|
||||||
if( mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ) != 0 )
|
if( mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ) != 0 )
|
||||||
{
|
{
|
||||||
|
@ -2042,6 +2046,7 @@ static int x509_crt_verify_top(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callback:
|
||||||
/* Call callback on top cert */
|
/* Call callback on top cert */
|
||||||
if( NULL != f_vrfy )
|
if( NULL != f_vrfy )
|
||||||
{
|
{
|
||||||
|
@ -2173,7 +2178,7 @@ static int x509_crt_verify_child(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = x509_crt_verify_top( parent, trust_ca, ca_crl, profile,
|
ret = x509_crt_verify_top( parent, NULL, ca_crl, profile,
|
||||||
path_cnt + 1, self_cnt, &parent_flags,
|
path_cnt + 1, self_cnt, &parent_flags,
|
||||||
f_vrfy, p_vrfy );
|
f_vrfy, p_vrfy );
|
||||||
if( ret != 0 )
|
if( ret != 0 )
|
||||||
|
@ -2349,7 +2354,7 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = x509_crt_verify_top( crt, trust_ca, ca_crl, profile,
|
ret = x509_crt_verify_top( crt, NULL, ca_crl, profile,
|
||||||
pathlen, selfsigned, flags, f_vrfy, p_vrfy );
|
pathlen, selfsigned, flags, f_vrfy, p_vrfy );
|
||||||
if( ret != 0 )
|
if( ret != 0 )
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
Loading…
Reference in a new issue