Add a test for SubjectAltName writing to a certificate

Signed-off-by: Andrzej Kurek <andrzej.kurek@arm.com>
diff --git a/tests/suites/test_suite_x509write.function b/tests/suites/test_suite_x509write.function
index b08555c..6f9b8db 100644
--- a/tests/suites/test_suite_x509write.function
+++ b/tests/suites/test_suite_x509write.function
@@ -326,7 +326,7 @@
                     char *ext_key_usage,
                     int cert_type, int set_cert_type, int auth_ident,
                     int ver, char *cert_check_file, int pk_wrap, int is_ca,
-                    char *cert_verify_file)
+                    char *cert_verify_file, int set_subjectAltNames)
 {
     mbedtls_pk_context subject_key, issuer_key, issuer_key_alt;
     mbedtls_pk_context *key = &issuer_key;
@@ -348,6 +348,48 @@
     mbedtls_svc_key_id_t key_id = MBEDTLS_SVC_KEY_ID_INIT;
 #endif
     mbedtls_pk_type_t issuer_key_type;
+    mbedtls_x509_san_list san_ip;
+    mbedtls_x509_san_list san_dns;
+    mbedtls_x509_san_list san_uri;
+    mbedtls_x509_san_list san_mail;
+    mbedtls_x509_san_list san_dn;
+    mbedtls_asn1_named_data *ext_san_dirname = NULL;
+    const char san_ip_name[] = { 0x01, 0x02, 0x03, 0x04 };
+    const char *san_dns_name = "example.com";
+    const char *san_dn_name = "C=UK,O=Mbed TLS,CN=SubjectAltName test";
+    const char *san_mail_name = "mail@example.com";
+    const char *san_uri_name = "http://pki.example.com";
+    mbedtls_x509_san_list *san_list = NULL;
+
+    if (set_subjectAltNames) {
+        san_mail.node.type = MBEDTLS_X509_SAN_RFC822_NAME;
+        san_mail.node.san.unstructured_name.p = (unsigned char *) san_mail_name;
+        san_mail.node.san.unstructured_name.len = sizeof(san_mail_name);
+        san_mail.next = NULL;
+
+        san_dns.node.type = MBEDTLS_X509_SAN_DNS_NAME;
+        san_dns.node.san.unstructured_name.p = (unsigned char *) san_dns_name;
+        san_dns.node.san.unstructured_name.len = strlen(san_dns_name);
+        san_dns.next = &san_mail;
+
+        san_dn.node.type = MBEDTLS_X509_SAN_DIRECTORY_NAME;
+        TEST_ASSERT(mbedtls_x509_string_to_names(&ext_san_dirname,
+                                                 san_dn_name) == 0);
+        san_dn.node.san.directory_name = *ext_san_dirname;
+        san_dn.next = &san_dns;
+
+        san_ip.node.type = MBEDTLS_X509_SAN_IP_ADDRESS;
+        san_ip.node.san.unstructured_name.p = (unsigned char *) san_ip_name;
+        san_ip.node.san.unstructured_name.len = sizeof(san_ip_name);
+        san_ip.next = &san_dn;
+
+        san_uri.node.type = MBEDTLS_X509_SAN_UNIFORM_RESOURCE_IDENTIFIER;
+        san_uri.node.san.unstructured_name.p = (unsigned char *) san_uri_name;
+        san_uri.node.san.unstructured_name.len = strlen(san_uri_name);
+        san_uri.next = &san_ip;
+
+        san_list = &san_uri;
+    }
 
     memset(&rnd_info, 0x2a, sizeof(mbedtls_test_rnd_pseudo_info));
 #if defined(MBEDTLS_TEST_DEPRECATED) && defined(MBEDTLS_BIGNUM_C)
@@ -465,6 +507,9 @@
         }
     }
 
+    if (set_subjectAltNames) {
+        TEST_ASSERT(mbedtls_x509write_crt_set_subject_alternative_name(&crt, san_list) == 0);
+    }
     ret = mbedtls_x509write_crt_pem(&crt, buf, sizeof(buf),
                                     mbedtls_test_rnd_pseudo_rand, &rnd_info);
     TEST_ASSERT(ret == 0);