Home | History | Annotate | Download | only in eap_common
      1 /*
      2  * EAP server/peer: EAP-SAKE shared routines
      3  * Copyright (c) 2006-2007, Jouni Malinen <j (at) w1.fi>
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License version 2 as
      7  * published by the Free Software Foundation.
      8  *
      9  * Alternatively, this software may be distributed under the terms of BSD
     10  * license.
     11  *
     12  * See README and COPYING for more details.
     13  */
     14 
     15 #ifndef EAP_SAKE_COMMON_H
     16 #define EAP_SAKE_COMMON_H
     17 
     18 #define EAP_SAKE_VERSION 2
     19 
     20 #define EAP_SAKE_SUBTYPE_CHALLENGE 1
     21 #define EAP_SAKE_SUBTYPE_CONFIRM 2
     22 #define EAP_SAKE_SUBTYPE_AUTH_REJECT 3
     23 #define EAP_SAKE_SUBTYPE_IDENTITY 4
     24 
     25 #define EAP_SAKE_AT_RAND_S 1
     26 #define EAP_SAKE_AT_RAND_P 2
     27 #define EAP_SAKE_AT_MIC_S 3
     28 #define EAP_SAKE_AT_MIC_P 4
     29 #define EAP_SAKE_AT_SERVERID 5
     30 #define EAP_SAKE_AT_PEERID 6
     31 #define EAP_SAKE_AT_SPI_S 7
     32 #define EAP_SAKE_AT_SPI_P 8
     33 #define EAP_SAKE_AT_ANY_ID_REQ 9
     34 #define EAP_SAKE_AT_PERM_ID_REQ 10
     35 #define EAP_SAKE_AT_ENCR_DATA 128
     36 #define EAP_SAKE_AT_IV 129
     37 #define EAP_SAKE_AT_PADDING 130
     38 #define EAP_SAKE_AT_NEXT_TMPID 131
     39 #define EAP_SAKE_AT_MSK_LIFE 132
     40 
     41 #define EAP_SAKE_RAND_LEN 16
     42 #define EAP_SAKE_MIC_LEN 16
     43 #define EAP_SAKE_ROOT_SECRET_LEN 16
     44 #define EAP_SAKE_SMS_LEN 16
     45 #define EAP_SAKE_TEK_AUTH_LEN 16
     46 #define EAP_SAKE_TEK_CIPHER_LEN 16
     47 #define EAP_SAKE_TEK_LEN (EAP_SAKE_TEK_AUTH_LEN + EAP_SAKE_TEK_CIPHER_LEN)
     48 
     49 #ifdef _MSC_VER
     50 #pragma pack(push, 1)
     51 #endif /* _MSC_VER */
     52 
     53 struct eap_sake_hdr {
     54 	u8 version; /* EAP_SAKE_VERSION */
     55 	u8 session_id;
     56 	u8 subtype;
     57 } STRUCT_PACKED;
     58 
     59 #ifdef _MSC_VER
     60 #pragma pack(pop)
     61 #endif /* _MSC_VER */
     62 
     63 
     64 struct eap_sake_parse_attr {
     65 	const u8 *rand_s;
     66 	const u8 *rand_p;
     67 	const u8 *mic_s;
     68 	const u8 *mic_p;
     69 	const u8 *serverid;
     70 	size_t serverid_len;
     71 	const u8 *peerid;
     72 	size_t peerid_len;
     73 	const u8 *spi_s;
     74 	size_t spi_s_len;
     75 	const u8 *spi_p;
     76 	size_t spi_p_len;
     77 	const u8 *any_id_req;
     78 	const u8 *perm_id_req;
     79 	const u8 *encr_data;
     80 	size_t encr_data_len;
     81 	const u8 *iv;
     82 	size_t iv_len;
     83 	const u8 *next_tmpid;
     84 	size_t next_tmpid_len;
     85 	const u8 *msk_life;
     86 };
     87 
     88 int eap_sake_parse_attributes(const u8 *buf, size_t len,
     89 			      struct eap_sake_parse_attr *attr);
     90 void eap_sake_derive_keys(const u8 *root_secret_a, const u8 *root_secret_b,
     91 			  const u8 *rand_s, const u8 *rand_p,
     92 			  u8 *tek, u8 *msk, u8 *emsk);
     93 int eap_sake_compute_mic(const u8 *tek_auth,
     94 			 const u8 *rand_s, const u8 *rand_p,
     95 			 const u8 *serverid, size_t serverid_len,
     96 			 const u8 *peerid, size_t peerid_len,
     97 			 int peer, const u8 *eap, size_t eap_len,
     98 			 const u8 *mic_pos, u8 *mic);
     99 void eap_sake_add_attr(struct wpabuf *buf, u8 type, const u8 *data,
    100 		       size_t len);
    101 
    102 #endif /* EAP_SAKE_COMMON_H */
    103