Mercurial > hg > freeDiameter
annotate extensions/app_diameap/plugins/eap_tls/eap_tls.c @ 1027:0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Mon, 15 Apr 2013 15:17:07 +0800 |
parents | 034a475a3eb0 |
children |
rev | line source |
---|---|
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
1 /***************************************************************************************************** |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
2 * Software License Agreement (BSD License) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
3 * Author : Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp> |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
4 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
5 * Copyright (c) 2009-2010, Souheil Ben Ayed, Teraoka Laboratory of Keio University, and the WIDE Project |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
6 * All rights reserved. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
7 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
8 * Redistribution and use of this software in source and binary forms, with or without |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
9 * modification, are permitted provided that the following conditions are met: |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
10 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
11 * 1. Redistributions of source code must retain the above copyright |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
12 * notice, this list of conditions and the following disclaimer. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
13 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
14 * 2. Redistributions in binary form must reproduce the above copyright |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
15 * notice, this list of conditions and the following disclaimer in the |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
16 * documentation and/or other materials provided with the distribution. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
17 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
18 * 3. All advertising materials mentioning features or use of this software |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
19 * must display the following acknowledgement: |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
20 * This product includes software developed by Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
21 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
22 * 4. Neither the name of Souheil Ben Ayed, Teraoka Laboratory of Keio University or the WIDE Project nor the |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
23 * names of its contributors may be used to endorse or promote products |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
24 * derived from this software without specific prior written permission. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
25 * |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND ANY |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
27 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
28 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
30 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
31 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
33 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
35 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
36 *****************************************************************************************************/ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
37 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
38 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
39 #include "eap_tls.h" |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
40 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
41 int eap_tls_configure(char * configfile); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
42 int eap_tls_init(struct eap_state_machine *smd); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
43 int eap_tls_initPickUp(struct eap_state_machine *smd); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
44 int eap_tls_buildReq(struct eap_state_machine *smd, u8 eap_md5, |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
45 struct eap_packet * eapPacket); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
46 int eap_tls_getTimeout(struct eap_state_machine *smd, int * timeout); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
47 boolean eap_tls_check(struct eap_state_machine *smd, |
1027
0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents:
825
diff
changeset
|
48 struct eap_packet *eapRespData); |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
49 int eap_tls_process(struct eap_state_machine *smd, |
1027
0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents:
825
diff
changeset
|
50 struct eap_packet *eapRespData); |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
51 boolean eap_tls_isDone(struct eap_state_machine *smd); |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
52 int eap_tls_getKey(struct eap_state_machine *smd, u8** msk, int * msklen, u8** emsk, int * emsklen); |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
53 void eap_tls_unregister(void); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
54 void eap_tls_free(void * data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
55 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
56 REGISTER_METHOD("eap_tls", "eap_tls_configure", "eap_tls_init", "eap_tls_initPickUp", "eap_tls_buildReq", "eap_tls_getTimeout", "eap_tls_check", "eap_tls_process", "eap_tls_isDone", "eap_tls_getKey", "eap_tls_unregister", "eap_tls_free") |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
57 ; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
58 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
59 int eap_tls_configure(char * configfile) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
60 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
61 int ret; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
62 extern FILE * eaptlsin; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
63 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
64 if (configfile) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
65 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
66 tls_global_conf.conffile = configfile; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
67 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
68 tls_global_conf.certfile = NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
69 tls_global_conf.keyfile = NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
70 tls_global_conf.cafile = NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
71 tls_global_conf.crlfile = NULL; |
565
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
72 tls_global_conf.check_cert_cn_username = FALSE; |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
73 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
74 /*Parse EAP TLS configuration file */ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
75 eaptlsin = fopen(tls_global_conf.conffile, "r"); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
76 if (!eaptlsin) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
77 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
78 TRACE_DEBUG(INFO,"%s[EAP TLS plugin] Unable to open configuration file %s for reading: %s",DIAMEAP_EXTENSION, tls_global_conf.conffile, strerror(errno)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
79 return errno; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
80 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
81 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
82 /* call yacc parser */ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
83 CHECK_FCT(eaptlsparse(&tls_global_conf)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
84 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
85 |
825
034a475a3eb0
Change fragmentation threshold for EAP-TLS payload
Sebastien Decugis <sdecugis@freediameter.net>
parents:
610
diff
changeset
|
86 tls_global_conf.max_size = 64*1024 /* As per RFC 5216 recommendation */; |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
87 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
88 /* Initializing GnuTLS library */ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
89 ret = diameap_tls_init(&tls_global_conf); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
90 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
91 return ret; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
92 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
93 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
94 int eap_tls_init(struct eap_state_machine *smd) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
95 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
96 int ret; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
97 struct tls_data *data = NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
98 CHECK_MALLOC(data = malloc(sizeof(struct tls_data))); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
99 memset(data, 0, sizeof(struct tls_data)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
100 CHECK_FCT(diameap_tls_initialize(data)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
101 ret = diameap_tls_init_session(&tls_global_conf, data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
102 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
103 smd->methodData = (struct tls_data*) data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
104 if (ret < 0) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
105 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
106 return ret; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
107 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
108 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
109 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
110 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
111 int eap_tls_initPickUp(struct eap_state_machine *smd) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
112 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
113 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
114 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
115 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
116 int eap_tls_buildReq(struct eap_state_machine *smd, u8 id, |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
117 struct eap_packet * eapPacket) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
118 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
119 struct tls_data * data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
120 data = (struct tls_data *) smd->methodData; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
121 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
122 if (data->more_toreceive == TRUE) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
123 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
124 CHECK_FCT(diameap_eap_tls_buildReq_ack(id,eapPacket)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
125 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
126 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
127 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
128 if (data->state == START) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
129 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
130 CHECK_FCT(diameap_eap_tls_buildReq_start(id,eapPacket)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
131 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
132 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
133 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
134 if (data->state == CONTINUE) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
135 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
136 diameap_eap_tls_buildReq_data(data, id, eapPacket); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
137 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
138 smd->methodData = (struct tls_data*) data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
139 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
140 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
141 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
142 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
143 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
144 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
145 int eap_tls_getTimeout(struct eap_state_machine *smd, int * timeout) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
146 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
147 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
148 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
149 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
150 boolean eap_tls_check(struct eap_state_machine *smd, |
1027
0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents:
825
diff
changeset
|
151 struct eap_packet *eapRespData) |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
152 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
153 eap_type type; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
154 if(diameap_eap_get_type(eapRespData,&type)!=0){ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
155 goto cf; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
156 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
157 if (type == TYPE_EAP_TLS) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
158 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
159 return TRUE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
160 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
161 cf: |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
162 TRACE_DEBUG(INFO,"%s[EAP TLS plugin] EAP-TLS check failed: Received EAP packet with different EAP-Type (Type = %d)",DIAMEAP_EXTENSION, type); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
163 return FALSE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
164 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
165 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
166 int eap_tls_process(struct eap_state_machine *smd, |
1027
0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents:
825
diff
changeset
|
167 struct eap_packet *eapRespData) |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
168 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
169 struct tls_data * data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
170 data = (struct tls_data *) smd->methodData; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
171 struct tls_msg tlsmsg; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
172 CHECK_FCT(diameap_eap_tls_parse(&tlsmsg,eapRespData)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
173 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
174 if ((tlsmsg.datalength == 0)) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
175 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
176 if (data->more_tosend_length > 0) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
177 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
178 //ACK and more to send |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
179 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
180 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
181 else |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
182 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
183 //Success |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
184 if (data->handshake == TRUE) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
185 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
186 data->state = SUCCESS; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
187 smd->user.success = TRUE; |
565
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
188 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
189 if(tls_global_conf.check_cert_cn_username == TRUE){ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
190 unsigned int list_size; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
191 const gnutls_datum_t * list = gnutls_certificate_get_peers (data->session, &list_size); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
192 if(list_size<1){ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
193 goto failure; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
194 } |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
195 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
196 gnutls_x509_crt_t cert; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
197 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
198 CHECK_GNUTLS_DO(gnutls_x509_crt_init(&cert),{ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
199 TRACE_DEBUG(NONE,"%s[EAP TLS plugin] [GnuTLS] error in initialization crt init",DIAMEAP_EXTENSION); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
200 goto failure;}); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
201 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
202 CHECK_GNUTLS_DO(gnutls_x509_crt_import(cert, &list[0], GNUTLS_X509_FMT_DER), { |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
203 TRACE_DEBUG(NONE,"%s[EAP TLS plugin] [GnuTLS] error parsing certificate",DIAMEAP_EXTENSION); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
204 goto failure;}); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
205 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
206 void * buff; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
207 size_t size_buffer; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
208 int ret; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
209 ret = gnutls_x509_crt_get_dn_by_oid(cert,GNUTLS_OID_X520_COMMON_NAME,0,0,NULL,&size_buffer); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
210 if( ret != GNUTLS_E_SHORT_MEMORY_BUFFER){ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
211 CHECK_GNUTLS_DO(ret,{ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
212 TRACE_DEBUG(NONE,"%s[EAP TLS plugin] [GnuTLS] error get dn by oid",DIAMEAP_EXTENSION); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
213 goto failure;}); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
214 } |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
215 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
216 CHECK_MALLOC_DO(buff=malloc(size_buffer), goto failure); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
217 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
218 CHECK_GNUTLS_DO(gnutls_x509_crt_get_dn_by_oid(cert,GNUTLS_OID_X520_COMMON_NAME,0,0,buff,&size_buffer),{ |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
219 TRACE_DEBUG(NONE,"%s[EAP TLS plugin] [GnuTLS] error get dn by oid",DIAMEAP_EXTENSION); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
220 goto failure;}); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
221 |
577
9dae8bc2d04a
Fix user name verification in EAP-TLS plugin
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
565
diff
changeset
|
222 if(strncmp((char *)smd->user.userid,buff,smd->user.useridLength)!=0){ |
565
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
223 goto failure; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
224 } |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
225 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
226 gnutls_x509_crt_deinit(cert); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
227 goto next; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
228 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
229 failure: |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
230 TRACE_DEBUG(NONE,"%s[EAP TLS plugin] Checking failed. certificate's CN does not match User_Name AVP value.",DIAMEAP_EXTENSION); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
231 data->state = FAILURE; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
232 smd->user.success = FALSE; |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
233 gnutls_x509_crt_deinit(cert); |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
234 } |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
235 |
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
236 next: |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
237 smd->methodData = (struct tls_data*) data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
238 return 0; |
565
64e55fc10ab3
added configuration parameters for DiamEAP and EAP-TLS
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
425
diff
changeset
|
239 |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
240 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
241 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
242 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
243 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
244 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
245 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
246 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
247 if (data->more_toreceive == TRUE) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
248 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
249 //reassemble received fragment to TLS Response |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
250 CHECK_FCT(diameap_tls_reassemble(&data->tlsResp,tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
251 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
252 else |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
253 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
254 //receive the first fragment or a complete TLS message |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
255 CHECK_FCT(diameap_tls_copy(&data->tlsResp,tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
256 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
257 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
258 if (tlsmsg.flags & TLS_FLAG_MORE) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
259 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
260 data->more_toreceive = TRUE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
261 smd->methodData = (struct tls_data*) data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
262 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
263 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
264 else |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
265 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
266 //last fragment received |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
267 data->more_toreceive = FALSE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
268 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
269 data->state = CONTINUE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
270 diameap_tls_process_receive(data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
271 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
272 if (data->state == SUCCESS) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
273 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
274 smd->user.success = TRUE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
275 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
276 smd->methodData = (struct tls_data*) data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
277 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
278 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
279 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
280 boolean eap_tls_isDone(struct eap_state_machine *smd) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
281 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
282 struct tls_data * data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
283 data = (struct tls_data *) smd->methodData; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
284 if (data->state == CONTINUE || data->state == START) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
285 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
286 return FALSE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
287 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
288 return TRUE; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
289 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
290 |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
291 int eap_tls_getKey(struct eap_state_machine *smd, u8 ** msk, int *msklen, u8 ** emsk, int *emsklen) |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
292 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
293 struct tls_data * data; |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
294 int len = emsk ? 128 : 64; |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
295 data = (struct tls_data *) smd->methodData; |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
296 *msk = malloc(len); |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
297 if (gnutls_prf(data->session, strlen("client EAP encryption"), |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
298 "client EAP encryption", 0, 0, NULL, len, (char *) *msk) |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
299 != GNUTLS_E_SUCCESS) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
300 { |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
301 free(*msk); |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
302 *msk = NULL; |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
303 *msklen = 0; |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
304 return 1; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
305 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
306 else |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
307 { |
610
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
308 *msklen = 64; |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
309 } |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
310 if (emsk) { |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
311 *emsk = malloc(64); |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
312 memcpy(*emsk, (*msk)+64, 64); |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
313 memset((*msk)+64, 0, 64); |
a137913d9f88
Added ability to extract the Extended MSK (EMSK) for future use
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
577
diff
changeset
|
314 *emsklen = 64; |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
315 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
316 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
317 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
318 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
319 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
320 void eap_tls_unregister(void) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
321 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
322 // |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
323 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
324 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
325 void eap_tls_free(void * mdata) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
326 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
327 struct tls_data *data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
328 data = (struct tls_data*) mdata; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
329 gnutls_deinit(data->session); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
330 if(data->tlsReq.data){ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
331 free(data->tlsReq.data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
332 data->tlsReq.data=NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
333 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
334 if(data->tlsResp.data){ |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
335 free(data->tlsResp.data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
336 data->tlsResp.data=NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
337 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
338 free(data); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
339 data=NULL; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
340 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
341 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
342 //send TLS ACK Request (empty TLS msg) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
343 int diameap_eap_tls_buildReq_ack(u8 id, struct eap_packet * eapPacket) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
344 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
345 u8* payload; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
346 struct tls_msg tlsmsg; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
347 int len; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
348 CHECK_FCT(diameap_tls_new(&tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
349 CHECK_FCT(diameap_tls_new_tls_packet(&payload,&len,tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
350 CHECK_FCT(diameap_eap_new(EAP_REQUEST,id,TYPE_EAP_TLS,payload,len,eapPacket)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
351 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
352 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
353 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
354 // parse EAP TLS msg |
1027
0117a7746b21
Fix a number of errors and warnings introduced/highlighted by recent commits
Sebastien Decugis <sdecugis@freediameter.net>
parents:
825
diff
changeset
|
355 int diameap_eap_tls_parse(struct tls_msg * tlsmsg, struct eap_packet *eapPacket) |
425
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
356 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
357 u8 *datatls; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
358 int len; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
359 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
360 //initialize a new empty EAP TLS msg |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
361 diameap_tls_new(tlsmsg); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
362 //retrieve the data field from EAP Packet |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
363 diameap_eap_get_data(eapPacket, &datatls, &len); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
364 //parse EAP TLS msg |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
365 diameap_tls_parse(datatls, len, tlsmsg); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
366 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
367 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
368 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
369 int diameap_eap_tls_buildReq_start(u8 id, struct eap_packet * eapPacket) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
370 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
371 u8* payload; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
372 struct tls_msg tlsmsg; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
373 int len; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
374 CHECK_FCT(diameap_tls_new(&tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
375 CHECK_FCT(diameap_tls_set_flags(&tlsmsg,TLS_FLAG_START)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
376 CHECK_FCT(diameap_tls_new_tls_packet(&payload,&len,tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
377 CHECK_FCT(diameap_eap_new(EAP_REQUEST,id,TYPE_EAP_TLS,payload,len,eapPacket)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
378 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
379 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
380 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
381 int diameap_eap_tls_buildReq_data(struct tls_data * data, int id, |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
382 struct eap_packet * eapPacket) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
383 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
384 struct tls_msg tlsmsg; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
385 u8* datatosend; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
386 u8 * eaptls_data; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
387 int length = 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
388 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
389 diameap_tls_new(&tlsmsg); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
390 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
391 if (data->more_tosend_length == 0) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
392 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
393 //First fragment of message or the only fragment of message |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
394 data->more_tosend_length = data->tlsReq.datalength; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
395 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
396 if (data->more_tosend_length > tls_global_conf.max_size) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
397 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
398 //New fragment of message. Is not the last fragment. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
399 length = tls_global_conf.max_size; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
400 CHECK_FCT(diameap_tls_set_flags(&tlsmsg,TLS_FLAG_MORE)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
401 if (data->more_tosend_length == data->tlsReq.datalength) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
402 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
403 //The first fragment of message |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
404 CHECK_FCT(diameap_tls_set_message_length(&tlsmsg,data->tlsReq.datalength));//set L flag and length value |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
405 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
406 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
407 else |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
408 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
409 //The last fragment or the only fragment. |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
410 length = data->more_tosend_length; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
411 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
412 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
413 datatosend = malloc(sizeof(u8) * length); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
414 U8COPY(datatosend,0,length,data->tlsReq.data+(data->tlsReq.datalength-data->more_tosend_length)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
415 data->more_tosend_length -= length; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
416 CHECK_FCT(diameap_tls_set_data(&tlsmsg,datatosend,length)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
417 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
418 CHECK_FCT(diameap_tls_new_tls_packet(&eaptls_data,&length,tlsmsg)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
419 CHECK_FCT(diameap_eap_new(EAP_REQUEST,id,TYPE_EAP_TLS,eaptls_data,length,eapPacket)); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
420 |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
421 if (data->more_tosend_length == 0) |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
422 { |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
423 diameap_tls_new(&data->tlsReq); |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
424 } |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
425 return 0; |
0c6e50a5291d
New app_diameap Diameter EAP Application
Souheil Ben Ayed <souheil@tera.ics.keio.ac.jp>
parents:
diff
changeset
|
426 } |