Introduce TLS 1.3 labels in a single place

Signed-off-by: Hanno Becker <hanno.becker@arm.com>
diff --git a/library/ssl_tls13_keys.c b/library/ssl_tls13_keys.c
index 20cca31..c985aaf 100644
--- a/library/ssl_tls13_keys.c
+++ b/library/ssl_tls13_keys.c
@@ -28,30 +28,18 @@
 #include <stdint.h>
 #include <string.h>
 
+#define LABEL( name, string ) \
+    .name = string,
+
 struct mbedtls_ssl_tls1_3_labels_struct const mbedtls_ssl_tls1_3_labels =
 {
     /* This seems to work in C, despite the string literal being one
      * character too long due to the 0-termination. */
-    .finished     = "finished",
-    .resumption   = "resumption",
-    .traffic_upd  = "traffic upd",
-    .exporter     = "exporter",
-    .key          = "key",
-    .iv           = "iv",
-    .sn           = "sn",
-    .c_hs_traffic = "c hs traffic",
-    .c_ap_traffic = "c ap traffic",
-    .c_e_traffic  = "c e traffic",
-    .s_hs_traffic = "s hs traffic",
-    .s_ap_traffic = "s ap traffic",
-    .s_e_traffic  = "s e traffic",
-    .exp_master   = "exp master",
-    .res_master   = "res master",
-    .ext_binder   = "ext binder",
-    .res_binder   = "res binder",
-    .derived      = "derived"
+    MBEDTLS_SSL_TLS1_3_LABEL_LIST
 };
 
+#undef LABEL
+
 /*
  * This function creates a HkdfLabel structure used in the TLS 1.3 key schedule.
  *
diff --git a/library/ssl_tls13_keys.h b/library/ssl_tls13_keys.h
index a35e085..9efeb04 100644
--- a/library/ssl_tls13_keys.h
+++ b/library/ssl_tls13_keys.h
@@ -20,25 +20,31 @@
 #define MBEDTLS_SSL_TLS1_3_KEYS_H
 
 #if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
-#define MBEDTLS_SSL_TLS1_3_LABEL_LIST                                   \
-    const unsigned char finished    [ sizeof("finished")     - 1 ];     \
-    const unsigned char resumption  [ sizeof("resumption")   - 1 ];     \
-    const unsigned char traffic_upd [ sizeof("traffic upd")  - 1 ];     \
-    const unsigned char export      [ sizeof("exporter")     - 1 ];     \
-    const unsigned char key         [ sizeof("key")          - 1 ];     \
-    const unsigned char iv          [ sizeof("iv")           - 1 ];     \
-    const unsigned char sn          [ sizeof("sn")           - 1 ];     \
-    const unsigned char c_hs_traffic[ sizeof("c hs traffic") - 1 ];     \
-    const unsigned char c_ap_traffic[ sizeof("c ap traffic") - 1 ];     \
-    const unsigned char c_e_traffic [ sizeof("c e traffic")  - 1 ];     \
-    const unsigned char s_hs_traffic[ sizeof("s hs traffic") - 1 ];     \
-    const unsigned char s_ap_traffic[ sizeof("s ap traffic") - 1 ];     \
-    const unsigned char s_e_traffic [ sizeof("s e traffic")  - 1 ];     \
-    const unsigned char exp_master  [ sizeof("exp master")   - 1 ];     \
-    const unsigned char res_master  [ sizeof("res master")   - 1 ];     \
-    const unsigned char ext_binder  [ sizeof("ext binder")   - 1 ];     \
-    const unsigned char res_binder  [ sizeof("res binder")   - 1 ];     \
-    const unsigned char derived     [ sizeof("derived")      - 1 ];     \
+
+/* This requires LABEL( name, string ) to be defined at the point of use.
+ * See e.g. the definition of mbedtls_ssl_tls1_3_labels_union below. */
+#define MBEDTLS_SSL_TLS1_3_LABEL_LIST                               \
+    LABEL( finished    , "finished"     )                           \
+    LABEL( resumption  , "resumption"   )                           \
+    LABEL( traffic_upd , "traffic upd"  )                           \
+    LABEL( export      , "exporter"     )                           \
+    LABEL( key         , "key"          )                           \
+    LABEL( iv          , "iv"           )                           \
+    LABEL( sn          , "sn"           )                           \
+    LABEL( c_hs_traffic, "c hs traffic" )                           \
+    LABEL( c_ap_traffic, "c ap traffic" )                           \
+    LABEL( c_e_traffic , "c e traffic"  )                           \
+    LABEL( s_hs_traffic, "s hs traffic" )                           \
+    LABEL( s_ap_traffic, "s ap traffic" )                           \
+    LABEL( s_e_traffic , "s e traffic"  )                           \
+    LABEL( exp_master  , "exp master"   )                           \
+    LABEL( res_master  , "res master"   )                           \
+    LABEL( ext_binder  , "ext binder"   )                           \
+    LABEL( res_binder  , "res binder"   )                           \
+    LABEL( derived     , "derived"      )
+
+#define LABEL( name, string ) \
+    const unsigned char name    [ sizeof(string) - 1 ];
 
 union mbedtls_ssl_tls1_3_labels_union
 {
@@ -48,6 +54,8 @@
 {
     MBEDTLS_SSL_TLS1_3_LABEL_LIST
 };
+#undef LABEL
+
 extern const struct mbedtls_ssl_tls1_3_labels_struct mbedtls_ssl_tls1_3_labels;
 
 #define MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( LABEL )  \