TrustCore SDK NanoSec API reference  version 7.0
eap.h
Go to the documentation of this file.
1 /*
2  * eap.h
3  *
4  * EAP Developer API
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
30 /*------------------------------------------------------------------*/
31 
32 #ifndef __EAP_HEADER__
33 #define __EAP_HEADER__
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 /* check for possible build configuration errors */
39 
40 #if defined(MOC_LITTLE_ENDIAN)
41 #define EAP_NTOHS(A) SWAPWORD(A)
42 #define EAP_HTONS(A) SWAPWORD(A)
43 #define EAP_NTOHL(A) SWAPDWORD(A)
44 #define EAP_HTONL(A) SWAPDWORD(A)
45 #elif defined(MOC_BIG_ENDIAN)
46 #define EAP_NTOHS(A) (A)
47 #define EAP_HTONS(A) (A)
48 #define EAP_NTOHL(A) (A)
49 #define EAP_HTONL(A) (A)
50 #elif defined(__ENABLE_MOCANA_EAP_PEER__) || defined(__ENABLE_MOCANA_EAP_AUTH__) || defined(__ENABLE_MOCANA_EAPOL__)
51 #error Must define either MOC_LITTLE_ENDIAN or MOC_BIG_ENDIAN in moptions.h
52 #endif
53 
54 #if defined(__ENABLE_MOCANA_EAP_PEER__) || defined(__ENABLE_MOCANA_EAP_AUTH__)
55 
56 /* timeouts in seconds */
57 #define TIMEOUT_EAP_CLIENT (30)
58 #define TIMEOUT_EAP_RETRANSMIT (10)
59 
60 /* for reference */
61 #define EAP_DEFAULT_MTU (1020)
62 #define EAP_DEFAULT_RETRY_TIMER (5)
63 
64 /* sizes */
65 #define EAP_SHA_FINGER_PRINT_SIZE (20)
66 #define EAP_MD5_FINGER_PRINT_SIZE (16)
67 #define EAP_BUFFER_SIZE (1020)
68 #define EAP_HEADER_SIZE (8)
69 #define EAP_MAX_IDENTITY_SIZE (128)
70 #define EAP_MAX_KEY_SIZE (256)
71 #define EAP_MAX_METHOD_NAME (64)
72 #define EAP_MAX_ROUNDS (50)
73 #define EAP_MAX_METHODS (25)
74 #define EAP_MAX_USER_LEN (64)
75 #define EAP_MAX_PASS_LEN (64)
76 
77 /* EAP ioctl settings */
78 #define EAP_SET_VERSION (1)
79 
80 /* Vendor Ids */
81 #define EAP_VENDOR_ID_IETF (0)
82 
83 #include "../eap/eap_proto.h"
84 
86 typedef enum logLevel_s
87 {
88  EAP_LOG_LEVEL_NONE,
89  EAP_LOG_LEVEL_WARN,
90  EAP_LOG_LEVEL_NOTICE,
91  EAP_LOG_LEVEL_VERBOSE,
92  EAP_LOG_LEVEL_ALL
93 
94 }logLevel;
95 
112 typedef struct eapMethodDef_s
113 {
120  eapMethodType method_type;
121 
126  ubyte method_name[EAP_MAX_METHOD_NAME];
127 
167  MSTATUS (*funcPtr_ulReceiveCallback) (ubyte * app_session_handle,
168  eapMethodType type,
169  eapCode code, ubyte id,
170  ubyte * eap_data,
171  ubyte4 eap_data_len, ubyte * opaque_data);
172 
213  MSTATUS (*funcPtr_ulReceivePassthruCallback) (ubyte * app_session_handle,
214  eapMethodType type,
215  eapCode code, ubyte id,
216  ubyte * eap_data, ubyte4 eap_data_len,
217  ubyte * opaque_data);
218 
262  MSTATUS (*funcPtr_ulReceiveIndication) (ubyte * app_session_handle,
263  eapIndication ind_type,
264  ubyte * data, ubyte4 data_len);
265 
298  MSTATUS (*funcPtr_ulMICVerify) (ubyte * app_session_handle,
299  ubyte * pkt, ubyte4 pkt_len);
300 
331  MSTATUS (*funcPtr_ulGetMethodstate) (ubyte * app_session_handle,
332  ubyte4 * methodState);
333 
364  MSTATUS (*funcPtr_ulGetDecision) (ubyte * app_session_handle,
365  ubyte4 * decision);
366 
400  MSTATUS (*funcPtr_llTransmitPacket) (ubyte * app_session_handle,
401  eapHdr_t * eap_hdr,
402  ubyte * eap_data, ubyte4 eap_data_len);
404 
405 /* Structure for Expanded Method format */
407 typedef struct eapExpandedMethod_t
408 {
409  ubyte vendor_id[3];
410  ubyte method_type[4];
411 } eapExpandedMethod_t;
412 
413 /* Global Statistics */
415 typedef struct eapGlobalStats_s
416 {
417  ubyte4 eap_total_pkts_sent;
418  ubyte4 eap_total_pkts_received;
419  ubyte4 eap_total_pkts_discard;
420  ubyte4 eap_no_of_create_sessions;
421  ubyte4 eap_no_of_modify_sessions;
422  ubyte4 eap_no_of_active_sessions;
423  ubyte4 eap_no_of_failed_sessions;
424  ubyte4 eap_no_of_restart_sessions;
425  ubyte4 eap_no_of_session_success;
426  ubyte4 eap_no_of_session_failure;
427  ubyte4 eap_no_of_retransmission;
428  ubyte4 eap_no_of_peer_timeouts;
429  ubyte4 eap_pkts_drop_invalid_session;
430  ubyte4 eap_pkts_drop_invalid_pkt;
431 
432 } eapGlobalStats_t;
433 
434 /* Session Statistics */
436 typedef struct eapSessionStats_s
437 {
438  ubyte4 eap_pkts_ll_sent;
439  ubyte4 eap_pkts_ll_received;
440  ubyte4 eap_pkts_ul_callback;
441  ubyte4 eap_pkts_ul_received;
442  ubyte4 eap_pkts_retransmitted;
443  ubyte4 eap_pkts_discard;
444  ubyte4 eap_pkts_drop_ul_nocallback;
445  ubyte4 eap_pkts_drop_invalid_pkt;
446  ubyte4 eap_pkts_tx_id_resp;
447  ubyte4 eap_pkts_rx_id_resp;
448  ubyte4 eap_pkts_rx_id_req;
449  ubyte4 eap_pkts_tx_id_req;
450 } eapSessionStats_t;
451 
452 /* Session Configuration */
454 typedef struct eapSessionConfig_s
455 {
456  eapSessionType sessionType;
457  ubyte4 eap_mtu;
458  ubyte4 eap_ul_timeout;
459  ubyte4 eap_retrans_timeout;
460  ubyte4 eap_max_retrans;
461  ubyte4 eap_options;
462 } eapSessionConfig_t;
463 
464 #define EAP_OPTIONS_ENABLE_FORCED_AUTH (0x1)
465 
466 #define EAP_MOD_METHOD_DEF (0x1)
467 #define EAP_MOD_SESSION_TYPE (0x2)
468 #define EAP_MOD_SESSION_MTU (0x4)
469 #define EAP_MOD_SESSION_UL_TIMEOUT (0x8)
470 #define EAP_MOD_SESSION_RETRANS_TIMEOUT (0x10)
471 #define EAP_MOD_SESSION_MAX_RETRANS (0x20)
472 
515 MOC_EXTERN MSTATUS EAP_ulTransmit (ubyte * eapSessionHdl,
516  ubyte4 instanceId,
517  eapMethodType method_type,
518  eapCode code,
519  eapMethodDecision methodDecision,
520  eapMethodState methodState,
521  ubyte * eap_data,
522  ubyte4 eap_data_len);
523 
562 MOC_EXTERN MSTATUS EAP_llReceivePacket (ubyte *eapSessionHdl,
563  ubyte4 instanceId,
564  ubyte * eap_pkt,
565  ubyte4 eap_pkt_len,
566  ubyte * opaque_data);
567 
568 /* Receive Alternate Indication from lower layer */
614 MOC_EXTERN MSTATUS EAP_llReceiveIndication (ubyte *eapSessionHdl,
615  ubyte4 instanceId,
616  eapAltIndication altIndication);
617 
618 /* Session management API */
619 
659 MOC_EXTERN MSTATUS EAP_sessionCreate (ubyte * appSessionHandle,
660  ubyte4 instanceId,
661  eapMethodDef_t methodDef,
662  eapSessionConfig_t cfgParam ,
663  ubyte ** eapSessionHdl);
664 
710 MOC_EXTERN MSTATUS EAP_sessionModify (ubyte * eapSessionHdl,
711  ubyte4 instanceId,
712  eapMethodDef_t methodDef,
713  eapSessionConfig_t cfgParam,
714  ubyte4 modifiedFlag);
715 
748 MOC_EXTERN MSTATUS EAP_sessionDelete (ubyte * eapSessionHdl,
749  ubyte4 instanceId);
750 
785 MOC_EXTERN MSTATUS EAP_sessionRestart (ubyte * eapSessionHdl,
786  ubyte4 instanceId);
787 
822 MOC_EXTERN MSTATUS EAP_sessionEnable (ubyte * eapSessionHdl, ubyte4 instanceId);
823 
857 MOC_EXTERN MSTATUS EAP_sessionDisable (ubyte * eapSessionHdl, ubyte4 instanceId);
858 
888 MOC_EXTERN MSTATUS EAP_getIdentity(ubyte * eapSessionHdl, ubyte4 instanceId,
889  ubyte **identity, ubyte4 *len);
890 
920 MOC_EXTERN MSTATUS EAP_setIdentity(ubyte * eapSessionHdl, ubyte4 instanceId,
921  ubyte *identity,ubyte4 len);
922 
955 MOC_EXTERN MSTATUS EAP_getKey(ubyte * eapSessionHdl,
956  ubyte4 instanceId,
957  ubyte **key, ubyte *keylen);
958 
991 MOC_EXTERN MSTATUS EAP_setKey(ubyte * eapSessionHdl,
992  ubyte4 instanceId,
993  ubyte *key, ubyte4 keylen);
994 
1028 MOC_EXTERN MSTATUS EAP_getAuthenticationStatus(ubyte * eapSessionHdl ,
1029  ubyte4 instanceId,
1030  eapAuthStatus *authStatus);
1031 
1032 struct eapSessionStatus_s;
1062 MOC_EXTERN MSTATUS EAP_getSessionStatus(ubyte * eapSessionHdl,
1063  ubyte4 instanceId,
1064  struct eapSessionStatus_s *eapStatus);
1065 
1066 /* Configuration/Management API */
1067 
1112 MOC_EXTERN MSTATUS EAP_getSessionStats (ubyte * eapSessionHdl,
1113  ubyte4 instanceId,
1114  eapSessionStats_t *eapStats);
1115 
1160 MOC_EXTERN MSTATUS EAP_getInstanceStats (ubyte4 instanceId,
1161  eapGlobalStats_t *stats);
1162 
1194 MOC_EXTERN MSTATUS EAP_resetInstanceStats (ubyte4 instanceId);
1195 
1229 MOC_EXTERN MSTATUS EAP_resetSessionStats(ubyte *eapSessionHdl,
1230  ubyte4 instanceId);
1231 
1232 /*
1233 MOC_EXTERN MSTATUS EAP_setGlobalTimeout(ubyte4 timeout);
1234 
1235 MOC_EXTERN MSTATUS EAP_loggingEnable (void);
1236 
1237 MOC_EXTERN MSTATUS eap_setLogLevel (logLevel level);
1238 
1239 MOC_EXTERN MSTATUS eap_loggingDisable (void);
1240 */
1241 
1242 /* EAP Initialization APIs */
1243 
1272 MOC_EXTERN MSTATUS EAP_initInstance (ubyte4 *instanceId);
1273 
1300 MOC_EXTERN MSTATUS EAP_deleteInstance (ubyte4 instanceId);
1301 
1330 MOC_EXTERN MSTATUS EAP_checkTimers (ubyte4 instanceId);
1331 
1356 MOC_EXTERN MSTATUS EAP_init(void);
1357 
1383 MOC_EXTERN MSTATUS EAP_shutdown(void);
1384 
1418 MOC_EXTERN MSTATUS
1419 EAP_buildExpandedNAK(ubyte *eapSessionHdl, ubyte4 instanceId,
1420  eapExpandedMethod_t *expMethods, ubyte expMethodCount,
1421  ubyte **eapResponse, ubyte4 *eapRespLen);
1422 
1456 MOC_EXTERN MSTATUS
1457 EAP_buildExpandedResponse(ubyte *eapSessionHdl, ubyte4 instanceId,
1458  ubyte4 expVendorId, ubyte4 expMethodId,
1459  ubyte *eapPayload, ubyte4 eapPayloadLen,
1460  ubyte **eapResponse, ubyte4 *eapRespLen);
1461 
1462 
1495 MOC_EXTERN MSTATUS
1496 EAP_buildNAK(ubyte *eapSessionHdl, ubyte4 instanceId,
1497  ubyte* nakMethods, ubyte4 nakMethodCount,
1498  ubyte **eapResponse, ubyte4 *eapRespLen);
1499 
1535 MOC_EXTERN MSTATUS
1536 EAP_setMethodStateDecision(ubyte *eapSessionHdl, ubyte4 instanceId,
1537  ubyte methodState, ubyte methodDecision);
1538 
1574 MOC_EXTERN MSTATUS
1575 EAP_setId_Type(ubyte * eapSessionHdl, ubyte4 instanceId,
1576  ubyte id, ubyte type);
1577 
1608 MOC_EXTERN MSTATUS
1609 EAP_generateIdReq(ubyte id,ubyte ** req, ubyte4 *reqLen);
1610 
1612 MOC_EXTERN MSTATUS
1613 EAP_getAppHdl(ubyte4 eapSessionHdl,
1614  ubyte4 instanceId,ubyte **appHdl);
1615 
1616 #if defined(__ENABLE_ALL_DEBUGGING__)
1617 
1618 MOC_EXTERN void EAP_PrintBytes( ubyte* buffer, sbyte4 len);
1619 #endif
1620 
1621 #if defined(__ENABLE_MOCANA_EAP_AUTH__)
1622 
1649 MOC_EXTERN MSTATUS EAP_ulStartReauth(ubyte * eapSessionHdl, ubyte4 instanceId);
1650 #endif
1651 
1681 MOC_EXTERN MSTATUS EAP_getMtu(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte4 *mtu);
1682 
1683 #endif /* __ENABLE_MOCANA_EAP_PEER__ || __ENABLE_MOCANA_EAP_AUTH__ */
1684 
1685 #ifdef __cplusplus
1686 }
1687 #endif
1688 
1689 #endif /* __EAP_HEADER__ */
1690 
1691 
MOC_EXTERN MSTATUS EAP_llReceivePacket(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte *eap_pkt, ubyte4 eap_pkt_len, ubyte *opaque_data)
Pass a received packet from the lower layer to the upper for processing.
MOC_EXTERN MSTATUS EAP_getIdentity(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte **identity, ubyte4 *len)
Get EAP session's identity string.
MOC_EXTERN MSTATUS EAP_sessionRestart(ubyte *eapSessionHdl, ubyte4 instanceId)
Restart an EAP session.
MOC_EXTERN MSTATUS EAP_init(void)
Initialize EAP structures, data, and stack.
MOC_EXTERN MSTATUS EAP_setKey(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte *key, ubyte4 keylen)
Set an EAP session's authentication key.
MOC_EXTERN MSTATUS EAP_getInstanceStats(ubyte4 instanceId, eapGlobalStats_t *stats)
Get an EAP instance's statistics.
MOC_EXTERN MSTATUS EAP_generateIdReq(ubyte id, ubyte **req, ubyte4 *reqLen)
Builds an EAP request.
MOC_EXTERN MSTATUS EAP_getSessionStatus(ubyte *eapSessionHdl, ubyte4 instanceId, struct eapSessionStatus_s *eapStatus)
Get an EAP session's status.
MOC_EXTERN MSTATUS EAP_getAuthenticationStatus(ubyte *eapSessionHdl, ubyte4 instanceId, eapAuthStatus *authStatus)
Get an EAP session's current authentication status.
MOC_EXTERN MSTATUS EAP_initInstance(ubyte4 *instanceId)
Create and initialize an EAP instance and get its ID.
MOC_EXTERN MSTATUS EAP_setMethodStateDecision(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte methodState, ubyte methodDecision)
Assign (place on the EAP stack) the EAP processing state machine (methodState) and decision (methodDe...
MOC_EXTERN MSTATUS EAP_buildNAK(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte *nakMethods, ubyte4 nakMethodCount, ubyte **eapResponse, ubyte4 *eapRespLen)
Builds a NAK response to send to the authenticator.
MOC_EXTERN MSTATUS EAP_buildExpandedNAK(ubyte *eapSessionHdl, ubyte4 instanceId, eapExpandedMethod_t *expMethods, ubyte expMethodCount, ubyte **eapResponse, ubyte4 *eapRespLen)
Builds a NAK response to send to the authenticator.
MOC_EXTERN MSTATUS EAP_buildExpandedResponse(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte4 expVendorId, ubyte4 expMethodId, ubyte *eapPayload, ubyte4 eapPayloadLen, ubyte **eapResponse, ubyte4 *eapRespLen)
Builds an expanded payload response.
MOC_EXTERN MSTATUS EAP_resetInstanceStats(ubyte4 instanceId)
Reset an EAP instance's global statistics.
MOC_EXTERN MSTATUS EAP_getMtu(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte4 *mtu)
Get the MTU (maximum transmission unit) value.
MOC_EXTERN MSTATUS EAP_ulStartReauth(ubyte *eapSessionHdl, ubyte4 instanceId)
Start reauthorization and timer rescheduling.
MOC_EXTERN MSTATUS EAP_getSessionStats(ubyte *eapSessionHdl, ubyte4 instanceId, eapSessionStats_t *eapStats)
Get an EAP session's statistics.
MOC_EXTERN MSTATUS EAP_shutdown(void)
Clean up memory and mutexes and shut down the EAP stack.
MOC_EXTERN MSTATUS EAP_deleteInstance(ubyte4 instanceId)
Delete an EAP instance.
MOC_EXTERN MSTATUS EAP_sessionDelete(ubyte *eapSessionHdl, ubyte4 instanceId)
Delete an EAP session.
MOC_EXTERN MSTATUS EAP_checkTimers(ubyte4 instanceId)
Call expired timers' callbacks.
MOC_EXTERN MSTATUS EAP_sessionEnable(ubyte *eapSessionHdl, ubyte4 instanceId)
Enable an EAP session.
MOC_EXTERN MSTATUS EAP_resetSessionStats(ubyte *eapSessionHdl, ubyte4 instanceId)
Reset an EAP session's statistics.
MOC_EXTERN MSTATUS EAP_setId_Type(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte id, ubyte type)
Set identifier and type to the last sent identifier and the EAP packet type.
eapMethodType method_type
Method type, such as LEAP or PEAP, that these settings and callback pointers are for.
Definition: eap.h:120
MOC_EXTERN MSTATUS EAP_setIdentity(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte *identity, ubyte4 len)
Set an EAP session's identity string.
MOC_EXTERN MSTATUS EAP_ulTransmit(ubyte *eapSessionHdl, ubyte4 instanceId, eapMethodType method_type, eapCode code, eapMethodDecision methodDecision, eapMethodState methodState, ubyte *eap_data, ubyte4 eap_data_len)
Pass a packet from the upper (method) layer to the EAP stack.
MOC_EXTERN MSTATUS EAP_sessionCreate(ubyte *appSessionHandle, ubyte4 instanceId, eapMethodDef_t methodDef, eapSessionConfig_t cfgParam, ubyte **eapSessionHdl)
Create an EAP Session.
Configuration settings and callback function pointers for EAP methods.
Definition: eap.h:112
MOC_EXTERN MSTATUS EAP_sessionModify(ubyte *eapSessionHdl, ubyte4 instanceId, eapMethodDef_t methodDef, eapSessionConfig_t cfgParam, ubyte4 modifiedFlag)
Modify an EAP Session.
MOC_EXTERN MSTATUS EAP_llReceiveIndication(ubyte *eapSessionHdl, ubyte4 instanceId, eapAltIndication altIndication)
Change EAP state machine's EAP_SUCCESS or EAP_FAILURE state.
MOC_EXTERN MSTATUS EAP_getKey(ubyte *eapSessionHdl, ubyte4 instanceId, ubyte **key, ubyte *keylen)
Get an EAP session's authentication key.
MOC_EXTERN MSTATUS EAP_sessionDisable(ubyte *eapSessionHdl, ubyte4 instanceId)
Disable an EAP session.