eapol/eapol_framework/eapol_common/type/mschapv2/include/eap_type_mschapv2_header.h
changeset 0 c8830336c852
child 2 1c7bc153c08e
--- /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