123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /** @file
- The header file of CHAP configuration.
- Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _ISCSI_CHAP_H_
- #define _ISCSI_CHAP_H_
- #define ISCSI_AUTH_METHOD_CHAP "CHAP"
- #define ISCSI_KEY_CHAP_ALGORITHM "CHAP_A"
- #define ISCSI_KEY_CHAP_IDENTIFIER "CHAP_I"
- #define ISCSI_KEY_CHAP_CHALLENGE "CHAP_C"
- #define ISCSI_KEY_CHAP_NAME "CHAP_N"
- #define ISCSI_KEY_CHAP_RESPONSE "CHAP_R"
- //
- // Identifiers of supported CHAP hash algorithms:
- // https://www.iana.org/assignments/ppp-numbers/ppp-numbers.xhtml#ppp-numbers-9
- //
- #define ISCSI_CHAP_ALGORITHM_MD5 5
- #define ISCSI_CHAP_ALGORITHM_SHA256 7
- //
- // Byte count of the largest digest over the above-listed
- // ISCSI_CHAP_ALGORITHM_* hash algorithms.
- //
- #define ISCSI_CHAP_MAX_DIGEST_SIZE SHA256_DIGEST_SIZE
- #define ISCSI_CHAP_STEP_ONE 1
- #define ISCSI_CHAP_STEP_TWO 2
- #define ISCSI_CHAP_STEP_THREE 3
- #define ISCSI_CHAP_STEP_FOUR 4
- #pragma pack(1)
- typedef struct _ISCSI_CHAP_AUTH_CONFIG_NVDATA {
- UINT8 CHAPType;
- CHAR8 CHAPName[ISCSI_CHAP_NAME_STORAGE];
- CHAR8 CHAPSecret[ISCSI_CHAP_SECRET_STORAGE];
- CHAR8 ReverseCHAPName[ISCSI_CHAP_NAME_STORAGE];
- CHAR8 ReverseCHAPSecret[ISCSI_CHAP_SECRET_STORAGE];
- } ISCSI_CHAP_AUTH_CONFIG_NVDATA;
- #pragma pack()
- //
- // Typedefs for collecting sets of hash APIs from BaseCryptLib.
- //
- typedef
- UINTN
- (EFIAPI *CHAP_HASH_GET_CONTEXT_SIZE)(
- VOID
- );
- typedef
- BOOLEAN
- (EFIAPI *CHAP_HASH_INIT)(
- OUT VOID *Context
- );
- typedef
- BOOLEAN
- (EFIAPI *CHAP_HASH_UPDATE)(
- IN OUT VOID *Context,
- IN CONST VOID *Data,
- IN UINTN DataSize
- );
- typedef
- BOOLEAN
- (EFIAPI *CHAP_HASH_FINAL)(
- IN OUT VOID *Context,
- OUT UINT8 *HashValue
- );
- typedef struct {
- UINT8 Algorithm; // ISCSI_CHAP_ALGORITHM_*, CHAP_A
- UINT32 DigestSize;
- CHAP_HASH_GET_CONTEXT_SIZE GetContextSize;
- CHAP_HASH_INIT Init;
- CHAP_HASH_UPDATE Update;
- CHAP_HASH_FINAL Final;
- } CHAP_HASH;
- ///
- /// ISCSI CHAP Authentication Data
- ///
- typedef struct _ISCSI_CHAP_AUTH_DATA {
- ISCSI_CHAP_AUTH_CONFIG_NVDATA *AuthConfig;
- UINT32 InIdentifier;
- UINT8 InChallenge[1024];
- UINT32 InChallengeLength;
- //
- // The hash algorithm (CHAP_A) that the target selects in
- // ISCSI_CHAP_STEP_TWO.
- //
- CONST CHAP_HASH *Hash;
- //
- // Calculated CHAP Response (CHAP_R) value.
- //
- UINT8 CHAPResponse[ISCSI_CHAP_MAX_DIGEST_SIZE];
- //
- // Auth-data to be sent out for mutual authentication.
- //
- // While the challenge size is technically independent of the hashing
- // algorithm, it is good practice to avoid hashing *fewer bytes* than the
- // digest size. In other words, it's good practice to feed *at least as many
- // bytes* to the hashing algorithm as the hashing algorithm will output.
- //
- UINT32 OutIdentifier;
- UINT8 OutChallenge[ISCSI_CHAP_MAX_DIGEST_SIZE];
- } ISCSI_CHAP_AUTH_DATA;
- /**
- This function checks the received iSCSI Login Response during the security
- negotiation stage.
- @param[in] Conn The iSCSI connection.
- @retval EFI_SUCCESS The Login Response passed the CHAP validation.
- @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
- @retval EFI_PROTOCOL_ERROR Some kind of protocol error occurred.
- @retval Others Other errors as indicated.
- **/
- EFI_STATUS
- IScsiCHAPOnRspReceived (
- IN ISCSI_CONNECTION *Conn
- );
- /**
- This function fills the CHAP authentication information into the login PDU
- during the security negotiation stage in the iSCSI connection login.
- @param[in] Conn The iSCSI connection.
- @param[in, out] Pdu The PDU to send out.
- @retval EFI_SUCCESS All check passed and the phase-related CHAP
- authentication info is filled into the iSCSI
- PDU.
- @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
- @retval EFI_PROTOCOL_ERROR Some kind of protocol error occurred.
- **/
- EFI_STATUS
- IScsiCHAPToSendReq (
- IN ISCSI_CONNECTION *Conn,
- IN OUT NET_BUF *Pdu
- );
- /**
- Initialize the CHAP_A=<A1,A2...> *value* string for the entire driver, to be
- sent by the initiator in ISCSI_CHAP_STEP_ONE.
- This function sanity-checks the internal table of supported CHAP hashing
- algorithms, as well.
- **/
- VOID
- IScsiCHAPInitHashList (
- VOID
- );
- #endif
|