Deleted Added
full compact
s2_srvr.c (142428) s2_srvr.c (160817)
1/* ssl/s2_srvr.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *

--- 123 unchanged lines hidden (view full) ---

132static SSL_METHOD *ssl2_get_server_method(int ver)
133 {
134 if (ver == SSL2_VERSION)
135 return(SSLv2_server_method());
136 else
137 return(NULL);
138 }
139
1/* ssl/s2_srvr.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *

--- 123 unchanged lines hidden (view full) ---

132static SSL_METHOD *ssl2_get_server_method(int ver)
133 {
134 if (ver == SSL2_VERSION)
135 return(SSLv2_server_method());
136 else
137 return(NULL);
138 }
139
140SSL_METHOD *SSLv2_server_method(void)
141 {
142 static int init=1;
143 static SSL_METHOD SSLv2_server_data;
140IMPLEMENT_ssl2_meth_func(SSLv2_server_method,
141 ssl2_accept,
142 ssl_undefined_function,
143 ssl2_get_server_method)
144
144
145 if (init)
146 {
147 CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
148
149 if (init)
150 {
151 memcpy((char *)&SSLv2_server_data,(char *)sslv2_base_method(),
152 sizeof(SSL_METHOD));
153 SSLv2_server_data.ssl_accept=ssl2_accept;
154 SSLv2_server_data.get_ssl_method=ssl2_get_server_method;
155 init=0;
156 }
157
158 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
159 }
160 return(&SSLv2_server_data);
161 }
162
163int ssl2_accept(SSL *s)
164 {
145int ssl2_accept(SSL *s)
146 {
165 unsigned long l=time(NULL);
147 unsigned long l=(unsigned long)time(NULL);
166 BUF_MEM *buf=NULL;
167 int ret= -1;
168 long num1;
169 void (*cb)(const SSL *ssl,int type,int val)=NULL;
170 int new_state,state;
171
172 RAND_add(&l,sizeof(l),0);
173 ERR_clear_error();

--- 319 unchanged lines hidden (view full) ---

493 || (is_export && ((i != ek) || (s->s2->tmp.clear+(unsigned int)i !=
494 (unsigned int)EVP_CIPHER_key_length(c))))))
495 {
496 ERR_clear_error();
497 if (is_export)
498 i=ek;
499 else
500 i=EVP_CIPHER_key_length(c);
148 BUF_MEM *buf=NULL;
149 int ret= -1;
150 long num1;
151 void (*cb)(const SSL *ssl,int type,int val)=NULL;
152 int new_state,state;
153
154 RAND_add(&l,sizeof(l),0);
155 ERR_clear_error();

--- 319 unchanged lines hidden (view full) ---

475 || (is_export && ((i != ek) || (s->s2->tmp.clear+(unsigned int)i !=
476 (unsigned int)EVP_CIPHER_key_length(c))))))
477 {
478 ERR_clear_error();
479 if (is_export)
480 i=ek;
481 else
482 i=EVP_CIPHER_key_length(c);
501 if(RAND_pseudo_bytes(p,i) <= 0)
502 return 0;
483 if (RAND_pseudo_bytes(p,i) <= 0)
484 return 0;
503 }
504#else
505 if (i < 0)
506 {
507 error=1;
508 SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,SSL_R_BAD_RSA_DECRYPT);
509 }
510 /* incorrect number of key bytes for non export cipher */

--- 281 unchanged lines hidden (view full) ---

792 n=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,NULL);
793 s2n(n,p); /* certificate length */
794 i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&d);
795 n=0;
796
797 /* lets send out the ciphers we like in the
798 * prefered order */
799 sk= s->session->ciphers;
485 }
486#else
487 if (i < 0)
488 {
489 error=1;
490 SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,SSL_R_BAD_RSA_DECRYPT);
491 }
492 /* incorrect number of key bytes for non export cipher */

--- 281 unchanged lines hidden (view full) ---

