eap_sake_common.h revision 8d520ff1dc2da35cdca849e982051b86468016d8
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAP server/peer: EAP-SAKE shared routines 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2006-2007, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This program is free software; you can redistribute it and/or modify 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * it under the terms of the GNU General Public License version 2 as 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * published by the Free Software Foundation. 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license. 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * See README and COPYING for more details. 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef EAP_SAKE_COMMON_H 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_COMMON_H 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_VERSION 2 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_SUBTYPE_CHALLENGE 1 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_SUBTYPE_CONFIRM 2 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_SUBTYPE_AUTH_REJECT 3 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_SUBTYPE_IDENTITY 4 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_RAND_S 1 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_RAND_P 2 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_MIC_S 3 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_MIC_P 4 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_SERVERID 5 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_PEERID 6 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_SPI_S 7 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_SPI_P 8 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_ANY_ID_REQ 9 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_PERM_ID_REQ 10 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_ENCR_DATA 128 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_IV 129 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_PADDING 130 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_NEXT_TMPID 131 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_AT_MSK_LIFE 132 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_RAND_LEN 16 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_MIC_LEN 16 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_ROOT_SECRET_LEN 16 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_SMS_LEN 16 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_TEK_AUTH_LEN 16 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_TEK_CIPHER_LEN 16 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_SAKE_TEK_LEN (EAP_SAKE_TEK_AUTH_LEN + EAP_SAKE_TEK_CIPHER_LEN) 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(push, 1) 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_sake_hdr { 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 version; /* EAP_SAKE_VERSION */ 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 session_id; 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 subtype; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(pop) 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_sake_parse_attr { 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *rand_s; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *rand_p; 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mic_s; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mic_p; 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *serverid; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t serverid_len; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peerid; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t peerid_len; 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *spi_s; 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t spi_s_len; 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *spi_p; 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t spi_p_len; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *any_id_req; 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *perm_id_req; 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *encr_data; 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t encr_data_len; 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *iv; 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t iv_len; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *next_tmpid; 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t next_tmpid_len; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *msk_life; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eap_sake_parse_attributes(const u8 *buf, size_t len, 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eap_sake_parse_attr *attr); 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eap_sake_derive_keys(const u8 *root_secret_a, const u8 *root_secret_b, 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *rand_s, const u8 *rand_p, 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *tek, u8 *msk, u8 *emsk); 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint eap_sake_compute_mic(const u8 *tek_auth, 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *rand_s, const u8 *rand_p, 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *serverid, size_t serverid_len, 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peerid, size_t peerid_len, 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int peer, const u8 *eap, size_t eap_len, 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mic_pos, u8 *mic); 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid eap_sake_add_attr(struct wpabuf *buf, u8 type, const u8 *data, 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len); 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* EAP_SAKE_COMMON_H */ 103