eapol/eapol_framework/eapol_common/am/include/eap_am_crypto_rc4.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_crypto_rc4.h	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* 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_CRYPTO_RC4_H_)
+#define _EAP_AM_CRYPTO_RC4_H_
+
+#include "eap_am_types.h"
+#include "eap_variable_data.h"
+#include "eap_am_export.h"
+#include "eap_am_tools.h"
+
+#undef set_key
+
+//------------------------------------------------------------
+
+/// The eap_am_crypto_rc4_c class includes the state of 
+/// one instance of RC4 algorithm.
+class EAP_EXPORT eap_am_crypto_rc4_c
+{
+
+	// - - - - - - - - - - - - - - - - - - - - - - - -
+private:
+	// - - - - - - - - - - - - - - - - - - - - - - - -
+
+	enum eap_am_crypto_rc4_constant
+	{
+		eap_am_crypto_rc4_constant_state_size = 256,
+	};
+
+	/// This is pointer to the tools class.
+	abs_eap_am_tools_c * const m_am_tools;
+
+	/// State is stored to this variable.
+	u8_t m_state[eap_am_crypto_rc4_constant_state_size];
+
+	/// This is the index i.
+	u8_t m_ind_i;
+
+	/// This is the index j.
+	u8_t m_ind_j;
+
+	/// This indicates whether this object was generated successfully.
+	bool m_is_valid;
+
+	// - - - - - - - - - - - - - - - - - - - - - - - -
+
+	/**
+	 * Function cleanups the state and variables.
+	 */
+	EAP_FUNC_IMPORT eap_status_e cleanup();
+
+	/**
+	 * The set_is_invalid() function sets the state of the eap_am_crypto_rc4_c
+	 * object invalid. 
+	 * The eap_am_crypto_rc4_c object calls this function after it is
+	 * initialized.
+	 */
+	EAP_FUNC_IMPORT void set_is_invalid();
+
+	/**
+	 * The set_is_valid() function sets the state of the eap_am_crypto_rc4_c
+	 * object valid. 
+	 * The eap_am_crypto_rc4_c object calls this function after it is
+	 * initialized.
+	 */
+	EAP_FUNC_IMPORT void set_is_valid();
+
+	/**
+	 * Function swaps the values.
+	 */
+	EAP_FUNC_IMPORT inline void swap(
+		u8_t * const s_i,
+		u8_t * const s_j);
+
+	/**
+	 * Function returns the next random byte.
+	 */
+	inline u8_t get_random_byte();
+
+	/**
+	 * Function XORs input data buffer with generated pseudo random data
+	 * and stores result to output data buffer.
+	 */
+	inline eap_status_e process_data(
+		const void * const p_data_in,
+		void * const p_data_out,
+		const u32_t data_length);
+
+	// - - - - - - - - - - - - - - - - - - - - - - - -
+public:
+	// - - - - - - - - - - - - - - - - - - - - - - - -
+
+	/**
+	 * Destructor resets the used internal buffers.
+	 */
+	EAP_FUNC_IMPORT virtual ~eap_am_crypto_rc4_c();
+
+	/**
+	 * Constructor initializes the used internal buffers.
+	 */
+	EAP_FUNC_IMPORT eap_am_crypto_rc4_c(abs_eap_am_tools_c * const tools);
+
+	/**
+	 * The get_is_valid() function returns the status of the
+	 * eap_am_crypto_rc4_c object. 
+	 * True indicates the object is allocated successfully.
+	 */
+	EAP_FUNC_IMPORT bool get_is_valid();
+
+	/**
+	 * This function sets the RC4 key.
+	 */
+	EAP_FUNC_IMPORT eap_status_e set_key(
+		const eap_variable_data_c * const key);
+
+	/**
+	 * This function does RC4 encryption.
+	 */
+	EAP_FUNC_IMPORT eap_status_e encrypt_data(
+		const void * const data_in, 
+		void * const data_out,
+		const u32_t data_length);
+
+	/**
+	 * This function does RC4 decryption.
+	 */
+	EAP_FUNC_IMPORT eap_status_e decrypt_data(
+		const void * const data_in, 
+		void * const data_out,
+		const u32_t data_length);
+};
+
+#endif //#if !defined(_EAP_AM_CRYPTO_RC4_H_)
+
+//------------------------------------------------------------
+
+
+
+// End.