eapol/eapol_framework/eapol_common/type/simple_config/simple_config/include/simple_config_types.h
/*
* 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(_SIMPLE_CONFIG_TYPES_H_)
#define _SIMPLE_CONFIG_TYPES_H_
#include "eap_buffer.h"
#include "eap_tools.h"
#include "eap_am_tools.h"
#include "eap_type_all_types.h"
#include "eap_configuration_field.h"
#include "simple_config_attribute_type.h"
/** @file simple_config_types.h
* @brief This file defines the constants of the SIMPLE_CONFIG.
*/
//--------------------------------------------------
enum simple_config_Authentication_Type_e
{
simple_config_Authentication_Type_None = 0x0000,
simple_config_Authentication_Type_Open = 0x0001,
simple_config_Authentication_Type_WPAPSK = 0x0002,
simple_config_Authentication_Type_Shared = 0x0004,
simple_config_Authentication_Type_WPA = 0x0008,
simple_config_Authentication_Type_WPA2 = 0x0010,
simple_config_Authentication_Type_WPA2PSK = 0x0020,
};
enum simple_config_Encryption_Type_e
{
simple_config_Encryption_Type_None = 0x0001,
simple_config_Encryption_Type_WEP = 0x0002,
simple_config_Encryption_Type_TKIP = 0x0004,
simple_config_Encryption_Type_AES = 0x0008,
};
enum simple_config_Connection_Type_e
{
simple_config_Connection_Type_ESS = 0x0001,
simple_config_Connection_Type_IBSS = 0x0002,
};
enum simple_config_Config_Methods_e
{
simple_config_Config_Methods_USBA = 0x0001,
simple_config_Config_Methods_Ethernet = 0x0002,
simple_config_Config_Methods_Label = 0x0004,
simple_config_Config_Methods_Display = 0x0008,
simple_config_Config_Methods_External_NFC_Token = 0x0010,
simple_config_Config_Methods_Integrated_NFC_Token = 0x0020,
simple_config_Config_Methods_NFC_Interface = 0x0040,
simple_config_Config_Methods_PushButton = 0x0080,
simple_config_Config_Methods_Keypad = 0x0100,
};
enum simple_config_State_e
{
simple_config_State_Not_Configured = 0x0001,
simple_config_State_Configured = 0x0002,
};
enum simple_config_RF_Bands_e
{
simple_config_RF_Bands_2_4_GHz = 1,
simple_config_RF_Bands_5_0_GHz = 2,
};
enum simple_config_Association_State_e
{
simple_config_Association_State_Not_Associated = 0,
simple_config_Association_State_Connection_Success = 1,
simple_config_Association_State_Configuration_Failure = 2,
simple_config_Association_State_Association_Failure = 3,
simple_config_Association_State_IP_Failure = 4,
};
enum simple_config_Device_Password_ID_e
{
simple_config_Device_Password_ID_Default_PIN = 0,
simple_config_Device_Password_ID_User_specified = 1,
simple_config_Device_Password_ID_Machine_specified = 2,
simple_config_Device_Password_ID_Rekey = 3,
simple_config_Device_Password_ID_PushButton = 4,
simple_config_Device_Password_ID_Registrar_specified = 5,
};
enum simple_config_Configuration_Error_e
{
simple_config_Configuration_Error_No_Error = 0,
simple_config_Configuration_Error_OOB_Interface_Read_Error = 1,
simple_config_Configuration_Error_Decryption_CRC_Failure = 2,
simple_config_Configuration_Error_2_4_channel_not_supported = 3,
simple_config_Configuration_Error_5_0_channel_not_supported = 4,
simple_config_Configuration_Error_Signal_too_weak = 5,
simple_config_Configuration_Error_Network_auth_failure = 6,
simple_config_Configuration_Error_Network_association_failure = 7,
simple_config_Configuration_Error_No_DHCP_response = 8,
simple_config_Configuration_Error_Failed_DHCP_config = 9,
simple_config_Configuration_Error_IP_address_conflict = 10,
simple_config_Configuration_Error_Couldnt_connect_to_Registrar = 11,
simple_config_Configuration_Error_Multiple_PBC_sessions_detected = 12,
simple_config_Configuration_Error_Rogue_activity_suspected = 13,
simple_config_Configuration_Error_Device_busy = 14,
simple_config_Configuration_Error_Setup_locked = 15,
simple_config_Configuration_Error_Message_Timeout = 16,
simple_config_Configuration_Error_Registration_Session_Timeout = 17,
simple_config_Configuration_Error_Device_Password_Auth_Failure = 18,
};
enum simple_config_Message_Type_e
{
simple_config_Message_Type_None = 0x00,
simple_config_Message_Type_Beacon = 0x01,
simple_config_Message_Type_Probe_Request = 0x02,
simple_config_Message_Type_Probe_Response = 0x03,
simple_config_Message_Type_M1 = 0x04,
simple_config_Message_Type_M2 = 0x05,
simple_config_Message_Type_M2D = 0x06,
simple_config_Message_Type_M3 = 0x07,
simple_config_Message_Type_M4 = 0x08,
simple_config_Message_Type_M5 = 0x09,
simple_config_Message_Type_M6 = 0x0A,
simple_config_Message_Type_M7 = 0x0B,
simple_config_Message_Type_M8 = 0x0C,
simple_config_Message_Type_WSC_ACK = 0x0D,
simple_config_Message_Type_WSC_NACK = 0x0E,
simple_config_Message_Type_WSC_DONE = 0x0F,
simple_config_Message_keep_this_last = simple_config_Message_Type_WSC_DONE,
};
//--------------------------------------------------
/// Macro traces payload type and data.
#define EAP_SIMPLE_CONFIG_TRACE_PAYLOAD(prefix, payload) \
{ \
EAP_TRACE_DEBUG( \
m_am_tools, \
TRACE_FLAGS_DEFAULT|TRACE_TEST_VECTORS, \
(EAPL("%s (0x%08x): current payload 0x%04x=%s, data length 0x%04x.\n"), \
prefix, (payload), (payload)->get_flag_tlv_type(), \
(payload)->get_tlv_type_string(), (payload)->get_data_length())); \
EAP_TRACE_DATA_DEBUG( \
m_am_tools, \
TRACE_FLAGS_DEFAULT|TRACE_TEST_VECTORS, \
(EAPL("payload"), \
(payload)->get_header_buffer( \
(payload)->get_header_length()+(payload)->get_data_length()), \
(payload)->get_header_length()+(payload)->get_data_length())); \
}
//--------------------------------------------------
/**
* This is the size of the local send buffer.
*/
/**
* This is the default trace mask for SIMPLE_CONFIG and PEAP.
*/
const u32_t TRACE_FLAGS_SIMPLE_CONFIG_ERROR = eap_am_tools_c::eap_trace_mask_error;
enum simple_config_protocol_field_size_e
{
SIMPLE_CONFIG_LOCAL_PACKET_BUFFER_LENGTH = EAP_MAX_LOCAL_PACKET_BUFFER_LENGTH,
SIMPLE_CONFIG_ENROLLEE_NONCE_SIZE = 16UL * sizeof(u8_t),
SIMPLE_CONFIG_REGISTRAR_NONCE_SIZE = SIMPLE_CONFIG_ENROLLEE_NONCE_SIZE,
SIMPLE_CONFIG_AUTH_KEY_BITS = 256ul,
SIMPLE_CONFIG_KEY_WRAP_KEY_BITS = 128ul,
SIMPLE_CONFIG_EMSK_BITS = 256ul,
SIMPLE_CONFIG_AUTHENTICATOR_LENGTH = 8ul,
SIMPLE_CONFIG_PSKn_LENGTH = 16ul,
SIMPLE_CONFIG_ESn_LENGTH = 16ul,
SIMPLE_CONFIG_KEY_WRAP_IV_SIZE = 16ul,
};
/**
* This is the Diffie Hellman Prime of the SIMPLE_CONFIG.
*/
const u8_t SIMPLE_CONFIG_DIFFIE_HELLMAN_PRIME[]
= {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22,
0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD,
0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B,
0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37,
0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45,
0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6,
0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B,
0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED,
0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5,
0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6,
0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D,
0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05,
0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A,
0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F,
0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96,
0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB,
0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D,
0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04,
0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
/**
* This is the Diffie Hellman Prime of the SIMPLE_CONFIG.
*/
const u8_t SIMPLE_CONFIG_DIFFIE_HELLMAN_GROUP_GENERATOR[]
= { 0x02 };
const u8_t SIMPLE_CONFIG_VERSION = 0x10;
const u8_t SIMPLE_CONFIG_DEFAULT_NETWORK_KEY_INDEX = 1ul;
/**
* This is the label of the SIMPLE_CONFIG-premaster secret.
* See Chapter "8.1. Computing the master secret" in <a href="../../type/simple_config/documentation/rfc2246.txt">RFC 2246</a>.
*/
const u8_t SIMPLE_CONFIG_SECURE_KEY_DERIVATION_LABEL[] = "Wi-Fi Easy and Secure Key Derivation";
/**
* This is the length of the label of the SIMPLE_CONFIG-premaster secret.
*/
const u32_t SIMPLE_CONFIG_SECURE_KEY_DERIVATION_LABEL_LENGTH = sizeof(SIMPLE_CONFIG_SECURE_KEY_DERIVATION_LABEL)-1ul;
const u32_t EAP_SIMPLE_CONFIG_MASTER_SESSION_KEY_SIZE = 128ul;
/**
* This is the PCB device password PIN used in PushButton mode.
*/
const u8_t SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN[]
= {
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
};
/**
* This is the size of the PCB device password PIN used in PushButton mode.
*/
const u32_t SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN_SIZE = sizeof(SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN);
/**
* This is the length of the RC4 key used in SIMPLE_CONFIG.
*/
const u32_t SIMPLE_CONFIG_RC4_128_KEY_LENGTH = 16ul;
/**
* This is the length of the RC4 initialization vector used in SIMPLE_CONFIG.
*/
const u32_t SIMPLE_CONFIG_RC4_128_IV_LENGTH = 0ul;
/**
* These are the internal SIMPLE_CONFIG-states.
*/
enum simple_config_state_e
{
simple_config_state_none, ///< Initialization value.
simple_config_state_wait_simple_config_start, ///< Waits start of SIMPLE_CONFIG.
simple_config_state_process_simple_config_start,
simple_config_state_wait_M1,
simple_config_state_process_M1,
simple_config_state_wait_M2,
simple_config_state_wait_M3,
simple_config_state_wait_M4,
simple_config_state_wait_M5,
simple_config_state_wait_M6,
simple_config_state_wait_M7,
simple_config_state_wait_M8,
simple_config_state_wait_WSC_ACK,
simple_config_state_wait_WSC_NACK,
simple_config_state_wait_WSC_DONE,
simple_config_state_pending_simple_config_messages_processed, ///< This is indication to lower layer that pending SIMPLE_CONFIG-messages are processed, new messages could be accepted..
simple_config_state_simple_config_success, ///< SIMPLE_CONFIG authentication success.
simple_config_state_failure, ///< Authentication failure.
};
//----------------------------------------------------------------------------
class EAP_EXPORT network_key_and_index_c
{
private:
/// This is pointer to the tools class. @see abs_eap_am_tools_c.
abs_eap_am_tools_c * const m_am_tools;
u8_t m_network_key_index;
eap_variable_data_c m_network_key;
bool m_is_valid;
public:
EAP_FUNC_IMPORT virtual ~network_key_and_index_c();
EAP_FUNC_IMPORT network_key_and_index_c(
abs_eap_am_tools_c * const m_am_tools);
EAP_FUNC_IMPORT u8_t get_network_key_index();
EAP_FUNC_IMPORT void set_network_key_index(u8_t index);
EAP_FUNC_IMPORT eap_variable_data_c * get_network_key();
EAP_FUNC_IMPORT network_key_and_index_c * copy();
EAP_FUNC_IMPORT bool get_is_valid();
EAP_FUNC_IMPORT bool get_is_valid_data();
};
//----------------------------------------------------------------------------
/**
* @defgroup SIMPLE_CONFIG_config_options Configuration options of SIMPLE_CONFIG.
* The following configuration options are read through abs_eap_base_type_c::read_configure() function.
* @{
*/
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_UUID_E,
"SIMPLE_CONFIG_UUID_E",
eap_configure_type_hex_data,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_UUID_R,
"SIMPLE_CONFIG_UUID_R",
eap_configure_type_hex_data,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_SSID,
"SIMPLE_CONFIG_SSID",
eap_configure_type_hex_data,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_MAC_address,
"SIMPLE_CONFIG_MAC_address",
eap_configure_type_hex_data,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_Device_Password_ID,
"SIMPLE_CONFIG_Device_Password_ID",
eap_configure_type_string,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_server_Device_Password_ID,
"SIMPLE_CONFIG_server_Device_Password_ID",
eap_configure_type_string,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_Device_Password_ID_PIN,
"PIN",
eap_configure_type_string,
false);
EAP_CONFIGURATION_FIELD(
cf_str_SIMPLE_CONFIG_Device_Password_ID_PushButton,
"PushButton",
eap_configure_type_string,
false);
/** @} */ // End of group SIMPLE_CONFIG_config_options.
//--------------------------------------------------------------------
/// This class includes the debug strings of the simple_config_cipher_suites_e, simple_config_certificate_type_e and simple_config_compression_method_e.
class EAP_EXPORT eap_simple_config_trace_string_c
{
public:
EAP_FUNC_IMPORT virtual ~eap_simple_config_trace_string_c();
EAP_FUNC_IMPORT eap_simple_config_trace_string_c();
/**
* Function returns string of simple_config_state_e.
* @param state is the queried string.
*/
EAP_FUNC_IMPORT eap_const_string get_state_string(const simple_config_state_e state) const;
/**
* Function returns string of simple_config_Message_Type_e.
* @param type is the queried string.
*/
EAP_FUNC_IMPORT eap_const_string get_message_type_string(const simple_config_Message_Type_e type) const;
/**
* Function returns string of simple_config_Attribute_Type_e.
* @param type is the queried string.
*/
EAP_FUNC_IMPORT eap_const_string get_attribute_type_string(const simple_config_Attribute_Type_e type) const;
};
//--------------------------------------------------
#endif //#if !defined(_SIMPLE_CONFIG_TYPES_H_)
//--------------------------------------------------
// End.