Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 104 lines (88 sloc) 2.614 kb
845e012 auto import from //depot/cupcake/@135843
The Android Open Source Project authored
1 /*
2 * EAP server/peer: EAP-PSK shared routines
3 * Copyright (c) 2004-2006, Jouni Malinen <j@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_PSK_COMMON_H
16 #define EAP_PSK_COMMON_H
17
18
19 #define EAP_PSK_RAND_LEN 16
20 #define EAP_PSK_MAC_LEN 16
21 #define EAP_PSK_TEK_LEN 16
22 #define EAP_PSK_PSK_LEN 16
23 #define EAP_PSK_AK_LEN 16
24 #define EAP_PSK_KDK_LEN 16
25
26 #define EAP_PSK_R_FLAG_CONT 1
27 #define EAP_PSK_R_FLAG_DONE_SUCCESS 2
28 #define EAP_PSK_R_FLAG_DONE_FAILURE 3
29 #define EAP_PSK_E_FLAG 0x20
30
31 #define EAP_PSK_FLAGS_GET_T(flags) (((flags) & 0xc0) >> 6)
32 #define EAP_PSK_FLAGS_SET_T(t) ((u8) (t) << 6)
33
34 #ifdef _MSC_VER
35 #pragma pack(push, 1)
36 #endif /* _MSC_VER */
37
38 /* Shared prefix for all EAP-PSK frames */
39 struct eap_psk_hdr {
40 u8 code;
41 u8 identifier;
42 u16 length; /* including code, identifier, and length */
43 u8 type; /* EAP_TYPE_PSK */
44 u8 flags;
45 } STRUCT_PACKED;
46
47 /* EAP-PSK First Message (AS -> Supplicant) */
48 struct eap_psk_hdr_1 {
49 u8 code;
50 u8 identifier;
51 u16 length; /* including code, identifier, and length */
52 u8 type; /* EAP_TYPE_PSK */
53 u8 flags;
54 u8 rand_s[EAP_PSK_RAND_LEN];
55 /* Followed by variable length ID_S */
56 } STRUCT_PACKED;
57
58 /* EAP-PSK Second Message (Supplicant -> AS) */
59 struct eap_psk_hdr_2 {
60 u8 code;
61 u8 identifier;
62 u16 length; /* including code, identifier, and length */
63 u8 type; /* EAP_TYPE_PSK */
64 u8 flags;
65 u8 rand_s[EAP_PSK_RAND_LEN];
66 u8 rand_p[EAP_PSK_RAND_LEN];
67 u8 mac_p[EAP_PSK_MAC_LEN];
68 /* Followed by variable length ID_P */
69 } STRUCT_PACKED;
70
71 /* EAP-PSK Third Message (AS -> Supplicant) */
72 struct eap_psk_hdr_3 {
73 u8 code;
74 u8 identifier;
75 u16 length; /* including code, identifier, and length */
76 u8 type; /* EAP_TYPE_PSK */
77 u8 flags;
78 u8 rand_s[EAP_PSK_RAND_LEN];
79 u8 mac_s[EAP_PSK_MAC_LEN];
80 /* Followed by variable length PCHANNEL */
81 } STRUCT_PACKED;
82
83 /* EAP-PSK Fourth Message (Supplicant -> AS) */
84 struct eap_psk_hdr_4 {
85 u8 code;
86 u8 identifier;
87 u16 length; /* including code, identifier, and length */
88 u8 type; /* EAP_TYPE_PSK */
89 u8 flags;
90 u8 rand_s[EAP_PSK_RAND_LEN];
91 /* Followed by variable length PCHANNEL */
92 } STRUCT_PACKED;
93
94 #ifdef _MSC_VER
95 #pragma pack(pop)
96 #endif /* _MSC_VER */
97
98
99 void eap_psk_key_setup(const u8 *psk, u8 *ak, u8 *kdk);
100 void eap_psk_derive_keys(const u8 *kdk, const u8 *rand_p, u8 *tek, u8 *msk,
101 u8 *emsk);
102
103 #endif /* EAP_PSK_COMMON_H */
Something went wrong with that request. Please try again.