#define JSON_UPDATE_BOOL_OPTION(c, k, a, o)                            \
        if (!strcmp(# a, k ) && !c->a) c->a = json_object_get_boolean(o);
 
+static void json_export_nvme_tls_key(long keyring_id, long tls_key,
+                                    struct json_object *obj)
+{
+       int key_len;
+       _cleanup_free_ unsigned char *key_data;
+
+       key_data = nvme_read_key(keyring_id, tls_key, &key_len);
+       if (key_data) {
+               _cleanup_free_ char *tls_str;
+
+               tls_str = nvme_export_tls_key(key_data, key_len);
+               if (tls_str)
+                       json_object_object_add(obj, "tls_key",
+                                              json_object_new_string(tls_str));
+       }
+}
+
 static void json_update_attributes(nvme_ctrl_t c,
                                   struct json_object *ctrl_obj)
 {
                                               json_object_new_string(desc));
                }
        }
-       if (cfg->tls_key) {
-               _cleanup_free_ char *desc =
-                       nvme_describe_key_serial(cfg->tls_key);
-
-               if (desc) {
-                       json_object_object_add(port_obj, "tls_key",
-                                              json_object_new_string(desc));
-               }
-       }
+       /*
+        * Store the TLS key in PSK interchange format
+        */
+       if (cfg->tls_key)
+               json_export_nvme_tls_key(cfg->keyring, cfg->tls_key, port_obj);
 
        json_object_array_add(ctrl_array, port_obj);
 }