--- /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.