/**
\page code_structure Structure of the source code

[ \ref _wpa_supplicant_core "wpa_supplicant core functionality" |
\ref generic_helper_func "Generic helper functions" |
\ref crypto_func "Cryptographic functions" |
\ref tls_func "TLS library" |
\ref configuration "Configuration" |
\ref ctrl_iface "Control interface" |
\ref wpa_code "WPA supplicant" |
\ref eap_peer "EAP peer" |
\ref eapol_supp "EAPOL supplicant" |
\ref win_port "Windows port" |
\ref test_programs "Test programs" ]

%wpa_supplicant implementation is divided into number of independent
modules. Core code includes functionality for controlling the network
selection, association, and configuration. Independent modules include
WPA code (key handshake, PMKSA caching, pre-authentication), EAPOL
state machine, and EAP state machine and methods. In addition, there
are number of separate files for generic helper functions.

Both WPA and EAPOL/EAP state machines can be used separately in other
programs than %wpa_supplicant. As an example, the included test
programs eapol_test and preauth_test are using these modules.

\ref driver_wrapper "Driver interface API" is defined in driver.h and
all hardware/driver dependent functionality is implemented in
driver_*.c.


\section _wpa_supplicant_core wpa_supplicant core functionality

wpa_supplicant.c
	Program initialization, main control loop

main.c
	main() for UNIX-like operating systems and MinGW (Windows); this
	uses command line arguments to configure wpa_supplicant

events.c
	Driver event processing; wpa_supplicant_event() and related functions

wpa_supplicant_i.h
	Internal definitions for %wpa_supplicant core; should not be
	included into independent modules


\section generic_helper_func Generic helper functions

%wpa_supplicant uses generic helper functions some of which are shared
with with hostapd. The following C files are currently used:

eloop.c and eloop.h
	Event loop (select() loop with registerable timeouts, socket read
	callbacks, and signal callbacks)

common.c and common.h
	Common helper functions

defs.h
	Definitions shared by multiple files

l2_packet.h, l2_packet_linux.c, and l2_packet_pcap.c
	Layer 2 (link) access wrapper (includes native Linux implementation
	and wrappers for libdnet/libpcap). A new l2_packet implementation
	may need to be added when porting to new operating systems that are
	not supported by libdnet/libpcap. Makefile can be used to select which
	l2_packet implementation is included. l2_packet_linux.c uses Linux
	packet sockets and l2_packet_pcap.c has a more portable version using
	libpcap and libdnet.

pcsc_funcs.c and pcsc_funcs.h
	Wrapper for PC/SC lite SIM and smart card readers

priv_netlink.h
	Private version of netlink definitions from Linux kernel header files;
	this could be replaced with C library header file once suitable
	version becomes commonly available

version.h
	Version number definitions

wireless_copy.h
	Private version of Linux wireless extensions definitions from kernel
	header files; this could be replaced with C library header file once
	suitable version becomes commonly available


\section crypto_func Cryptographic functions

md5.c and md5.h
	MD5 (replaced with a crypto library if TLS support is included)
	HMAC-MD5 (keyed checksum for message authenticity validation)

rc4.c and rc4.h
	RC4 (broadcast/default key encryption)

sha1.c and sha1.h
	SHA-1 (replaced with a crypto library if TLS support is included)
	HMAC-SHA-1 (keyed checksum for message authenticity validation)
	PRF-SHA-1 (pseudorandom (key/nonce generation) function)
	PBKDF2-SHA-1 (ASCII passphrase to shared secret)
	T-PRF (for EAP-FAST)
	TLS-PRF (RFC 2246)

sha256.c and sha256.h
	SHA-256 (replaced with a crypto library if TLS support is included)

aes_wrap.c, aes_wrap.h, aes.c
	AES (replaced with a crypto library if TLS support is included),
	AES Key Wrap Algorithm with 128-bit KEK, RFC3394 (broadcast/default
	key encryption),
	One-Key CBC MAC (OMAC1) hash with AES-128,
	AES-128 CTR mode encryption,
	AES-128 EAX mode encryption/decryption,
	AES-128 CBC

crypto.h
	Definition of crypto library wrapper

crypto_openssl.c
	Wrapper functions for libcrypto (OpenSSL)

crypto_internal.c
	Wrapper functions for internal crypto implementation

crypto_gnutls.c
	Wrapper functions for libgcrypt (used by GnuTLS)

ms_funcs.c and ms_funcs.h
	Helper functions for MSCHAPV2 and LEAP

tls.h
	Definition of TLS library wrapper

tls_none.c
	Dummy implementation of TLS library wrapper for cases where TLS
	functionality is not included.

tls_openssl.c
	TLS library wrapper for openssl

tls_internal.c
	TLS library for internal TLS implementation

tls_gnutls.c
	TLS library wrapper for GnuTLS


\section tls_func TLS library

asn1.c and asn1.h
	ASN.1 DER parsing

bignum.c and bignum.h
	Big number math

rsa.c and rsa.h
	RSA

x509v3.c and x509v3.h
	X.509v3 certificate parsing and processing

tlsv1_client.c, tlsv1_client.h
	TLSv1 client (RFC 2246)

tlsv1_client_i.h
	Internal structures for TLSv1 client

tlsv1_client_read.c
	TLSv1 client: read handshake messages

tlsv1_client_write.c
	TLSv1 client: write handshake messages

tlsv1_common.c and tlsv1_common.h
	Common TLSv1 routines and definitions

tlsv1_cred.c and tlsv1_cred.h
	TLSv1 credentials

tlsv1_record.c and tlsv1_record.h
	TLSv1 record protocol


\section configuration Configuration

config_ssid.h
	Definition of per network configuration items

config.h
	Definition of the %wpa_supplicant configuration

config.c
	Configuration parser and common functions

config_file.c
	Configuration backend for text files (e.g., wpa_supplicant.conf)

config_winreg.c
	Configuration backend for Windows registry


\section ctrl_iface Control interface

%wpa_supplicant has a \ref ctrl_iface_page "control interface"
that can be used to get status
information and manage operations from external programs. An example
command line interface (wpa_cli) and GUI (wpa_gui) for this interface
are included in the %wpa_supplicant distribution.

ctrl_iface.c and ctrl_iface.h
	%wpa_supplicant-side of the control interface

ctrl_iface_unix.c
	UNIX domain sockets -based control interface backend

ctrl_iface_udp.c
	UDP sockets -based control interface backend

ctrl_iface_named_pipe.c
	Windows named pipes -based control interface backend

wpa_ctrl.c and wpa_ctrl.h
	Library functions for external programs to provide access to the
	%wpa_supplicant control interface

wpa_cli.c
	Example program for using %wpa_supplicant control interface


\section wpa_code WPA supplicant

wpa.c and wpa.h
	WPA state machine and 4-Way/Group Key Handshake processing

preauth.c and preauth.h
	PMKSA caching and pre-authentication (RSN/WPA2)

wpa_i.h
	Internal definitions for WPA code; not to be included to other modules.

\section eap_peer EAP peer

\ref eap_peer_module "EAP peer implementation" is a separate module that
can be used by other programs than just %wpa_supplicant.

eap.c and eap.h
	EAP state machine and method interface

eap_defs.h
	Common EAP definitions

eap_i.h
	Internal definitions for EAP state machine and EAP methods; not to be
	included in other modules

eap_sim_common.c and eap_sim_common.h
	Common code for EAP-SIM and EAP-AKA

eap_tls_common.c and eap_tls_common.h
	Common code for EAP-PEAP, EAP-TTLS, and EAP-FAST

eap_tlv.c and eap_tlv.h
	EAP-TLV code for EAP-PEAP and EAP-FAST

eap_ttls.c and eap_ttls.h
	EAP-TTLS

eap_pax.c, eap_pax_common.h, eap_pax_common.c
	EAP-PAX

eap_psk.c, eap_psk_common.h, eap_psk_common.c
	EAP-PSK (note: this is not needed for WPA-PSK)

eap_sake.c, eap_sake_common.h, eap_sake_common.c
	EAP-SAKE

eap_gpsk.c, eap_gpsk_common.h, eap_gpsk_common.c
	EAP-GPSK

eap_aka.c, eap_fast.c, eap_gtc.c, eap_leap.c, eap_md5.c, eap_mschapv2.c,
eap_otp.c, eap_peap.c, eap_sim.c, eap_tls.c
	Other EAP method implementations


\section eapol_supp EAPOL supplicant

eapol_supp_sm.c and eapol_supp_sm.h
	EAPOL supplicant state machine and IEEE 802.1X processing


\section win_port Windows port

ndis_events.c
	Code for receiving NdisMIndicateStatus() events and delivering them to
	%wpa_supplicant driver_ndis.c in more easier to use form

win_if_list.c
	External program for listing current network interface


\section test_programs Test programs

radius_client.c and radius_client.h
	RADIUS authentication client implementation for eapol_test

radius.c and radius.h
	RADIUS message processing for eapol_test

eapol_test.c
	Standalone EAP testing tool with integrated RADIUS authentication
	client

preauth_test.c
	Standalone RSN pre-authentication tool

wpa_passphrase.c
	WPA ASCII passphrase to PSK conversion

*/
