1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ISCSI_CHAP_H_
3#define _ISCSI_CHAP_H_
4
5#include <linux/types.h>
6
7#define CHAP_DIGEST_UNKNOWN	0
8#define CHAP_DIGEST_MD5		5
9#define CHAP_DIGEST_SHA1	6
10#define CHAP_DIGEST_SHA256	7
11#define CHAP_DIGEST_SHA3_256	8
12
13#define MAX_CHAP_CHALLENGE_LEN	32
14#define CHAP_CHALLENGE_STR_LEN	4096
15#define MAX_RESPONSE_LENGTH	128	/* sufficient for SHA3 256 */
16#define	MAX_CHAP_N_SIZE		512
17
18#define MD5_SIGNATURE_SIZE	16	/* 16 bytes in a MD5 message digest */
19#define SHA1_SIGNATURE_SIZE	20	/* 20 bytes in a SHA1 message digest */
20#define SHA256_SIGNATURE_SIZE	32	/* 32 bytes in a SHA256 message digest */
21#define SHA3_256_SIGNATURE_SIZE	32	/* 32 bytes in a SHA3 256 message digest */
22
23#define CHAP_STAGE_CLIENT_A	1
24#define CHAP_STAGE_SERVER_AIC	2
25#define CHAP_STAGE_CLIENT_NR	3
26#define CHAP_STAGE_CLIENT_NRIC	4
27#define CHAP_STAGE_SERVER_NR	5
28
29struct iscsi_node_auth;
30struct iscsit_conn;
31
32extern u32 chap_main_loop(struct iscsit_conn *, struct iscsi_node_auth *, char *, char *,
33				int *, int *);
34
35struct iscsi_chap {
36	unsigned char	id;
37	unsigned char	challenge[MAX_CHAP_CHALLENGE_LEN];
38	unsigned int	challenge_len;
39	unsigned char	*digest_name;
40	unsigned int	digest_size;
41	unsigned int	authenticate_target;
42	unsigned int	chap_state;
43} ____cacheline_aligned;
44
45#endif   /*** _ISCSI_CHAP_H_ ***/
46