verify_name(): factor duplicated code to function
diff --git a/library/x509_crt.c b/library/x509_crt.c
index 0285af7..661a8b8 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -1752,7 +1752,7 @@
 /*
  * Return 0 if name matches wildcard, -1 otherwise
  */
-static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name )
+static int x509_check_wildcard( const char *cn, const mbedtls_x509_buf *name )
 {
     size_t i;
     size_t cn_idx = 0, cn_len = strlen( cn );
@@ -2154,37 +2154,46 @@
 }
 
 /*
+ * Check for CN match
+ */
+static int x509_crt_check_cn( const mbedtls_x509_buf *name,
+                              const char *cn, size_t cn_len )
+{
+    /* try exact match */
+    if( name->len == cn_len &&
+        x509_memcasecmp( cn, name->p, cn_len ) == 0 )
+    {
+        return( 0 );
+    }
+
+    /* try wildcard match */
+    if( name->len > 2 &&
+        memcmp( name->p, "*.", 2 ) == 0 &&
+        x509_check_wildcard( cn, name ) == 0 )
+    {
+        return( 0 );
+    }
+
+    return( -1 );
+}
+
+/*
  * Verify the requested CN - only call this if cn is not NULL!
  */
-static void x509_crt_verify_name( mbedtls_x509_crt *crt,
+static void x509_crt_verify_name( const mbedtls_x509_crt *crt,
                                   const char *cn,
                                   uint32_t *flags )
 {
-    mbedtls_x509_name *name;
-    mbedtls_x509_sequence *cur = NULL;
-    size_t cn_len;
-
-    name = &crt->subject;
-    cn_len = strlen( cn );
+    const mbedtls_x509_name *name;
+    const mbedtls_x509_sequence *cur;
+    size_t cn_len = strlen( cn );
 
     if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME )
     {
-        cur = &crt->subject_alt_names;
-
-        while( cur != NULL )
+        for( cur = &crt->subject_alt_names; cur != NULL; cur = cur->next )
         {
-            if( cur->buf.len == cn_len &&
-                x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 )
+            if( x509_crt_check_cn( &cur->buf, cn, cn_len ) == 0 )
                 break;
-
-            if( cur->buf.len > 2 &&
-                memcmp( cur->buf.p, "*.", 2 ) == 0 &&
-                x509_check_wildcard( cn, &cur->buf ) == 0 )
-            {
-                break;
-            }
-
-            cur = cur->next;
         }
 
         if( cur == NULL )
@@ -2192,21 +2201,13 @@
     }
     else
     {
-        while( name != NULL )
+        for( name = &crt->subject; name != NULL;  name = name->next )
         {
-            if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 )
+            if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 &&
+                x509_crt_check_cn( &name->val, cn, cn_len ) == 0 )
             {
-                if( name->val.len == cn_len &&
-                    x509_memcasecmp( name->val.p, cn, cn_len ) == 0 )
-                    break;
-
-                if( name->val.len > 2 &&
-                    memcmp( name->val.p, "*.", 2 ) == 0 &&
-                    x509_check_wildcard( cn, &name->val ) == 0 )
-                    break;
+                break;
             }
-
-            name = name->next;
         }
 
         if( name == NULL )