eapol/eapol_framework/eapol_common/am/include/eap_am_tools.h
changeset 0 c8830336c852
child 2 1c7bc153c08e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_common/am/include/eap_am_tools.h	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,394 @@
+/*
+* 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.
+*
+*/
+
+
+
+
+#if !defined( _EAP_AM_TOOLS_H_ )
+#define _EAP_AM_TOOLS_H_
+
+#include "abs_eap_am_tools.h"
+#include "eap_variable_data.h"
+#include "eap_tools.h"
+#include "eap_status.h"
+#include "eap_am_export.h"
+#include "eap_status_string.h"
+#include "abs_eap_am_memory_store_data.h"
+
+
+//#if !defined(NO_EAP_AM_MEMORY_STORE)
+class eap_tlv_message_data_c;
+class eap_am_memory_store_c;
+//#endif //#if !defined(NO_EAP_AM_MEMORY_STORE)
+
+
+/// This class defines the common functions of tools.
+/// These are the platform independent functions used in tools.
+class EAP_EXPORT eap_am_tools_c
+: public abs_eap_am_tools_c
+//#if !defined(NO_EAP_AM_MEMORY_STORE)
+, public abs_eap_am_memory_store_data_c
+//#endif //#if !defined(NO_EAP_AM_MEMORY_STORE)
+{
+private:
+
+#if !defined(NO_EAP_AM_MEMORY_STORE)
+	eap_am_memory_store_c * m_memory_store;
+#endif //#if !defined(NO_EAP_AM_MEMORY_STORE)
+
+	/// This is trace mask. This could be changed dynamically with set_trace_mask() function.
+	u32_t m_trace_mask;
+
+#if defined(USE_EAP_ERROR_TESTS)
+	u32_t m_packet_index;
+#endif //#if defined(USE_EAP_ERROR_TESTS)
+
+	bool m_use_seconds_timestamp_in_traces;
+
+	bool m_thread_stopped;
+
+	bool m_use_timer_queue;
+
+	/// Function shutdown_am_tools() is called already.
+	bool m_shutdown_was_called;
+
+	/// This flag allows activation of trace when the error occurs.
+	/// Look at the set_activate_trace_on_error() and eap_status_return()
+	/// functions.
+	bool m_activate_trace_on_error;
+
+	u8_t m_tmp_buffer[256];
+	
+	u8_t m_tmp_ascii_buffer[256];
+
+
+	EAP_FUNC_IMPORT u8_t octet_to_ascii_armor(
+		const u8_t source_byte);
+
+	EAP_FUNC_IMPORT u8_t octet_from_ascii_armor(
+		const u8_t source_byte);
+
+	EAP_FUNC_IMPORT void convert_selected_bytes_to_ascii_armor(
+		const u8_t source_byte,
+		u32_t * const saved_bit_count,
+		u8_t * const saved_bits,
+		u8_t * const target,
+		u32_t * const output_ind,
+		const bool last_input_byte);
+
+	EAP_FUNC_IMPORT void restore_selected_bytes_from_ascii_armor(
+		const u8_t source_byte,
+		u32_t * const missing_bit_count,
+		u8_t * const target,
+		u32_t * const output_ind,
+		const bool last_input_byte);
+
+public:
+
+	/// These are valid values used with set_trace_mask() function.
+	enum
+	{
+		eap_trace_mask_none               = (0u),       ///< This value disables all traces.
+		eap_trace_mask_always             = (1u << 0u), ///< This values traces all permanent traces (EAP_TRACE_ALWAYS() macro).
+		eap_trace_mask_error              = (1u << 1u), ///< This values traces all errors.
+		eap_trace_mask_debug              = (1u << 2u), ///< This value traces debug information. Not used in released code.
+		eap_trace_mask_functions          = (1u << 3u), ///< This value traces function enters and returns.
+		eap_trace_mask_crypto             = (1u << 4u), ///< This value traces crypto data. Do not use on released code. All keys and intermediate values are traced.
+		eap_trace_mask_timer              = (1u << 5u), ///< This value traces the timer functions.
+		eap_trace_mask_eap_messages       = (1u << 6u), ///< This value traces only the EAP messages.
+		eap_trace_mask_test_vectors       = (1u << 7u), ///< This value traces only the test vectors of each EAP-type.
+		eap_trace_mask_crypto_sha1        = (1u << 8u), ///< This value traces only internal state of SHA1.
+		eap_trace_mask_crypto_md4         = (1u << 9u), ///< This value traces only internal state of MD4.
+		eap_trace_mask_crypto_rc4         = (1u << 10u), ///< This value traces only internal state of RC4.
+		eap_trace_mask_crypto_test_random = (1u << 11u), ///< This value traces only internal state of test random generator.
+		eap_trace_mask_message_data       = (1u << 12u), ///< This value traces only data of the messages, this will increase trace bloat.
+		eap_trace_mask_hash_map           = (1u << 13u), ///< This value traces only data of hash table. It does map data and selector.
+		eap_trace_mask_timer_queue        = (1u << 14u), ///< This value traces the timer queue.
+		eap_trace_mask_ok_returns         = (1u << 15u), ///< This value traces the OK return values, alot of them.
+	};
+
+	EAP_FUNC_IMPORT u8_t octet_to_ascii(i32_t octet);
+
+	EAP_FUNC_IMPORT u8_t ascii_to_octet(i32_t character);
+
+	EAP_FUNC_IMPORT virtual ~eap_am_tools_c();
+
+	EAP_FUNC_IMPORT eap_am_tools_c();
+
+	EAP_FUNC_IMPORT bool get_use_seconds_timestamp_in_traces();
+
+	EAP_FUNC_IMPORT bool get_thread_stopped();
+
+	EAP_FUNC_IMPORT void set_use_timer_queue();
+
+	EAP_FUNC_IMPORT bool get_use_timer_queue();
+
+	EAP_FUNC_IMPORT u32_t get_trace_mask() const;
+
+	EAP_FUNC_IMPORT void set_trace_mask(const u32_t mask);
+
+	EAP_FUNC_IMPORT void set_activate_trace_on_error();
+
+	EAP_FUNC_IMPORT void check_activate_trace_on_error();
+
+	EAP_FUNC_IMPORT void trace_data(eap_const_string prefix, const void * const data, const u32_t data_length);
+
+	EAP_FUNC_IMPORT eap_status_e timer_thread_function();
+
+	EAP_FUNC_IMPORT eap_status_e convert_ascii_to_uppercase(
+		u8_t * const source_bytes,
+		const u32_t source_bytes_length);
+
+	EAP_FUNC_IMPORT eap_status_e convert_bytes_to_hex_ascii(
+		const u8_t * const source_bytes,
+		const u32_t source_bytes_length,
+		u8_t * const target,
+		u32_t *target_length);
+
+	EAP_FUNC_IMPORT eap_status_e convert_bytes_to_hex_ascii(
+		const void * const source_bytes,
+		const u32_t source_bytes_length,
+		eap_variable_data_c * const target);
+
+	EAP_FUNC_IMPORT eap_status_e convert_hex_ascii_to_bytes(
+		const u8_t * const source_bytes,
+		const u32_t source_bytes_length,
+		u8_t * const target,
+		u32_t *target_length);
+
+	EAP_FUNC_IMPORT eap_status_e convert_hex_ascii_to_bytes(
+		const void * const source_bytes,
+		const u32_t source_bytes_length,
+		eap_variable_data_c * const target);
+
+	
+	EAP_FUNC_IMPORT eap_status_e convert_bytes_to_ascii_armor(
+		const u8_t * const source_bytes,
+		const u32_t source_bytes_length,
+		u8_t * const target,
+		u32_t *target_length);
+
+	EAP_FUNC_IMPORT eap_status_e restore_bytes_from_ascii_armor(
+		const u8_t * const source_bytes,
+		const u32_t source_bytes_length,
+		u8_t * const target,
+		u32_t *target_length);
+
+	EAP_FUNC_IMPORT eap_status_e eap_status_return(
+		const bool print_error_when_true,
+		const eap_status_e status,
+		const eap_char * const file_name,
+		const i32_t line_number);
+
+	EAP_FUNC_IMPORT eap_status_e eap_status_return_file_number(
+		const bool print_error_when_true,
+		const eap_status_e status,
+		const u32_t file_date,
+		const u32_t file_number,
+		const i32_t line_number);
+
+
+	// This is documented in abs_eap_am_tools_c::memory_store_add_data().
+	EAP_FUNC_IMPORT eap_status_e memory_store_add_data(
+		const eap_variable_data_c * const key,
+		eap_tlv_message_data_c * const data,
+		const u32_t timeout);
+
+	// This is documented in abs_eap_am_tools_c::memory_store_get_data().
+	EAP_FUNC_IMPORT eap_status_e memory_store_get_data(
+		const eap_variable_data_c * const key,
+		eap_tlv_message_data_c * const data);
+
+	// This is documented in abs_eap_am_tools_c::memory_store_remove_data().
+	EAP_FUNC_IMPORT eap_status_e memory_store_remove_data(
+		const eap_variable_data_c * const key);
+
+
+	/// This function shuts down eap_am_tools_c object.
+	EAP_FUNC_IMPORT eap_status_e shutdown_am_tools();
+
+	/// The implementing function must call eap_am_tools_c::shutdown_am_tools().
+	EAP_FUNC_IMPORT virtual eap_status_e shutdown() = 0;
+
+	/**
+	 * Function converts unicode characters into UTF8 characters.
+	 * @param dest is reference to destination utf8 variable data.
+	 * @param src is refrence to unicode variable data.
+	 * @return eap status code.
+	 */
+	EAP_FUNC_IMPORT eap_status_e generic_convert_unicode_to_utf8(
+		eap_variable_data_c & dest,
+		const eap_variable_data_c & src);
+
+	/**
+	 * Function converts UTF8 characters into unicode characters.
+	 * @param dest is reference to destination unicode variable data.
+	 * @param src is refrence to UTF8 variable data.
+	 * @return eap status code.
+	 */
+	EAP_FUNC_IMPORT eap_status_e generic_convert_utf8_to_unicode(
+		eap_variable_data_c & dest,
+		const eap_variable_data_c & src);
+
+	/**
+	 * Function parses NAI to usename and realm.
+	 * If either is missing the corresponding value will be invalid.
+	 */
+	EAP_FUNC_IMPORT eap_status_e parse_nai(
+		const eap_variable_data_c * const nai,
+		eap_variable_data_c * const username,
+		eap_variable_data_c * const realm);
+
+
+#if defined(USE_EAP_ERROR_TESTS)
+	EAP_FUNC_IMPORT eap_status_e generate_random_error(
+		eap_buf_chain_wr_c * const sent_packet,
+		const bool forse_error,
+		const u32_t packet_index,
+		const u32_t minimum_index,
+		const u32_t error_probability,
+		const u32_t minimum_packet_length);
+
+	EAP_FUNC_IMPORT u32_t get_packet_index();
+
+	EAP_FUNC_IMPORT void increase_packet_index();
+#endif //#if defined(USE_EAP_ERROR_TESTS)
+
+
+	EAP_FUNC_IMPORT eap_status_e number_string_to_u32(
+		const u8_t * const number_string,
+		const u32_t number_string_length,
+		u32_t * const integer);
+
+	EAP_FUNC_IMPORT void trace_configuration(
+		const eap_status_e configuration_read_status,
+		const eap_configuration_field_c * const field,
+		const eap_variable_data_c * const data);
+
+	EAP_FUNC_IMPORT u64_t xor_u64(const u64_t a, const u64_t b);
+
+	EAP_FUNC_IMPORT u64_t multiply_u64(const u64_t a, const u64_t b);
+
+	EAP_FUNC_IMPORT i32_t compare_u64(const u64_t a, const u64_t b);
+
+	EAP_FUNC_IMPORT eap_status_e create_uuid_v5( 
+		const void* const ns_uuid,
+		const u32_t ns_uuid_length,
+		const void* const name, 
+		const u32_t name_length,
+		eap_variable_data_c* const uuid );
+
+	EAP_FUNC_IMPORT eap_status_e create_uuid_v5_from_mac_address( 
+		const u8_t* const mac_address, 
+		const u32_t mac_address_length,
+		eap_variable_data_c* const uuid );
+
+};
+
+/** @file */
+
+//-----------------------------------------------------------------------------------------------
+
+/// This is the default trace mask.
+const u32_t TRACE_FLAGS_DEFAULT = eap_am_tools_c::eap_trace_mask_debug;
+const u32_t TRACE_FLAGS_ERROR = eap_am_tools_c::eap_trace_mask_error;
+const u32_t TRACE_FLAGS_ALWAYS = eap_am_tools_c::eap_trace_mask_always;
+
+const u32_t TRACE_TEST_VECTORS = eap_am_tools_c::eap_trace_mask_test_vectors;
+
+const u32_t EAP_TRACE_FLAGS_MESSAGE_DATA = eap_am_tools_c::eap_trace_mask_message_data;
+
+const u32_t EAP_TRACE_MASK_HASH_MAP = eap_am_tools_c::eap_trace_mask_hash_map;
+
+/// This mask activates an additional timer trace.
+const u32_t TRACE_FLAGS_TIMER = eap_am_tools_c::eap_trace_mask_timer;
+const u32_t TRACE_FLAGS_TIMER_QUEUE = eap_am_tools_c::eap_trace_mask_timer_queue;
+
+const u32_t TRACE_FLAGS_OK_RETURNS = eap_am_tools_c::eap_trace_mask_ok_returns;
+
+//-----------------------------------------------------------------------------------------------
+
+#if !defined(USE_EAP_STATUS_RETURN)
+
+	#define EAP_STATUS_RETURN(tools, status) (status)
+
+	#define EAP_STATUS_RETURN_WARNING(tools, status) (status)
+
+#else
+
+	#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) && !defined(_DEBUG) && !defined(DEBUG)
+		// This is used only in release version.
+
+		#if !defined(EAP_FILE_NUMBER_ENUM)
+			#define EAP_FILE_NUMBER_ENUM 0ul
+		#endif //#if defined(EAP_FILE_NUMBER_ENUM)
+
+		#if !defined(EAP_FILE_NUMBER_DATE)
+			#define EAP_FILE_NUMBER_DATE 0ul
+		#endif //#if defined(EAP_FILE_NUMBER_DATE)
+
+		#define EAP_STATUS_RETURN(tools, status) \
+			((tools != 0 && (*(tools)).get_trace_mask()) \
+			? (*(tools)).eap_status_return_file_number( \
+				true, \
+				(status), \
+				EAP_FILE_NUMBER_DATE, \
+				EAP_FILE_NUMBER_ENUM, \
+				__LINE__) \
+			 : status)
+
+		#define EAP_STATUS_RETURN_WARNING(tools, status) \
+			((tools != 0 && (*(tools)).get_trace_mask()) \
+			? (*(tools)).eap_status_return_file_number( \
+				false, \
+				(status), \
+				EAP_FILE_NUMBER_DATE, \
+				EAP_FILE_NUMBER_ENUM, \
+				__LINE__) \
+			 : status)
+
+	#else
+
+		#define EAP_STATUS_RETURN(tools, status) \
+			((tools != 0 && (*(tools)).get_trace_mask()) \
+			? (*(tools)).eap_status_return( \
+				true, \
+				(status), \
+				__FILE__, \
+				__LINE__) \
+			: status)
+
+		#define EAP_STATUS_RETURN_WARNING(tools, status) \
+			((tools != 0 && (*(tools)).get_trace_mask()) \
+			? (*(tools)).eap_status_return( \
+				false, \
+				(status), \
+				__FILE__, \
+				__LINE__) \
+			: status)
+
+	#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+#endif //#if !defined(USE_EAP_STATUS_RETURN)
+
+//-----------------------------------------------------------------------------------------------
+
+#endif //#if !defined( _EAP_AM_TOOLS_H_ )
+
+
+
+// End.