summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/threads/mttest.c
diff options
context:
space:
mode:
authorbeck <>2000-03-19 11:13:58 +0000
committerbeck <>2000-03-19 11:13:58 +0000
commit796d609550df3a33fc11468741c5d2f6d3df4c11 (patch)
tree6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libcrypto/threads/mttest.c
parent5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff)
downloadopenbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2 if you are using the ssl26 packages for ssh and other things to work you will need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libcrypto/threads/mttest.c')
-rw-r--r--src/lib/libcrypto/threads/mttest.c122
1 files changed, 80 insertions, 42 deletions
diff --git a/src/lib/libcrypto/threads/mttest.c b/src/lib/libcrypto/threads/mttest.c
index 142623edda..24713a3157 100644
--- a/src/lib/libcrypto/threads/mttest.c
+++ b/src/lib/libcrypto/threads/mttest.c
@@ -74,26 +74,29 @@
74#include <ulocks.h> 74#include <ulocks.h>
75#include <sys/prctl.h> 75#include <sys/prctl.h>
76#endif 76#endif
77#ifdef PTHREADS
78#include <pthread.h>
79#endif
77#include <openssl/lhash.h> 80#include <openssl/lhash.h>
78#include <openssl/crypto.h> 81#include <openssl/crypto.h>
79#include <openssl/buffer.h> 82#include <openssl/buffer.h>
80#include "../e_os.h" 83#include "../../e_os.h"
81#include <openssl/x509.h> 84#include <openssl/x509.h>
82#include <openssl/ssl.h> 85#include <openssl/ssl.h>
83#include <openssl/err.h> 86#include <openssl/err.h>
87#include <openssl/rand.h>
84 88
85#ifdef NO_FP_API 89#ifdef NO_FP_API
86#define APPS_WIN16 90#define APPS_WIN16
87#include "../crypto/buffer/bss_file.c" 91#include "../buffer/bss_file.c"
88#endif 92#endif
89 93
90#define TEST_SERVER_CERT "../apps/server.pem" 94#define TEST_SERVER_CERT "../../apps/server.pem"
91#define TEST_CLIENT_CERT "../apps/client.pem" 95#define TEST_CLIENT_CERT "../../apps/client.pem"
92 96
93#define MAX_THREAD_NUMBER 100 97#define MAX_THREAD_NUMBER 100
94 98
95int MS_CALLBACK verify_callback(int ok, X509 *xs, X509 *xi, int depth, 99int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *xs);
96 int error,char *arg);
97void thread_setup(void); 100void thread_setup(void);
98void thread_cleanup(void); 101void thread_cleanup(void);
99void do_threads(SSL_CTX *s_ctx,SSL_CTX *c_ctx); 102void do_threads(SSL_CTX *s_ctx,SSL_CTX *c_ctx);
@@ -121,6 +124,8 @@ int number_of_loops=10;
121int reconnect=0; 124int reconnect=0;
122int cache_stats=0; 125int cache_stats=0;
123 126
127static const char rnd_seed[] = "string to make the random number generator think it has entropy";
128
124int doit(char *ctx[4]); 129int doit(char *ctx[4]);
125static void print_stats(FILE *fp, SSL_CTX *ctx) 130static void print_stats(FILE *fp, SSL_CTX *ctx)
126{ 131{
@@ -170,6 +175,8 @@ int main(int argc, char *argv[])
170 char *ccert=TEST_CLIENT_CERT; 175 char *ccert=TEST_CLIENT_CERT;
171 SSL_METHOD *ssl_method=SSLv23_method(); 176 SSL_METHOD *ssl_method=SSLv23_method();
172 177
178 RAND_seed(rnd_seed, sizeof rnd_seed);
179
173 if (bio_err == NULL) 180 if (bio_err == NULL)
174 bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); 181 bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
175 if (bio_stdout == NULL) 182 if (bio_stdout == NULL)
@@ -244,7 +251,7 @@ bad:
244 if (cipher == NULL) cipher=getenv("SSL_CIPHER"); 251 if (cipher == NULL) cipher=getenv("SSL_CIPHER");
245 252
246 SSL_load_error_strings(); 253 SSL_load_error_strings();
247 SSLeay_add_ssl_algorithms(); 254 OpenSSL_add_ssl_algorithms();
248 255
249 c_ctx=SSL_CTX_new(ssl_method); 256 c_ctx=SSL_CTX_new(ssl_method);
250 s_ctx=SSL_CTX_new(ssl_method); 257 s_ctx=SSL_CTX_new(ssl_method);
@@ -259,8 +266,15 @@ bad:
259 SSL_CTX_set_session_cache_mode(c_ctx, 266 SSL_CTX_set_session_cache_mode(c_ctx,
260 SSL_SESS_CACHE_NO_AUTO_CLEAR|SSL_SESS_CACHE_SERVER); 267 SSL_SESS_CACHE_NO_AUTO_CLEAR|SSL_SESS_CACHE_SERVER);
261 268
262 SSL_CTX_use_certificate_file(s_ctx,scert,SSL_FILETYPE_PEM); 269 if (!SSL_CTX_use_certificate_file(s_ctx,scert,SSL_FILETYPE_PEM))
263 SSL_CTX_use_RSAPrivateKey_file(s_ctx,scert,SSL_FILETYPE_PEM); 270 {
271 ERR_print_errors(bio_err);
272 }
273 else if (!SSL_CTX_use_RSAPrivateKey_file(s_ctx,scert,SSL_FILETYPE_PEM))
274 {
275 ERR_print_errors(bio_err);
276 goto end;
277 }
264 278
265 if (client_auth) 279 if (client_auth)
266 { 280 {
@@ -489,6 +503,7 @@ int doit(char *ctx[4])
489 else 503 else
490 { 504 {
491 fprintf(stderr,"ERROR in CLIENT\n"); 505 fprintf(stderr,"ERROR in CLIENT\n");
506 ERR_print_errors_fp(stderr);
492 return(1); 507 return(1);
493 } 508 }
494 } 509 }
@@ -520,6 +535,7 @@ int doit(char *ctx[4])
520 else 535 else
521 { 536 {
522 fprintf(stderr,"ERROR in CLIENT\n"); 537 fprintf(stderr,"ERROR in CLIENT\n");
538 ERR_print_errors_fp(stderr);
523 return(1); 539 return(1);
524 } 540 }
525 } 541 }
@@ -652,18 +668,23 @@ err:
652 return(0); 668 return(0);
653 } 669 }
654 670
655int MS_CALLBACK verify_callback(int ok, X509 *xs, X509 *xi, int depth, 671int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
656 int error, char *arg)
657 { 672 {
658 char buf[256]; 673 char *s, buf[256];
659 674
660 if (verbose) 675 if (verbose)
661 { 676 {
662 X509_NAME_oneline(X509_get_subject_name(xs),buf,256); 677 s=X509_NAME_oneline(X509_get_subject_name(ctx->current_cert),
663 if (ok) 678 buf,256);
664 fprintf(stderr,"depth=%d %s\n",depth,buf); 679 if (s != NULL)
665 else 680 {
666 fprintf(stderr,"depth=%d error=%d %s\n",depth,error,buf); 681 if (ok)
682 fprintf(stderr,"depth=%d %s\n",
683 ctx->error_depth,buf);
684 else
685 fprintf(stderr,"depth=%d error=%d %s\n",
686 ctx->error_depth,ctx->error,buf);
687 }
667 } 688 }
668 return(ok); 689 return(ok);
669 } 690 }
@@ -672,13 +693,14 @@ int MS_CALLBACK verify_callback(int ok, X509 *xs, X509 *xi, int depth,
672 693
673#ifdef WIN32 694#ifdef WIN32
674 695
675static HANDLE lock_cs[CRYPTO_NUM_LOCKS]; 696static HANDLE *lock_cs;
676 697
677void thread_setup(void) 698void thread_setup(void)
678 { 699 {
679 int i; 700 int i;
680 701
681 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 702 lock_cs=Malloc(CRYPTO_num_locks() * sizeof(HANDLE));
703 for (i=0; i<CRYPTO_num_locks(); i++)
682 { 704 {
683 lock_cs[i]=CreateMutex(NULL,FALSE,NULL); 705 lock_cs[i]=CreateMutex(NULL,FALSE,NULL);
684 } 706 }
@@ -692,8 +714,9 @@ void thread_cleanup(void)
692 int i; 714 int i;
693 715
694 CRYPTO_set_locking_callback(NULL); 716 CRYPTO_set_locking_callback(NULL);
695 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 717 for (i=0; i<CRYPTO_num_locks(); i++)
696 CloseHandle(lock_cs[i]); 718 CloseHandle(lock_cs[i]);
719 Free(lock_cs);
697 } 720 }
698 721
699void win32_locking_callback(int mode, int type, char *file, int line) 722void win32_locking_callback(int mode, int type, char *file, int line)
@@ -763,15 +786,17 @@ void do_threads(SSL_CTX *s_ctx, SSL_CTX *c_ctx)
763 786
764#ifdef SOLARIS 787#ifdef SOLARIS
765 788
766static mutex_t lock_cs[CRYPTO_NUM_LOCKS]; 789static mutex_t *lock_cs;
767/*static rwlock_t lock_cs[CRYPTO_NUM_LOCKS]; */ 790/*static rwlock_t *lock_cs; */
768static long lock_count[CRYPTO_NUM_LOCKS]; 791static long *lock_count;
769 792
770void thread_setup(void) 793void thread_setup(void)
771 { 794 {
772 int i; 795 int i;
773 796
774 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 797 lock_cs=Malloc(CRYPTO_num_locks() * sizeof(mutex_t));
798 lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
799 for (i=0; i<CRYPTO_num_locks(); i++)
775 { 800 {
776 lock_count[i]=0; 801 lock_count[i]=0;
777 /* rwlock_init(&(lock_cs[i]),USYNC_THREAD,NULL); */ 802 /* rwlock_init(&(lock_cs[i]),USYNC_THREAD,NULL); */
@@ -787,31 +812,37 @@ void thread_cleanup(void)
787 int i; 812 int i;
788 813
789 CRYPTO_set_locking_callback(NULL); 814 CRYPTO_set_locking_callback(NULL);
790fprintf(stderr,"cleanup\n"); 815
791 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 816 fprintf(stderr,"cleanup\n");
817
818 for (i=0; i<CRYPTO_num_locks(); i++)
792 { 819 {
793 /* rwlock_destroy(&(lock_cs[i])); */ 820 /* rwlock_destroy(&(lock_cs[i])); */
794 mutex_destroy(&(lock_cs[i])); 821 mutex_destroy(&(lock_cs[i]));
795 fprintf(stderr,"%8ld:%s\n",lock_count[i],CRYPTO_get_lock_name(i)); 822 fprintf(stderr,"%8ld:%s\n",lock_count[i],CRYPTO_get_lock_name(i));
796 } 823 }
797fprintf(stderr,"done cleanup\n"); 824 Free(lock_cs);
825 Free(lock_count);
826
827 fprintf(stderr,"done cleanup\n");
828
798 } 829 }
799 830
800void solaris_locking_callback(int mode, int type, char *file, int line) 831void solaris_locking_callback(int mode, int type, char *file, int line)
801 { 832 {
802#ifdef undef 833#ifdef undef
803fprintf(stderr,"thread=%4d mode=%s lock=%s %s:%d\n", 834 fprintf(stderr,"thread=%4d mode=%s lock=%s %s:%d\n",
804 CRYPTO_thread_id(), 835 CRYPTO_thread_id(),
805 (mode&CRYPTO_LOCK)?"l":"u", 836 (mode&CRYPTO_LOCK)?"l":"u",
806 (type&CRYPTO_READ)?"r":"w",file,line); 837 (type&CRYPTO_READ)?"r":"w",file,line);
807#endif 838#endif
808 839
809/* 840 /*
810if (CRYPTO_LOCK_SSL_CERT == type) 841 if (CRYPTO_LOCK_SSL_CERT == type)
811 fprintf(stderr,"(t,m,f,l) %ld %d %s %d\n", 842 fprintf(stderr,"(t,m,f,l) %ld %d %s %d\n",
812 CRYPTO_thread_id(), 843 CRYPTO_thread_id(),
813 mode,file,line); 844 mode,file,line);
814*/ 845 */
815 if (mode & CRYPTO_LOCK) 846 if (mode & CRYPTO_LOCK)
816 { 847 {
817 /* if (mode & CRYPTO_READ) 848 /* if (mode & CRYPTO_READ)
@@ -871,7 +902,7 @@ unsigned long solaris_thread_id(void)
871 902
872 903
873static usptr_t *arena; 904static usptr_t *arena;
874static usema_t *lock_cs[CRYPTO_NUM_LOCKS]; 905static usema_t **lock_cs;
875 906
876void thread_setup(void) 907void thread_setup(void)
877 { 908 {
@@ -888,7 +919,8 @@ void thread_setup(void)
888 arena=usinit(filename); 919 arena=usinit(filename);
889 unlink(filename); 920 unlink(filename);
890 921
891 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 922 lock_cs=Malloc(CRYPTO_num_locks() * sizeof(usema_t *));
923 for (i=0; i<CRYPTO_num_locks(); i++)
892 { 924 {
893 lock_cs[i]=usnewsema(arena,1); 925 lock_cs[i]=usnewsema(arena,1);
894 } 926 }
@@ -902,7 +934,7 @@ void thread_cleanup(void)
902 int i; 934 int i;
903 935
904 CRYPTO_set_locking_callback(NULL); 936 CRYPTO_set_locking_callback(NULL);
905 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 937 for (i=0; i<CRYPTO_num_locks(); i++)
906 { 938 {
907 char buf[10]; 939 char buf[10];
908 940
@@ -910,6 +942,7 @@ void thread_cleanup(void)
910 usdumpsema(lock_cs[i],stdout,buf); 942 usdumpsema(lock_cs[i],stdout,buf);
911 usfreesema(lock_cs[i],arena); 943 usfreesema(lock_cs[i],arena);
912 } 944 }
945 Free(lock_cs);
913 } 946 }
914 947
915void irix_locking_callback(int mode, int type, char *file, int line) 948void irix_locking_callback(int mode, int type, char *file, int line)
@@ -962,14 +995,16 @@ unsigned long irix_thread_id(void)
962 995
963#ifdef PTHREADS 996#ifdef PTHREADS
964 997
965static pthread_mutex_t lock_cs[CRYPTO_NUM_LOCKS]; 998static pthread_mutex_t *lock_cs;
966static long lock_count[CRYPTO_NUM_LOCKS]; 999static long *lock_count;
967 1000
968void thread_setup(void) 1001void thread_setup(void)
969 { 1002 {
970 int i; 1003 int i;
971 1004
972 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 1005 lock_cs=Malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
1006 lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
1007 for (i=0; i<CRYPTO_num_locks(); i++)
973 { 1008 {
974 lock_count[i]=0; 1009 lock_count[i]=0;
975 pthread_mutex_init(&(lock_cs[i]),NULL); 1010 pthread_mutex_init(&(lock_cs[i]),NULL);
@@ -985,12 +1020,15 @@ void thread_cleanup(void)
985 1020
986 CRYPTO_set_locking_callback(NULL); 1021 CRYPTO_set_locking_callback(NULL);
987 fprintf(stderr,"cleanup\n"); 1022 fprintf(stderr,"cleanup\n");
988 for (i=0; i<CRYPTO_NUM_LOCKS; i++) 1023 for (i=0; i<CRYPTO_num_locks(); i++)
989 { 1024 {
990 pthread_mutex_destroy(&(lock_cs[i])); 1025 pthread_mutex_destroy(&(lock_cs[i]));
991 fprintf(stderr,"%8ld:%s\n",lock_count[i], 1026 fprintf(stderr,"%8ld:%s\n",lock_count[i],
992 CRYPTO_get_lock_name(i)); 1027 CRYPTO_get_lock_name(i));
993 } 1028 }
1029 Free(lock_cs);
1030 Free(lock_count);
1031
994 fprintf(stderr,"done cleanup\n"); 1032 fprintf(stderr,"done cleanup\n");
995 } 1033 }
996 1034
@@ -1045,7 +1083,7 @@ void do_threads(SSL_CTX *s_ctx, SSL_CTX *c_ctx)
1045 } 1083 }
1046 1084
1047 printf("pthreads threads done (%d,%d)\n", 1085 printf("pthreads threads done (%d,%d)\n",
1048 s_ctx->references,c_ctx->references); 1086 s_ctx->references,c_ctx->references);
1049 } 1087 }
1050 1088
1051unsigned long pthreads_thread_id(void) 1089unsigned long pthreads_thread_id(void)