| /** | 
 | \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 \ref driver.h and | 
 | all hardware/driver dependent functionality is implemented in | 
 | driver_*.c. | 
 |  | 
 |  | 
 | \section _wpa_supplicant_core wpa_supplicant core functionality | 
 |  | 
 | \ref wpa_supplicant.c | 
 | 	Program initialization, main control loop | 
 |  | 
 | \ref wpa_supplicant/main.c | 
 | 	main() for UNIX-like operating systems and MinGW (Windows); this | 
 | 	uses command line arguments to configure wpa_supplicant | 
 |  | 
 | \ref events.c | 
 | 	Driver event processing; \ref wpa_supplicant_event() and related functions | 
 |  | 
 | \ref 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: | 
 |  | 
 | \ref eloop.c and \ref eloop.h | 
 | 	Event loop (select() loop with registerable timeouts, socket read | 
 | 	callbacks, and signal callbacks) | 
 |  | 
 | \ref common.c and \ref common.h | 
 | 	Common helper functions | 
 |  | 
 | \ref defs.h | 
 | 	Definitions shared by multiple files | 
 |  | 
 | \ref l2_packet.h, \ref l2_packet_linux.c, and \ref 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. \ref l2_packet_linux.c uses Linux | 
 | 	packet sockets and \ref l2_packet_pcap.c has a more portable version using | 
 | 	libpcap and libdnet. | 
 |  | 
 | \ref pcsc_funcs.c and \ref pcsc_funcs.h | 
 | 	Wrapper for PC/SC lite SIM and smart card readers | 
 |  | 
 | \ref 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 | 
 |  | 
 | \ref version.h | 
 | 	Version number definitions | 
 |  | 
 |  | 
 | \section crypto_func Cryptographic functions | 
 |  | 
 | \ref md5.c and \ref md5.h | 
 | 	MD5 (replaced with a crypto library if TLS support is included) | 
 | 	HMAC-MD5 (keyed checksum for message authenticity validation) | 
 |  | 
 | \ref rc4.c and \ref rc4.h | 
 | 	RC4 (broadcast/default key encryption) | 
 |  | 
 | \ref sha1.c and \ref 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) | 
 |  | 
 | \ref sha256.c and \ref sha256.h | 
 | 	SHA-256 (replaced with a crypto library if TLS support is included) | 
 |  | 
 | \ref aes-wrap.c, \ref aes_wrap.h, \ref 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 | 
 |  | 
 | \ref crypto.h | 
 | 	Definition of crypto library wrapper | 
 |  | 
 | \ref crypto_openssl.c | 
 | 	Wrapper functions for libcrypto (OpenSSL) | 
 |  | 
 | \ref crypto_internal.c | 
 | 	Wrapper functions for internal crypto implementation | 
 |  | 
 | \ref crypto_gnutls.c | 
 | 	Wrapper functions for libgcrypt (used by GnuTLS) | 
 |  | 
 | \ref ms_funcs.c and \ref ms_funcs.h | 
 | 	Helper functions for MSCHAPV2 and LEAP | 
 |  | 
 | \ref tls.h | 
 | 	Definition of TLS library wrapper | 
 |  | 
 | \ref tls_none.c | 
 | 	Dummy implementation of TLS library wrapper for cases where TLS | 
 | 	functionality is not included. | 
 |  | 
 | \ref tls_openssl.c | 
 | 	TLS library wrapper for openssl | 
 |  | 
 | \ref tls_internal.c | 
 | 	TLS library for internal TLS implementation | 
 |  | 
 | \ref tls_gnutls.c | 
 | 	TLS library wrapper for GnuTLS | 
 |  | 
 |  | 
 | \section tls_func TLS library | 
 |  | 
 | \ref asn1.c and \ref asn1.h | 
 | 	ASN.1 DER parsing | 
 |  | 
 | \ref bignum.c and \ref bignum.h | 
 | 	Big number math | 
 |  | 
 | \ref rsa.c and \ref rsa.h | 
 | 	RSA | 
 |  | 
 | \ref x509v3.c and \ref x509v3.h | 
 | 	X.509v3 certificate parsing and processing | 
 |  | 
 | \ref tlsv1_client.c, \ref tlsv1_client.h | 
 | 	TLSv1 client (RFC 2246) | 
 |  | 
 | \ref tlsv1_client_i.h | 
 | 	Internal structures for TLSv1 client | 
 |  | 
 | \ref tlsv1_client_read.c | 
 | 	TLSv1 client: read handshake messages | 
 |  | 
 | \ref tlsv1_client_write.c | 
 | 	TLSv1 client: write handshake messages | 
 |  | 
 | \ref tlsv1_common.c and \ref tlsv1_common.h | 
 | 	Common TLSv1 routines and definitions | 
 |  | 
 | \ref tlsv1_cred.c and \ref tlsv1_cred.h | 
 | 	TLSv1 credentials | 
 |  | 
 | \ref tlsv1_record.c and \ref tlsv1_record.h | 
 | 	TLSv1 record protocol | 
 |  | 
 |  | 
 | \section configuration Configuration | 
 |  | 
 | \ref config_ssid.h | 
 | 	Definition of per network configuration items | 
 |  | 
 | \ref config.h | 
 | 	Definition of the wpa_supplicant configuration | 
 |  | 
 | \ref config.c | 
 | 	Configuration parser and common functions | 
 |  | 
 | \ref wpa_supplicant/config_file.c | 
 | 	Configuration backend for text files (e.g., wpa_supplicant.conf) | 
 |  | 
 | \ref 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. | 
 |  | 
 | \ref wpa_supplicant/ctrl_iface.c and \ref wpa_supplicant/ctrl_iface.h | 
 | 	wpa_supplicant-side of the control interface | 
 |  | 
 | \ref ctrl_iface_unix.c | 
 | 	UNIX domain sockets -based control interface backend | 
 |  | 
 | \ref ctrl_iface_udp.c | 
 | 	UDP sockets -based control interface backend | 
 |  | 
 | \ref ctrl_iface_named_pipe.c | 
 | 	Windows named pipes -based control interface backend | 
 |  | 
 | \ref wpa_ctrl.c and \ref wpa_ctrl.h | 
 | 	Library functions for external programs to provide access to the | 
 | 	wpa_supplicant control interface | 
 |  | 
 | \ref wpa_cli.c | 
 | 	Example program for using wpa_supplicant control interface | 
 |  | 
 |  | 
 | \section wpa_code WPA supplicant | 
 |  | 
 | \ref wpa.c and \ref wpa.h | 
 | 	WPA state machine and 4-Way/Group Key Handshake processing | 
 |  | 
 | \ref preauth.c and \ref preauth.h | 
 | 	PMKSA caching and pre-authentication (RSN/WPA2) | 
 |  | 
 | \ref 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. | 
 |  | 
 | \ref eap.c and \ref eap.h | 
 | 	EAP state machine and method interface | 
 |  | 
 | \ref eap_defs.h | 
 | 	Common EAP definitions | 
 |  | 
 | \ref eap_i.h | 
 | 	Internal definitions for EAP state machine and EAP methods; not to be | 
 | 	included in other modules | 
 |  | 
 | \ref eap_sim_common.c and \ref eap_sim_common.h | 
 | 	Common code for EAP-SIM and EAP-AKA | 
 |  | 
 | \ref eap_tls_common.c and \ref eap_tls_common.h | 
 | 	Common code for EAP-PEAP, EAP-TTLS, and EAP-FAST | 
 |  | 
 | \ref eap_ttls.c and \ref eap_ttls.h | 
 | 	EAP-TTLS | 
 |  | 
 | \ref eap_pax.c, \ref eap_pax_common.h, \ref eap_pax_common.c | 
 | 	EAP-PAX | 
 |  | 
 | \ref eap_psk.c, \ref eap_psk_common.h, \ref eap_psk_common.c | 
 | 	EAP-PSK (note: this is not needed for WPA-PSK) | 
 |  | 
 | \ref eap_sake.c, \ref eap_sake_common.h, \ref eap_sake_common.c | 
 | 	EAP-SAKE | 
 |  | 
 | \ref eap_gpsk.c, \ref eap_gpsk_common.h, \ref eap_gpsk_common.c | 
 | 	EAP-GPSK | 
 |  | 
 | \ref eap_aka.c, \ref eap_fast.c, \ref eap_gtc.c, \ref eap_leap.c, | 
 | \ref eap_md5.c, \ref eap_mschapv2.c, \ref eap_otp.c, \ref eap_peap.c, | 
 | \ref eap_sim.c, \ref eap_tls.c | 
 | 	Other EAP method implementations | 
 |  | 
 |  | 
 | \section eapol_supp EAPOL supplicant | 
 |  | 
 | \ref eapol_supp_sm.c and \ref eapol_supp_sm.h | 
 | 	EAPOL supplicant state machine and IEEE 802.1X processing | 
 |  | 
 |  | 
 | \section win_port Windows port | 
 |  | 
 | \ref ndis_events.c | 
 | 	Code for receiving NdisMIndicateStatus() events and delivering them to | 
 | 	wpa_supplicant \ref driver_ndis.c in more easier to use form | 
 |  | 
 | \ref win_if_list.c | 
 | 	External program for listing current network interface | 
 |  | 
 |  | 
 | \section test_programs Test programs | 
 |  | 
 | \ref radius_client.c and \ref radius_client.h | 
 | 	RADIUS authentication client implementation for eapol_test | 
 |  | 
 | \ref radius.c and \ref radius.h | 
 | 	RADIUS message processing for eapol_test | 
 |  | 
 | \ref eapol_test.c | 
 | 	Standalone EAP testing tool with integrated RADIUS authentication | 
 | 	client | 
 |  | 
 | \ref preauth_test.c | 
 | 	Standalone RSN pre-authentication tool | 
 |  | 
 | \ref wpa_passphrase.c | 
 | 	WPA ASCII passphrase to PSK conversion | 
 |  | 
 | */ |