774 n=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,NULL);
775 s2n(n,p); /* certificate length */
776 i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&d);
777 n=0;
778
779 /* lets send out the ciphers we like in the
780 * prefered order */
781 sk= s->session->ciphers;
800 n=ssl_cipher_list_to_bytes(s,s->session->ciphers,d);
782 n=ssl_cipher_list_to_bytes(s,s->session->ciphers,d,0);
801 d+=n;
802 s2n(n,p); /* add cipher length */
803 }
804
805 /* make and send conn_id */
806 s2n(SSL2_CONNECTION_ID_LENGTH,p); /* add conn_id length */
807 s->s2->conn_id_length=SSL2_CONNECTION_ID_LENGTH;
783 d+=n;
784 s2n(n,p); /* add cipher length */
785 }
786
787 /* make and send conn_id */
788 s2n(SSL2_CONNECTION_ID_LENGTH,p); /* add conn_id length */
789 s->s2->conn_id_length=SSL2_CONNECTION_ID_LENGTH;
808 if(RAND_pseudo_bytes(s->s2->conn_id,(int)s->s2->conn_id_length) <= 0)
809 return -1;
790 if (RAND_pseudo_bytes(s->s2->conn_id,(int)s->s2->conn_id_length) <= 0)
791 return -1;
810 memcpy(d,s->s2->conn_id,SSL2_CONNECTION_ID_LENGTH);
811 d+=SSL2_CONNECTION_ID_LENGTH;
812
813 s->state=SSL2_ST_SEND_SERVER_HELLO_B;
814 s->init_num=d-(unsigned char *)s->init_buf->data;
815 s->init_off=0;
816 }
817 /* SSL2_ST_SEND_SERVER_HELLO_B */

--- 115 unchanged lines hidden (view full) ---

933
934 /* SSL2_ST_SEND_SERVER_FINISHED_B */
935 return(ssl2_do_write(s));
936 }
937
938/* send the request and check the response */
939static int request_certificate(SSL *s)
940 {
792 memcpy(d,s->s2->conn_id,SSL2_CONNECTION_ID_LENGTH);
793 d+=SSL2_CONNECTION_ID_LENGTH;
794
795 s->state=SSL2_ST_SEND_SERVER_HELLO_B;
796 s->init_num=d-(unsigned char *)s->init_buf->data;
797 s->init_off=0;
798 }
799 /* SSL2_ST_SEND_SERVER_HELLO_B */

--- 115 unchanged lines hidden (view full) ---

