Take shortcut for directly trusted EE cert

This is a slight change of behaviour in that the previous condition was:
- same subject
- signature matches
while the new condition is:
- exact same certificate

However the documentation for mbedtls_x509_crt_verify() (note on trust_ca)
mentions the new condition, so code that respected the documentation will keep
working.

In addition, this is a bit faster as it doesn't check the self-signature
(which never needs to be checked for certs in the trusted list).
diff --git a/library/x509_crt.c b/library/x509_crt.c
index 332c02d..be5a87e 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -1924,7 +1924,6 @@
 {
     int ret;
     uint32_t ca_flags = 0;
-    int check_path_cnt;
     unsigned char hash[MBEDTLS_MD_MAX_SIZE];
     const mbedtls_md_info_t *md_info;
     mbedtls_x509_crt *future_past_ca = NULL;
@@ -1950,6 +1949,14 @@
     if( trust_ca == NULL )
         goto callback;
 
+    /* Special case #2: child == trust_ca: trust and that's it */
+    if( child->raw.len == trust_ca->raw.len &&
+        memcmp( child->raw.p, trust_ca->raw.p, child->raw.len ) == 0 )
+    {
+        *flags &= ~MBEDTLS_X509_BADCERT_NOT_TRUSTED;
+        goto callback;
+    }
+
     md_info = mbedtls_md_info_from_type( child->sig_md );
     if( mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ) != 0 )
     {
@@ -1963,22 +1970,9 @@
         if( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 )
             continue;
 
-        check_path_cnt = path_cnt + 1;
-
-        /*
-         * Reduce check_path_cnt to check against if top of the chain is
-         * the same as the trusted CA
-         */
-        if( child->subject_raw.len == trust_ca->subject_raw.len &&
-            memcmp( child->subject_raw.p, trust_ca->subject_raw.p,
-                            child->issuer_raw.len ) == 0 )
-        {
-            check_path_cnt--;
-        }
-
         /* Self signed certificates do not count towards the limit */
         if( trust_ca->max_pathlen > 0 &&
-            trust_ca->max_pathlen < check_path_cnt - self_cnt )
+            trust_ca->max_pathlen < 1 + path_cnt - self_cnt )
         {
             continue;
         }
@@ -2018,10 +2012,7 @@
      * to the callback for any issues with validity and CRL presence for the
      * trusted CA certificate.
      */
-    if( trust_ca != NULL &&
-        ( child->subject_raw.len != trust_ca->subject_raw.len ||
-          memcmp( child->subject_raw.p, trust_ca->subject_raw.p,
-                            child->issuer_raw.len ) != 0 ) )
+    if( trust_ca != NULL )
     {
 #if defined(MBEDTLS_X509_CRL_PARSE_C)
         /* Check trusted CA's CRL for the chain's top crt */