eap_sake_common.h revision 302408
190792Sgshapiro/* 2261363Sgshapiro * EAP server/peer: EAP-SAKE shared routines 390792Sgshapiro * Copyright (c) 2006-2007, Jouni Malinen <j@w1.fi> 490792Sgshapiro * 590792Sgshapiro * This software may be distributed under the terms of the BSD license. 690792Sgshapiro * See README for more details. 790792Sgshapiro */ 890792Sgshapiro 990792Sgshapiro#ifndef EAP_SAKE_COMMON_H 1090792Sgshapiro#define EAP_SAKE_COMMON_H 1190792Sgshapiro 1290792Sgshapiro#define EAP_SAKE_VERSION 2 1390792Sgshapiro 1490792Sgshapiro#define EAP_SAKE_SUBTYPE_CHALLENGE 1 1590792Sgshapiro#define EAP_SAKE_SUBTYPE_CONFIRM 2 16266692Sgshapiro#define EAP_SAKE_SUBTYPE_AUTH_REJECT 3 1790792Sgshapiro#define EAP_SAKE_SUBTYPE_IDENTITY 4 1890792Sgshapiro 1990792Sgshapiro#define EAP_SAKE_AT_RAND_S 1 2090792Sgshapiro#define EAP_SAKE_AT_RAND_P 2 2190792Sgshapiro#define EAP_SAKE_AT_MIC_S 3 2290792Sgshapiro#define EAP_SAKE_AT_MIC_P 4 2390792Sgshapiro#define EAP_SAKE_AT_SERVERID 5 2490792Sgshapiro#define EAP_SAKE_AT_PEERID 6 2590792Sgshapiro#define EAP_SAKE_AT_SPI_S 7 2690792Sgshapiro#define EAP_SAKE_AT_SPI_P 8 2790792Sgshapiro#define EAP_SAKE_AT_ANY_ID_REQ 9 2890792Sgshapiro#define EAP_SAKE_AT_PERM_ID_REQ 10 2990792Sgshapiro#define EAP_SAKE_AT_ENCR_DATA 128 3090792Sgshapiro#define EAP_SAKE_AT_IV 129 3190792Sgshapiro#define EAP_SAKE_AT_PADDING 130 3290792Sgshapiro#define EAP_SAKE_AT_NEXT_TMPID 131 3390792Sgshapiro#define EAP_SAKE_AT_MSK_LIFE 132 3490792Sgshapiro 3590792Sgshapiro#define EAP_SAKE_RAND_LEN 16 3690792Sgshapiro#define EAP_SAKE_MIC_LEN 16 3790792Sgshapiro#define EAP_SAKE_ROOT_SECRET_LEN 16 3890792Sgshapiro#define EAP_SAKE_SMS_LEN 16 3990792Sgshapiro#define EAP_SAKE_TEK_AUTH_LEN 16 4090792Sgshapiro#define EAP_SAKE_TEK_CIPHER_LEN 16 4190792Sgshapiro#define EAP_SAKE_TEK_LEN (EAP_SAKE_TEK_AUTH_LEN + EAP_SAKE_TEK_CIPHER_LEN) 4290792Sgshapiro 4390792Sgshapiro#ifdef _MSC_VER 4490792Sgshapiro#pragma pack(push, 1) 4590792Sgshapiro#endif /* _MSC_VER */ 4690792Sgshapiro 4790792Sgshapirostruct eap_sake_hdr { 4890792Sgshapiro u8 version; /* EAP_SAKE_VERSION */ 4990792Sgshapiro u8 session_id; 5090792Sgshapiro u8 subtype; 5190792Sgshapiro} STRUCT_PACKED; 5290792Sgshapiro 5390792Sgshapiro#ifdef _MSC_VER 5490792Sgshapiro#pragma pack(pop) 5590792Sgshapiro#endif /* _MSC_VER */ 5690792Sgshapiro 5790792Sgshapiro 5890792Sgshapirostruct eap_sake_parse_attr { 5990792Sgshapiro const u8 *rand_s; 6090792Sgshapiro const u8 *rand_p; 6190792Sgshapiro const u8 *mic_s; 6290792Sgshapiro const u8 *mic_p; 6390792Sgshapiro const u8 *serverid; 6490792Sgshapiro size_t serverid_len; 6590792Sgshapiro const u8 *peerid; 6690792Sgshapiro size_t peerid_len; 6790792Sgshapiro const u8 *spi_s; 6890792Sgshapiro size_t spi_s_len; 6990792Sgshapiro const u8 *spi_p; 7090792Sgshapiro size_t spi_p_len; 7190792Sgshapiro const u8 *any_id_req; 7290792Sgshapiro const u8 *perm_id_req; 7390792Sgshapiro const u8 *encr_data; 7490792Sgshapiro size_t encr_data_len; 7590792Sgshapiro const u8 *iv; 7690792Sgshapiro size_t iv_len; 7790792Sgshapiro const u8 *next_tmpid; 7890792Sgshapiro size_t next_tmpid_len; 7990792Sgshapiro const u8 *msk_life; 8090792Sgshapiro}; 8190792Sgshapiro 8290792Sgshapiroint eap_sake_parse_attributes(const u8 *buf, size_t len, 8390792Sgshapiro struct eap_sake_parse_attr *attr); 8490792Sgshapirovoid eap_sake_derive_keys(const u8 *root_secret_a, const u8 *root_secret_b, 8590792Sgshapiro const u8 *rand_s, const u8 *rand_p, 8690792Sgshapiro u8 *tek, u8 *msk, u8 *emsk); 8790792Sgshapiroint eap_sake_compute_mic(const u8 *tek_auth, 8890792Sgshapiro const u8 *rand_s, const u8 *rand_p, 89 const u8 *serverid, size_t serverid_len, 90 const u8 *peerid, size_t peerid_len, 91 int peer, const u8 *eap, size_t eap_len, 92 const u8 *mic_pos, u8 *mic); 93void eap_sake_add_attr(struct wpabuf *buf, u8 type, const u8 *data, 94 size_t len); 95 96#endif /* EAP_SAKE_COMMON_H */ 97