@ -73,6 +73,9 @@ struct eapol_test_data {
struct extra_radius_attr * extra_attrs ;
FILE * server_cert_file ;
const char * pcsc_reader ;
const char * pcsc_pin ;
} ;
static struct eapol_test_data eapol_test ;
@ -954,7 +957,7 @@ static void wpa_init_conf(struct eapol_test_data *e,
}
static int scard_test ( void )
static int scard_test ( struct eapol_test_data * e )
{
struct scard_data * scard ;
size_t len ;
@ -985,10 +988,10 @@ static int scard_test(void)
unsigned char aka_ik [ IK_LEN ] ;
unsigned char aka_ck [ CK_LEN ] ;
scard = scard_init ( NULL ) ;
scard = scard_init ( e - > pcsc_reader ) ;
if ( scard = = NULL )
return - 1 ;
if ( scard_set_pin ( scard , " 1234 " ) ) {
if ( scard_set_pin ( scard , e - > pcsc_pin ) ) {
wpa_printf ( MSG_WARNING , " PIN validation failed " ) ;
scard_deinit ( scard ) ;
return - 1 ;
@ -1063,7 +1066,7 @@ failed:
}
static int scard_get_triplets ( int argc , char * argv [ ] )
static int scard_get_triplets ( struct eapol_test_data * e , int argc , char * argv [ ] )
{
struct scard_data * scard ;
size_t len ;
@ -1085,7 +1088,7 @@ static int scard_get_triplets(int argc, char *argv[])
wpa_debug_level = 99 ;
}
scard = scard_init ( NULL ) ;
scard = scard_init ( e - > pcsc_reader ) ;
if ( scard = = NULL ) {
printf ( " Failed to open smartcard connection \n " ) ;
return - 1 ;
@ -1143,7 +1146,8 @@ static void usage(void)
" [-s<AS secret>] \\ \n "
" [-r<count>] [-t<timeout>] [-C<Connect-Info>] \\ \n "
" [-M<client MAC address>] [-o<server cert file] \\ \n "
" [-N<attr spec>] \\ \n "
" [-N<attr spec>] [-R<PC/SC reader>] "
" [-P<PC/SC PIN>] \\ \n "
" [-A<client IP>] \n "
" eapol_test scard \n "
" eapol_test sim <PIN> <num triplets> [debug] \n "
@ -1208,12 +1212,13 @@ int main(int argc, char *argv[])
os_memset ( & eapol_test , 0 , sizeof ( eapol_test ) ) ;
eapol_test . connect_info = " CONNECT 11Mbps 802.11b " ;
os_memcpy ( eapol_test . own_addr , " \x02 \x00 \x00 \x00 \x00 \x01 " , ETH_ALEN ) ;
eapol_test . pcsc_pin = " 1234 " ;
wpa_debug_level = 0 ;
wpa_debug_show_keys = 1 ;
for ( ; ; ) {
c = getopt ( argc , argv , " a:A:c:C:eM:nN:o:p: r:s:St:W" ) ;
c = getopt ( argc , argv , " a:A:c:C:eM:nN:o:p: P: r:R :s:St:W" ) ;
if ( c < 0 )
break ;
switch ( c ) {
@ -1254,9 +1259,14 @@ int main(int argc, char *argv[])
case ' p ' :
as_port = atoi ( optarg ) ;
break ;
case ' P ' :
eapol_test . pcsc_pin = optarg ;
break ;
case ' r ' :
eapol_test . eapol_test_num_reauths = atoi ( optarg ) ;
break ;
case ' R ' :
eapol_test . pcsc_reader = optarg ;
case ' s ' :
as_secret = optarg ;
break ;
@ -1304,11 +1314,11 @@ int main(int argc, char *argv[])
}
if ( argc > optind & & os_strcmp ( argv [ optind ] , " scard " ) = = 0 ) {
return scard_test ( ) ;
return scard_test ( & eapol_test ) ;
}
if ( argc > optind & & os_strcmp ( argv [ optind ] , " sim " ) = = 0 ) {
return scard_get_triplets ( argc - optind - 1 ,
return scard_get_triplets ( & eapol_test , argc - optind - 1 ,
& argv [ optind + 1 ] ) ;
}
@ -1344,6 +1354,11 @@ int main(int argc, char *argv[])
return - 1 ;
}
if ( eapol_test . pcsc_reader ) {
os_free ( wpa_s . conf - > pcsc_reader ) ;
wpa_s . conf - > pcsc_reader = os_strdup ( eapol_test . pcsc_reader ) ;
}
wpa_init_conf ( & eapol_test , & wpa_s , as_addr , as_port , as_secret ,
cli_addr ) ;
wpa_s . ctrl_iface = wpa_supplicant_ctrl_iface_init ( & wpa_s ) ;