mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-06-21 15:43:21 +02:00
aa03cfe9db
Pull NVMe fixes from Keith: "- Target data transfer size confiruation (Aurelien) - Enable P2P for RDMA (Shivaji Kant) - TCP target updates (Maurizio, Alistair, Chaitanya, Shivam Kumar) - TCP host updates (Alistair, Chaitanya) - Authentication updates (Alistair, Daniel, Chris Leech) - Multipath fixes (John Garry) - New quirks (Alan Cui, Tao Jiang) - Apple driver fix (Fedor Pchelkin) - PCI admin doorbell update fix (Keith)" * tag 'nvme-7.1-2026-04-24' of git://git.infradead.org/nvme: (22 commits) nvme-auth: Hash DH shared secret to create session key nvme-pci: fix missed admin queue sq doorbell write nvme-auth: Include SC_C in RVAL controller hash nvme-tcp: teardown circular locking fixes nvmet-tcp: Don't clear tls_key when freeing sq Revert "nvmet-tcp: Don't free SQ on authentication success" nvme: skip trace completion for host path errors nvme-pci: add quirk for Memblaze Pblaze5 (0x1c5f:0x0555) nvme-multipath: put module reference when delayed removal work is canceled nvme: expose TLS mode nvme-apple: drop invalid put of admin queue reference count nvme-core: fix parameter name in comment nvmet: avoid recursive nvmet-wq flush in nvmet_ctrl_free nvme-multipath: drop head pointer check in nvme_mpath_clear_current_path() nvme: add quirk NVME_QUIRK_IGNORE_DEV_SUBNQN for 144d:a808 (Samsung PM981/983/970 EVO Plus ) nvmet-tcp: fix race between ICReq handling and queue teardown nvmet-tcp: remove redundant calls to nvmet_tcp_fatal_error() nvmet-tcp: propagate nvmet_tcp_build_pdu_iovec() errors to its callers nvme: enable PCI P2PDMA support for RDMA transport nvmet: introduce new mdts configuration entry ...
65 lines
2.3 KiB
C
65 lines
2.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2021 Hannes Reinecke, SUSE Software Solutions
|
|
*/
|
|
|
|
#ifndef _NVME_AUTH_H
|
|
#define _NVME_AUTH_H
|
|
|
|
#include <crypto/kpp.h>
|
|
#include <crypto/sha2.h>
|
|
|
|
struct nvme_dhchap_key {
|
|
size_t len;
|
|
u8 hash;
|
|
u8 key[] __counted_by(len);
|
|
};
|
|
|
|
u32 nvme_auth_get_seqnum(void);
|
|
const char *nvme_auth_dhgroup_name(u8 dhgroup_id);
|
|
const char *nvme_auth_dhgroup_kpp(u8 dhgroup_id);
|
|
u8 nvme_auth_dhgroup_id(const char *dhgroup_name);
|
|
|
|
const char *nvme_auth_hmac_name(u8 hmac_id);
|
|
size_t nvme_auth_hmac_hash_len(u8 hmac_id);
|
|
u8 nvme_auth_hmac_id(const char *hmac_name);
|
|
struct nvme_auth_hmac_ctx {
|
|
u8 hmac_id;
|
|
union {
|
|
struct hmac_sha256_ctx sha256;
|
|
struct hmac_sha384_ctx sha384;
|
|
struct hmac_sha512_ctx sha512;
|
|
};
|
|
};
|
|
int nvme_auth_hmac_init(struct nvme_auth_hmac_ctx *hmac, u8 hmac_id,
|
|
const u8 *key, size_t key_len);
|
|
void nvme_auth_hmac_update(struct nvme_auth_hmac_ctx *hmac, const u8 *data,
|
|
size_t data_len);
|
|
void nvme_auth_hmac_final(struct nvme_auth_hmac_ctx *hmac, u8 *out);
|
|
|
|
u32 nvme_auth_key_struct_size(u32 key_len);
|
|
struct nvme_dhchap_key *nvme_auth_extract_key(const char *secret, u8 key_hash);
|
|
void nvme_auth_free_key(struct nvme_dhchap_key *key);
|
|
struct nvme_dhchap_key *nvme_auth_alloc_key(u32 len, u8 hash);
|
|
struct nvme_dhchap_key *nvme_auth_transform_key(
|
|
const struct nvme_dhchap_key *key, const char *nqn);
|
|
int nvme_auth_parse_key(const char *secret, struct nvme_dhchap_key **ret_key);
|
|
int nvme_auth_augmented_challenge(u8 hmac_id, const u8 *skey, size_t skey_len,
|
|
const u8 *challenge, u8 *aug, size_t hlen);
|
|
int nvme_auth_gen_privkey(struct crypto_kpp *dh_tfm, u8 dh_gid);
|
|
int nvme_auth_gen_pubkey(struct crypto_kpp *dh_tfm,
|
|
u8 *host_key, size_t host_key_len);
|
|
int nvme_auth_gen_session_key(struct crypto_kpp *dh_tfm,
|
|
const u8 *public_key, size_t public_key_len,
|
|
u8 *sess_key, size_t sess_key_len, u8 hash_id);
|
|
int nvme_auth_generate_psk(u8 hmac_id, const u8 *skey, size_t skey_len,
|
|
const u8 *c1, const u8 *c2, size_t hash_len,
|
|
u8 **ret_psk, size_t *ret_len);
|
|
int nvme_auth_generate_digest(u8 hmac_id, const u8 *psk, size_t psk_len,
|
|
const char *subsysnqn, const char *hostnqn,
|
|
char **ret_digest);
|
|
int nvme_auth_derive_tls_psk(int hmac_id, const u8 *psk, size_t psk_len,
|
|
const char *psk_digest, u8 **ret_psk);
|
|
|
|
#endif /* _NVME_AUTH_H */
|