mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-01-03 02:02:33 +01:00
eap: Separate private bits into eap-private.h
This commit is contained in:
parent
39f50e58b1
commit
a2d8054218
@ -90,7 +90,8 @@ src_iwd_SOURCES = src/main.c linux/nl80211.h \
|
||||
src/wscutil.h src/wscutil.c \
|
||||
src/wsc.h src/wsc.c \
|
||||
src/eap-wsc.h src/eap-wsc.c \
|
||||
src/eap.h src/eap.c src/eap-md5.c \
|
||||
src/eap.h src/eap.c src/eap-private.h \
|
||||
src/eap-md5.c \
|
||||
src/eap-tls.c src/eap-ttls.c \
|
||||
src/eap-mschapv2.c src/eap-mschapv2.h \
|
||||
src/backtrace.h src/backtrace.c \
|
||||
@ -153,7 +154,7 @@ monitor_iwmon_SOURCES = monitor/main.c linux/nl80211.h \
|
||||
src/watchlist.h src/watchlist.c \
|
||||
src/eapol.h src/eapol.c \
|
||||
src/handshake.h src/handshake.c \
|
||||
src/eap.h src/eap.c \
|
||||
src/eap.h src/eap.c src/eap-private.h \
|
||||
src/eap-tls.c src/eap-ttls.c
|
||||
monitor_iwmon_LDADD = ell/libell-internal.la
|
||||
endif
|
||||
|
@ -29,6 +29,9 @@
|
||||
#include <errno.h>
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
#include "crypto.h"
|
||||
#include "simutil.h"
|
||||
#include "simauth.h"
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
struct eap_gtc_state {
|
||||
char *secret;
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
struct eap_md5_state {
|
||||
char *secret;
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
#include "eap-mschapv2.h"
|
||||
|
||||
#define MSCHAPV2_CHAL_LEN 16
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <ell/tls-private.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
/*
|
||||
* Protected EAP Protocol (PEAP): EAP type 25 as described in:
|
||||
|
130
src/eap-private.h
Normal file
130
src/eap-private.h
Normal file
@ -0,0 +1,130 @@
|
||||
/*
|
||||
*
|
||||
* Wireless daemon for Linux
|
||||
*
|
||||
* Copyright (C) 2013-2018 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct eap_state;
|
||||
|
||||
/* EAP method API */
|
||||
|
||||
enum eap_type {
|
||||
EAP_TYPE_IDENTITY = 1,
|
||||
EAP_TYPE_NOTIFICATION = 2,
|
||||
EAP_TYPE_NAK = 3,
|
||||
__EAP_TYPE_MIN_METHOD = 4,
|
||||
EAP_TYPE_MD5_CHALLENGE = 4,
|
||||
EAP_TYPE_GTC = 6,
|
||||
EAP_TYPE_TLS_EAP = 13,
|
||||
EAP_TYPE_SIM = 18,
|
||||
EAP_TYPE_TTLS = 21,
|
||||
EAP_TYPE_AKA = 23,
|
||||
EAP_TYPE_PEAP = 25,
|
||||
EAP_TYPE_EXTENSIONS = 33,
|
||||
EAP_TYPE_AKA_PRIME = 50,
|
||||
EAP_TYPE_MSCHAPV2 = 26,
|
||||
EAP_TYPE_PWD = 52,
|
||||
EAP_TYPE_EXPANDED = 254,
|
||||
};
|
||||
|
||||
enum eap_code {
|
||||
EAP_CODE_REQUEST = 1,
|
||||
EAP_CODE_RESPONSE = 2,
|
||||
EAP_CODE_SUCCESS = 3,
|
||||
EAP_CODE_FAILURE = 4,
|
||||
};
|
||||
|
||||
struct eap_method {
|
||||
enum eap_type request_type;
|
||||
uint8_t vendor_id[3];
|
||||
uint32_t vendor_type;
|
||||
bool exports_msk;
|
||||
const char *name;
|
||||
|
||||
int (*check_settings)(struct l_settings *settings,
|
||||
struct l_queue *secrets, const char *prefix,
|
||||
struct l_queue **out_missing);
|
||||
|
||||
bool (*load_settings)(struct eap_state *eap,
|
||||
struct l_settings *settings,
|
||||
const char *prefix);
|
||||
|
||||
/* Reset the internal state back to initial conditions */
|
||||
bool (*reset_state)(struct eap_state *eap);
|
||||
void (*free)(struct eap_state *eap);
|
||||
|
||||
void (*handle_request)(struct eap_state *eap,
|
||||
const uint8_t *pkt, size_t len);
|
||||
void (*handle_retransmit)(struct eap_state *eap,
|
||||
const uint8_t *pkt, size_t len);
|
||||
const char *(*get_identity)(struct eap_state *eap);
|
||||
};
|
||||
|
||||
struct eap_method_desc {
|
||||
const char *name;
|
||||
int (*init)(void);
|
||||
void (*exit)(void);
|
||||
} __attribute__((aligned(8)));
|
||||
|
||||
#define EAP_METHOD_BUILTIN(name, init, exit) \
|
||||
static struct eap_method_desc __eap_builtin_ ## name \
|
||||
__attribute__((used, section("__eap"), aligned(8))) = { \
|
||||
#name, init, exit \
|
||||
}; \
|
||||
|
||||
int eap_register_method(struct eap_method *method);
|
||||
int eap_unregister_method(struct eap_method *method);
|
||||
|
||||
/* Private EAP API */
|
||||
|
||||
int __eap_check_settings(struct l_settings *settings, struct l_queue *secrets,
|
||||
const char *prefix, bool set_key_material,
|
||||
struct l_queue **missing);
|
||||
void __eap_handle_request(struct eap_state *eap, uint16_t id,
|
||||
const uint8_t *pkt, size_t len);
|
||||
|
||||
void eap_discard_success_and_failure(struct eap_state *eap, bool discard);
|
||||
|
||||
void eap_set_data(struct eap_state *eap, void *data);
|
||||
void *eap_get_data(struct eap_state *eap);
|
||||
|
||||
void eap_send_response(struct eap_state *eap,
|
||||
enum eap_type request_type,
|
||||
uint8_t *buf, size_t len);
|
||||
|
||||
void eap_set_key_material(struct eap_state *eap,
|
||||
const uint8_t *msk_data, size_t msk_len,
|
||||
const uint8_t *emsk_data, size_t emsk_len,
|
||||
const uint8_t *iv, size_t iv_len);
|
||||
|
||||
void eap_start_complete_timeout(struct eap_state *eap);
|
||||
|
||||
bool eap_method_is_success(struct eap_state *eap);
|
||||
void eap_method_success(struct eap_state *eap);
|
||||
void eap_method_error(struct eap_state *eap);
|
||||
void eap_method_event(struct eap_state *eap, unsigned int type,
|
||||
const void *data);
|
||||
|
||||
void eap_save_last_id(struct eap_state *eap, uint8_t *last_id);
|
||||
void eap_restore_last_id(struct eap_state *eap, uint8_t last_id);
|
@ -27,6 +27,7 @@
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
#include "util.h"
|
||||
#include "ecc.h"
|
||||
|
||||
|
@ -29,6 +29,9 @@
|
||||
#include <errno.h>
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
#include "crypto.h"
|
||||
#include "simutil.h"
|
||||
#include "simauth.h"
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <ell/pem.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
struct eap_tls_state {
|
||||
char *ca_cert;
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <ell/tls-private.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
struct eap_ttls_state {
|
||||
char *ca_cert;
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include "crypto.h"
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
#include "wscutil.h"
|
||||
#include "util.h"
|
||||
#include "eap-wsc.h"
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap.h"
|
||||
#include "eap-private.h"
|
||||
|
||||
static uint32_t default_mtu;
|
||||
struct l_queue *eap_methods;
|
||||
|
105
src/eap.h
105
src/eap.h
@ -57,18 +57,16 @@ typedef void (*eap_complete_func_t)(enum eap_result result, void *user_data);
|
||||
typedef void (*eap_event_func_t)(unsigned int event, const void *event_data,
|
||||
void *user_data);
|
||||
|
||||
bool eap_secret_info_match(const void *a, const void *b);
|
||||
void eap_secret_info_free(void *data);
|
||||
|
||||
struct eap_state *eap_new(eap_tx_packet_func_t tx_packet,
|
||||
eap_complete_func_t complete, void *user_data);
|
||||
void eap_free(struct eap_state *eap);
|
||||
|
||||
bool eap_secret_info_match(const void *a, const void *b);
|
||||
void eap_append_secret(struct l_queue **out_missing, enum eap_secret_type type,
|
||||
const char *id, const char *id2, const char *parameter);
|
||||
void eap_secret_info_free(void *data);
|
||||
|
||||
int __eap_check_settings(struct l_settings *settings, struct l_queue *secrets,
|
||||
const char *prefix, bool set_key_material,
|
||||
struct l_queue **missing);
|
||||
int eap_check_settings(struct l_settings *settings, struct l_queue *secrets,
|
||||
const char *prefix, bool set_key_material,
|
||||
struct l_queue **out_missing);
|
||||
@ -85,102 +83,5 @@ size_t eap_get_mtu(struct eap_state *eap);
|
||||
|
||||
void eap_rx_packet(struct eap_state *eap, const uint8_t *pkt, size_t len);
|
||||
|
||||
void __eap_handle_request(struct eap_state *eap, uint16_t id,
|
||||
const uint8_t *pkt, size_t len);
|
||||
|
||||
void eap_discard_success_and_failure(struct eap_state *eap, bool discard);
|
||||
|
||||
void eap_init(uint32_t default_mtu);
|
||||
void eap_exit(void);
|
||||
|
||||
/* EAP method API */
|
||||
|
||||
enum eap_type {
|
||||
EAP_TYPE_IDENTITY = 1,
|
||||
EAP_TYPE_NOTIFICATION = 2,
|
||||
EAP_TYPE_NAK = 3,
|
||||
__EAP_TYPE_MIN_METHOD = 4,
|
||||
EAP_TYPE_MD5_CHALLENGE = 4,
|
||||
EAP_TYPE_GTC = 6,
|
||||
EAP_TYPE_TLS_EAP = 13,
|
||||
EAP_TYPE_SIM = 18,
|
||||
EAP_TYPE_TTLS = 21,
|
||||
EAP_TYPE_AKA = 23,
|
||||
EAP_TYPE_PEAP = 25,
|
||||
EAP_TYPE_EXTENSIONS = 33,
|
||||
EAP_TYPE_AKA_PRIME = 50,
|
||||
EAP_TYPE_MSCHAPV2 = 26,
|
||||
EAP_TYPE_PWD = 52,
|
||||
EAP_TYPE_EXPANDED = 254,
|
||||
};
|
||||
|
||||
enum eap_code {
|
||||
EAP_CODE_REQUEST = 1,
|
||||
EAP_CODE_RESPONSE = 2,
|
||||
EAP_CODE_SUCCESS = 3,
|
||||
EAP_CODE_FAILURE = 4,
|
||||
};
|
||||
|
||||
struct eap_method {
|
||||
enum eap_type request_type;
|
||||
uint8_t vendor_id[3];
|
||||
uint32_t vendor_type;
|
||||
bool exports_msk;
|
||||
const char *name;
|
||||
|
||||
int (*check_settings)(struct l_settings *settings,
|
||||
struct l_queue *secrets, const char *prefix,
|
||||
struct l_queue **out_missing);
|
||||
|
||||
bool (*load_settings)(struct eap_state *eap,
|
||||
struct l_settings *settings,
|
||||
const char *prefix);
|
||||
|
||||
/* Reset the internal state back to initial conditions */
|
||||
bool (*reset_state)(struct eap_state *eap);
|
||||
void (*free)(struct eap_state *eap);
|
||||
|
||||
void (*handle_request)(struct eap_state *eap,
|
||||
const uint8_t *pkt, size_t len);
|
||||
void (*handle_retransmit)(struct eap_state *eap,
|
||||
const uint8_t *pkt, size_t len);
|
||||
const char *(*get_identity)(struct eap_state *eap);
|
||||
};
|
||||
|
||||
struct eap_method_desc {
|
||||
const char *name;
|
||||
int (*init)(void);
|
||||
void (*exit)(void);
|
||||
} __attribute__((aligned(8)));
|
||||
|
||||
#define EAP_METHOD_BUILTIN(name, init, exit) \
|
||||
static struct eap_method_desc __eap_builtin_ ## name \
|
||||
__attribute__((used, section("__eap"), aligned(8))) = { \
|
||||
#name, init, exit \
|
||||
}; \
|
||||
|
||||
int eap_register_method(struct eap_method *method);
|
||||
int eap_unregister_method(struct eap_method *method);
|
||||
|
||||
void eap_set_data(struct eap_state *eap, void *data);
|
||||
void *eap_get_data(struct eap_state *eap);
|
||||
|
||||
void eap_send_response(struct eap_state *eap,
|
||||
enum eap_type request_type,
|
||||
uint8_t *buf, size_t len);
|
||||
|
||||
void eap_set_key_material(struct eap_state *eap,
|
||||
const uint8_t *msk_data, size_t msk_len,
|
||||
const uint8_t *emsk_data, size_t emsk_len,
|
||||
const uint8_t *iv, size_t iv_len);
|
||||
|
||||
void eap_start_complete_timeout(struct eap_state *eap);
|
||||
|
||||
bool eap_method_is_success(struct eap_state *eap);
|
||||
void eap_method_success(struct eap_state *eap);
|
||||
void eap_method_error(struct eap_state *eap);
|
||||
void eap_method_event(struct eap_state *eap, unsigned int type,
|
||||
const void *data);
|
||||
|
||||
void eap_save_last_id(struct eap_state *eap, uint8_t *last_id);
|
||||
void eap_restore_last_id(struct eap_state *eap, uint8_t last_id);
|
||||
|
@ -25,6 +25,8 @@
|
||||
#include <errno.h>
|
||||
#include <ell/ell.h>
|
||||
|
||||
#include "eap-private.h"
|
||||
|
||||
#include "crypto.h"
|
||||
#include "simutil.h"
|
||||
|
||||
|
@ -20,8 +20,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "eap.h"
|
||||
|
||||
/*
|
||||
* EAP-SIM/EAP-AKA shared values
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user