summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbeck <>2002-05-21 01:49:11 +0000
committerbeck <>2002-05-21 01:49:11 +0000
commit7ebf0f8371844decf17c65829147760ed09339a6 (patch)
treeb39f86312e7ebfd4945e393b8949356694ad06fe /src
parent2117eaece54016b776476220b41b97441e75b0e0 (diff)
downloadopenbsd-7ebf0f8371844decf17c65829147760ed09339a6.tar.gz
openbsd-7ebf0f8371844decf17c65829147760ed09339a6.tar.bz2
openbsd-7ebf0f8371844decf17c65829147760ed09339a6.zip
Merge openssl-0.9.7-stable-SNAP-20020519
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/asn1/p5_pbev2.c2
-rw-r--r--src/lib/libcrypto/bio/b_print.c16
-rw-r--r--src/lib/libcrypto/bio/bss_bio.c13
-rw-r--r--src/lib/libcrypto/bn/bn.h2
-rw-r--r--src/lib/libcrypto/bn/bn_mul.c12
-rw-r--r--src/lib/libcrypto/evp/evp.h4
-rw-r--r--src/lib/libcrypto/evp/evp_enc.c30
-rw-r--r--src/lib/libcrypto/evp/evp_test.c4
-rw-r--r--src/lib/libcrypto/evp/p_seal.c6
-rw-r--r--src/lib/libcrypto/ui/ui_openssl.c2
-rw-r--r--src/lib/libcrypto/util/pl/Mingw32.pl14
-rw-r--r--src/lib/libssl/src/CHANGES20
-rw-r--r--src/lib/libssl/src/Configure1
-rw-r--r--src/lib/libssl/src/FAQ2
-rw-r--r--src/lib/libssl/src/INSTALL.W328
-rw-r--r--src/lib/libssl/src/STATUS22
-rw-r--r--src/lib/libssl/src/apps/apps.h2
-rw-r--r--src/lib/libssl/src/apps/ca.c49
-rw-r--r--src/lib/libssl/src/apps/req.c114
-rw-r--r--src/lib/libssl/src/config4
-rw-r--r--src/lib/libssl/src/crypto/asn1/p5_pbev2.c2
-rw-r--r--src/lib/libssl/src/crypto/bio/b_print.c16
-rw-r--r--src/lib/libssl/src/crypto/bio/bss_bio.c13
-rw-r--r--src/lib/libssl/src/crypto/bn/bn.h2
-rw-r--r--src/lib/libssl/src/crypto/bn/bn_mul.c12
-rw-r--r--src/lib/libssl/src/crypto/evp/evp.h4
-rw-r--r--src/lib/libssl/src/crypto/evp/evp_enc.c30
-rw-r--r--src/lib/libssl/src/crypto/evp/evp_test.c4
-rw-r--r--src/lib/libssl/src/crypto/evp/p_seal.c6
-rw-r--r--src/lib/libssl/src/crypto/ui/ui_openssl.c2
-rw-r--r--src/lib/libssl/src/doc/apps/x509.pod6
-rw-r--r--src/lib/libssl/src/ms/mingw32.bat3
-rw-r--r--src/lib/libssl/src/shlib/svr5-shared-gcc.sh2
-rw-r--r--src/lib/libssl/src/ssl/ssl_cert.c1
-rw-r--r--src/lib/libssl/src/util/pl/Mingw32.pl14
-rw-r--r--src/lib/libssl/ssl_cert.c1
36 files changed, 210 insertions, 235 deletions
diff --git a/src/lib/libcrypto/asn1/p5_pbev2.c b/src/lib/libcrypto/asn1/p5_pbev2.c
index 43dfe09479..91e1c8987d 100644
--- a/src/lib/libcrypto/asn1/p5_pbev2.c
+++ b/src/lib/libcrypto/asn1/p5_pbev2.c
@@ -116,6 +116,8 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
116 if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0) 116 if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0)
117 goto err; 117 goto err;
118 118
119 EVP_CIPHER_CTX_init(&ctx);
120
119 /* Dummy cipherinit to just setup the IV */ 121 /* Dummy cipherinit to just setup the IV */
120 EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, iv, 0); 122 EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, iv, 0);
121 if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) { 123 if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) {
diff --git a/src/lib/libcrypto/bio/b_print.c b/src/lib/libcrypto/bio/b_print.c
index b7e268f092..3ce1290772 100644
--- a/src/lib/libcrypto/bio/b_print.c
+++ b/src/lib/libcrypto/bio/b_print.c
@@ -56,6 +56,13 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59/* disable assert() unless BIO_DEBUG has been defined */
60#ifndef BIO_DEBUG
61# ifndef NDEBUG
62# define NDEBUG
63# endif
64#endif
65
59/* 66/*
60 * Stolen from tjh's ssl/ssl_trc.c stuff. 67 * Stolen from tjh's ssl/ssl_trc.c stuff.
61 */ 68 */
@@ -716,12 +723,13 @@ doapr_outch(
716 if (buffer) { 723 if (buffer) {
717 while (*currlen >= *maxlen) { 724 while (*currlen >= *maxlen) {
718 if (*buffer == NULL) { 725 if (*buffer == NULL) {
719 assert(*sbuffer != NULL);
720 if (*maxlen == 0) 726 if (*maxlen == 0)
721 *maxlen = 1024; 727 *maxlen = 1024;
722 *buffer = OPENSSL_malloc(*maxlen); 728 *buffer = OPENSSL_malloc(*maxlen);
723 if (*currlen > 0) 729 if (*currlen > 0) {
730 assert(*sbuffer != NULL);
724 memcpy(*buffer, *sbuffer, *currlen); 731 memcpy(*buffer, *sbuffer, *currlen);
732 }
725 *sbuffer = NULL; 733 *sbuffer = NULL;
726 } else { 734 } else {
727 *maxlen += 1024; 735 *maxlen += 1024;
@@ -761,7 +769,9 @@ int BIO_vprintf (BIO *bio, const char *format, va_list args)
761 { 769 {
762 int ret; 770 int ret;
763 size_t retlen; 771 size_t retlen;
764 MS_STATIC char hugebuf[1024*10]; 772 char hugebuf[1024*2]; /* Was previously 10k, which is unreasonable
773 in small-stack environments, like threads
774 or DOS programs. */
765 char *hugebufp = hugebuf; 775 char *hugebufp = hugebuf;
766 size_t hugebufsize = sizeof(hugebuf); 776 size_t hugebufsize = sizeof(hugebuf);
767 char *dynbuf = NULL; 777 char *dynbuf = NULL;
diff --git a/src/lib/libcrypto/bio/bss_bio.c b/src/lib/libcrypto/bio/bss_bio.c
index a5da473031..1c485a4479 100644
--- a/src/lib/libcrypto/bio/bss_bio.c
+++ b/src/lib/libcrypto/bio/bss_bio.c
@@ -7,9 +7,18 @@
7 * for which no specific BIO method is available. 7 * for which no specific BIO method is available.
8 * See ssl/ssltest.c for some hints on how this can be used. */ 8 * See ssl/ssltest.c for some hints on how this can be used. */
9 9
10/* BIO_DEBUG implies BIO_PAIR_DEBUG */
11#ifdef BIO_DEBUG
12# ifndef BIO_PAIR_DEBUG
13# define BIO_PAIR_DEBUG
14# endif
15#endif
16
17/* disable assert() unless BIO_PAIR_DEBUG has been defined */
10#ifndef BIO_PAIR_DEBUG 18#ifndef BIO_PAIR_DEBUG
11# undef NDEBUG /* avoid conflicting definitions */ 19# ifndef NDEBUG
12# define NDEBUG 20# define NDEBUG
21# endif
13#endif 22#endif
14 23
15#include <assert.h> 24#include <assert.h>
diff --git a/src/lib/libcrypto/bn/bn.h b/src/lib/libcrypto/bn/bn.h
index d25b49c9d8..1eaf879553 100644
--- a/src/lib/libcrypto/bn/bn.h
+++ b/src/lib/libcrypto/bn/bn.h
@@ -136,7 +136,7 @@ extern "C" {
136#define BN_MASK2h (0xffffffff00000000LL) 136#define BN_MASK2h (0xffffffff00000000LL)
137#define BN_MASK2h1 (0xffffffff80000000LL) 137#define BN_MASK2h1 (0xffffffff80000000LL)
138#define BN_TBIT (0x8000000000000000LL) 138#define BN_TBIT (0x8000000000000000LL)
139#define BN_DEC_CONV (10000000000000000000LL) 139#define BN_DEC_CONV (10000000000000000000ULL)
140#define BN_DEC_FMT1 "%llu" 140#define BN_DEC_FMT1 "%llu"
141#define BN_DEC_FMT2 "%019llu" 141#define BN_DEC_FMT2 "%019llu"
142#define BN_DEC_NUM 19 142#define BN_DEC_NUM 19
diff --git a/src/lib/libcrypto/bn/bn_mul.c b/src/lib/libcrypto/bn/bn_mul.c
index 41ea925b8d..7bffc9c16a 100644
--- a/src/lib/libcrypto/bn/bn_mul.c
+++ b/src/lib/libcrypto/bn/bn_mul.c
@@ -408,16 +408,22 @@ void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
408 return; 408 return;
409 } 409 }
410# endif 410# endif
411 if (n2 == 8) 411 /* Only call bn_mul_comba 8 if n2 == 8 and the
412 * two arrays are complete [steve]
413 */
414 if (n2 == 8 && dna == 0 && dnb == 0)
412 { 415 {
413 bn_mul_comba8(r,a,b); 416 bn_mul_comba8(r,a,b);
414 return; 417 return;
415 } 418 }
416# endif /* BN_MUL_COMBA */ 419# endif /* BN_MUL_COMBA */
420 /* Else do normal multiply */
417 if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL) 421 if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL)
418 { 422 {
419 /* This should not happen */ 423 bn_mul_normal(r,a,n2+dna,b,n2+dnb);
420 bn_mul_normal(r,a,n2,b,n2); 424 if ((dna + dnb) < 0)
425 memset(&r[2*n2 + dna + dnb], 0,
426 sizeof(BN_ULONG) * -(dna + dnb));
421 return; 427 return;
422 } 428 }
423 /* r=(a[0]-a[1])*(b[1]-b[0]) */ 429 /* r=(a[0]-a[1])*(b[1]-b[0]) */
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h
index 915fe62341..0d870d60be 100644
--- a/src/lib/libcrypto/evp/evp.h
+++ b/src/lib/libcrypto/evp/evp.h
@@ -184,7 +184,7 @@ typedef struct evp_pkey_md_st
184 EVP_rsa_octet_string(),EVP_mdc2()) 184 EVP_rsa_octet_string(),EVP_mdc2())
185#define EVP_dsa_sha() \ 185#define EVP_dsa_sha() \
186 EVP_PKEY_MD_add(NID_dsaWithSHA,\ 186 EVP_PKEY_MD_add(NID_dsaWithSHA,\
187 EVP_dsa(),EVP_mdc2()) 187 EVP_dsa(),EVP_sha())
188#define EVP_dsa_sha1() \ 188#define EVP_dsa_sha1() \
189 EVP_PKEY_MD_add(NID_dsaWithSHA1,\ 189 EVP_PKEY_MD_add(NID_dsaWithSHA1,\
190 EVP_dsa(),EVP_sha1()) 190 EVP_dsa(),EVP_sha1())
@@ -525,7 +525,7 @@ int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
525 525
526int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, 526int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
527 int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk); 527 int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
528void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl); 528int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
529 529
530void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); 530void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
531void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out, 531void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
diff --git a/src/lib/libcrypto/evp/evp_enc.c b/src/lib/libcrypto/evp/evp_enc.c
index d28a7d266e..32a1c7a2e9 100644
--- a/src/lib/libcrypto/evp/evp_enc.c
+++ b/src/lib/libcrypto/evp/evp_enc.c
@@ -102,11 +102,13 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
102 goto skip_to_init; 102 goto skip_to_init;
103 if (cipher) 103 if (cipher)
104 { 104 {
105 /* Ensure an ENGINE left lying around from last time is cleared 105 /* Ensure a context left lying around from last time is cleared
106 * (the previous check attempted to avoid this if the same 106 * (the previous check attempted to avoid this if the same
107 * ENGINE and EVP_CIPHER could be used). */ 107 * ENGINE and EVP_CIPHER could be used). */
108 if(ctx->engine) 108 EVP_CIPHER_CTX_cleanup(ctx);
109 ENGINE_finish(ctx->engine); 109
110 /* Restore encrypt field: it is zeroed by cleanup */
111 ctx->encrypt = enc;
110 if(impl) 112 if(impl)
111 { 113 {
112 if (!ENGINE_init(impl)) 114 if (!ENGINE_init(impl))
@@ -140,6 +142,7 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
140 } 142 }
141 else 143 else
142 ctx->engine = NULL; 144 ctx->engine = NULL;
145
143 ctx->cipher=cipher; 146 ctx->cipher=cipher;
144 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size); 147 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size);
145 ctx->key_len = cipher->key_len; 148 ctx->key_len = cipher->key_len;
@@ -303,7 +306,6 @@ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
303 { 306 {
304 int ret; 307 int ret;
305 ret = EVP_EncryptFinal_ex(ctx, out, outl); 308 ret = EVP_EncryptFinal_ex(ctx, out, outl);
306 EVP_CIPHER_CTX_cleanup(ctx);
307 return ret; 309 return ret;
308 } 310 }
309 311
@@ -314,14 +316,12 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
314 b=ctx->cipher->block_size; 316 b=ctx->cipher->block_size;
315 if (b == 1) 317 if (b == 1)
316 { 318 {
317 EVP_CIPHER_CTX_cleanup(ctx);
318 *outl=0; 319 *outl=0;
319 return 1; 320 return 1;
320 } 321 }
321 bl=ctx->buf_len; 322 bl=ctx->buf_len;
322 if (ctx->flags & EVP_CIPH_NO_PADDING) 323 if (ctx->flags & EVP_CIPH_NO_PADDING)
323 { 324 {
324 EVP_CIPHER_CTX_cleanup(ctx);
325 if(bl) 325 if(bl)
326 { 326 {
327 EVPerr(EVP_F_EVP_ENCRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH); 327 EVPerr(EVP_F_EVP_ENCRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -336,7 +336,6 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
336 ctx->buf[i]=n; 336 ctx->buf[i]=n;
337 ret=ctx->cipher->do_cipher(ctx,out,ctx->buf,b); 337 ret=ctx->cipher->do_cipher(ctx,out,ctx->buf,b);
338 338
339 EVP_CIPHER_CTX_cleanup(ctx);
340 339
341 if(ret) 340 if(ret)
342 *outl=b; 341 *outl=b;
@@ -394,7 +393,6 @@ int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
394 { 393 {
395 int ret; 394 int ret;
396 ret = EVP_DecryptFinal_ex(ctx, out, outl); 395 ret = EVP_DecryptFinal_ex(ctx, out, outl);
397 EVP_CIPHER_CTX_cleanup(ctx);
398 return ret; 396 return ret;
399 } 397 }
400 398
@@ -407,7 +405,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
407 b=ctx->cipher->block_size; 405 b=ctx->cipher->block_size;
408 if (ctx->flags & EVP_CIPH_NO_PADDING) 406 if (ctx->flags & EVP_CIPH_NO_PADDING)
409 { 407 {
410 EVP_CIPHER_CTX_cleanup(ctx);
411 if(ctx->buf_len) 408 if(ctx->buf_len)
412 { 409 {
413 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH); 410 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -420,14 +417,12 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
420 { 417 {
421 if (ctx->buf_len || !ctx->final_used) 418 if (ctx->buf_len || !ctx->final_used)
422 { 419 {
423 EVP_CIPHER_CTX_cleanup(ctx);
424 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_WRONG_FINAL_BLOCK_LENGTH); 420 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_WRONG_FINAL_BLOCK_LENGTH);
425 return(0); 421 return(0);
426 } 422 }
427 n=ctx->final[b-1]; 423 n=ctx->final[b-1];
428 if (n > b) 424 if (n > b)
429 { 425 {
430 EVP_CIPHER_CTX_cleanup(ctx);
431 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT); 426 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
432 return(0); 427 return(0);
433 } 428 }
@@ -435,7 +430,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
435 { 430 {
436 if (ctx->final[--b] != n) 431 if (ctx->final[--b] != n)
437 { 432 {
438 EVP_CIPHER_CTX_cleanup(ctx);
439 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT); 433 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
440 return(0); 434 return(0);
441 } 435 }
@@ -447,17 +441,21 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
447 } 441 }
448 else 442 else
449 *outl=0; 443 *outl=0;
450 EVP_CIPHER_CTX_cleanup(ctx);
451 return(1); 444 return(1);
452 } 445 }
453 446
454int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) 447int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
455 { 448 {
456 if ((c->cipher != NULL) && (c->cipher->cleanup != NULL)) 449 if (c->cipher != NULL)
457 { 450 {
458 if(!c->cipher->cleanup(c)) return 0; 451 if(c->cipher->cleanup && !c->cipher->cleanup(c))
452 return 0;
453 /* Zero cipher context data */
454 if (c->cipher_data)
455 memset(c->cipher_data, 0, c->cipher->ctx_size);
459 } 456 }
460 OPENSSL_free(c->cipher_data); 457 if (c->cipher_data)
458 OPENSSL_free(c->cipher_data);
461 if (c->engine) 459 if (c->engine)
462 /* The EVP_CIPHER we used belongs to an ENGINE, release the 460 /* The EVP_CIPHER we used belongs to an ENGINE, release the
463 * functional reference we held for this reason. */ 461 * functional reference we held for this reason. */
diff --git a/src/lib/libcrypto/evp/evp_test.c b/src/lib/libcrypto/evp/evp_test.c
index 3607fe7776..decd0713d6 100644
--- a/src/lib/libcrypto/evp/evp_test.c
+++ b/src/lib/libcrypto/evp/evp_test.c
@@ -209,6 +209,8 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
209 exit(9); 209 exit(9);
210 } 210 }
211 211
212 EVP_CIPHER_CTX_cleanup(&ctx);
213
212 printf("\n"); 214 printf("\n");
213 } 215 }
214 216
@@ -279,6 +281,8 @@ static int test_digest(const char *digest,
279 281
280 printf("\n"); 282 printf("\n");
281 283
284 EVP_MD_CTX_cleanup(&ctx);
285
282 return 1; 286 return 1;
283 } 287 }
284 288
diff --git a/src/lib/libcrypto/evp/p_seal.c b/src/lib/libcrypto/evp/p_seal.c
index 5570ca3745..37e547fe72 100644
--- a/src/lib/libcrypto/evp/p_seal.c
+++ b/src/lib/libcrypto/evp/p_seal.c
@@ -106,8 +106,10 @@ int inl;
106 } 106 }
107*/ 107*/
108 108
109void EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) 109int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
110 { 110 {
111 EVP_EncryptFinal_ex(ctx,out,outl); 111 int i;
112 i = EVP_EncryptFinal_ex(ctx,out,outl);
112 EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL); 113 EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL);
114 return i;
113 } 115 }
diff --git a/src/lib/libcrypto/ui/ui_openssl.c b/src/lib/libcrypto/ui/ui_openssl.c
index 3aa03f74aa..4e12165410 100644
--- a/src/lib/libcrypto/ui/ui_openssl.c
+++ b/src/lib/libcrypto/ui/ui_openssl.c
@@ -465,7 +465,7 @@ static int open_console(UI *ui)
465 tty_out=stderr; 465 tty_out=stderr;
466#endif 466#endif
467 467
468#if defined(TTY_get) && !defined(VMS) 468#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
469 if (TTY_get(fileno(tty_in),&tty_orig) == -1) 469 if (TTY_get(fileno(tty_in),&tty_orig) == -1)
470 { 470 {
471#ifdef ENOTTY 471#ifdef ENOTTY
diff --git a/src/lib/libcrypto/util/pl/Mingw32.pl b/src/lib/libcrypto/util/pl/Mingw32.pl
index 37f36126f3..45ab685974 100644
--- a/src/lib/libcrypto/util/pl/Mingw32.pl
+++ b/src/lib/libcrypto/util/pl/Mingw32.pl
@@ -25,6 +25,8 @@ if ($gaswin and !$no_asm)
25 { 25 {
26 $bn_asm_obj='$(OBJ_D)/bn-win32.o'; 26 $bn_asm_obj='$(OBJ_D)/bn-win32.o';
27 $bn_asm_src='crypto/bn/asm/bn-win32.s'; 27 $bn_asm_src='crypto/bn/asm/bn-win32.s';
28 $bnco_asm_obj='$(OBJ_D)/co-win32.o';
29 $bnco_asm_src='crypto/bn/asm/co-win32.s';
28 $des_enc_obj='$(OBJ_D)/d-win32.o $(OBJ_D)/y-win32.o'; 30 $des_enc_obj='$(OBJ_D)/d-win32.o $(OBJ_D)/y-win32.o';
29 $des_enc_src='crypto/des/asm/d-win32.s crypto/des/asm/y-win32.s'; 31 $des_enc_src='crypto/des/asm/d-win32.s crypto/des/asm/y-win32.s';
30 $bf_enc_obj='$(OBJ_D)/b-win32.o'; 32 $bf_enc_obj='$(OBJ_D)/b-win32.o';
@@ -66,12 +68,12 @@ $lfile='';
66 68
67$asm='as'; 69$asm='as';
68$afile='-o '; 70$afile='-o ';
69$bn_asm_obj=""; 71#$bn_asm_obj="";
70$bn_asm_src=""; 72#$bn_asm_src="";
71$des_enc_obj=""; 73#$des_enc_obj="";
72$des_enc_src=""; 74#$des_enc_src="";
73$bf_enc_obj=""; 75#$bf_enc_obj="";
74$bf_enc_src=""; 76#$bf_enc_src="";
75 77
76sub do_lib_rule 78sub do_lib_rule
77 { 79 {
diff --git a/src/lib/libssl/src/CHANGES b/src/lib/libssl/src/CHANGES
index b8399a3500..500d3d481a 100644
--- a/src/lib/libssl/src/CHANGES
+++ b/src/lib/libssl/src/CHANGES
@@ -4,6 +4,19 @@
4 4
5 Changes between 0.9.6d and 0.9.7 [XX xxx 2002] 5 Changes between 0.9.6d and 0.9.7 [XX xxx 2002]
6 6
7 *) Remove most calls to EVP_CIPHER_CTX_cleanup() in evp_enc.c, this
8 allows existing EVP_CIPHER_CTX structures to be reused after
9 calling EVP_*Final(). This behaviour is used by encryption
10 BIOs and some applications. This has the side effect that
11 applications must explicitly clean up cipher contexts with
12 EVP_CIPHER_CTX_cleanup() or they will leak memory.
13 [Steve Henson]
14
15 *) Check the values of dna and dnb in bn_mul_recursive before calling
16 bn_mul_comba (a non zero value means the a or b arrays do not contain
17 n2 elements) and fallback to bn_mul_normal if either is not zero.
18 [Steve Henson]
19
7 *) Fix escaping of non-ASCII characters when using the -subj option 20 *) Fix escaping of non-ASCII characters when using the -subj option
8 of the "openssl req" command line tool. (Robert Joop <joop@fokus.gmd.de>) 21 of the "openssl req" command line tool. (Robert Joop <joop@fokus.gmd.de>)
9 [Lutz Jaenicke] 22 [Lutz Jaenicke]
@@ -1600,7 +1613,12 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k
1600 *) Clean old EAY MD5 hack from e_os.h. 1613 *) Clean old EAY MD5 hack from e_os.h.
1601 [Richard Levitte] 1614 [Richard Levitte]
1602 1615
1603 Changes between 0.9.6c and 0.9.6d [XX xxx 2002] 1616 Changes between 0.9.6d and 0.9.6e [XX xxx XXXX]
1617
1618 *) Fix EVP_dsa_sha macro.
1619 [Nils Larsch]
1620
1621 Changes between 0.9.6c and 0.9.6d [9 May 2002]
1604 1622
1605 *) Fix crypto/asn1/a_sign.c so that 'parameters' is omitted (not 1623 *) Fix crypto/asn1/a_sign.c so that 'parameters' is omitted (not
1606 encoded as NULL) with id-dsa-with-sha1. 1624 encoded as NULL) with id-dsa-with-sha1.
diff --git a/src/lib/libssl/src/Configure b/src/lib/libssl/src/Configure
index 1ffe1ac856..f6d8a919be 100644
--- a/src/lib/libssl/src/Configure
+++ b/src/lib/libssl/src/Configure
@@ -144,6 +144,7 @@ my %table=(
144"debug-bodo", "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}", 144"debug-bodo", "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
145"debug-ulf", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}", 145"debug-ulf", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
146"debug-steve", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn", 146"debug-steve", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
147"debug-steve-linux-pseudo64", "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn",
147"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 148"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
148"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 149"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
149"dist", "cc:-O::(unknown)::::::", 150"dist", "cc:-O::(unknown)::::::",
diff --git a/src/lib/libssl/src/FAQ b/src/lib/libssl/src/FAQ
index 8b53581c5a..bea8fcfde0 100644
--- a/src/lib/libssl/src/FAQ
+++ b/src/lib/libssl/src/FAQ
@@ -60,7 +60,7 @@ OpenSSL - Frequently Asked Questions
60* Which is the current version of OpenSSL? 60* Which is the current version of OpenSSL?
61 61
62The current version is available from <URL: http://www.openssl.org>. 62The current version is available from <URL: http://www.openssl.org>.
63OpenSSL 0.9.6c was released on December 21st, 2001. 63OpenSSL 0.9.6d was released on May 9, 2002.
64 64
65In addition to the current stable release, you can also access daily 65In addition to the current stable release, you can also access daily
66snapshots of the OpenSSL development version at <URL: 66snapshots of the OpenSSL development version at <URL:
diff --git a/src/lib/libssl/src/INSTALL.W32 b/src/lib/libssl/src/INSTALL.W32
index da061b289e..852a82831f 100644
--- a/src/lib/libssl/src/INSTALL.W32
+++ b/src/lib/libssl/src/INSTALL.W32
@@ -112,10 +112,10 @@
112 * Compiler installation: 112 * Compiler installation:
113 113
114 Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/ 114 Mingw32 is available from <ftp://ftp.xraylith.wisc.edu/pub/khan/
115 gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. GNU make is at 115 gnu-win32/mingw32/gcc-2.95.2/gcc-2.95.2-msvcrt.exe>. Extract it
116 <ftp://agnes.dida.physik.uni-essen.de/home/janjaap/mingw32/binaries/ 116 to a directory such as C:\gcc-2.95.2 and add c:\gcc-2.95.2\bin to
117 make-3.76.1.zip>. Install both of them in C:\egcs-1.1.2 and run 117 the PATH environment variable in "System Properties"; or edit and
118 C:\egcs-1.1.2\mingw32.bat to set the PATH. 118 run C:\gcc-2.95.2\mingw32.bat to set the PATH.
119 119
120 * Compile OpenSSL: 120 * Compile OpenSSL:
121 121
diff --git a/src/lib/libssl/src/STATUS b/src/lib/libssl/src/STATUS
index 3438215ee7..2b285d1db5 100644
--- a/src/lib/libssl/src/STATUS
+++ b/src/lib/libssl/src/STATUS
@@ -1,10 +1,11 @@
1 1
2 OpenSSL STATUS Last modified at 2 OpenSSL STATUS Last modified at
3 ______________ $Date: 2002/05/15 02:29:08 $ 3 ______________ $Date: 2002/05/21 01:49:11 $
4 4
5 DEVELOPMENT STATE 5 DEVELOPMENT STATE
6 6
7 o OpenSSL 0.9.7: Under development... 7 o OpenSSL 0.9.7: Under development...
8 o OpenSSL 0.9.6d: Released on May 9th, 2002
8 o OpenSSL 0.9.6c: Released on December 21st, 2001 9 o OpenSSL 0.9.6c: Released on December 21st, 2001
9 o OpenSSL 0.9.6b: Released on July 9th, 2001 10 o OpenSSL 0.9.6b: Released on July 9th, 2001
10 o OpenSSL 0.9.6a: Released on April 5th, 2001 11 o OpenSSL 0.9.6a: Released on April 5th, 2001
@@ -17,23 +18,12 @@
17 o OpenSSL 0.9.2b: Released on March 22th, 1999 18 o OpenSSL 0.9.2b: Released on March 22th, 1999
18 o OpenSSL 0.9.1c: Released on December 23th, 1998 19 o OpenSSL 0.9.1c: Released on December 23th, 1998
19 20
20 RELEASE SHOWSTOPPERS 21 [See also http://www.openssl.org/support/rt2.html]
21
22 o BIGNUM library failures on 64-bit platforms (0.9.7-dev):
23 - BN_mod_mul verificiation (bc) fails for solaris64-sparcv9-cc
24 and other 64-bit platforms
25 22
26 Checked on Result 23 RELEASE SHOWSTOPPERS
27 alpha-cc (Tru64 version 4.0) works
28 linux-alpha+bwx-gcc doesn't work. Reported by
29 Sean O'Riordain <seanpor@acm.org>
30 OpenBSD-sparc64 doesn't work. BN_mod_mul breaks.
31
32 Needs checked on
33 [add platforms here]
34 24
35 - BN_mod_mul verification fails for mips3-sgi-irix 25 o BN_mod_mul verification fails for mips3-sgi-irix
36 unless configured with no-asm 26 unless configured with no-asm
37 27
38 AVAILABLE PATCHES 28 AVAILABLE PATCHES
39 29
diff --git a/src/lib/libssl/src/apps/apps.h b/src/lib/libssl/src/apps/apps.h
index a05ba712be..5b3836ab22 100644
--- a/src/lib/libssl/src/apps/apps.h
+++ b/src/lib/libssl/src/apps/apps.h
@@ -253,6 +253,8 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
253 ASN1_GENERALIZEDTIME **pinvtm, char *str); 253 ASN1_GENERALIZEDTIME **pinvtm, char *str);
254int make_serial_index(TXT_DB *db); 254int make_serial_index(TXT_DB *db);
255 255
256X509_NAME *do_subject(char *str, long chtype);
257
256#define FORMAT_UNDEF 0 258#define FORMAT_UNDEF 0
257#define FORMAT_ASN1 1 259#define FORMAT_ASN1 1
258#define FORMAT_TEXT 2 260#define FORMAT_TEXT 2
diff --git a/src/lib/libssl/src/apps/ca.c b/src/lib/libssl/src/apps/ca.c
index 8be557c956..51d9470aa1 100644
--- a/src/lib/libssl/src/apps/ca.c
+++ b/src/lib/libssl/src/apps/ca.c
@@ -238,7 +238,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
238 int verbose, X509_REQ *req, char *ext_sect, CONF *conf, 238 int verbose, X509_REQ *req, char *ext_sect, CONF *conf,
239 unsigned long certopt, unsigned long nameopt, int default_op, 239 unsigned long certopt, unsigned long nameopt, int default_op,
240 int ext_copy); 240 int ext_copy);
241static X509_NAME *do_subject(char *subject);
242static int do_revoke(X509 *x509, TXT_DB *db, int ext, char *extval); 241static int do_revoke(X509 *x509, TXT_DB *db, int ext, char *extval);
243static int get_certificate_status(const char *ser_status, TXT_DB *db); 242static int get_certificate_status(const char *ser_status, TXT_DB *db);
244static int do_updatedb(TXT_DB *db); 243static int do_updatedb(TXT_DB *db);
@@ -1874,7 +1873,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
1874 1873
1875 if (subj) 1874 if (subj)
1876 { 1875 {
1877 X509_NAME *n = do_subject(subj); 1876 X509_NAME *n = do_subject(subj, MBSTRING_ASC);
1878 1877
1879 if (!n) 1878 if (!n)
1880 { 1879 {
@@ -3012,13 +3011,13 @@ int make_revoked(X509_REVOKED *rev, char *str)
3012 * subject is expected to be in the format /type0=value0/type1=value1/type2=... 3011 * subject is expected to be in the format /type0=value0/type1=value1/type2=...
3013 * where characters may be escaped by \ 3012 * where characters may be escaped by \
3014 */ 3013 */
3015static X509_NAME *do_subject(char *subject) 3014X509_NAME *do_subject(char *subject, long chtype)
3016 { 3015 {
3017 size_t buflen = strlen (subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */ 3016 size_t buflen = strlen(subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */
3018 char *buf = malloc (buflen); 3017 char *buf = OPENSSL_malloc(buflen);
3019 size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */ 3018 size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */
3020 char **ne_types = malloc (max_ne * sizeof (char *)); 3019 char **ne_types = OPENSSL_malloc(max_ne * sizeof (char *));
3021 char **ne_values = malloc (max_ne * sizeof (char *)); 3020 char **ne_values = OPENSSL_malloc(max_ne * sizeof (char *));
3022 3021
3023 char *sp = subject, *bp = buf; 3022 char *sp = subject, *bp = buf;
3024 int i, ne_num = 0; 3023 int i, ne_num = 0;
@@ -3029,13 +3028,13 @@ static X509_NAME *do_subject(char *subject)
3029 if (!buf || !ne_types || !ne_values) 3028 if (!buf || !ne_types || !ne_values)
3030 { 3029 {
3031 BIO_printf(bio_err, "malloc error\n"); 3030 BIO_printf(bio_err, "malloc error\n");
3032 goto error0; 3031 goto error;
3033 } 3032 }
3034 3033
3035 if (*subject != '/') 3034 if (*subject != '/')
3036 { 3035 {
3037 BIO_printf(bio_err, "Subject does not start with '/'.\n"); 3036 BIO_printf(bio_err, "Subject does not start with '/'.\n");
3038 goto error0; 3037 goto error;
3039 } 3038 }
3040 sp++; /* skip leading / */ 3039 sp++; /* skip leading / */
3041 3040
@@ -3051,7 +3050,7 @@ static X509_NAME *do_subject(char *subject)
3051 else 3050 else
3052 { 3051 {
3053 BIO_printf(bio_err, "escape character at end of string\n"); 3052 BIO_printf(bio_err, "escape character at end of string\n");
3054 goto error0; 3053 goto error;
3055 } 3054 }
3056 else if (*sp == '=') 3055 else if (*sp == '=')
3057 { 3056 {
@@ -3065,7 +3064,7 @@ static X509_NAME *do_subject(char *subject)
3065 if (!*sp) 3064 if (!*sp)
3066 { 3065 {
3067 BIO_printf(bio_err, "end of string encountered while processing type of subject name element #%d\n", ne_num); 3066 BIO_printf(bio_err, "end of string encountered while processing type of subject name element #%d\n", ne_num);
3068 goto error0; 3067 goto error;
3069 } 3068 }
3070 ne_values[ne_num] = bp; 3069 ne_values[ne_num] = bp;
3071 while (*sp) 3070 while (*sp)
@@ -3076,12 +3075,11 @@ static X509_NAME *do_subject(char *subject)
3076 else 3075 else
3077 { 3076 {
3078 BIO_printf(bio_err, "escape character at end of string\n"); 3077 BIO_printf(bio_err, "escape character at end of string\n");
3079 goto error0; 3078 goto error;
3080 } 3079 }
3081 else if (*sp == '/') 3080 else if (*sp == '/')
3082 { 3081 {
3083 sp++; 3082 sp++;
3084 *bp++ = '\0';
3085 break; 3083 break;
3086 } 3084 }
3087 else 3085 else
@@ -3092,7 +3090,7 @@ static X509_NAME *do_subject(char *subject)
3092 } 3090 }
3093 3091
3094 if (!(n = X509_NAME_new())) 3092 if (!(n = X509_NAME_new()))
3095 goto error0; 3093 goto error;
3096 3094
3097 for (i = 0; i < ne_num; i++) 3095 for (i = 0; i < ne_num; i++)
3098 { 3096 {
@@ -3108,25 +3106,26 @@ static X509_NAME *do_subject(char *subject)
3108 continue; 3106 continue;
3109 } 3107 }
3110 3108
3111 if (!X509_NAME_add_entry_by_NID(n, nid, MBSTRING_ASC, (unsigned char*)ne_values[i], -1,-1,0)) 3109 if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_values[i], -1,-1,0))
3112 goto error1; 3110 goto error;
3113 } 3111 }
3114 3112
3115 free (ne_values); 3113 OPENSSL_free(ne_values);
3116 free (ne_types); 3114 OPENSSL_free(ne_types);
3117 free (buf); 3115 OPENSSL_free(buf);
3118 return n; 3116 return n;
3119 3117
3120error1: 3118error:
3121 X509_NAME_free(n); 3119 X509_NAME_free(n);
3122error0: 3120 if (ne_values)
3123 free (ne_values); 3121 OPENSSL_free(ne_values);
3124 free (ne_types); 3122 if (ne_types)
3125 free (buf); 3123 OPENSSL_free(ne_types);
3124 if (buf)
3125 OPENSSL_free(buf);
3126 return NULL; 3126 return NULL;
3127} 3127}
3128 3128
3129
3130int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str) 3129int old_entry_print(BIO *bp, ASN1_OBJECT *obj, ASN1_STRING *str)
3131 { 3130 {
3132 char buf[25],*pbuf, *p; 3131 char buf[25],*pbuf, *p;
diff --git a/src/lib/libssl/src/apps/req.c b/src/lib/libssl/src/apps/req.c
index 790aa90eb6..5631a3839b 100644
--- a/src/lib/libssl/src/apps/req.c
+++ b/src/lib/libssl/src/apps/req.c
@@ -1144,120 +1144,18 @@ err:
1144 */ 1144 */
1145static int build_subject(X509_REQ *req, char *subject, unsigned long chtype) 1145static int build_subject(X509_REQ *req, char *subject, unsigned long chtype)
1146 { 1146 {
1147 size_t buflen = strlen (subject)+1; /* to copy the types and values into. due to escaping, the copy can only become shorter */ 1147 X509_NAME *n;
1148 char *buf = malloc (buflen);
1149 size_t max_ne = buflen / 2 + 1; /* maximum number of name elements */
1150 char **ne_types = malloc (max_ne * sizeof (char *));
1151 char **ne_values = malloc (max_ne * sizeof (char *));
1152 1148
1153 char *sp = subject, *bp = buf; 1149 if (!(n = do_subject(subject, chtype)))
1154 int i, ne_num = 0; 1150 return 0;
1155
1156 X509_NAME *n = NULL;
1157 int nid;
1158
1159 if (!buf || !ne_types || !ne_values)
1160 {
1161 BIO_printf(bio_err, "malloc error\n");
1162 goto error0;
1163 }
1164
1165 if (*subject != '/')
1166 {
1167 BIO_printf(bio_err, "Subject does not start with '/'.\n");
1168 goto error0;
1169 }
1170 sp++; /* skip leading / */
1171
1172 while (*sp)
1173 {
1174 /* collect type */
1175 ne_types[ne_num] = bp;
1176 while (*sp)
1177 {
1178 if (*sp == '\\') /* is there anything to escape in the type...? */
1179 if (*++sp)
1180 *bp++ = *sp++;
1181 else
1182 {
1183 BIO_printf(bio_err, "escape character at end of string\n");
1184 goto error0;
1185 }
1186 else if (*sp == '=')
1187 {
1188 sp++;
1189 *bp++ = '\0';
1190 break;
1191 }
1192 else
1193 *bp++ = *sp++;
1194 }
1195 if (!*sp)
1196 {
1197 BIO_printf(bio_err, "end of string encountered while processing type of subject name element #%d\n", ne_num);
1198 goto error0;
1199 }
1200 ne_values[ne_num] = bp;
1201 while (*sp)
1202 {
1203 if (*sp == '\\')
1204 if (*++sp)
1205 *bp++ = *sp++;
1206 else
1207 {
1208 BIO_printf(bio_err, "escape character at end of string\n");
1209 goto error0;
1210 }
1211 else if (*sp == '/')
1212 {
1213 sp++;
1214 *bp++ = '\0';
1215 break;
1216 }
1217 else
1218 *bp++ = *sp++;
1219 }
1220 *bp++ = '\0';
1221 ne_num++;
1222 }
1223
1224 if (!(n = X509_NAME_new()))
1225 goto error0;
1226 1151
1227 for(i = 0; i < ne_num; i++) 1152 if (!X509_REQ_set_subject_name(req, n))
1228 { 1153 {
1229 if ((nid=OBJ_txt2nid(ne_types[i])) == NID_undef) 1154 X509_NAME_free(n);
1230 { 1155 return 0;
1231 BIO_printf(bio_err, "Subject Attribute %s has no known NID, skipped\n", ne_types[i]);
1232 continue;
1233 }
1234
1235 if (!*ne_values[i])
1236 {
1237 BIO_printf(bio_err, "No value provided for Subject Attribute %s, skipped\n", ne_types[i]);
1238 continue;
1239 }
1240
1241 if (!X509_NAME_add_entry_by_NID(n, nid, chtype, (unsigned char*)ne_values[i], -1,-1,0))
1242 goto error1;
1243
1244 } 1156 }
1245
1246 if (!X509_REQ_set_subject_name(req, n))
1247 goto error1;
1248 X509_NAME_free(n); 1157 X509_NAME_free(n);
1249 free (ne_values);
1250 free (ne_types);
1251 free (buf);
1252 return 1; 1158 return 1;
1253
1254error1:
1255 X509_NAME_free(n);
1256error0:
1257 free (ne_values);
1258 free (ne_types);
1259 free (buf);
1260 return 0;
1261} 1159}
1262 1160
1263 1161
diff --git a/src/lib/libssl/src/config b/src/lib/libssl/src/config
index a7a40e04db..132fb7a0ce 100644
--- a/src/lib/libssl/src/config
+++ b/src/lib/libssl/src/config
@@ -517,6 +517,10 @@ EOF
517 ${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}` 517 ${CC} -o dummy dummy.c && OUT=`./dummy ${MACHINE}`
518 rm dummy dummy.c 518 rm dummy dummy.c
519 ;; 519 ;;
520 ppc64-*-linux2)
521 #Use the standard target for PPC architecture until we create a
522 #special one for the 64bit architecture.
523 OUT="linux-ppc" ;;
520 ppc-*-linux2) OUT="linux-ppc" ;; 524 ppc-*-linux2) OUT="linux-ppc" ;;
521 m68k-*-linux*) OUT="linux-m68k" ;; 525 m68k-*-linux*) OUT="linux-m68k" ;;
522 ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;; 526 ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
diff --git a/src/lib/libssl/src/crypto/asn1/p5_pbev2.c b/src/lib/libssl/src/crypto/asn1/p5_pbev2.c
index 43dfe09479..91e1c8987d 100644
--- a/src/lib/libssl/src/crypto/asn1/p5_pbev2.c
+++ b/src/lib/libssl/src/crypto/asn1/p5_pbev2.c
@@ -116,6 +116,8 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
116 if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0) 116 if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0)
117 goto err; 117 goto err;
118 118
119 EVP_CIPHER_CTX_init(&ctx);
120
119 /* Dummy cipherinit to just setup the IV */ 121 /* Dummy cipherinit to just setup the IV */
120 EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, iv, 0); 122 EVP_CipherInit_ex(&ctx, cipher, NULL, NULL, iv, 0);
121 if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) { 123 if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) {
diff --git a/src/lib/libssl/src/crypto/bio/b_print.c b/src/lib/libssl/src/crypto/bio/b_print.c
index b7e268f092..3ce1290772 100644
--- a/src/lib/libssl/src/crypto/bio/b_print.c
+++ b/src/lib/libssl/src/crypto/bio/b_print.c
@@ -56,6 +56,13 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59/* disable assert() unless BIO_DEBUG has been defined */
60#ifndef BIO_DEBUG
61# ifndef NDEBUG
62# define NDEBUG
63# endif
64#endif
65
59/* 66/*
60 * Stolen from tjh's ssl/ssl_trc.c stuff. 67 * Stolen from tjh's ssl/ssl_trc.c stuff.
61 */ 68 */
@@ -716,12 +723,13 @@ doapr_outch(
716 if (buffer) { 723 if (buffer) {
717 while (*currlen >= *maxlen) { 724 while (*currlen >= *maxlen) {
718 if (*buffer == NULL) { 725 if (*buffer == NULL) {
719 assert(*sbuffer != NULL);
720 if (*maxlen == 0) 726 if (*maxlen == 0)
721 *maxlen = 1024; 727 *maxlen = 1024;
722 *buffer = OPENSSL_malloc(*maxlen); 728 *buffer = OPENSSL_malloc(*maxlen);
723 if (*currlen > 0) 729 if (*currlen > 0) {
730 assert(*sbuffer != NULL);
724 memcpy(*buffer, *sbuffer, *currlen); 731 memcpy(*buffer, *sbuffer, *currlen);
732 }
725 *sbuffer = NULL; 733 *sbuffer = NULL;
726 } else { 734 } else {
727 *maxlen += 1024; 735 *maxlen += 1024;
@@ -761,7 +769,9 @@ int BIO_vprintf (BIO *bio, const char *format, va_list args)
761 { 769 {
762 int ret; 770 int ret;
763 size_t retlen; 771 size_t retlen;
764 MS_STATIC char hugebuf[1024*10]; 772 char hugebuf[1024*2]; /* Was previously 10k, which is unreasonable
773 in small-stack environments, like threads
774 or DOS programs. */
765 char *hugebufp = hugebuf; 775 char *hugebufp = hugebuf;
766 size_t hugebufsize = sizeof(hugebuf); 776 size_t hugebufsize = sizeof(hugebuf);
767 char *dynbuf = NULL; 777 char *dynbuf = NULL;
diff --git a/src/lib/libssl/src/crypto/bio/bss_bio.c b/src/lib/libssl/src/crypto/bio/bss_bio.c
index a5da473031..1c485a4479 100644
--- a/src/lib/libssl/src/crypto/bio/bss_bio.c
+++ b/src/lib/libssl/src/crypto/bio/bss_bio.c
@@ -7,9 +7,18 @@
7 * for which no specific BIO method is available. 7 * for which no specific BIO method is available.
8 * See ssl/ssltest.c for some hints on how this can be used. */ 8 * See ssl/ssltest.c for some hints on how this can be used. */
9 9
10/* BIO_DEBUG implies BIO_PAIR_DEBUG */
11#ifdef BIO_DEBUG
12# ifndef BIO_PAIR_DEBUG
13# define BIO_PAIR_DEBUG
14# endif
15#endif
16
17/* disable assert() unless BIO_PAIR_DEBUG has been defined */
10#ifndef BIO_PAIR_DEBUG 18#ifndef BIO_PAIR_DEBUG
11# undef NDEBUG /* avoid conflicting definitions */ 19# ifndef NDEBUG
12# define NDEBUG 20# define NDEBUG
21# endif
13#endif 22#endif
14 23
15#include <assert.h> 24#include <assert.h>
diff --git a/src/lib/libssl/src/crypto/bn/bn.h b/src/lib/libssl/src/crypto/bn/bn.h
index d25b49c9d8..1eaf879553 100644
--- a/src/lib/libssl/src/crypto/bn/bn.h
+++ b/src/lib/libssl/src/crypto/bn/bn.h
@@ -136,7 +136,7 @@ extern "C" {
136#define BN_MASK2h (0xffffffff00000000LL) 136#define BN_MASK2h (0xffffffff00000000LL)
137#define BN_MASK2h1 (0xffffffff80000000LL) 137#define BN_MASK2h1 (0xffffffff80000000LL)
138#define BN_TBIT (0x8000000000000000LL) 138#define BN_TBIT (0x8000000000000000LL)
139#define BN_DEC_CONV (10000000000000000000LL) 139#define BN_DEC_CONV (10000000000000000000ULL)
140#define BN_DEC_FMT1 "%llu" 140#define BN_DEC_FMT1 "%llu"
141#define BN_DEC_FMT2 "%019llu" 141#define BN_DEC_FMT2 "%019llu"
142#define BN_DEC_NUM 19 142#define BN_DEC_NUM 19
diff --git a/src/lib/libssl/src/crypto/bn/bn_mul.c b/src/lib/libssl/src/crypto/bn/bn_mul.c
index 41ea925b8d..7bffc9c16a 100644
--- a/src/lib/libssl/src/crypto/bn/bn_mul.c
+++ b/src/lib/libssl/src/crypto/bn/bn_mul.c
@@ -408,16 +408,22 @@ void bn_mul_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2,
408 return; 408 return;
409 } 409 }
410# endif 410# endif
411 if (n2 == 8) 411 /* Only call bn_mul_comba 8 if n2 == 8 and the
412 * two arrays are complete [steve]
413 */
414 if (n2 == 8 && dna == 0 && dnb == 0)
412 { 415 {
413 bn_mul_comba8(r,a,b); 416 bn_mul_comba8(r,a,b);
414 return; 417 return;
415 } 418 }
416# endif /* BN_MUL_COMBA */ 419# endif /* BN_MUL_COMBA */
420 /* Else do normal multiply */
417 if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL) 421 if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL)
418 { 422 {
419 /* This should not happen */ 423 bn_mul_normal(r,a,n2+dna,b,n2+dnb);
420 bn_mul_normal(r,a,n2,b,n2); 424 if ((dna + dnb) < 0)
425 memset(&r[2*n2 + dna + dnb], 0,
426 sizeof(BN_ULONG) * -(dna + dnb));
421 return; 427 return;
422 } 428 }
423 /* r=(a[0]-a[1])*(b[1]-b[0]) */ 429 /* r=(a[0]-a[1])*(b[1]-b[0]) */
diff --git a/src/lib/libssl/src/crypto/evp/evp.h b/src/lib/libssl/src/crypto/evp/evp.h
index 915fe62341..0d870d60be 100644
--- a/src/lib/libssl/src/crypto/evp/evp.h
+++ b/src/lib/libssl/src/crypto/evp/evp.h
@@ -184,7 +184,7 @@ typedef struct evp_pkey_md_st
184 EVP_rsa_octet_string(),EVP_mdc2()) 184 EVP_rsa_octet_string(),EVP_mdc2())
185#define EVP_dsa_sha() \ 185#define EVP_dsa_sha() \
186 EVP_PKEY_MD_add(NID_dsaWithSHA,\ 186 EVP_PKEY_MD_add(NID_dsaWithSHA,\
187 EVP_dsa(),EVP_mdc2()) 187 EVP_dsa(),EVP_sha())
188#define EVP_dsa_sha1() \ 188#define EVP_dsa_sha1() \
189 EVP_PKEY_MD_add(NID_dsaWithSHA1,\ 189 EVP_PKEY_MD_add(NID_dsaWithSHA1,\
190 EVP_dsa(),EVP_sha1()) 190 EVP_dsa(),EVP_sha1())
@@ -525,7 +525,7 @@ int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
525 525
526int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, 526int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
527 int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk); 527 int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
528void EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl); 528int EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
529 529
530void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); 530void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
531void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out, 531void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
diff --git a/src/lib/libssl/src/crypto/evp/evp_enc.c b/src/lib/libssl/src/crypto/evp/evp_enc.c
index d28a7d266e..32a1c7a2e9 100644
--- a/src/lib/libssl/src/crypto/evp/evp_enc.c
+++ b/src/lib/libssl/src/crypto/evp/evp_enc.c
@@ -102,11 +102,13 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
102 goto skip_to_init; 102 goto skip_to_init;
103 if (cipher) 103 if (cipher)
104 { 104 {
105 /* Ensure an ENGINE left lying around from last time is cleared 105 /* Ensure a context left lying around from last time is cleared
106 * (the previous check attempted to avoid this if the same 106 * (the previous check attempted to avoid this if the same
107 * ENGINE and EVP_CIPHER could be used). */ 107 * ENGINE and EVP_CIPHER could be used). */
108 if(ctx->engine) 108 EVP_CIPHER_CTX_cleanup(ctx);
109 ENGINE_finish(ctx->engine); 109
110 /* Restore encrypt field: it is zeroed by cleanup */
111 ctx->encrypt = enc;
110 if(impl) 112 if(impl)
111 { 113 {
112 if (!ENGINE_init(impl)) 114 if (!ENGINE_init(impl))
@@ -140,6 +142,7 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *imp
140 } 142 }
141 else 143 else
142 ctx->engine = NULL; 144 ctx->engine = NULL;
145
143 ctx->cipher=cipher; 146 ctx->cipher=cipher;
144 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size); 147 ctx->cipher_data=OPENSSL_malloc(ctx->cipher->ctx_size);
145 ctx->key_len = cipher->key_len; 148 ctx->key_len = cipher->key_len;
@@ -303,7 +306,6 @@ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
303 { 306 {
304 int ret; 307 int ret;
305 ret = EVP_EncryptFinal_ex(ctx, out, outl); 308 ret = EVP_EncryptFinal_ex(ctx, out, outl);
306 EVP_CIPHER_CTX_cleanup(ctx);
307 return ret; 309 return ret;
308 } 310 }
309 311
@@ -314,14 +316,12 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
314 b=ctx->cipher->block_size; 316 b=ctx->cipher->block_size;
315 if (b == 1) 317 if (b == 1)
316 { 318 {
317 EVP_CIPHER_CTX_cleanup(ctx);
318 *outl=0; 319 *outl=0;
319 return 1; 320 return 1;
320 } 321 }
321 bl=ctx->buf_len; 322 bl=ctx->buf_len;
322 if (ctx->flags & EVP_CIPH_NO_PADDING) 323 if (ctx->flags & EVP_CIPH_NO_PADDING)
323 { 324 {
324 EVP_CIPHER_CTX_cleanup(ctx);
325 if(bl) 325 if(bl)
326 { 326 {
327 EVPerr(EVP_F_EVP_ENCRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH); 327 EVPerr(EVP_F_EVP_ENCRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -336,7 +336,6 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
336 ctx->buf[i]=n; 336 ctx->buf[i]=n;
337 ret=ctx->cipher->do_cipher(ctx,out,ctx->buf,b); 337 ret=ctx->cipher->do_cipher(ctx,out,ctx->buf,b);
338 338
339 EVP_CIPHER_CTX_cleanup(ctx);
340 339
341 if(ret) 340 if(ret)
342 *outl=b; 341 *outl=b;
@@ -394,7 +393,6 @@ int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
394 { 393 {
395 int ret; 394 int ret;
396 ret = EVP_DecryptFinal_ex(ctx, out, outl); 395 ret = EVP_DecryptFinal_ex(ctx, out, outl);
397 EVP_CIPHER_CTX_cleanup(ctx);
398 return ret; 396 return ret;
399 } 397 }
400 398
@@ -407,7 +405,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
407 b=ctx->cipher->block_size; 405 b=ctx->cipher->block_size;
408 if (ctx->flags & EVP_CIPH_NO_PADDING) 406 if (ctx->flags & EVP_CIPH_NO_PADDING)
409 { 407 {
410 EVP_CIPHER_CTX_cleanup(ctx);
411 if(ctx->buf_len) 408 if(ctx->buf_len)
412 { 409 {
413 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH); 410 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH);
@@ -420,14 +417,12 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
420 { 417 {
421 if (ctx->buf_len || !ctx->final_used) 418 if (ctx->buf_len || !ctx->final_used)
422 { 419 {
423 EVP_CIPHER_CTX_cleanup(ctx);
424 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_WRONG_FINAL_BLOCK_LENGTH); 420 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_WRONG_FINAL_BLOCK_LENGTH);
425 return(0); 421 return(0);
426 } 422 }
427 n=ctx->final[b-1]; 423 n=ctx->final[b-1];
428 if (n > b) 424 if (n > b)
429 { 425 {
430 EVP_CIPHER_CTX_cleanup(ctx);
431 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT); 426 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
432 return(0); 427 return(0);
433 } 428 }
@@ -435,7 +430,6 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
435 { 430 {
436 if (ctx->final[--b] != n) 431 if (ctx->final[--b] != n)
437 { 432 {
438 EVP_CIPHER_CTX_cleanup(ctx);
439 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT); 433 EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT);
440 return(0); 434 return(0);
441 } 435 }
@@ -447,17 +441,21 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
447 } 441 }
448 else 442 else
449 *outl=0; 443 *outl=0;
450 EVP_CIPHER_CTX_cleanup(ctx);
451 return(1); 444 return(1);
452 } 445 }
453 446
454int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) 447int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
455 { 448 {
456 if ((c->cipher != NULL) && (c->cipher->cleanup != NULL)) 449 if (c->cipher != NULL)
457 { 450 {
458 if(!c->cipher->cleanup(c)) return 0; 451 if(c->cipher->cleanup && !c->cipher->cleanup(c))
452 return 0;
453 /* Zero cipher context data */
454 if (c->cipher_data)
455 memset(c->cipher_data, 0, c->cipher->ctx_size);
459 } 456 }
460 OPENSSL_free(c->cipher_data); 457 if (c->cipher_data)
458 OPENSSL_free(c->cipher_data);
461 if (c->engine) 459 if (c->engine)
462 /* The EVP_CIPHER we used belongs to an ENGINE, release the 460 /* The EVP_CIPHER we used belongs to an ENGINE, release the
463 * functional reference we held for this reason. */ 461 * functional reference we held for this reason. */
diff --git a/src/lib/libssl/src/crypto/evp/evp_test.c b/src/lib/libssl/src/crypto/evp/evp_test.c
index 3607fe7776..decd0713d6 100644
--- a/src/lib/libssl/src/crypto/evp/evp_test.c
+++ b/src/lib/libssl/src/crypto/evp/evp_test.c
@@ -209,6 +209,8 @@ static void test1(const EVP_CIPHER *c,const unsigned char *key,int kn,
209 exit(9); 209 exit(9);
210 } 210 }
211 211
212 EVP_CIPHER_CTX_cleanup(&ctx);
213
212 printf("\n"); 214 printf("\n");
213 } 215 }
214 216
@@ -279,6 +281,8 @@ static int test_digest(const char *digest,
279 281
280 printf("\n"); 282 printf("\n");
281 283
284 EVP_MD_CTX_cleanup(&ctx);
285
282 return 1; 286 return 1;
283 } 287 }
284 288
diff --git a/src/lib/libssl/src/crypto/evp/p_seal.c b/src/lib/libssl/src/crypto/evp/p_seal.c
index 5570ca3745..37e547fe72 100644
--- a/src/lib/libssl/src/crypto/evp/p_seal.c
+++ b/src/lib/libssl/src/crypto/evp/p_seal.c
@@ -106,8 +106,10 @@ int inl;
106 } 106 }
107*/ 107*/
108 108
109void EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) 109int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
110 { 110 {
111 EVP_EncryptFinal_ex(ctx,out,outl); 111 int i;
112 i = EVP_EncryptFinal_ex(ctx,out,outl);
112 EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL); 113 EVP_EncryptInit_ex(ctx,NULL,NULL,NULL,NULL);
114 return i;
113 } 115 }
diff --git a/src/lib/libssl/src/crypto/ui/ui_openssl.c b/src/lib/libssl/src/crypto/ui/ui_openssl.c
index 3aa03f74aa..4e12165410 100644
--- a/src/lib/libssl/src/crypto/ui/ui_openssl.c
+++ b/src/lib/libssl/src/crypto/ui/ui_openssl.c
@@ -465,7 +465,7 @@ static int open_console(UI *ui)
465 tty_out=stderr; 465 tty_out=stderr;
466#endif 466#endif
467 467
468#if defined(TTY_get) && !defined(VMS) 468#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS)
469 if (TTY_get(fileno(tty_in),&tty_orig) == -1) 469 if (TTY_get(fileno(tty_in),&tty_orig) == -1)
470 { 470 {
471#ifdef ENOTTY 471#ifdef ENOTTY
diff --git a/src/lib/libssl/src/doc/apps/x509.pod b/src/lib/libssl/src/doc/apps/x509.pod
index 23367b7659..4a17e338dd 100644
--- a/src/lib/libssl/src/doc/apps/x509.pod
+++ b/src/lib/libssl/src/doc/apps/x509.pod
@@ -505,6 +505,8 @@ As well as customising the name output format, it is also possible to
505customise the actual fields printed using the B<certopt> options when 505customise the actual fields printed using the B<certopt> options when
506the B<text> option is present. The default behaviour is to print all fields. 506the B<text> option is present. The default behaviour is to print all fields.
507 507
508=over 4
509
508=item B<compatible> 510=item B<compatible>
509 511
510use the old format. This is equivalent to specifying no output options at all. 512use the old format. This is equivalent to specifying no output options at all.
@@ -574,10 +576,6 @@ hex dump unsupported extensions.
574the value used by the B<ca> utility, equivalent to B<no_issuer>, B<no_pubkey>, B<no_header>, 576the value used by the B<ca> utility, equivalent to B<no_issuer>, B<no_pubkey>, B<no_header>,
575B<no_version>, B<no_sigdump> and B<no_signame>. 577B<no_version>, B<no_sigdump> and B<no_signame>.
576 578
577
578
579=over 4
580
581=back 579=back
582 580
583=head1 EXAMPLES 581=head1 EXAMPLES
diff --git a/src/lib/libssl/src/ms/mingw32.bat b/src/lib/libssl/src/ms/mingw32.bat
index db70b8580e..1968f4150b 100644
--- a/src/lib/libssl/src/ms/mingw32.bat
+++ b/src/lib/libssl/src/ms/mingw32.bat
@@ -12,7 +12,8 @@ echo Generating x86 for GNU assember
12 12
13echo Bignum 13echo Bignum
14cd crypto\bn\asm 14cd crypto\bn\asm
15perl x86.pl gaswin > bn-win32.s 15perl bn-586.pl gaswin > bn-win32.s
16perl co-586.pl gaswin > co-win32.s
16cd ..\..\.. 17cd ..\..\..
17 18
18echo DES 19echo DES
diff --git a/src/lib/libssl/src/shlib/svr5-shared-gcc.sh b/src/lib/libssl/src/shlib/svr5-shared-gcc.sh
index b36a0375a6..76957df947 100644
--- a/src/lib/libssl/src/shlib/svr5-shared-gcc.sh
+++ b/src/lib/libssl/src/shlib/svr5-shared-gcc.sh
@@ -9,7 +9,7 @@ sh_slib=$slib.so.$major.$minor
9clib=libcrypto 9clib=libcrypto
10sh_clib=$clib.so.$major.$minor 10sh_clib=$clib.so.$major.$minor
11 11
12FLAGS="-O3 -DFILIO_H -fomit-frame-pointer -pthread 12FLAGS="-O3 -DFILIO_H -fomit-frame-pointer -pthread"
13SHFLAGS="-DPIC -fPIC" 13SHFLAGS="-DPIC -fPIC"
14 14
15touch $sh_clib 15touch $sh_clib
diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c
index 79e89fe14a..3d31bbf05f 100644
--- a/src/lib/libssl/src/ssl/ssl_cert.c
+++ b/src/lib/libssl/src/ssl/ssl_cert.c
@@ -825,7 +825,6 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
825err: 825err:
826 FindClose(hFind); 826 FindClose(hFind);
827err_noclose: 827err_noclose:
828 if (d) closedir(d);
829 CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); 828 CRYPTO_w_unlock(CRYPTO_LOCK_READDIR);
830 return ret; 829 return ret;
831 } 830 }
diff --git a/src/lib/libssl/src/util/pl/Mingw32.pl b/src/lib/libssl/src/util/pl/Mingw32.pl
index 37f36126f3..45ab685974 100644
--- a/src/lib/libssl/src/util/pl/Mingw32.pl
+++ b/src/lib/libssl/src/util/pl/Mingw32.pl
@@ -25,6 +25,8 @@ if ($gaswin and !$no_asm)
25 { 25 {
26 $bn_asm_obj='$(OBJ_D)/bn-win32.o'; 26 $bn_asm_obj='$(OBJ_D)/bn-win32.o';
27 $bn_asm_src='crypto/bn/asm/bn-win32.s'; 27 $bn_asm_src='crypto/bn/asm/bn-win32.s';
28 $bnco_asm_obj='$(OBJ_D)/co-win32.o';
29 $bnco_asm_src='crypto/bn/asm/co-win32.s';
28 $des_enc_obj='$(OBJ_D)/d-win32.o $(OBJ_D)/y-win32.o'; 30 $des_enc_obj='$(OBJ_D)/d-win32.o $(OBJ_D)/y-win32.o';
29 $des_enc_src='crypto/des/asm/d-win32.s crypto/des/asm/y-win32.s'; 31 $des_enc_src='crypto/des/asm/d-win32.s crypto/des/asm/y-win32.s';
30 $bf_enc_obj='$(OBJ_D)/b-win32.o'; 32 $bf_enc_obj='$(OBJ_D)/b-win32.o';
@@ -66,12 +68,12 @@ $lfile='';
66 68
67$asm='as'; 69$asm='as';
68$afile='-o '; 70$afile='-o ';
69$bn_asm_obj=""; 71#$bn_asm_obj="";
70$bn_asm_src=""; 72#$bn_asm_src="";
71$des_enc_obj=""; 73#$des_enc_obj="";
72$des_enc_src=""; 74#$des_enc_src="";
73$bf_enc_obj=""; 75#$bf_enc_obj="";
74$bf_enc_src=""; 76#$bf_enc_src="";
75 77
76sub do_lib_rule 78sub do_lib_rule
77 { 79 {
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c
index 79e89fe14a..3d31bbf05f 100644
--- a/src/lib/libssl/ssl_cert.c
+++ b/src/lib/libssl/ssl_cert.c
@@ -825,7 +825,6 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
825err: 825err:
826 FindClose(hFind); 826 FindClose(hFind);
827err_noclose: 827err_noclose:
828 if (d) closedir(d);
829 CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); 828 CRYPTO_w_unlock(CRYPTO_LOCK_READDIR);
830 return ret; 829 return ret;
831 } 830 }