diff options
| author | beck <> | 2001-06-22 00:03:44 +0000 |
|---|---|---|
| committer | beck <> | 2001-06-22 00:03:44 +0000 |
| commit | 38b6ff9e5294811c57541ad47940f8f8f41dc114 (patch) | |
| tree | 402699541cee3cf3f2943b0384dbda7de534de70 /src/lib/libssl/s3_lib.c | |
| parent | afae624d63e4e717c5bae8c7842a4712309f728f (diff) | |
| download | openbsd-38b6ff9e5294811c57541ad47940f8f8f41dc114.tar.gz openbsd-38b6ff9e5294811c57541ad47940f8f8f41dc114.tar.bz2 openbsd-38b6ff9e5294811c57541ad47940f8f8f41dc114.zip | |
openssl-engine-0.9.6a merge
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 88 |
1 files changed, 64 insertions, 24 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index cee2021b6b..c32c06de32 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -55,6 +55,59 @@ | |||
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence |
| 56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
| 57 | */ | 57 | */ |
| 58 | /* ==================================================================== | ||
| 59 | * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. | ||
| 60 | * | ||
| 61 | * Redistribution and use in source and binary forms, with or without | ||
| 62 | * modification, are permitted provided that the following conditions | ||
| 63 | * are met: | ||
| 64 | * | ||
| 65 | * 1. Redistributions of source code must retain the above copyright | ||
| 66 | * notice, this list of conditions and the following disclaimer. | ||
| 67 | * | ||
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 69 | * notice, this list of conditions and the following disclaimer in | ||
| 70 | * the documentation and/or other materials provided with the | ||
| 71 | * distribution. | ||
| 72 | * | ||
| 73 | * 3. All advertising materials mentioning features or use of this | ||
| 74 | * software must display the following acknowledgment: | ||
| 75 | * "This product includes software developed by the OpenSSL Project | ||
| 76 | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 77 | * | ||
| 78 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 79 | * endorse or promote products derived from this software without | ||
| 80 | * prior written permission. For written permission, please contact | ||
| 81 | * openssl-core@openssl.org. | ||
| 82 | * | ||
| 83 | * 5. Products derived from this software may not be called "OpenSSL" | ||
| 84 | * nor may "OpenSSL" appear in their names without prior written | ||
| 85 | * permission of the OpenSSL Project. | ||
| 86 | * | ||
| 87 | * 6. Redistributions of any form whatsoever must retain the following | ||
| 88 | * acknowledgment: | ||
| 89 | * "This product includes software developed by the OpenSSL Project | ||
| 90 | * for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 91 | * | ||
| 92 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 93 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 94 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 95 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 96 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 97 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 98 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 99 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 100 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 101 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 102 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 103 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 104 | * ==================================================================== | ||
| 105 | * | ||
| 106 | * This product includes cryptographic software written by Eric Young | ||
| 107 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
| 108 | * Hudson (tjh@cryptsoft.com). | ||
| 109 | * | ||
| 110 | */ | ||
| 58 | 111 | ||
| 59 | #include <stdio.h> | 112 | #include <stdio.h> |
| 60 | #include <openssl/md5.h> | 113 | #include <openssl/md5.h> |
| @@ -638,10 +691,9 @@ SSL_CIPHER *ssl3_get_cipher(unsigned int u) | |||
| 638 | return(NULL); | 691 | return(NULL); |
| 639 | } | 692 | } |
| 640 | 693 | ||
| 641 | /* The problem is that it may not be the correct record type */ | ||
| 642 | int ssl3_pending(SSL *s) | 694 | int ssl3_pending(SSL *s) |
| 643 | { | 695 | { |
| 644 | return(s->s3->rrec.length); | 696 | return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0; |
| 645 | } | 697 | } |
| 646 | 698 | ||
| 647 | int ssl3_new(SSL *s) | 699 | int ssl3_new(SSL *s) |
| @@ -1189,7 +1241,7 @@ int ssl3_shutdown(SSL *s) | |||
| 1189 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) | 1241 | else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) |
| 1190 | { | 1242 | { |
| 1191 | /* If we are waiting for a close from our peer, we are closed */ | 1243 | /* If we are waiting for a close from our peer, we are closed */ |
| 1192 | ssl3_read_bytes(s,0,NULL,0); | 1244 | ssl3_read_bytes(s,0,NULL,0,0); |
| 1193 | } | 1245 | } |
| 1194 | 1246 | ||
| 1195 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && | 1247 | if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) && |
| @@ -1252,14 +1304,14 @@ int ssl3_write(SSL *s, const void *buf, int len) | |||
| 1252 | return(ret); | 1304 | return(ret); |
| 1253 | } | 1305 | } |
| 1254 | 1306 | ||
| 1255 | int ssl3_read(SSL *s, void *buf, int len) | 1307 | static int ssl3_read_internal(SSL *s, void *buf, int len, int peek) |
| 1256 | { | 1308 | { |
| 1257 | int ret; | 1309 | int ret; |
| 1258 | 1310 | ||
| 1259 | clear_sys_error(); | 1311 | clear_sys_error(); |
| 1260 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); | 1312 | if (s->s3->renegotiate) ssl3_renegotiate_check(s); |
| 1261 | s->s3->in_read_app_data=1; | 1313 | s->s3->in_read_app_data=1; |
| 1262 | ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len); | 1314 | ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); |
| 1263 | if ((ret == -1) && (s->s3->in_read_app_data == 0)) | 1315 | if ((ret == -1) && (s->s3->in_read_app_data == 0)) |
| 1264 | { | 1316 | { |
| 1265 | /* ssl3_read_bytes decided to call s->handshake_func, which | 1317 | /* ssl3_read_bytes decided to call s->handshake_func, which |
| @@ -1269,7 +1321,7 @@ int ssl3_read(SSL *s, void *buf, int len) | |||
| 1269 | * by resetting 'in_read_app_data', strangely); so disable | 1321 | * by resetting 'in_read_app_data', strangely); so disable |
| 1270 | * handshake processing and try to read application data again. */ | 1322 | * handshake processing and try to read application data again. */ |
| 1271 | s->in_handshake++; | 1323 | s->in_handshake++; |
| 1272 | ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len); | 1324 | ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek); |
| 1273 | s->in_handshake--; | 1325 | s->in_handshake--; |
| 1274 | } | 1326 | } |
| 1275 | else | 1327 | else |
| @@ -1278,26 +1330,14 @@ int ssl3_read(SSL *s, void *buf, int len) | |||
| 1278 | return(ret); | 1330 | return(ret); |
| 1279 | } | 1331 | } |
| 1280 | 1332 | ||
| 1281 | int ssl3_peek(SSL *s, char *buf, int len) | 1333 | int ssl3_read(SSL *s, void *buf, int len) |
| 1282 | { | 1334 | { |
| 1283 | SSL3_RECORD *rr; | 1335 | return ssl3_read_internal(s, buf, len, 0); |
| 1284 | int n; | 1336 | } |
| 1285 | |||
| 1286 | rr= &(s->s3->rrec); | ||
| 1287 | if ((rr->length == 0) || (rr->type != SSL3_RT_APPLICATION_DATA)) | ||
| 1288 | { | ||
| 1289 | n=ssl3_read(s,buf,1); | ||
| 1290 | if (n <= 0) return(n); | ||
| 1291 | rr->length++; | ||
| 1292 | rr->off--; | ||
| 1293 | } | ||
| 1294 | 1337 | ||
| 1295 | if ((unsigned int)len > rr->length) | 1338 | int ssl3_peek(SSL *s, void *buf, int len) |
| 1296 | n=rr->length; | 1339 | { |
| 1297 | else | 1340 | return ssl3_read_internal(s, buf, len, 1); |
| 1298 | n=len; | ||
| 1299 | memcpy(buf,&(rr->data[rr->off]),(unsigned int)n); | ||
| 1300 | return(n); | ||
| 1301 | } | 1341 | } |
| 1302 | 1342 | ||
| 1303 | int ssl3_renegotiate(SSL *s) | 1343 | int ssl3_renegotiate(SSL *s) |
