1
0
Fork 0
libnvme/test/config/psk-json.c
Daniel Baumann bdf865565e
Merging upstream version 1.11.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-16 10:51:10 +01:00

89 lines
1.5 KiB
C

// SPDX-License-Identifier: LGPL-2.1-or-later
/**
* This file is part of libnvme.
* Copyright (c) 2024 Daniel Wagner, SUSE LLC
*/
#include "nvme/linux.h"
#include "nvme/tree.h"
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <errno.h>
#include <libnvme.h>
static bool import_export_key(nvme_ctrl_t c)
{
unsigned char version, hmac, *key;
char *encoded_key;
size_t len;
key = nvme_import_tls_key_versioned(nvme_ctrl_get_tls_key(c),
&version, &hmac, &len);
if (!key) {
printf("ERROR: nvme_import_tls_key_versioned failed with %d\n",
errno);
return false;
}
encoded_key = nvme_export_tls_key_versioned(version, hmac, key, len);
free(key);
if (!encoded_key) {
printf("ERROR: nvme_export_tls_key_versioned failed with %d\n",
errno);
return false;
}
nvme_ctrl_set_tls_key(c, encoded_key);
free(encoded_key);
return true;
}
static bool psk_json_test(char *file)
{
bool pass = false;
nvme_root_t r;
nvme_host_t h;
nvme_subsystem_t s;
nvme_ctrl_t c;
int err;
r = nvme_create_root(stderr, LOG_ERR);
if (!r)
return false;
err = nvme_read_config(r, file);
if (err)
goto out;
nvme_for_each_host(r, h)
nvme_for_each_subsystem(h, s)
nvme_subsystem_for_each_ctrl(s, c)
if (!import_export_key(c))
goto out;
err = nvme_dump_config(r);
if (err)
goto out;
pass = true;
out:
nvme_free_tree(r);
return pass;
}
int main(int argc, char *argv[])
{
bool pass;
pass = psk_json_test(argv[1]);
fflush(stdout);
exit(pass ? EXIT_SUCCESS : EXIT_FAILURE);
}