eapol/eapol_framework/eapol_common/type/aka/core/eap_type_aka_payloads.cpp
changeset 0 c8830336c852
child 2 1c7bc153c08e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_common/type/aka/core/eap_type_aka_payloads.cpp	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,356 @@
+/*
+* 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.
+*
+*/
+
+
+// This is enumeration of EAPOL source code.
+#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+	#undef EAP_FILE_NUMBER_ENUM
+	#define EAP_FILE_NUMBER_ENUM 69 
+	#undef EAP_FILE_NUMBER_DATE 
+	#define EAP_FILE_NUMBER_DATE 1127594498 
+#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+
+
+#include "eap_type_aka_payloads.h"
+#include "abs_eap_am_tools.h"
+#include "eap_tools.h"
+
+
+EAP_FUNC_EXPORT aka_fixed_data_c::~aka_fixed_data_c()
+{
+}
+
+EAP_FUNC_EXPORT aka_fixed_data_c::aka_fixed_data_c(
+	abs_eap_am_tools_c * const tools)
+	: m_is_valid(false)
+	, m_original_header(tools, 0, 0)
+	, m_type(0)
+	, m_data(0)
+{
+}
+
+EAP_FUNC_EXPORT bool aka_fixed_data_c::get_is_valid() const
+{
+	return m_is_valid;
+}
+
+EAP_FUNC_EXPORT const aka_payload_AT_header_c * aka_fixed_data_c::get_original_header()
+{
+	return &m_original_header;
+}
+
+EAP_FUNC_EXPORT u16_t aka_fixed_data_c::get_type(abs_eap_am_tools_c * const m_am_tools) const
+{
+	EAP_UNREFERENCED_PARAMETER(m_am_tools);
+
+	if (m_is_valid == true)
+	{
+		return m_type;
+	}
+	else
+	{
+		EAP_ASSERT_ALWAYS(m_is_valid == true);
+		return 0u;
+	}
+}
+
+EAP_FUNC_EXPORT u16_t aka_fixed_data_c::get_data(abs_eap_am_tools_c * const m_am_tools) const
+{
+	EAP_UNREFERENCED_PARAMETER(m_am_tools);
+
+	if (m_is_valid == true)
+	{
+		return m_data;
+	}
+	else
+	{
+		EAP_ASSERT_ALWAYS(m_is_valid == true);
+		return 0u;
+	}
+}
+
+EAP_FUNC_EXPORT void aka_fixed_data_c::set_data(const aka_payload_AT_header_c * const original_header,
+	const u16_t type, const u16_t data)
+{
+	m_is_valid = true;
+	m_original_header.set_header_buffer(
+		original_header->get_header_buffer(original_header->get_header_buffer_length()),
+		original_header->get_header_buffer_length());
+	m_type = static_cast<u16_t>(type & 0x7FFF); // Mask out the AF bit.
+	m_data = data;
+}
+
+
+
+EAP_FUNC_EXPORT aka_variable_data_c::~aka_variable_data_c()
+{
+}
+
+EAP_FUNC_EXPORT aka_variable_data_c::aka_variable_data_c(abs_eap_am_tools_c * const tools)
+	: m_am_tools(tools)
+	, m_data(tools)
+	, m_original_header(tools, 0, 0)
+	, m_payload_included(false)
+{
+}
+
+EAP_FUNC_EXPORT eap_status_e aka_variable_data_c::reset()
+{
+	m_payload_included = false;
+	m_original_header.reset_header(0ul);
+	return m_data.reset();
+}
+
+EAP_FUNC_EXPORT const aka_payload_AT_header_c * aka_variable_data_c::get_original_header() const
+{
+	return &m_original_header;
+}
+
+EAP_FUNC_EXPORT eap_status_e aka_variable_data_c::set_buffer(const aka_payload_AT_header_c * const original_header,
+	u8_t *buffer, const u32_t buffer_length,
+	const bool free_buffer, const bool is_writable)
+{
+	m_original_header.set_header_buffer(
+		original_header->get_header_buffer(original_header->get_header_buffer_length()),
+		original_header->get_header_buffer_length());
+	if (m_original_header.get_is_valid() == false)
+	{
+		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+		return EAP_STATUS_RETURN(m_am_tools, eap_status_header_corrupted);
+	}
+
+	eap_status_e status = m_data.set_buffer(buffer, buffer_length, free_buffer, is_writable);
+	if (status != eap_status_ok)
+	{
+		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+		return EAP_STATUS_RETURN(m_am_tools, status);
+	}
+
+	m_payload_included = true;
+
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+	return EAP_STATUS_RETURN(m_am_tools, status);
+}
+
+
+EAP_FUNC_EXPORT bool aka_variable_data_c::get_payload_included() const
+{
+	return m_payload_included;
+}
+
+EAP_FUNC_EXPORT u32_t aka_variable_data_c::get_data_length() const
+{
+	return m_data.get_data_length();
+}
+
+EAP_FUNC_EXPORT u8_t * aka_variable_data_c::get_data(const u32_t data_length) const
+{
+	return m_data.get_data(data_length);
+}
+
+EAP_FUNC_EXPORT eap_variable_data_c * aka_variable_data_c::get_payload_buffer()
+{
+	return &m_data;
+}
+
+EAP_FUNC_EXPORT bool aka_variable_data_c::get_is_valid() const
+{
+	return m_data.get_is_valid();
+}
+
+
+EAP_FUNC_EXPORT aka_payloads_c::~aka_payloads_c()
+{
+}
+
+EAP_FUNC_EXPORT aka_payloads_c::aka_payloads_c(
+	abs_eap_am_tools_c * const tools)
+	: m_am_tools(tools)
+	, m_all_payloads(tools)
+	, m_nonce_s(tools)
+	, m_MAC(tools)
+	, m_ENCR_DATA(tools)
+	, m_IDENTITY_payload(tools)
+	, m_padding_payload(tools)
+	, m_RAND(tools)
+	, m_AUTN(tools)
+	, m_AUTS(tools)
+	, m_RES(tools)
+	, m_PERMANENT_ID_REQ(tools)
+	, m_FULLAUTH_ID_REQ(tools)
+	, m_ANY_ID_REQ(tools)
+	, m_IV(tools)
+	, m_NEXT_PSEUDONYM(tools)
+	, m_NEXT_REAUTH_ID(tools)
+	, m_NOTIFICATION(tools)
+	, m_COUNTER(tools)
+	, m_COUNTER_TOO_SMALL(tools)
+	, m_CLIENT_ERROR_CODE(tools)
+	, m_RESULT_IND(tools)
+	, m_CHECKCODE(tools)
+	, m_unknown_payload(aka_payload_NONE)
+	, m_includes_other_version_than_1(false)
+	, m_is_valid(false)
+{
+	if (m_all_payloads.get_is_valid() == false
+		|| m_nonce_s.get_is_valid() == false
+		|| m_MAC.get_is_valid() == false
+		|| m_ENCR_DATA.get_is_valid() == false
+		|| m_IDENTITY_payload.get_is_valid() == false
+		|| m_padding_payload.get_is_valid() == false
+		|| m_RAND.get_is_valid() == false
+		|| m_AUTN.get_is_valid() == false
+		|| m_AUTS.get_is_valid() == false
+		|| m_RES.get_is_valid() == false
+		|| m_PERMANENT_ID_REQ.get_is_valid() == false
+		|| m_FULLAUTH_ID_REQ.get_is_valid() == false
+		|| m_ANY_ID_REQ.get_is_valid() == false
+		|| m_IV.get_is_valid() == false
+		|| m_NEXT_PSEUDONYM.get_is_valid() == false
+		|| m_NEXT_REAUTH_ID.get_is_valid() == false
+		|| m_NOTIFICATION.get_is_valid() == false
+		|| m_COUNTER.get_is_valid() == false
+		|| m_COUNTER_TOO_SMALL.get_is_valid() == false
+		|| m_CLIENT_ERROR_CODE.get_is_valid() == false
+		|| m_RESULT_IND.get_is_valid() == false
+		|| m_CHECKCODE.get_is_valid() == false
+		)
+	{
+		return;
+	}
+
+	m_is_valid = true;
+}
+
+EAP_FUNC_EXPORT bool aka_payloads_c::check_one_payload(
+	const eap_aka_payload_status_e status,
+	const aka_variable_data_c * const payload)
+{
+	if (status == eap_aka_payload_status_optional)
+	{
+		return true;
+	}
+	else if (status == eap_aka_payload_status_must_not_be
+		&& payload->get_payload_included() == false)
+	{
+		return true;
+	}
+	else if (status == eap_aka_payload_status_must_be
+		&& payload->get_payload_included() == true)
+	{
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+EAP_FUNC_EXPORT bool aka_payloads_c::check_payloads(
+	const eap_aka_payload_status_e nonce_s,
+	const eap_aka_payload_status_e MAC,
+	const eap_aka_payload_status_e ENCR_DATA,
+	const eap_aka_payload_status_e IDENTITY,
+	const eap_aka_payload_status_e padding,
+	const eap_aka_payload_status_e n_RANDs,
+	const eap_aka_payload_status_e AUTN,
+	const eap_aka_payload_status_e AUTS,
+	const eap_aka_payload_status_e RES,
+	const eap_aka_payload_status_e PERMANENT_ID_REQ,
+	const eap_aka_payload_status_e FULLAUTH_ID_REQ,
+	const eap_aka_payload_status_e ANY_ID_REQ,
+	const eap_aka_payload_status_e IV,
+	const eap_aka_payload_status_e NEXT_PSEUDONYM,
+	const eap_aka_payload_status_e NEXT_REAUTH_ID,
+	const eap_aka_payload_status_e NOTIFICATION,
+	const eap_aka_payload_status_e COUNTER,
+	const eap_aka_payload_status_e COUNTER_TOO_SMALL,
+	const eap_aka_payload_status_e CLIENT_ERROR_CODE,
+	const eap_aka_payload_status_e RESULT_IND,
+	const eap_aka_payload_status_e CHECKCODE
+	)
+{
+	if (/*check_one_payload(nonce_mt, get_NONCE_MT()) == true
+		&& */
+		check_one_payload(nonce_s, get_NONCE_S()) == true
+		&& check_one_payload(MAC, get_MAC()) == true
+		&& check_one_payload(ENCR_DATA, get_ENCR_DATA()) == true
+		&& check_one_payload(IDENTITY, get_IDENTITY_payload()) == true
+		&& check_one_payload(padding, get_padding_payload()) == true
+		&& check_one_payload(n_RANDs, get_RAND()) == true
+		&& check_one_payload(AUTN, get_AUTN()) == true
+		&& check_one_payload(AUTS, get_AUTS()) == true
+		&& check_one_payload(RES, get_RES()) == true
+		&& check_one_payload(PERMANENT_ID_REQ, get_PERMANENT_ID_REQ()) == true
+		&& check_one_payload(FULLAUTH_ID_REQ, get_FULLAUTH_ID_REQ()) == true
+		&& check_one_payload(ANY_ID_REQ, get_ANY_ID_REQ()) == true
+		&& check_one_payload(IV, get_IV()) == true
+		&& check_one_payload(NEXT_PSEUDONYM, get_NEXT_PSEUDONYM()) == true
+		&& check_one_payload(NEXT_REAUTH_ID, get_NEXT_REAUTH_ID()) == true
+		&& check_one_payload(NOTIFICATION, get_NOTIFICATION()) == true
+		&& check_one_payload(COUNTER, get_COUNTER()) == true
+		&& check_one_payload(COUNTER_TOO_SMALL, get_COUNTER_TOO_SMALL()) == true
+		&& check_one_payload(CLIENT_ERROR_CODE, get_CLIENT_ERROR_CODE()) == true
+		&& check_one_payload(RESULT_IND, get_RESULT_IND()) == true
+		&& check_one_payload(CHECKCODE, get_CHECKCODE()) == true
+		)
+	{
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+
+EAP_FUNC_EXPORT void aka_payloads_c::set_includes_unknown_attribute(const aka_payload_AT_type_e unknown_payload)
+{
+	if (m_unknown_payload == aka_payload_NONE)
+	{
+		// Only the first one is recorded.
+		m_unknown_payload = unknown_payload;
+	}
+}
+
+EAP_FUNC_EXPORT aka_payload_AT_type_e aka_payloads_c::get_includes_unknown_attribute()
+{
+	return m_unknown_payload;
+}
+
+EAP_FUNC_EXPORT void aka_payloads_c::set_includes_other_version_than_1(const bool includes_other_version_than_1)
+{
+	m_includes_other_version_than_1 = includes_other_version_than_1;
+}
+
+EAP_FUNC_EXPORT bool aka_payloads_c::get_includes_other_version_than_1()
+{
+	return m_includes_other_version_than_1;
+}
+
+EAP_FUNC_EXPORT bool aka_payloads_c::get_is_valid() const
+{
+	return m_is_valid;
+}
+
+
+//--------------------------------------------------
+
+
+
+// End.