TrustCore SDK NanoSec API reference  version 7.0
eap_fast.h
Go to the documentation of this file.
1 /*
2  * eap_fast.h
3  *
4  * EAP FAST Helper Functions
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
35 #ifndef __EAP_FAST_H__
36 #define __EAP_FAST_H__
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #if (defined(__ENABLE_MOCANA_EAP_PEER__) || defined(__ENABLE_MOCANA_EAP_AUTH__))
43 #if (defined(__ENABLE_MOCANA_EAP_FAST__) || defined(__ENABLE_MOCANA_EAP_PEAPV2__))
44 
45 #define EAP_FAST_LENGTH_INCLUDED_FLAG (0x80)
46 #define EAP_FAST_MORE_FRAGMENTS_FLAG (0x40)
47 #define EAP_FAST_START_FLAG (0x20)
48 #define EAP_FAST_AUTH_ID_TYPE (0x04)
49 
50 
51 /* Result TLV values */
52 #define EAP_FAST_RESULT_TLV_SUCCESS 1
53 #define EAP_FAST_RESULT_TLV_FAILURE 2
54 
55 #define EAP_MAX_USER_LEN (64)
56 #define EAP_MAX_PASS_LEN (64)
57 #define EAP_FAST_PAC_KEY_LENGTH 32
58 
60 typedef enum eap_fast_frag_flag
61 {
62  EAP_FAST_FRAG_FLAG_RECV = 1,
63  EAP_FAST_FRAG_FLAG_SEND
64 
65 } eap_fast_frag_flag_e;
66 
68 typedef enum eap_fast_intermediate_result
69 {
70  EAP_FAST_INTERMEDIATE_SUCCESS = 1,
71  EAP_FAST_INTERMEDIATE_FAILURE
72 
73 } eap_fast_intermediate_result_e;
74 
76 typedef enum eap_fast_eap_state_e
77 {
78  EAP_FAST_EAP_INIT = 0,
79  EAP_FAST_EAP_IDENTITY = 1,
80  EAP_FAST_EAP_METHOD = 2,
81  EAP_FAST_EAP_SUCCESS = 3,
82  EAP_FAST_EAP_FAILURE = 4,
83 
84 } eap_fast_eap_state;
85 
106 typedef struct eap_fast_params
107 {
145  MSTATUS (*ulTransmit)(ubyte * appSessionCB,ubyte * eapPkt,ubyte4 eapPktLen,intBoolean encrypted);
146 
184  MSTATUS (*ul2ndStageReceive)(ubyte *appSessionCB, eapMethodType type,
185  eapCode code, ubyte id,
186  ubyte *eap_data, ubyte4 eap_data_len, ubyte *opaque_data);
187 
214  MSTATUS (*ulGetFastCompoundKey)(ubyte *appSessionCB, ubyte *cmk);
215 
244  MSTATUS (*ulGetPeapV2CompoundKey)(ubyte *appSessionCB, ubyte *cmk, ubyte *s_nonce, ubyte *c_nonce);
245 
279  MSTATUS (*ulAuthResultTransmit)(ubyte * appSessionCB,
280  ubyte cryptoBindingVerified,
281  eapAuthStatus authStatus);
282 
307  MSTATUS (*ulTLSclose)(ubyte * appSessionCB);
308 
313  ubyte version;
314 
325  eapSessionType sessionType; /* (PEER/AUTH) */
326 
332  eapMethodType methodType; /* (FAST/PEAPV2) */
333 
340  sbyte4 connectionInstance; /* TLS COnnection Instance */
341 
349  ubyte *tls_con; /* EAP TLS Connection Instance */
350 
355  ubyte4 instanceId; /* Phase 1 Instance Id */
356 
358 
360 typedef struct eap_fast_pac
361 {
362  ubyte pacKey[EAP_FAST_PAC_KEY_LENGTH];
363  ubyte *a_id;
364  ubyte2 a_idLen;
365  ubyte *i_id;
366  ubyte2 i_idLen;
367  ubyte4 pacLifetime;
368  ubyte *pacOpaque;
369  ubyte4 pacOpaqueLen;
370  ubyte *a_idInfo;
371  ubyte4 a_idInfoLen;
372  ubyte4 pacType;
373 
374 }EAP_FAST_pac_t;
375 
418 MOC_EXTERN MSTATUS
419 EAP_FASTFormSendPacket(void *eapFASTCb,ubyte *pkt, ubyte4 pktLen,
420  ubyte **eapResponse, ubyte4 *eapRespLen);
421 
465 MOC_EXTERN MSTATUS
466 EAP_FASTauthSendCryptoBindingTlv(ubyte *appSessionHdl, ubyte *cmk,ubyte *nonce);
467 
512 MOC_EXTERN MSTATUS
513 EAP_FASTauthSendMethodResult(ubyte *appSessionHdl, ubyte sendCryptoBinding,
514  ubyte *compoundKey, ubyte2 result,ubyte *nonce);
515 
552 MOC_EXTERN MSTATUS
553 EAP_FASTreceiveLLPacket(void * eapFASTCb, ubyte *pkt, ubyte4 pktLen);
554 
587 MOC_EXTERN MSTATUS
588 EAP_FASTdeleteSession(ubyte *eapFASTSession);
589 
626 MOC_EXTERN MSTATUS
627 EAP_FASTinitSession(ubyte *appSessionCB, ubyte **eapFASTSession,
628  EAP_FAST_params *eapFASTparams);
629 
631 MOC_EXTERN MSTATUS
632 EAP_FASTAuthInit(ubyte *eapCb);
633 
666 MOC_EXTERN MSTATUS
667 EAP_FASTAuthInit2(ubyte *eapCb);
668 
700 MOC_EXTERN MSTATUS
701 EAP_FASTulAuthSessionDelete(ubyte *eapFASTCb);
702 
734 MOC_EXTERN MSTATUS
735 EAP_FASTPeerGetSessionHdl(ubyte *eapCb, ubyte **eapSessionHdl);
736 
770 MOC_EXTERN MSTATUS
771 EAP_FASTAuthGetSessionHdl(ubyte *eapCb, ubyte **eapAuthSessionHdl);
772 
774 MOC_EXTERN MSTATUS
775 eap_FASTPeerInit(ubyte *eapCb);
776 
813 MOC_EXTERN MSTATUS
814 EAP_FASTEncapEAPPkt(ubyte *eapFastCb, ubyte *eapPkt, ubyte4 eapPktLen);
815 
851 MOC_EXTERN MSTATUS
852 EAP_FASTgetTLVEncapEAPPkt(ubyte *eapPkt, ubyte4 eapPktLen,ubyte **response,ubyte4 *responseLen);
853 
888 MOC_EXTERN MSTATUS
889 EAP_FASTProcessTLV(ubyte *fastHdl, ubyte *pPkt, ubyte4 pktLen);
890 
919 MOC_EXTERN MSTATUS
920 EAP_FASTulPeerSessionDelete(ubyte *eapFASTCb);
921 
923 MOC_EXTERN MSTATUS
924 EAP_FASTGetPAC(ubyte *eapFASTCb, EAP_FAST_pac_t **pac);
925 
963 MOC_EXTERN MSTATUS
964 EAP_FASTauthSendPAC_ResultTlv(ubyte *eapFastSessionHdl, EAP_FAST_pac_t *pac);
965 
1009 MOC_EXTERN MSTATUS
1010 EAP_FASTulPeerTransmit (ubyte *eapSessionHdl,
1011  ubyte4 instanceId,
1012  eapMethodType methodType,
1013  eapCode code,
1014  eapMethodDecision methodDecision,
1015  eapMethodState methodState,
1016  ubyte * eap_data,
1017  ubyte4 eap_data_len);
1018 
1069 MOC_EXTERN MSTATUS
1070 EAP_FASTulAuthTransmit (ubyte *eapSessionHdl,
1071  ubyte4 instanceId,
1072  eapMethodType methodType,
1073  eapCode code,
1074  eapMethodDecision methodDecision,
1075  eapMethodState methodState,
1076  ubyte * eap_data,
1077  ubyte4 eap_data_len);
1078 
1080 MOC_EXTERN MSTATUS
1081 EAP_FASTauthGetCryptoBindingStatus(ubyte *eapFastSessionHdl,
1082  ubyte *bindingStatus);
1083 
1120 MOC_EXTERN MSTATUS
1121 EAP_FASTgetAuthId(ubyte *pkt, ubyte4 pktLen, ubyte **authId, ubyte2 *authIdLen);
1122 
1168 MOC_EXTERN MSTATUS
1169 EAP_FASTbuildAuthId(ubyte flags, ubyte *authId, ubyte2 authIdLen,
1170  ubyte **eapReqData, ubyte4 *eapReqLen);
1171 
1172 #endif /* ((defined(__ENABLE_MOCANA_EAP_FAST__) */
1173 #endif /* ((defined(__ENABLE_MOCANA_EAP_PEER__) || defined(__ENABLE_MOCANA_EAP_AUTH__)) */
1174 #ifdef __cplusplus
1175 }
1176 #endif
1177 #endif /* __EAP_FAST_H__ */
MOC_EXTERN MSTATUS EAP_FASTinitSession(ubyte *appSessionCB, ubyte **eapFASTSession, EAP_FAST_params *eapFASTparams)
Create and initialize an EAP-FAST session.
MOC_EXTERN MSTATUS EAP_FASTauthSendMethodResult(ubyte *appSessionHdl, ubyte sendCryptoBinding, ubyte *compoundKey, ubyte2 result, ubyte *nonce)
Buld a Method Result packet.
MOC_EXTERN MSTATUS EAP_FASTulPeerTransmit(ubyte *eapSessionHdl, ubyte4 instanceId, eapMethodType methodType, eapCode code, eapMethodDecision methodDecision, eapMethodState methodState, ubyte *eap_data, ubyte4 eap_data_len)
Transmit packets from peer to authenticator during second stage negotiation.
MOC_EXTERN MSTATUS EAP_FASTulAuthTransmit(ubyte *eapSessionHdl, ubyte4 instanceId, eapMethodType methodType, eapCode code, eapMethodDecision methodDecision, eapMethodState methodState, ubyte *eap_data, ubyte4 eap_data_len)
Transmit packets from authenticator to peer during second stage negotiation.
MOC_EXTERN MSTATUS EAP_FASTgetTLVEncapEAPPkt(ubyte *eapPkt, ubyte4 eapPktLen, ubyte **response, ubyte4 *responseLen)
Encapsulate an EAP packet into an EAP payload TLV packet.
MOC_EXTERN MSTATUS EAP_FASTPeerGetSessionHdl(ubyte *eapCb, ubyte **eapSessionHdl)
Get an EAP-FAST session's second stage EAP session handle.
ubyte4 instanceId
Phase 1 instance ID.
Definition: eap_fast.h:355
eapSessionType sessionType
Type of session: EAP_SESSION_TYPE_PEER or EAP_SESSION_TYPE_AUTHENTICATOR.
Definition: eap_fast.h:325
eapMethodType methodType
Method type used by a peer.
Definition: eap_fast.h:332
MOC_EXTERN MSTATUS EAP_FASTProcessTLV(ubyte *fastHdl, ubyte *pPkt, ubyte4 pktLen)
Process a decrypted EAP packet's TLVs.
MOC_EXTERN MSTATUS EAP_FASTEncapEAPPkt(ubyte *eapFastCb, ubyte *eapPkt, ubyte4 eapPktLen)
Build an EAP payload TLV from an input second stage EAP packet and then pass the packet to the first ...
sbyte4 connectionInstance
TLS connection's session ID.
Definition: eap_fast.h:340
MOC_EXTERN MSTATUS EAP_FASTAuthInit2(ubyte *eapCb)
Send an Identity request to the peer.
MOC_EXTERN MSTATUS EAP_FASTbuildAuthId(ubyte flags, ubyte *authId, ubyte2 authIdLen, ubyte **eapReqData, ubyte4 *eapReqLen)
Build an Authority ID Requeest packet.
Configuration settings and callback function pointers for EAP-FAST sessions.
Definition: eap_fast.h:106
ubyte * tls_con
EAP_TLS connection control block.
Definition: eap_fast.h:349
MOC_EXTERN MSTATUS EAP_FASTgetAuthId(ubyte *pkt, ubyte4 pktLen, ubyte **authId, ubyte2 *authIdLen)
Extract the authority ID (if any) from an EAP-FAST packet.
MOC_EXTERN MSTATUS EAP_FASTulAuthSessionDelete(ubyte *eapFASTCb)
Delete an EAP-FAST authenticator second stage stack.
MOC_EXTERN MSTATUS EAP_FASTulPeerSessionDelete(ubyte *eapFASTCb)
Delete an EAP-FAST peer second stage stack.
MOC_EXTERN MSTATUS EAP_FASTauthSendPAC_ResultTlv(ubyte *eapFastSessionHdl, EAP_FAST_pac_t *pac)
Transmits Result and PAC Provisioning TLVs to the peer.
ubyte version
EAP-FAST version.
Definition: eap_fast.h:313
MOC_EXTERN MSTATUS EAP_FASTauthSendCryptoBindingTlv(ubyte *appSessionHdl, ubyte *cmk, ubyte *nonce)
Transmits Result and crypto binding TLVs to the peer.
MOC_EXTERN MSTATUS EAP_FASTFormSendPacket(void *eapFASTCb, ubyte *pkt, ubyte4 pktLen, ubyte **eapResponse, ubyte4 *eapRespLen)
Build an EAP-FAST packet from the specified encrypted second stage payload.
MOC_EXTERN MSTATUS EAP_FASTAuthGetSessionHdl(ubyte *eapCb, ubyte **eapAuthSessionHdl)
Get an EAP-FAST session's second stage EAP session handle.
MOC_EXTERN MSTATUS EAP_FASTreceiveLLPacket(void *eapFASTCb, ubyte *pkt, ubyte4 pktLen)
Process a packet's TLVs, managing fragmentation, and send the packet on for second stage negotiation...
MOC_EXTERN MSTATUS EAP_FASTdeleteSession(ubyte *eapFASTSession)
Delete a second stage EAP-FAST session.