summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s3_both.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/s3_both.c')
-rw-r--r--src/lib/libssl/s3_both.c85
1 files changed, 42 insertions, 43 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c
index 6de62e1591..f3f27715d5 100644
--- a/src/lib/libssl/s3_both.c
+++ b/src/lib/libssl/s3_both.c
@@ -57,24 +57,15 @@
57 */ 57 */
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include "buffer.h" 60#include <openssl/buffer.h>
61#include "rand.h" 61#include <openssl/rand.h>
62#include "objects.h" 62#include <openssl/objects.h>
63#include "evp.h" 63#include <openssl/evp.h>
64#include "x509.h" 64#include <openssl/x509.h>
65#include "ssl_locl.h" 65#include "ssl_locl.h"
66 66
67#define BREAK break 67int ssl3_send_finished(SSL *s, int a, int b, unsigned char *sender,
68 68 int slen)
69/* SSL3err(SSL_F_SSL3_GET_FINISHED,SSL_R_EXCESSIVE_MESSAGE_SIZE);
70 */
71
72int ssl3_send_finished(s,a,b,sender,slen)
73SSL *s;
74int a;
75int b;
76unsigned char *sender;
77int slen;
78 { 69 {
79 unsigned char *p,*d; 70 unsigned char *p,*d;
80 int i; 71 int i;
@@ -92,6 +83,13 @@ int slen;
92 p+=i; 83 p+=i;
93 l=i; 84 l=i;
94 85
86#ifdef WIN16
87 /* MSVC 1.5 does not clear the top bytes of the word unless
88 * I do this.
89 */
90 l&=0xffff;
91#endif
92
95 *(d++)=SSL3_MT_FINISHED; 93 *(d++)=SSL3_MT_FINISHED;
96 l2n3(l,d); 94 l2n3(l,d);
97 s->init_num=(int)l+4; 95 s->init_num=(int)l+4;
@@ -104,10 +102,7 @@ int slen;
104 return(ssl3_do_write(s,SSL3_RT_HANDSHAKE)); 102 return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
105 } 103 }
106 104
107int ssl3_get_finished(s,a,b) 105int ssl3_get_finished(SSL *s, int a, int b)
108SSL *s;
109int a;
110int b;
111 { 106 {
112 int al,i,ok; 107 int al,i,ok;
113 long n; 108 long n;
@@ -167,9 +162,7 @@ f_err:
167 * ssl->session->read_compression assign 162 * ssl->session->read_compression assign
168 * ssl->session->read_hash assign 163 * ssl->session->read_hash assign
169 */ 164 */
170int ssl3_send_change_cipher_spec(s,a,b) 165int ssl3_send_change_cipher_spec(SSL *s, int a, int b)
171SSL *s;
172int a,b;
173 { 166 {
174 unsigned char *p; 167 unsigned char *p;
175 168
@@ -187,9 +180,7 @@ int a,b;
187 return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC)); 180 return(ssl3_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC));
188 } 181 }
189 182
190unsigned long ssl3_output_cert_chain(s,x) 183unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
191SSL *s;
192X509 *x;
193 { 184 {
194 unsigned char *p; 185 unsigned char *p;
195 int n,i; 186 int n,i;
@@ -236,6 +227,23 @@ X509 *x;
236 X509_STORE_CTX_cleanup(&xs_ctx); 227 X509_STORE_CTX_cleanup(&xs_ctx);
237 } 228 }
238 229
230 /* Thawte special :-) */
231 if (s->ctx->extra_certs != NULL)
232 for (i=0; i<sk_X509_num(s->ctx->extra_certs); i++)
233 {
234 x=sk_X509_value(s->ctx->extra_certs,i);
235 n=i2d_X509(x,NULL);
236 if (!BUF_MEM_grow(buf,(int)(n+l+3)))
237 {
238 SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN,ERR_R_BUF_LIB);
239 return(0);
240 }
241 p=(unsigned char *)&(buf->data[l]);
242 l2n3(n,p);
243 i2d_X509(x,&p);
244 l+=n+3;
245 }
246
239 l-=7; 247 l-=7;
240 p=(unsigned char *)&(buf->data[4]); 248 p=(unsigned char *)&(buf->data[4]);
241 l2n3(l,p); 249 l2n3(l,p);
@@ -247,11 +255,7 @@ X509 *x;
247 return(l); 255 return(l);
248 } 256 }
249 257
250long ssl3_get_message(s,st1,stn,mt,max,ok) 258long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
251SSL *s;
252int st1,stn,mt;
253long max;
254int *ok;
255 { 259 {
256 unsigned char *p; 260 unsigned char *p;
257 unsigned long l; 261 unsigned long l;
@@ -275,9 +279,8 @@ int *ok;
275 279
276 if (s->state == st1) 280 if (s->state == st1)
277 { 281 {
278 i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE, 282 i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],
279 (char *)&(p[s->init_num]), 283 4-s->init_num);
280 4-s->init_num);
281 if (i < (4-s->init_num)) 284 if (i < (4-s->init_num))
282 { 285 {
283 *ok=0; 286 *ok=0;
@@ -315,8 +318,7 @@ int *ok;
315 n=s->s3->tmp.message_size; 318 n=s->s3->tmp.message_size;
316 if (n > 0) 319 if (n > 0)
317 { 320 {
318 i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE, 321 i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n);
319 (char *)&(p[s->init_num]),(int)n);
320 if (i != (int)n) 322 if (i != (int)n)
321 { 323 {
322 *ok=0; 324 *ok=0;
@@ -332,9 +334,7 @@ err:
332 return(-1); 334 return(-1);
333 } 335 }
334 336
335int ssl_cert_type(x,pkey) 337int ssl_cert_type(X509 *x, EVP_PKEY *pkey)
336X509 *x;
337EVP_PKEY *pkey;
338 { 338 {
339 EVP_PKEY *pk; 339 EVP_PKEY *pk;
340 int ret= -1,i,j; 340 int ret= -1,i,j;
@@ -380,11 +380,11 @@ EVP_PKEY *pkey;
380 ret= -1; 380 ret= -1;
381 381
382err: 382err:
383 if(!pkey) EVP_PKEY_free(pk);
383 return(ret); 384 return(ret);
384 } 385 }
385 386
386int ssl_verify_alarm_type(type) 387int ssl_verify_alarm_type(long type)
387long type;
388 { 388 {
389 int al; 389 int al;
390 390
@@ -436,8 +436,7 @@ long type;
436 return(al); 436 return(al);
437 } 437 }
438 438
439int ssl3_setup_buffers(s) 439int ssl3_setup_buffers(SSL *s)
440SSL *s;
441 { 440 {
442 unsigned char *p; 441 unsigned char *p;
443 unsigned int extra; 442 unsigned int extra;