Commit 091d5877 authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Jim Harris
Browse files

nvme: make spdk_nvme_dhchap_calculate() public



Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I9f89365de517bd6c9925e4a2cdc021e2623c3a25
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22666


Reviewed-by: default avatarSeung yeon Shin <syeon.shin@samsung.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 2c8f9257
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: BSD-3-Clause
 * Copyright (c) 2024 Intel Corporation
 */

#ifndef SPDK_INTERNAL_NVME_H
#define SPDK_INTERNAL_NVME_H

#include "spdk/keyring.h"
#include "spdk/nvme.h"
#include "spdk/nvmf_spec.h"
#include "spdk/stdinc.h"

/**
 * Calculate a response to a DH-HMAC-CHAP challenge.
 *
 * \param key DH-HMAC-CHAP key.
 * \param hash Hash function to use.
 * \param type Challenge type ("HostHost" for host challenge or "Controller" for controller
 * challenge).
 * \param seq Sequence number.
 * \param tid Transaction ID.
 * \param scc Secure channel concatenation.
 * \param nqn1 Host/Subsystem NQN, depending on challenge type (hostnqn for host challenge,
 * subnqn for controller challange).
 * \param nqn2 The other NQN (if nqn1==hostnqn, then nqn2==subnqn).
 * \param dhkey Diffie-Hellman secret.
 * \param dhlen Size of `dhkey`.
 * \param cval Challenge value.  Its size must be large enough to keep a digest generated by `hash`
 * function (e.g. at least 32B for sha256, 48B for sha384, etc.).
 * \param rval Response buffer.  Its size must be large enough to keep a digest generated by `hash`
 * function (e.g. at least 32B for sha256, 48B for sha384, etc.).
 *
 * \return 0 on success, negative errno otherwise.
 */
int spdk_nvme_dhchap_calculate(struct spdk_key *key, enum spdk_nvmf_dhchap_hash hash,
			       const char *type, uint32_t seq, uint16_t tid, uint8_t scc,
			       const char *nqn1, const char *nqn2, const void *dhkey, size_t dhlen,
			       const void *cval, void *rval);

#endif /* SPDK_INTERNAL_NVME_H */
+18 −17
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#include "spdk/log.h"
#include "spdk/string.h"
#include "spdk/util.h"
#include "spdk_internal/nvme.h"
#include "nvme_internal.h"

#ifdef SPDK_CONFIG_HAVE_EVP_MAC
@@ -398,8 +399,8 @@ out:
	return rc;
}

static int
nvme_auth_calc_response(struct spdk_key *key, enum spdk_nvmf_dhchap_hash hash,
int
spdk_nvme_dhchap_calculate(struct spdk_key *key, enum spdk_nvmf_dhchap_hash hash,
			   const char *type, uint32_t seq, uint16_t tid, uint8_t scc,
			   const char *nqn1, const char *nqn2, const void *dhkey, size_t dhlen,
			   const void *cval, void *rval)
@@ -908,7 +909,7 @@ nvme_auth_send_reply(struct spdk_nvme_qpair *qpair)
		      "len=%u\n", spdk_key_get_name(ctrlr->opts.dhchap_key),
		      challenge->hash_id, challenge->dhg_id, challenge->seqnum, auth->tid,
		      ctrlr->trid.subnqn, ctrlr->opts.hostnqn, hl);
	rc = nvme_auth_calc_response(ctrlr->opts.dhchap_key,
	rc = spdk_nvme_dhchap_calculate(ctrlr->opts.dhchap_key,
					(enum spdk_nvmf_dhchap_hash)challenge->hash_id,
					"HostHost", challenge->seqnum, auth->tid, 0,
					ctrlr->opts.hostnqn, ctrlr->trid.subnqn,
@@ -931,7 +932,7 @@ nvme_auth_send_reply(struct spdk_nvme_qpair *qpair)
			return -EIO;
		}

		rc = nvme_auth_calc_response(ctrlr->opts.dhchap_ctrlr_key,
		rc = spdk_nvme_dhchap_calculate(ctrlr->opts.dhchap_ctrlr_key,
						(enum spdk_nvmf_dhchap_hash)challenge->hash_id,
						"Controller", seqnum, auth->tid, 0,
						ctrlr->trid.subnqn, ctrlr->opts.hostnqn,
+3 −0
Original line number Diff line number Diff line
@@ -213,6 +213,9 @@
	spdk_nvme_dhchap_get_dhgroup_name;
	spdk_nvme_dhchap_get_dhgroup_id;

	# functions from spdk_internal/nvme.h
	spdk_nvme_dhchap_calculate;

	# public functions from nvme_zns.h
	spdk_nvme_zns_ns_get_data;
	spdk_nvme_zns_ns_get_zone_size_sectors;