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