diff -r 000000000000 -r c8830336c852 eapol/eapol_framework/eapol_common/type/mschapv2/include/eap_type_mschapv2_header.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eapol/eapol_framework/eapol_common/type/mschapv2/include/eap_type_mschapv2_header.h Thu Dec 17 08:47:43 2009 +0200 @@ -0,0 +1,374 @@ +/* +* Copyright (c) 2001-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: EAP and WLAN authentication protocols. +* +*/ + + + +#ifndef _MSCHAPV2_HEADER_H_ +#define _MSCHAPV2_HEADER_H_ + +#include "eap_am_tools.h" + +#include "eap_tools.h" +#include "eap_general_header_base.h" + +enum eap_mschapv2_version +{ + MSCHAPV2_ILLEGAL_VERSION = 0x0000, + MSCHAPV2_VERSION_1 = 0x0001, + MSCHAPV2_LAST_VERSION = 0x0001 ///< Keep this same as the last acceptable version. +}; + +enum mschapv2_opcode_e +{ + mschapv2_opcode_challenge = 1, + mschapv2_opcode_response = 2, + mschapv2_opcode_success = 3, + mschapv2_opcode_failure = 4, + mschapv2_opcode_change_password = 7, + mschapv2_opcode_unknown = 255 // Internal error +}; + +/// This class defines header of MS-CHAP-v2 EAP-type. +/** + * Here is a figure of header of MS-CHAP-v2 EAP-type. + * Data is m_eap_length - sizeof(mschapv2_header_c) data octets that follows mschapv2_header_c. + * @code + * + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Code | Identifier | Length | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Type=29 | OpCode | MS-CHAPv2-ID | MS-Length... + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | MS-Length | Data... + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * @endcode + */ +class EAP_EXPORT mschapv2_header_c +: public eap_general_header_base_c +{ +private: + + abs_eap_am_tools_c * const m_am_tools; + + u32_t m_length; + +protected: + + enum offsets + { + m_opcode_offset = 0ul, + m_mschapv2_id_offset = m_opcode_offset + sizeof(u8_t), + m_ms_length_offset = m_mschapv2_id_offset + sizeof(u8_t), + m_data_offset = m_ms_length_offset + sizeof(u16_t) + }; + +public: + + EAP_FUNC_IMPORT virtual ~mschapv2_header_c(); + + EAP_FUNC_IMPORT mschapv2_header_c( + abs_eap_am_tools_c * const tools, + void * const header_buffer, + const u32_t header_buffer_length); + + EAP_FUNC_IMPORT mschapv2_opcode_e get_opcode() const; + + EAP_FUNC_IMPORT void set_opcode(const mschapv2_opcode_e p_opcode); + + EAP_FUNC_IMPORT u8_t get_mschapv2_id() const; + + EAP_FUNC_IMPORT void set_mschapv2_id(u8_t p_id); + + EAP_FUNC_IMPORT u16_t get_ms_length() const; + + EAP_FUNC_IMPORT void set_ms_length(u16_t p_length); + + EAP_FUNC_IMPORT u8_t * get_data() const; + + EAP_FUNC_IMPORT u32_t get_data_length() const; + + EAP_FUNC_IMPORT eap_status_e check_header() const; + +}; // class mschapv2_header_c + +//-------------------------------------------------- + +/// This class defines Challenge payload of MS-CHAP-v2. +/** + * Here is a figure of Challenge payload of MS-CHAP-v2. + * @code + * + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Value Size | Challenge 16 octets | + * +-+-+-+-+-+-+-+-+-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+- -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | | Name ... + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * @endcode + */ +class EAP_EXPORT mschapv2_challenge_c +: public eap_general_header_base_c +{ +private: + + abs_eap_am_tools_c * const m_am_tools; + + u32_t m_length; + +protected: + + enum offsets + { + m_value_size_offset = 0ul, + m_challenge_offset = m_value_size_offset + sizeof(u8_t), + m_name_offset = m_challenge_offset + 16 * sizeof(u8_t), + }; + +public: + + EAP_FUNC_IMPORT virtual ~mschapv2_challenge_c(); + + EAP_FUNC_IMPORT mschapv2_challenge_c( + abs_eap_am_tools_c * const tools, + void * const header_buffer, + const u32_t header_buffer_length); + + EAP_FUNC_IMPORT static u32_t get_header_minimum_size(); + + EAP_FUNC_IMPORT eap_status_e check_header() const; + + EAP_FUNC_IMPORT void set_value_size(); + + EAP_FUNC_IMPORT const u8_t * get_challenge() const; + + EAP_FUNC_IMPORT void set_challenge(const u8_t * const p_challenge); + + EAP_FUNC_IMPORT const u8_t * get_name() const; + + EAP_FUNC_IMPORT u32_t get_name_length() const; + + EAP_FUNC_IMPORT void set_name(const u8_t * const p_name); +}; // class mschapv2_challenge_c + +//-------------------------------------------------- + +/// This class defines Change Password payload of MS-CHAP-v2. +/** + * Here is a figure of Change Password payload of MS-CHAP-v2. + * @code + * + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Encrypted Block 516 octets | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * . . + * . . + * . . + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Encrypted Hash 16 octets | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Peer Challenge 16 octets | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved 8 octets | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | NT Response 24 octets | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Flags | + * +-+-+-+-+-+-+-+-+ + * @endcode + */ +class EAP_EXPORT mschapv2_change_password_c +: public eap_general_header_base_c +{ +private: + + abs_eap_am_tools_c * const m_am_tools; + + u32_t m_length; + +protected: + + enum offsets + { + m_encrypted_pw_block_offset = 0ul, + m_encrypted_hash_offset = m_encrypted_pw_block_offset + 516 * sizeof(u8_t), + m_peer_challenge_offset = m_encrypted_hash_offset + 16 * sizeof(u8_t), + m_reserved_offset = m_peer_challenge_offset + 16 * sizeof(u8_t), + m_nt_response_offset = m_reserved_offset + 8 * sizeof(u8_t), + m_flags_offset = m_nt_response_offset + 24 * sizeof(u8_t), + }; + +public: + + EAP_FUNC_IMPORT virtual ~mschapv2_change_password_c(); + + EAP_FUNC_IMPORT mschapv2_change_password_c( + abs_eap_am_tools_c * const tools, + void * const header_buffer, + const u32_t header_buffer_length); + + EAP_FUNC_IMPORT static u32_t get_header_minimum_size(); + + EAP_FUNC_IMPORT eap_status_e check_header() const; + + EAP_FUNC_IMPORT const u8_t * get_encrypted_pw_block() const; + + EAP_FUNC_IMPORT void set_encrypted_pw_block(const u8_t * const p_encrypted_pw_block); + + EAP_FUNC_IMPORT const u8_t * get_encrypted_hash() const; + + EAP_FUNC_IMPORT void set_encrypted_hash(const u8_t * const p_encrypted_hash); + + EAP_FUNC_IMPORT const u8_t * get_peer_challenge() const; + + EAP_FUNC_IMPORT void set_peer_challenge(const u8_t * const p_peer_challenge); + + EAP_FUNC_IMPORT const u8_t * get_nt_response() const; + + EAP_FUNC_IMPORT void set_nt_response(const u8_t * const p_nt_response); + + EAP_FUNC_IMPORT eap_status_e set_constants(); +}; // class mschapv2_change_password_c + +//-------------------------------------------------- + +/// This class defines Response payload of MS-CHAP-v2. +/** + * Here is a figure of Response payload of MS-CHAP-v2. + * @code + * + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Value Size | Peer Challenge 16 octets | + * +-+-+-+-+-+-+-+-+-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+- -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | | Reserved 8 octets | + * +-+-+-+-+-+-+-+-+-+-+- -+-+-+-+ + * | | + * +-+- -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | | NT Response 24 octets | + * +-+-+-+-+-+-+-+-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+-+-+- -+-+-+-+ + * | | + * +-+- -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | | Flags | Name ... + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- + * @endcode + */ +class EAP_EXPORT mschapv2_response_c +: public eap_general_header_base_c +{ +private: + + abs_eap_am_tools_c * const m_am_tools; + + u32_t m_length; + +protected: + + enum offsets + { + m_value_size_offset = 0ul, + m_peer_challenge_offset = m_value_size_offset + sizeof(u8_t), + m_reserved_offset = m_peer_challenge_offset + 16 * sizeof(u8_t), + m_nt_response_offset = m_reserved_offset + 8 * sizeof(u8_t), + m_flags_offset = m_nt_response_offset + 24 * sizeof(u8_t), + m_name_offset = m_flags_offset + sizeof(u8_t) + }; + +public: + + EAP_FUNC_IMPORT virtual ~mschapv2_response_c(); + + EAP_FUNC_IMPORT mschapv2_response_c( + abs_eap_am_tools_c * const tools, + void * const header_buffer, + const u32_t header_buffer_length); + + EAP_FUNC_IMPORT static u32_t get_header_minimum_size(); + + EAP_FUNC_IMPORT eap_status_e check_header() const; + + EAP_FUNC_IMPORT const u8_t * get_peer_challenge() const; + + EAP_FUNC_IMPORT void set_peer_challenge(const u8_t * const p_challenge); + + EAP_FUNC_IMPORT const u8_t * get_nt_response() const; + + EAP_FUNC_IMPORT void set_nt_response(const u8_t * const p_challenge); + + EAP_FUNC_IMPORT const u8_t * get_name() const; + + EAP_FUNC_IMPORT u32_t get_name_length() const; + + EAP_FUNC_IMPORT void set_name(const u8_t * const p_name); + + EAP_FUNC_IMPORT eap_status_e set_constants(); +}; // class mschapv2_response_c + +//-------------------------------------------------- + +#endif //_MSCHAPV2_HEADER_H_ + +// End of File