diff options
Diffstat (limited to 'src/lib/libssl/src/ssl/ssltest.c')
| -rw-r--r-- | src/lib/libssl/src/ssl/ssltest.c | 224 |
1 files changed, 187 insertions, 37 deletions
diff --git a/src/lib/libssl/src/ssl/ssltest.c b/src/lib/libssl/src/ssl/ssltest.c index b09c542087..abf214ad7f 100644 --- a/src/lib/libssl/src/ssl/ssltest.c +++ b/src/lib/libssl/src/ssl/ssltest.c | |||
| @@ -113,6 +113,32 @@ | |||
| 113 | * ECC cipher suite support in OpenSSL originally developed by | 113 | * ECC cipher suite support in OpenSSL originally developed by |
| 114 | * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. | 114 | * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. |
| 115 | */ | 115 | */ |
| 116 | /* ==================================================================== | ||
| 117 | * Copyright 2005 Nokia. All rights reserved. | ||
| 118 | * | ||
| 119 | * The portions of the attached software ("Contribution") is developed by | ||
| 120 | * Nokia Corporation and is licensed pursuant to the OpenSSL open source | ||
| 121 | * license. | ||
| 122 | * | ||
| 123 | * The Contribution, originally written by Mika Kousa and Pasi Eronen of | ||
| 124 | * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites | ||
| 125 | * support (see RFC 4279) to OpenSSL. | ||
| 126 | * | ||
| 127 | * No patent licenses or other rights except those expressly stated in | ||
| 128 | * the OpenSSL open source license shall be deemed granted or received | ||
| 129 | * expressly, by implication, estoppel, or otherwise. | ||
| 130 | * | ||
| 131 | * No assurances are provided by Nokia that the Contribution does not | ||
| 132 | * infringe the patent or other intellectual property rights of any third | ||
| 133 | * party or that the license provides you with all the necessary rights | ||
| 134 | * to make use of the Contribution. | ||
| 135 | * | ||
| 136 | * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN | ||
| 137 | * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA | ||
| 138 | * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY | ||
| 139 | * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR | ||
| 140 | * OTHERWISE. | ||
| 141 | */ | ||
| 116 | 142 | ||
| 117 | #define _BSD_SOURCE 1 /* Or gethostname won't be declared properly | 143 | #define _BSD_SOURCE 1 /* Or gethostname won't be declared properly |
| 118 | on Linux and GNU platforms. */ | 144 | on Linux and GNU platforms. */ |
| @@ -128,8 +154,11 @@ | |||
| 128 | #define USE_SOCKETS | 154 | #define USE_SOCKETS |
| 129 | #include "e_os.h" | 155 | #include "e_os.h" |
| 130 | 156 | ||
| 157 | #ifdef OPENSSL_SYS_VMS | ||
| 131 | #define _XOPEN_SOURCE 500 /* Or isascii won't be declared properly on | 158 | #define _XOPEN_SOURCE 500 /* Or isascii won't be declared properly on |
| 132 | VMS (at least with DECompHP C). */ | 159 | VMS (at least with DECompHP C). */ |
| 160 | #endif | ||
| 161 | |||
| 133 | #include <ctype.h> | 162 | #include <ctype.h> |
| 134 | 163 | ||
| 135 | #include <openssl/bio.h> | 164 | #include <openssl/bio.h> |
| @@ -207,6 +236,16 @@ static DH *get_dh1024(void); | |||
| 207 | static DH *get_dh1024dsa(void); | 236 | static DH *get_dh1024dsa(void); |
| 208 | #endif | 237 | #endif |
| 209 | 238 | ||
| 239 | |||
| 240 | static char *psk_key=NULL; /* by default PSK is not used */ | ||
| 241 | #ifndef OPENSSL_NO_PSK | ||
| 242 | static unsigned int psk_client_callback(SSL *ssl, const char *hint, char *identity, | ||
| 243 | unsigned int max_identity_len, unsigned char *psk, | ||
| 244 | unsigned int max_psk_len); | ||
| 245 | static unsigned int psk_server_callback(SSL *ssl, const char *identity, unsigned char *psk, | ||
| 246 | unsigned int max_psk_len); | ||
| 247 | #endif | ||
| 248 | |||
| 210 | static BIO *bio_err=NULL; | 249 | static BIO *bio_err=NULL; |
| 211 | static BIO *bio_stdout=NULL; | 250 | static BIO *bio_stdout=NULL; |
| 212 | 251 | ||
| @@ -229,9 +268,6 @@ static void sv_usage(void) | |||
| 229 | { | 268 | { |
| 230 | fprintf(stderr,"usage: ssltest [args ...]\n"); | 269 | fprintf(stderr,"usage: ssltest [args ...]\n"); |
| 231 | fprintf(stderr,"\n"); | 270 | fprintf(stderr,"\n"); |
| 232 | #ifdef OPENSSL_FIPS | ||
| 233 | fprintf(stderr,"-F - run test in FIPS mode\n"); | ||
| 234 | #endif | ||
| 235 | fprintf(stderr," -server_auth - check server certificate\n"); | 271 | fprintf(stderr," -server_auth - check server certificate\n"); |
| 236 | fprintf(stderr," -client_auth - do client authentication\n"); | 272 | fprintf(stderr," -client_auth - do client authentication\n"); |
| 237 | fprintf(stderr," -proxy - allow proxy certificates\n"); | 273 | fprintf(stderr," -proxy - allow proxy certificates\n"); |
| @@ -250,6 +286,9 @@ static void sv_usage(void) | |||
| 250 | #ifndef OPENSSL_NO_ECDH | 286 | #ifndef OPENSSL_NO_ECDH |
| 251 | fprintf(stderr," -no_ecdhe - disable ECDHE\n"); | 287 | fprintf(stderr," -no_ecdhe - disable ECDHE\n"); |
| 252 | #endif | 288 | #endif |
| 289 | #ifndef OPENSSL_NO_PSK | ||
| 290 | fprintf(stderr," -psk arg - PSK in hex (without 0x)\n"); | ||
| 291 | #endif | ||
| 253 | #ifndef OPENSSL_NO_SSL2 | 292 | #ifndef OPENSSL_NO_SSL2 |
| 254 | fprintf(stderr," -ssl2 - use SSLv2\n"); | 293 | fprintf(stderr," -ssl2 - use SSLv2\n"); |
| 255 | #endif | 294 | #endif |
| @@ -281,7 +320,7 @@ static void sv_usage(void) | |||
| 281 | 320 | ||
| 282 | static void print_details(SSL *c_ssl, const char *prefix) | 321 | static void print_details(SSL *c_ssl, const char *prefix) |
| 283 | { | 322 | { |
| 284 | SSL_CIPHER *ciph; | 323 | const SSL_CIPHER *ciph; |
| 285 | X509 *cert; | 324 | X509 *cert; |
| 286 | 325 | ||
| 287 | ciph=SSL_get_current_cipher(c_ssl); | 326 | ciph=SSL_get_current_cipher(c_ssl); |
| @@ -386,6 +425,25 @@ static void lock_dbg_cb(int mode, int type, const char *file, int line) | |||
| 386 | } | 425 | } |
| 387 | } | 426 | } |
| 388 | 427 | ||
| 428 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
| 429 | struct cb_info_st { void *input; size_t len; int ret; }; | ||
| 430 | struct cb_info_st co1 = { "C", 1, 1 }; /* try to negotiate oqaque PRF input */ | ||
| 431 | struct cb_info_st co2 = { "C", 1, 2 }; /* insist on oqaque PRF input */ | ||
| 432 | struct cb_info_st so1 = { "S", 1, 1 }; /* try to negotiate oqaque PRF input */ | ||
| 433 | struct cb_info_st so2 = { "S", 1, 2 }; /* insist on oqaque PRF input */ | ||
| 434 | |||
| 435 | int opaque_prf_input_cb(SSL *ssl, void *peerinput, size_t len, void *arg_) | ||
| 436 | { | ||
| 437 | struct cb_info_st *arg = arg_; | ||
| 438 | |||
| 439 | if (arg == NULL) | ||
| 440 | return 1; | ||
| 441 | |||
| 442 | if (!SSL_set_tlsext_opaque_prf_input(ssl, arg->input, arg->len)) | ||
| 443 | return 0; | ||
| 444 | return arg->ret; | ||
| 445 | } | ||
| 446 | #endif | ||
| 389 | 447 | ||
| 390 | int main(int argc, char *argv[]) | 448 | int main(int argc, char *argv[]) |
| 391 | { | 449 | { |
| @@ -407,19 +465,20 @@ int main(int argc, char *argv[]) | |||
| 407 | #endif | 465 | #endif |
| 408 | SSL_CTX *s_ctx=NULL; | 466 | SSL_CTX *s_ctx=NULL; |
| 409 | SSL_CTX *c_ctx=NULL; | 467 | SSL_CTX *c_ctx=NULL; |
| 410 | SSL_METHOD *meth=NULL; | 468 | const SSL_METHOD *meth=NULL; |
| 411 | SSL *c_ssl,*s_ssl; | 469 | SSL *c_ssl,*s_ssl; |
| 412 | int number=1,reuse=0; | 470 | int number=1,reuse=0; |
| 413 | long bytes=256L; | 471 | long bytes=256L; |
| 414 | #ifndef OPENSSL_NO_DH | 472 | #ifndef OPENSSL_NO_DH |
| 415 | DH *dh; | 473 | DH *dh; |
| 416 | int dhe1024 = 1, dhe1024dsa = 0; | 474 | int dhe1024 = 0, dhe1024dsa = 0; |
| 417 | #endif | 475 | #endif |
| 418 | #ifndef OPENSSL_NO_ECDH | 476 | #ifndef OPENSSL_NO_ECDH |
| 419 | EC_KEY *ecdh = NULL; | 477 | EC_KEY *ecdh = NULL; |
| 420 | #endif | 478 | #endif |
| 421 | int no_dhe = 0; | 479 | int no_dhe = 0; |
| 422 | int no_ecdhe = 0; | 480 | int no_ecdhe = 0; |
| 481 | int no_psk = 0; | ||
| 423 | int print_time = 0; | 482 | int print_time = 0; |
| 424 | clock_t s_time = 0, c_time = 0; | 483 | clock_t s_time = 0, c_time = 0; |
| 425 | int comp = 0; | 484 | int comp = 0; |
| @@ -428,15 +487,12 @@ int main(int argc, char *argv[]) | |||
| 428 | #endif | 487 | #endif |
| 429 | STACK_OF(SSL_COMP) *ssl_comp_methods = NULL; | 488 | STACK_OF(SSL_COMP) *ssl_comp_methods = NULL; |
| 430 | int test_cipherlist = 0; | 489 | int test_cipherlist = 0; |
| 431 | #ifdef OPENSSL_FIPS | ||
| 432 | int fips_mode=0; | ||
| 433 | #endif | ||
| 434 | 490 | ||
| 435 | verbose = 0; | 491 | verbose = 0; |
| 436 | debug = 0; | 492 | debug = 0; |
| 437 | cipher = 0; | 493 | cipher = 0; |
| 438 | 494 | ||
| 439 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); | 495 | bio_err=BIO_new_fp(stderr,BIO_NOCLOSE|BIO_FP_TEXT); |
| 440 | 496 | ||
| 441 | CRYPTO_set_locking_callback(lock_dbg_cb); | 497 | CRYPTO_set_locking_callback(lock_dbg_cb); |
| 442 | 498 | ||
| @@ -455,23 +511,14 @@ int main(int argc, char *argv[]) | |||
| 455 | 511 | ||
| 456 | RAND_seed(rnd_seed, sizeof rnd_seed); | 512 | RAND_seed(rnd_seed, sizeof rnd_seed); |
| 457 | 513 | ||
| 458 | bio_stdout=BIO_new_fp(stdout,BIO_NOCLOSE); | 514 | bio_stdout=BIO_new_fp(stdout,BIO_NOCLOSE|BIO_FP_TEXT); |
| 459 | 515 | ||
| 460 | argc--; | 516 | argc--; |
| 461 | argv++; | 517 | argv++; |
| 462 | 518 | ||
| 463 | while (argc >= 1) | 519 | while (argc >= 1) |
| 464 | { | 520 | { |
| 465 | if(!strcmp(*argv,"-F")) | 521 | if (strcmp(*argv,"-server_auth") == 0) |
| 466 | { | ||
| 467 | #ifdef OPENSSL_FIPS | ||
| 468 | fips_mode=1; | ||
| 469 | #else | ||
| 470 | fprintf(stderr,"not compiled with FIPS support, so exitting without running.\n"); | ||
| 471 | EXIT(0); | ||
| 472 | #endif | ||
| 473 | } | ||
| 474 | else if (strcmp(*argv,"-server_auth") == 0) | ||
| 475 | server_auth=1; | 522 | server_auth=1; |
| 476 | else if (strcmp(*argv,"-client_auth") == 0) | 523 | else if (strcmp(*argv,"-client_auth") == 0) |
| 477 | client_auth=1; | 524 | client_auth=1; |
| @@ -511,6 +558,20 @@ int main(int argc, char *argv[]) | |||
| 511 | no_dhe=1; | 558 | no_dhe=1; |
| 512 | else if (strcmp(*argv,"-no_ecdhe") == 0) | 559 | else if (strcmp(*argv,"-no_ecdhe") == 0) |
| 513 | no_ecdhe=1; | 560 | no_ecdhe=1; |
| 561 | else if (strcmp(*argv,"-psk") == 0) | ||
| 562 | { | ||
| 563 | if (--argc < 1) goto bad; | ||
| 564 | psk_key=*(++argv); | ||
| 565 | #ifndef OPENSSL_NO_PSK | ||
| 566 | if (strspn(psk_key, "abcdefABCDEF1234567890") != strlen(psk_key)) | ||
| 567 | { | ||
| 568 | BIO_printf(bio_err,"Not a hex number '%s'\n",*argv); | ||
| 569 | goto bad; | ||
| 570 | } | ||
| 571 | #else | ||
| 572 | no_psk=1; | ||
| 573 | #endif | ||
| 574 | } | ||
| 514 | else if (strcmp(*argv,"-ssl2") == 0) | 575 | else if (strcmp(*argv,"-ssl2") == 0) |
| 515 | ssl2=1; | 576 | ssl2=1; |
| 516 | else if (strcmp(*argv,"-tls1") == 0) | 577 | else if (strcmp(*argv,"-tls1") == 0) |
| @@ -653,20 +714,6 @@ bad: | |||
| 653 | EXIT(1); | 714 | EXIT(1); |
| 654 | } | 715 | } |
| 655 | 716 | ||
| 656 | #ifdef OPENSSL_FIPS | ||
| 657 | if(fips_mode) | ||
| 658 | { | ||
| 659 | if(!FIPS_mode_set(1)) | ||
| 660 | { | ||
| 661 | ERR_load_crypto_strings(); | ||
| 662 | ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE)); | ||
| 663 | EXIT(1); | ||
| 664 | } | ||
| 665 | else | ||
| 666 | fprintf(stderr,"*** IN FIPS MODE ***\n"); | ||
| 667 | } | ||
| 668 | #endif | ||
| 669 | |||
| 670 | if (print_time) | 717 | if (print_time) |
| 671 | { | 718 | { |
| 672 | if (!bio_pair) | 719 | if (!bio_pair) |
| @@ -811,6 +858,13 @@ bad: | |||
| 811 | SSL_CTX_set_tmp_rsa_callback(s_ctx,tmp_rsa_cb); | 858 | SSL_CTX_set_tmp_rsa_callback(s_ctx,tmp_rsa_cb); |
| 812 | #endif | 859 | #endif |
| 813 | 860 | ||
| 861 | #ifdef TLSEXT_TYPE_opaque_prf_input | ||
| 862 | SSL_CTX_set_tlsext_opaque_prf_input_callback(c_ctx, opaque_prf_input_cb); | ||
| 863 | SSL_CTX_set_tlsext_opaque_prf_input_callback(s_ctx, opaque_prf_input_cb); | ||
| 864 | SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(c_ctx, &co1); /* or &co2 or NULL */ | ||
| 865 | SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(s_ctx, &so1); /* or &so2 or NULL */ | ||
| 866 | #endif | ||
| 867 | |||
| 814 | if (!SSL_CTX_use_certificate_file(s_ctx,server_cert,SSL_FILETYPE_PEM)) | 868 | if (!SSL_CTX_use_certificate_file(s_ctx,server_cert,SSL_FILETYPE_PEM)) |
| 815 | { | 869 | { |
| 816 | ERR_print_errors(bio_err); | 870 | ERR_print_errors(bio_err); |
| @@ -862,6 +916,31 @@ bad: | |||
| 862 | SSL_CTX_set_session_id_context(s_ctx, (void *)&session_id_context, sizeof session_id_context); | 916 | SSL_CTX_set_session_id_context(s_ctx, (void *)&session_id_context, sizeof session_id_context); |
| 863 | } | 917 | } |
| 864 | 918 | ||
| 919 | /* Use PSK only if PSK key is given */ | ||
| 920 | if (psk_key != NULL) | ||
| 921 | { | ||
| 922 | /* no_psk is used to avoid putting psk command to openssl tool */ | ||
| 923 | if (no_psk) | ||
| 924 | { | ||
| 925 | /* if PSK is not compiled in and psk key is | ||
| 926 | * given, do nothing and exit successfully */ | ||
| 927 | ret=0; | ||
| 928 | goto end; | ||
| 929 | } | ||
| 930 | #ifndef OPENSSL_NO_PSK | ||
| 931 | SSL_CTX_set_psk_client_callback(c_ctx, psk_client_callback); | ||
| 932 | SSL_CTX_set_psk_server_callback(s_ctx, psk_server_callback); | ||
| 933 | if (debug) | ||
| 934 | BIO_printf(bio_err,"setting PSK identity hint to s_ctx\n"); | ||
| 935 | if (!SSL_CTX_use_psk_identity_hint(s_ctx, "ctx server identity_hint")) | ||
| 936 | { | ||
| 937 | BIO_printf(bio_err,"error setting PSK identity hint to s_ctx\n"); | ||
| 938 | ERR_print_errors(bio_err); | ||
| 939 | goto end; | ||
| 940 | } | ||
| 941 | #endif | ||
| 942 | } | ||
| 943 | |||
| 865 | c_ssl=SSL_new(c_ctx); | 944 | c_ssl=SSL_new(c_ctx); |
| 866 | s_ssl=SSL_new(s_ctx); | 945 | s_ssl=SSL_new(s_ctx); |
| 867 | 946 | ||
| @@ -938,7 +1017,7 @@ end: | |||
| 938 | #endif | 1017 | #endif |
| 939 | CRYPTO_cleanup_all_ex_data(); | 1018 | CRYPTO_cleanup_all_ex_data(); |
| 940 | ERR_free_strings(); | 1019 | ERR_free_strings(); |
| 941 | ERR_remove_state(0); | 1020 | ERR_remove_thread_state(NULL); |
| 942 | EVP_cleanup(); | 1021 | EVP_cleanup(); |
| 943 | CRYPTO_mem_leaks(bio_err); | 1022 | CRYPTO_mem_leaks(bio_err); |
| 944 | if (bio_err != NULL) BIO_free(bio_err); | 1023 | if (bio_err != NULL) BIO_free(bio_err); |
| @@ -2088,7 +2167,15 @@ static int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg) | |||
| 2088 | } | 2167 | } |
| 2089 | 2168 | ||
| 2090 | #ifndef OPENSSL_NO_X509_VERIFY | 2169 | #ifndef OPENSSL_NO_X509_VERIFY |
| 2170 | # ifdef OPENSSL_FIPS | ||
| 2171 | if(s->version == TLS1_VERSION) | ||
| 2172 | FIPS_allow_md5(1); | ||
| 2173 | # endif | ||
| 2091 | ok = X509_verify_cert(ctx); | 2174 | ok = X509_verify_cert(ctx); |
| 2175 | # ifdef OPENSSL_FIPS | ||
| 2176 | if(s->version == TLS1_VERSION) | ||
| 2177 | FIPS_allow_md5(0); | ||
| 2178 | # endif | ||
| 2092 | #endif | 2179 | #endif |
| 2093 | 2180 | ||
| 2094 | if (cb_arg->proxy_auth) | 2181 | if (cb_arg->proxy_auth) |
| @@ -2257,11 +2344,74 @@ static DH *get_dh1024dsa() | |||
| 2257 | } | 2344 | } |
| 2258 | #endif | 2345 | #endif |
| 2259 | 2346 | ||
| 2347 | #ifndef OPENSSL_NO_PSK | ||
| 2348 | /* convert the PSK key (psk_key) in ascii to binary (psk) */ | ||
| 2349 | static int psk_key2bn(const char *pskkey, unsigned char *psk, | ||
| 2350 | unsigned int max_psk_len) | ||
| 2351 | { | ||
| 2352 | int ret; | ||
| 2353 | BIGNUM *bn = NULL; | ||
| 2354 | |||
| 2355 | ret = BN_hex2bn(&bn, pskkey); | ||
| 2356 | if (!ret) | ||
| 2357 | { | ||
| 2358 | BIO_printf(bio_err,"Could not convert PSK key '%s' to BIGNUM\n", pskkey); | ||
| 2359 | if (bn) | ||
| 2360 | BN_free(bn); | ||
| 2361 | return 0; | ||
| 2362 | } | ||
| 2363 | if (BN_num_bytes(bn) > (int)max_psk_len) | ||
| 2364 | { | ||
| 2365 | BIO_printf(bio_err,"psk buffer of callback is too small (%d) for key (%d)\n", | ||
| 2366 | max_psk_len, BN_num_bytes(bn)); | ||
| 2367 | BN_free(bn); | ||
| 2368 | return 0; | ||
| 2369 | } | ||
| 2370 | ret = BN_bn2bin(bn, psk); | ||
| 2371 | BN_free(bn); | ||
| 2372 | return ret; | ||
| 2373 | } | ||
| 2374 | |||
| 2375 | static unsigned int psk_client_callback(SSL *ssl, const char *hint, char *identity, | ||
| 2376 | unsigned int max_identity_len, unsigned char *psk, | ||
| 2377 | unsigned int max_psk_len) | ||
| 2378 | { | ||
| 2379 | int ret; | ||
| 2380 | unsigned int psk_len = 0; | ||
| 2381 | |||
| 2382 | ret = BIO_snprintf(identity, max_identity_len, "Client_identity"); | ||
| 2383 | if (ret < 0) | ||
| 2384 | goto out_err; | ||
| 2385 | if (debug) | ||
| 2386 | fprintf(stderr, "client: created identity '%s' len=%d\n", identity, ret); | ||
| 2387 | ret = psk_key2bn(psk_key, psk, max_psk_len); | ||
| 2388 | if (ret < 0) | ||
| 2389 | goto out_err; | ||
| 2390 | psk_len = ret; | ||
| 2391 | out_err: | ||
| 2392 | return psk_len; | ||
| 2393 | } | ||
| 2394 | |||
| 2395 | static unsigned int psk_server_callback(SSL *ssl, const char *identity, | ||
| 2396 | unsigned char *psk, unsigned int max_psk_len) | ||
| 2397 | { | ||
| 2398 | unsigned int psk_len=0; | ||
| 2399 | |||
| 2400 | if (strcmp(identity, "Client_identity") != 0) | ||
| 2401 | { | ||
| 2402 | BIO_printf(bio_err, "server: PSK error: client identity not found\n"); | ||
| 2403 | return 0; | ||
| 2404 | } | ||
| 2405 | psk_len=psk_key2bn(psk_key, psk, max_psk_len); | ||
| 2406 | return psk_len; | ||
| 2407 | } | ||
| 2408 | #endif | ||
| 2409 | |||
| 2260 | static int do_test_cipherlist(void) | 2410 | static int do_test_cipherlist(void) |
| 2261 | { | 2411 | { |
| 2262 | int i = 0; | 2412 | int i = 0; |
| 2263 | const SSL_METHOD *meth; | 2413 | const SSL_METHOD *meth; |
| 2264 | SSL_CIPHER *ci, *tci = NULL; | 2414 | const SSL_CIPHER *ci, *tci = NULL; |
| 2265 | 2415 | ||
| 2266 | #ifndef OPENSSL_NO_SSL2 | 2416 | #ifndef OPENSSL_NO_SSL2 |
| 2267 | fprintf(stderr, "testing SSLv2 cipher list order: "); | 2417 | fprintf(stderr, "testing SSLv2 cipher list order: "); |