915
916 /* SSL2_ST_SEND_SERVER_FINISHED_B */
917 return(ssl2_do_write(s));
918 }
919
920/* send the request and check the response */
921static int request_certificate(SSL *s)
922 {
923 const unsigned char *cp;
941 unsigned char *p,*p2,*buf2;
942 unsigned char *ccd;
943 int i,j,ctype,ret= -1;
944 unsigned long len;
945 X509 *x509=NULL;
946 STACK_OF(X509) *sk=NULL;
947
948 ccd=s->s2->tmp.ccl;
949 if (s->state == SSL2_ST_SEND_REQUEST_CERTIFICATE_A)
950 {
951 p=(unsigned char *)s->init_buf->data;
952 *(p++)=SSL2_MT_REQUEST_CERTIFICATE;
953 *(p++)=SSL2_AT_MD5_WITH_RSA_ENCRYPTION;
924 unsigned char *p,*p2,*buf2;
925 unsigned char *ccd;
926 int i,j,ctype,ret= -1;
927 unsigned long len;
928 X509 *x509=NULL;
929 STACK_OF(X509) *sk=NULL;
930
931 ccd=s->s2->tmp.ccl;
932 if (s->state == SSL2_ST_SEND_REQUEST_CERTIFICATE_A)
933 {
934 p=(unsigned char *)s->init_buf->data;
935 *(p++)=SSL2_MT_REQUEST_CERTIFICATE;
936 *(p++)=SSL2_AT_MD5_WITH_RSA_ENCRYPTION;
954 if(RAND_pseudo_bytes(ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH) <= 0)
937 if (RAND_pseudo_bytes(ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH) <= 0)
955 return -1;
956 memcpy(p,ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
957
958 s->state=SSL2_ST_SEND_REQUEST_CERTIFICATE_B;
959 s->init_num=SSL2_MIN_CERT_CHALLENGE_LENGTH+2;
960 s->init_off=0;
961 }
962

--- 87 unchanged lines hidden (view full) ---

1050 {
1051 ret=ssl2_part_read(s,SSL_F_REQUEST_CERTIFICATE,i);
1052 goto end;
1053 }
1054 if (s->msg_callback)
1055 s->msg_callback(0, s->version, 0, p, len, s, s->msg_callback_arg); /* CLIENT-CERTIFICATE */
1056 p += 6;
1057
938 return -1;
939 memcpy(p,ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
940
941 s->state=SSL2_ST_SEND_REQUEST_CERTIFICATE_B;
942 s->init_num=SSL2_MIN_CERT_CHALLENGE_LENGTH+2;
943 s->init_off=0;
944 }
945

--- 87 unchanged lines hidden (view full) ---

1033 {
1034 ret=ssl2_part_read(s,SSL_F_REQUEST_CERTIFICATE,i);
1035 goto end;
1036 }
1037 if (s->msg_callback)
1038 s->msg_callback(0, s->version, 0, p, len, s, s->msg_callback_arg); /* CLIENT-CERTIFICATE */
1039 p += 6;
1040
1058 x509=(X509 *)d2i_X509(NULL,&p,(long)s->s2->tmp.clen);
1041 cp = p;
1042 x509=(X509 *)d2i_X509(NULL,&cp,(long)s->s2->tmp.clen);
1059 if (x509 == NULL)
1060 {
1061 SSLerr(SSL_F_REQUEST_CERTIFICATE,ERR_R_X509_LIB);
1062 goto msg_end;
1063 }
1064
1065 if (((sk=sk_X509_new_null()) == NULL) || (!sk_X509_push(sk,x509)))
1066 {

--- 23 unchanged lines hidden (view full) ---

1090 }
1091 p2=buf2;
1092 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&p2);
1093 EVP_VerifyUpdate(&ctx,buf2,(unsigned int)i);
1094 OPENSSL_free(buf2);
1095
1096 pkey=X509_get_pubkey(x509);
1097 if (pkey == NULL) goto end;
1043 if (x509 == NULL)
1044 {
1045 SSLerr(SSL_F_REQUEST_CERTIFICATE,ERR_R_X509_LIB);
1046 goto msg_end;
1047 }
1048
1049 if (((sk=sk_X509_new_null()) == NULL) || (!sk_X509_push(sk,x509)))
1050 {

--- 23 unchanged lines hidden (view full) ---

1074 }
1075 p2=buf2;
1076 i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,&p2);
1077 EVP_VerifyUpdate(&ctx,buf2,(unsigned int)i);
1078 OPENSSL_free(buf2);
1079
1080 pkey=X509_get_pubkey(x509);
1081 if (pkey == NULL) goto end;
1098 i=EVP_VerifyFinal(&ctx,p,s->s2->tmp.rlen,pkey);
1082 i=EVP_VerifyFinal(&ctx,cp,s->s2->tmp.rlen,pkey);
1099 EVP_PKEY_free(pkey);
1100 EVP_MD_CTX_cleanup(&ctx);
1101
1102 if (i)
1103 {
1104 if (s->session->peer != NULL)
1105 X509_free(s->session->peer);
1106 s->session->peer=x509;

--- 53 unchanged lines hidden ---
1083 EVP_PKEY_free(pkey);
1084 EVP_MD_CTX_cleanup(&ctx);
1085
1086 if (i)
1087 {
1088 if (s->session->peer != NULL)
1089 X509_free(s->session->peer);
1090 s->session->peer=x509;

--- 53 unchanged lines hidden ---