eap_sake_common.h 2.4 KB

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