136c5fee3Smcneal /*
236c5fee3Smcneal  * CDDL HEADER START
336c5fee3Smcneal  *
436c5fee3Smcneal  * The contents of this file are subject to the terms of the
536c5fee3Smcneal  * Common Development and Distribution License (the "License").
636c5fee3Smcneal  * You may not use this file except in compliance with the License.
736c5fee3Smcneal  *
836c5fee3Smcneal  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
936c5fee3Smcneal  * or http://www.opensolaris.org/os/licensing.
1036c5fee3Smcneal  * See the License for the specific language governing permissions
1136c5fee3Smcneal  * and limitations under the License.
1236c5fee3Smcneal  *
1336c5fee3Smcneal  * When distributing Covered Code, include this CDDL HEADER in each
1436c5fee3Smcneal  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1536c5fee3Smcneal  * If applicable, add the following below this CDDL HEADER, with the
1636c5fee3Smcneal  * fields enclosed by brackets "[]" replaced with your own identifying
1736c5fee3Smcneal  * information: Portions Copyright [yyyy] [name of copyright owner]
1836c5fee3Smcneal  *
1936c5fee3Smcneal  * CDDL HEADER END
2036c5fee3Smcneal  */
2136c5fee3Smcneal /*
2236c5fee3Smcneal  * Copyright 2000 by Cisco Systems, Inc.  All rights reserved.
23*2e0fe3efSbing zhao - Sun Microsystems - Beijing China  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
2436c5fee3Smcneal  */
2536c5fee3Smcneal 
2636c5fee3Smcneal #ifndef	_ISCSI_AUTHCLIENT_H
2736c5fee3Smcneal #define	_ISCSI_AUTHCLIENT_H
2836c5fee3Smcneal 
2936c5fee3Smcneal 
3036c5fee3Smcneal /*
3136c5fee3Smcneal  * This file is the include file for for iscsiAuthClient.c
3236c5fee3Smcneal  */
3336c5fee3Smcneal 
3436c5fee3Smcneal #ifdef __cplusplus
3536c5fee3Smcneal extern "C" {
3636c5fee3Smcneal #endif
3736c5fee3Smcneal 
38*2e0fe3efSbing zhao - Sun Microsystems - Beijing China enum { iscsiAuthStringMaxLength = 512 };
3936c5fee3Smcneal enum { iscsiAuthStringBlockMaxLength = 1024 };
4036c5fee3Smcneal enum { iscsiAuthLargeBinaryMaxLength = 1024 };
4136c5fee3Smcneal 
4236c5fee3Smcneal enum { iscsiAuthRecvEndMaxCount = 10 };
4336c5fee3Smcneal 
4436c5fee3Smcneal enum { iscsiAuthClientSignature = 0x5984B2E3 };
4536c5fee3Smcneal 
4636c5fee3Smcneal enum { iscsiAuthChapResponseLength = 16 };
4736c5fee3Smcneal 
4836c5fee3Smcneal /*
4936c5fee3Smcneal  * Note: The ordering of these values are chosen to match
5036c5fee3Smcneal  *       the ordering of the keys as shown in the iSCSI spec.
5136c5fee3Smcneal  *       The table IscsiAuthClientKeyInfo in iscsiAuthClient.c
5236c5fee3Smcneal  *       must also match this order.
5336c5fee3Smcneal  */
5436c5fee3Smcneal enum iscsiAuthKeyType_t {
5536c5fee3Smcneal 	iscsiAuthKeyTypeNone = -1,
5636c5fee3Smcneal 	iscsiAuthKeyTypeFirst = 0,
5736c5fee3Smcneal 	iscsiAuthKeyTypeAuthMethod = iscsiAuthKeyTypeFirst,
5836c5fee3Smcneal 	iscsiAuthKeyTypeChapAlgorithm,
5936c5fee3Smcneal 	iscsiAuthKeyTypeChapUsername,
6036c5fee3Smcneal 	iscsiAuthKeyTypeChapResponse,
6136c5fee3Smcneal 	iscsiAuthKeyTypeChapIdentifier,
6236c5fee3Smcneal 	iscsiAuthKeyTypeChapChallenge,
6336c5fee3Smcneal 	iscsiAuthKeyTypeMaxCount,
6436c5fee3Smcneal 	iscsiAuthKeyTypeLast = iscsiAuthKeyTypeMaxCount - 1
6536c5fee3Smcneal };
6636c5fee3Smcneal typedef enum iscsiAuthKeyType_t IscsiAuthKeyType;
6736c5fee3Smcneal 
6836c5fee3Smcneal enum {
6936c5fee3Smcneal 	/*
7036c5fee3Smcneal 	 * Common options for all keys.
7136c5fee3Smcneal 	 */
7236c5fee3Smcneal 	iscsiAuthOptionReject = -2,
7336c5fee3Smcneal 	iscsiAuthOptionNotPresent = -1,
7436c5fee3Smcneal 	iscsiAuthOptionNone = 1,
7536c5fee3Smcneal 
7636c5fee3Smcneal 	iscsiAuthMethodChap = 2,
7736c5fee3Smcneal 	iscsiAuthMethodMaxCount = 2,
7836c5fee3Smcneal 
7936c5fee3Smcneal 	iscsiAuthChapAlgorithmMd5 = 5,
8036c5fee3Smcneal 	iscsiAuthChapAlgorithmMaxCount = 2
8136c5fee3Smcneal };
8236c5fee3Smcneal 
8336c5fee3Smcneal enum iscsiAuthNegRole_t {
8436c5fee3Smcneal 	iscsiAuthNegRoleOriginator = 1,
8536c5fee3Smcneal 	iscsiAuthNegRoleResponder = 2
8636c5fee3Smcneal };
8736c5fee3Smcneal typedef enum iscsiAuthNegRole_t IscsiAuthNegRole;
8836c5fee3Smcneal 
8936c5fee3Smcneal /*
9036c5fee3Smcneal  * Note: These values are chosen to map to the values sent
9136c5fee3Smcneal  *       in the iSCSI header.
9236c5fee3Smcneal  */
9336c5fee3Smcneal enum iscsiAuthVersion_t {
9436c5fee3Smcneal 	iscsiAuthVersionDraft8 = 2,
9536c5fee3Smcneal 	iscsiAuthVersionRfc = 0
9636c5fee3Smcneal };
9736c5fee3Smcneal typedef enum iscsiAuthVersion_t IscsiAuthVersion;
9836c5fee3Smcneal 
9936c5fee3Smcneal enum iscsiAuthStatus_t {
10036c5fee3Smcneal 	iscsiAuthStatusNoError = 0,
10136c5fee3Smcneal 	iscsiAuthStatusError,
10236c5fee3Smcneal 	iscsiAuthStatusPass,
10336c5fee3Smcneal 	iscsiAuthStatusFail,
10436c5fee3Smcneal 	iscsiAuthStatusContinue,
10536c5fee3Smcneal 	iscsiAuthStatusInProgress
10636c5fee3Smcneal };
10736c5fee3Smcneal typedef enum iscsiAuthStatus_t IscsiAuthStatus;
10836c5fee3Smcneal 
10936c5fee3Smcneal enum iscsiAuthDebugStatus_t {
11036c5fee3Smcneal 	iscsiAuthDebugStatusNotSet = 0,
11136c5fee3Smcneal 
11236c5fee3Smcneal 	iscsiAuthDebugStatusAuthPass,
11336c5fee3Smcneal 	iscsiAuthDebugStatusAuthRemoteFalse,
11436c5fee3Smcneal 
11536c5fee3Smcneal 	iscsiAuthDebugStatusAuthFail,
11636c5fee3Smcneal 
11736c5fee3Smcneal 	iscsiAuthDebugStatusAuthMethodBad,
11836c5fee3Smcneal 	iscsiAuthDebugStatusChapAlgorithmBad,
11936c5fee3Smcneal 	iscsiAuthDebugStatusPasswordDecryptFailed,
12036c5fee3Smcneal 	iscsiAuthDebugStatusPasswordTooShortWithNoIpSec,
12136c5fee3Smcneal 	iscsiAuthDebugStatusAuthServerError,
12236c5fee3Smcneal 	iscsiAuthDebugStatusAuthStatusBad,
12336c5fee3Smcneal 	iscsiAuthDebugStatusAuthPassNotValid,
12436c5fee3Smcneal 	iscsiAuthDebugStatusSendDuplicateSetKeyValue,
12536c5fee3Smcneal 	iscsiAuthDebugStatusSendStringTooLong,
12636c5fee3Smcneal 	iscsiAuthDebugStatusSendTooMuchData,
12736c5fee3Smcneal 
12836c5fee3Smcneal 	iscsiAuthDebugStatusAuthMethodExpected,
12936c5fee3Smcneal 	iscsiAuthDebugStatusChapAlgorithmExpected,
13036c5fee3Smcneal 	iscsiAuthDebugStatusChapIdentifierExpected,
13136c5fee3Smcneal 	iscsiAuthDebugStatusChapChallengeExpected,
13236c5fee3Smcneal 	iscsiAuthDebugStatusChapResponseExpected,
13336c5fee3Smcneal 	iscsiAuthDebugStatusChapUsernameExpected,
13436c5fee3Smcneal 
13536c5fee3Smcneal 	iscsiAuthDebugStatusAuthMethodNotPresent,
13636c5fee3Smcneal 	iscsiAuthDebugStatusAuthMethodReject,
13736c5fee3Smcneal 	iscsiAuthDebugStatusAuthMethodNone,
13836c5fee3Smcneal 	iscsiAuthDebugStatusChapAlgorithmReject,
13936c5fee3Smcneal 	iscsiAuthDebugStatusChapChallengeReflected,
14036c5fee3Smcneal 	iscsiAuthDebugStatusPasswordIdentical,
14136c5fee3Smcneal 
14236c5fee3Smcneal 	iscsiAuthDebugStatusLocalPasswordNotSet,
14336c5fee3Smcneal 
14436c5fee3Smcneal 	iscsiAuthDebugStatusChapIdentifierBad,
14536c5fee3Smcneal 	iscsiAuthDebugStatusChapChallengeBad,
14636c5fee3Smcneal 	iscsiAuthDebugStatusChapResponseBad,
14736c5fee3Smcneal 	iscsiAuthDebugStatusUnexpectedKeyPresent,
14836c5fee3Smcneal 	iscsiAuthDebugStatusTbitSetIllegal,
14936c5fee3Smcneal 	iscsiAuthDebugStatusTbitSetPremature,
15036c5fee3Smcneal 
15136c5fee3Smcneal 	iscsiAuthDebugStatusRecvMessageCountLimit,
15236c5fee3Smcneal 	iscsiAuthDebugStatusRecvDuplicateSetKeyValue,
15336c5fee3Smcneal 	iscsiAuthDebugStatusRecvStringTooLong,
15436c5fee3Smcneal 	iscsiAuthDebugStatusRecvTooMuchData
15536c5fee3Smcneal };
15636c5fee3Smcneal typedef enum iscsiAuthDebugStatus_t IscsiAuthDebugStatus;
15736c5fee3Smcneal 
15836c5fee3Smcneal enum iscsiAuthNodeType_t {
15936c5fee3Smcneal 	iscsiAuthNodeTypeInitiator = 1,
16036c5fee3Smcneal 	iscsiAuthNodeTypeTarget = 2
16136c5fee3Smcneal };
16236c5fee3Smcneal typedef enum iscsiAuthNodeType_t IscsiAuthNodeType;
16336c5fee3Smcneal 
16436c5fee3Smcneal enum iscsiAuthPhase_t {
16536c5fee3Smcneal 	iscsiAuthPhaseConfigure = 1,
16636c5fee3Smcneal 	iscsiAuthPhaseNegotiate,		/* Negotiating */
16736c5fee3Smcneal 	iscsiAuthPhaseAuthenticate,		/* Authenticating */
16836c5fee3Smcneal 	iscsiAuthPhaseDone,			/* Authentication done */
16936c5fee3Smcneal 	iscsiAuthPhaseError
17036c5fee3Smcneal };
17136c5fee3Smcneal typedef enum iscsiAuthPhase_t IscsiAuthPhase;
17236c5fee3Smcneal 
17336c5fee3Smcneal enum iscsiAuthLocalState_t {
17436c5fee3Smcneal 	iscsiAuthLocalStateSendAlgorithm = 1,
17536c5fee3Smcneal 	iscsiAuthLocalStateRecvAlgorithm,
17636c5fee3Smcneal 	iscsiAuthLocalStateRecvChallenge,
17736c5fee3Smcneal 	iscsiAuthLocalStateDone,
17836c5fee3Smcneal 	iscsiAuthLocalStateError
17936c5fee3Smcneal };
18036c5fee3Smcneal typedef enum iscsiAuthLocalState_t IscsiAuthLocalState;
18136c5fee3Smcneal 
18236c5fee3Smcneal enum iscsiAuthRemoteState_t {
18336c5fee3Smcneal 	iscsiAuthRemoteStateSendAlgorithm = 1,
18436c5fee3Smcneal 	iscsiAuthRemoteStateSendChallenge,
18536c5fee3Smcneal 	iscsiAuthRemoteStateRecvResponse,
18636c5fee3Smcneal 	iscsiAuthRemoteStateAuthRequest,
18736c5fee3Smcneal 	iscsiAuthRemoteStateDone,
18836c5fee3Smcneal 	iscsiAuthRemoteStateError
18936c5fee3Smcneal };
19036c5fee3Smcneal typedef enum iscsiAuthRemoteState_t IscsiAuthRemoteState;
19136c5fee3Smcneal 
19236c5fee3Smcneal 
19336c5fee3Smcneal typedef void IscsiAuthClientCallback(void *, void *, int);
19436c5fee3Smcneal 
19536c5fee3Smcneal 
19636c5fee3Smcneal struct iscsiAuthClientGlobalStats_t {
19736c5fee3Smcneal 	unsigned long requestSent;
19836c5fee3Smcneal 	unsigned long responseReceived;
19936c5fee3Smcneal };
20036c5fee3Smcneal typedef struct iscsiAuthClientGlobalStats_t IscsiAuthClientGlobalStats;
20136c5fee3Smcneal 
20236c5fee3Smcneal struct iscsiAuthBufferDesc_t {
20336c5fee3Smcneal 	unsigned int length;
20436c5fee3Smcneal 	void *address;
20536c5fee3Smcneal };
20636c5fee3Smcneal typedef struct iscsiAuthBufferDesc_t IscsiAuthBufferDesc;
20736c5fee3Smcneal 
20836c5fee3Smcneal struct iscsiAuthKey_t {
20936c5fee3Smcneal 	unsigned int present:1;
21036c5fee3Smcneal 	unsigned int processed:1;
21136c5fee3Smcneal 	unsigned int valueSet:1;	/* 1 if the value is set to be valid */
21236c5fee3Smcneal 	char *string;
21336c5fee3Smcneal };
21436c5fee3Smcneal typedef struct iscsiAuthKey_t IscsiAuthKey;
21536c5fee3Smcneal 
21636c5fee3Smcneal struct iscsiAuthLargeBinaryKey_t {
21736c5fee3Smcneal 	unsigned int length;
21836c5fee3Smcneal 	unsigned char *largeBinary;
21936c5fee3Smcneal 	};
22036c5fee3Smcneal typedef struct iscsiAuthLargeBinaryKey_t IscsiAuthLargeBinaryKey;
22136c5fee3Smcneal 
22236c5fee3Smcneal struct iscsiAuthKeyBlock_t {
22336c5fee3Smcneal 	unsigned int transitBit:1;	/* To transit: TRUE or FALSE */
22436c5fee3Smcneal 	unsigned int duplicateSet:1;	/* Set the value more than once */
22536c5fee3Smcneal 	unsigned int stringTooLong:1;	/* Key value too long */
22636c5fee3Smcneal 	unsigned int tooMuchData:1;	/* The keypair data blk overflows */
22736c5fee3Smcneal 	unsigned int blockLength:16;	/* The length of the keypair data blk */
22836c5fee3Smcneal 	char *stringBlock;
22936c5fee3Smcneal 	IscsiAuthKey key[iscsiAuthKeyTypeMaxCount];
23036c5fee3Smcneal };
23136c5fee3Smcneal typedef struct iscsiAuthKeyBlock_t IscsiAuthKeyBlock;
23236c5fee3Smcneal 
23336c5fee3Smcneal struct iscsiAuthStringBlock_t {
23436c5fee3Smcneal 	char stringBlock[iscsiAuthStringBlockMaxLength];
23536c5fee3Smcneal };
23636c5fee3Smcneal typedef struct iscsiAuthStringBlock_t IscsiAuthStringBlock;
23736c5fee3Smcneal 
23836c5fee3Smcneal struct iscsiAuthLargeBinary_t {
23936c5fee3Smcneal 	unsigned char largeBinary[iscsiAuthLargeBinaryMaxLength];
24036c5fee3Smcneal };
24136c5fee3Smcneal typedef struct iscsiAuthLargeBinary_t IscsiAuthLargeBinary;
24236c5fee3Smcneal 
24336c5fee3Smcneal struct iscsiAuthClient_t {
24436c5fee3Smcneal 	unsigned long signature;
24536c5fee3Smcneal 
24636c5fee3Smcneal 	void *glueHandle;
24736c5fee3Smcneal 	struct iscsiAuthClient_t *next;
24836c5fee3Smcneal 	unsigned int authRequestId;
24936c5fee3Smcneal 
25036c5fee3Smcneal 	IscsiAuthNodeType nodeType;
25136c5fee3Smcneal 	unsigned int authMethodCount;
25236c5fee3Smcneal 	int authMethodList[iscsiAuthMethodMaxCount];
25336c5fee3Smcneal 	IscsiAuthNegRole authMethodNegRole;
25436c5fee3Smcneal 	unsigned int chapAlgorithmCount;
25536c5fee3Smcneal 	int chapAlgorithmList[iscsiAuthChapAlgorithmMaxCount];
25636c5fee3Smcneal 
25736c5fee3Smcneal 	/*
25836c5fee3Smcneal 	 * To indicate if remote authentication is enabled (0 = no 1 = yes)
25936c5fee3Smcneal 	 * For the case of initiator, remote authentication enabled means
26036c5fee3Smcneal 	 * enabling target authentication.
26136c5fee3Smcneal 	 */
26236c5fee3Smcneal 	int authRemote;
26336c5fee3Smcneal 
26436c5fee3Smcneal 	char username[iscsiAuthStringMaxLength];
26536c5fee3Smcneal 	int passwordPresent;
26636c5fee3Smcneal 	unsigned int passwordLength;
26736c5fee3Smcneal 	unsigned char passwordData[iscsiAuthStringMaxLength];
26836c5fee3Smcneal 	char methodListName[iscsiAuthStringMaxLength];
26936c5fee3Smcneal 	IscsiAuthVersion version;
27036c5fee3Smcneal 	unsigned int chapChallengeLength;
27136c5fee3Smcneal 	int ipSec;
27236c5fee3Smcneal 	int base64;
27336c5fee3Smcneal 
27436c5fee3Smcneal 	unsigned int authMethodValidCount;
27536c5fee3Smcneal 	int authMethodValidList[iscsiAuthMethodMaxCount];
27636c5fee3Smcneal 	int authMethodValidNegRole;
27736c5fee3Smcneal 	const char *rejectOptionName;
27836c5fee3Smcneal 	const char *noneOptionName;
27936c5fee3Smcneal 
28036c5fee3Smcneal 	int recvInProgressFlag;
28136c5fee3Smcneal 	int recvEndCount;
28236c5fee3Smcneal 	IscsiAuthClientCallback *callback;
28336c5fee3Smcneal 	void *userHandle;
28436c5fee3Smcneal 	void *messageHandle;
28536c5fee3Smcneal 
28636c5fee3Smcneal 	IscsiAuthPhase phase;
28736c5fee3Smcneal 	IscsiAuthLocalState localState;
28836c5fee3Smcneal 	IscsiAuthRemoteState remoteState;
28936c5fee3Smcneal 	IscsiAuthStatus remoteAuthStatus;
29036c5fee3Smcneal 	IscsiAuthDebugStatus debugStatus;
29136c5fee3Smcneal 	int negotiatedAuthMethod;
29236c5fee3Smcneal 	int negotiatedChapAlgorithm;
29336c5fee3Smcneal 	int authResponseFlag;
29436c5fee3Smcneal 	int authServerErrorFlag;
29536c5fee3Smcneal 	int transitBitSentFlag;
29636c5fee3Smcneal 
29736c5fee3Smcneal 	unsigned int sendChapIdentifier;
29836c5fee3Smcneal 	IscsiAuthLargeBinaryKey sendChapChallenge;
29936c5fee3Smcneal 	char chapUsername[iscsiAuthStringMaxLength];
30036c5fee3Smcneal 
30136c5fee3Smcneal 	int recvChapChallengeStatus;
30236c5fee3Smcneal 	IscsiAuthLargeBinaryKey recvChapChallenge;
30336c5fee3Smcneal 
30436c5fee3Smcneal 	char scratchKeyValue[iscsiAuthStringMaxLength];
30536c5fee3Smcneal 
30636c5fee3Smcneal 	IscsiAuthKeyBlock recvKeyBlock;		/* Received keypair data */
30736c5fee3Smcneal 	IscsiAuthKeyBlock sendKeyBlock;		/* Keypair data to be sent */
30836c5fee3Smcneal };
30936c5fee3Smcneal typedef struct iscsiAuthClient_t IscsiAuthClient;
31036c5fee3Smcneal 
31136c5fee3Smcneal 
31236c5fee3Smcneal #ifdef __cplusplus
31336c5fee3Smcneal }
31436c5fee3Smcneal #endif
31536c5fee3Smcneal #include <sys/iscsi_authclientglue.h>
31636c5fee3Smcneal #ifdef __cplusplus
31736c5fee3Smcneal extern "C" {
31836c5fee3Smcneal #endif
31936c5fee3Smcneal 
32036c5fee3Smcneal 
32136c5fee3Smcneal extern IscsiAuthClientGlobalStats iscsiAuthClientGlobalStats;
32236c5fee3Smcneal 
32336c5fee3Smcneal 
32436c5fee3Smcneal extern int iscsiAuthClientInit(int, int, IscsiAuthBufferDesc *);
32536c5fee3Smcneal extern int iscsiAuthClientFinish(IscsiAuthClient *);
32636c5fee3Smcneal 
32736c5fee3Smcneal extern int iscsiAuthClientRecvBegin(IscsiAuthClient *);
32836c5fee3Smcneal extern int iscsiAuthClientRecvEnd(IscsiAuthClient *,
32936c5fee3Smcneal     IscsiAuthClientCallback *, void *, void *);
33036c5fee3Smcneal 
33136c5fee3Smcneal extern const char *iscsiAuthClientGetKeyName(int);
33236c5fee3Smcneal extern int iscsiAuthClientGetNextKeyType(int *);
33336c5fee3Smcneal extern int iscsiAuthClientKeyNameToKeyType(const char *);
33436c5fee3Smcneal extern int iscsiAuthClientRecvKeyValue(IscsiAuthClient *, int, const char *);
33536c5fee3Smcneal extern int iscsiAuthClientSendKeyValue(IscsiAuthClient *, int, int *, char *,
33636c5fee3Smcneal     unsigned int);
33736c5fee3Smcneal extern int iscsiAuthClientRecvTransitBit(IscsiAuthClient *, int);
33836c5fee3Smcneal extern int iscsiAuthClientSendTransitBit(IscsiAuthClient *, int *);
33936c5fee3Smcneal 
34036c5fee3Smcneal extern int iscsiAuthClientSetAuthMethodList(IscsiAuthClient *, unsigned int,
34136c5fee3Smcneal     const int *);
34236c5fee3Smcneal extern int iscsiAuthClientSetAuthMethodNegRole(IscsiAuthClient *, int);
34336c5fee3Smcneal extern int iscsiAuthClientSetChapAlgorithmList(IscsiAuthClient *, unsigned int,
34436c5fee3Smcneal     const int *);
34536c5fee3Smcneal extern int iscsiAuthClientSetUsername(IscsiAuthClient *, const char *);
34636c5fee3Smcneal extern int iscsiAuthClientSetPassword(IscsiAuthClient *, const unsigned char *,
34736c5fee3Smcneal     unsigned int);
34836c5fee3Smcneal extern int iscsiAuthClientSetAuthRemote(IscsiAuthClient *, int);
34936c5fee3Smcneal extern int iscsiAuthClientSetGlueHandle(IscsiAuthClient *, void *);
35036c5fee3Smcneal extern int iscsiAuthClientSetMethodListName(IscsiAuthClient *, const char *);
35136c5fee3Smcneal extern int iscsiAuthClientSetIpSec(IscsiAuthClient *, int);
35236c5fee3Smcneal extern int iscsiAuthClientSetBase64(IscsiAuthClient *, int);
35336c5fee3Smcneal extern int iscsiAuthClientSetChapChallengeLength(IscsiAuthClient *,
35436c5fee3Smcneal     unsigned int);
35536c5fee3Smcneal extern int iscsiAuthClientSetVersion(IscsiAuthClient *, int);
35636c5fee3Smcneal extern int iscsiAuthClientCheckPasswordNeeded(IscsiAuthClient *, int *);
35736c5fee3Smcneal 
35836c5fee3Smcneal extern int iscsiAuthClientGetAuthPhase(IscsiAuthClient *, int *);
35936c5fee3Smcneal extern int iscsiAuthClientGetAuthStatus(IscsiAuthClient *, int *);
36036c5fee3Smcneal extern int iscsiAuthClientAuthStatusPass(int);
36136c5fee3Smcneal extern int iscsiAuthClientGetAuthMethod(IscsiAuthClient *, int *);
36236c5fee3Smcneal extern int iscsiAuthClientGetChapAlgorithm(IscsiAuthClient *, int *);
36336c5fee3Smcneal extern int iscsiAuthClientGetChapUsername(IscsiAuthClient *, char *,
36436c5fee3Smcneal     unsigned int);
36536c5fee3Smcneal 
36636c5fee3Smcneal extern int iscsiAuthClientSendStatusCode(IscsiAuthClient *, int *);
36736c5fee3Smcneal extern int iscsiAuthClientGetDebugStatus(IscsiAuthClient *, int *);
36836c5fee3Smcneal extern const char *iscsiAuthClientDebugStatusToText(int);
36936c5fee3Smcneal 
37036c5fee3Smcneal /*
37136c5fee3Smcneal  * The following is called by platform dependent code.
37236c5fee3Smcneal  */
37336c5fee3Smcneal extern void iscsiAuthClientAuthResponse(IscsiAuthClient *, int);
37436c5fee3Smcneal 
37536c5fee3Smcneal /*
37636c5fee3Smcneal  * The following routines are considered platform dependent,
37736c5fee3Smcneal  * and need to be implemented for use by iscsiAuthClient.c.
37836c5fee3Smcneal  */
37936c5fee3Smcneal 
38036c5fee3Smcneal extern int iscsiAuthClientChapAuthRequest(IscsiAuthClient *, char *,
38136c5fee3Smcneal     unsigned int,
38236c5fee3Smcneal     unsigned char *, unsigned int, unsigned char *, unsigned int);
38336c5fee3Smcneal extern void iscsiAuthClientChapAuthCancel(IscsiAuthClient *);
38436c5fee3Smcneal 
38536c5fee3Smcneal extern int iscsiAuthClientTextToNumber(const char *, unsigned long *);
38636c5fee3Smcneal extern void iscsiAuthClientNumberToText(unsigned long, char *, unsigned int);
38736c5fee3Smcneal 
38836c5fee3Smcneal extern void iscsiAuthRandomSetData(unsigned char *, unsigned int);
38936c5fee3Smcneal extern void iscsiAuthMd5Init(IscsiAuthMd5Context *);
39036c5fee3Smcneal extern void iscsiAuthMd5Update(IscsiAuthMd5Context *, unsigned char *,
39136c5fee3Smcneal     unsigned int);
39236c5fee3Smcneal extern void iscsiAuthMd5Final(unsigned char *, IscsiAuthMd5Context *);
39336c5fee3Smcneal 
39436c5fee3Smcneal extern int iscsiAuthClientData(unsigned char *, unsigned int *, unsigned char *,
39536c5fee3Smcneal     unsigned int);
39636c5fee3Smcneal 
39736c5fee3Smcneal #ifdef __cplusplus
39836c5fee3Smcneal }
39936c5fee3Smcneal #endif
40036c5fee3Smcneal 
40136c5fee3Smcneal #endif	/* _ISCSI_AUTHCLIENT_H */
402