Imported OpenSSL 1.1.1d
This commit is contained in:
@@ -62,9 +62,11 @@ static int tls_dump_puts(BIO *bp, const char *str);
|
||||
/* Choose a sufficiently large type likely to be unused for this custom BIO */
|
||||
#define BIO_TYPE_TLS_DUMP_FILTER (0x80 | BIO_TYPE_FILTER)
|
||||
#define BIO_TYPE_MEMPACKET_TEST 0x81
|
||||
#define BIO_TYPE_ALWAYS_RETRY 0x82
|
||||
|
||||
static BIO_METHOD *method_tls_dump = NULL;
|
||||
static BIO_METHOD *meth_mem = NULL;
|
||||
static BIO_METHOD *meth_always_retry = NULL;
|
||||
|
||||
/* Note: Not thread safe! */
|
||||
const BIO_METHOD *bio_f_tls_dump_filter(void)
|
||||
@@ -612,6 +614,100 @@ static int mempacket_test_puts(BIO *bio, const char *str)
|
||||
return mempacket_test_write(bio, str, strlen(str));
|
||||
}
|
||||
|
||||
static int always_retry_new(BIO *bi);
|
||||
static int always_retry_free(BIO *a);
|
||||
static int always_retry_read(BIO *b, char *out, int outl);
|
||||
static int always_retry_write(BIO *b, const char *in, int inl);
|
||||
static long always_retry_ctrl(BIO *b, int cmd, long num, void *ptr);
|
||||
static int always_retry_gets(BIO *bp, char *buf, int size);
|
||||
static int always_retry_puts(BIO *bp, const char *str);
|
||||
|
||||
const BIO_METHOD *bio_s_always_retry(void)
|
||||
{
|
||||
if (meth_always_retry == NULL) {
|
||||
if (!TEST_ptr(meth_always_retry = BIO_meth_new(BIO_TYPE_ALWAYS_RETRY,
|
||||
"Always Retry"))
|
||||
|| !TEST_true(BIO_meth_set_write(meth_always_retry,
|
||||
always_retry_write))
|
||||
|| !TEST_true(BIO_meth_set_read(meth_always_retry,
|
||||
always_retry_read))
|
||||
|| !TEST_true(BIO_meth_set_puts(meth_always_retry,
|
||||
always_retry_puts))
|
||||
|| !TEST_true(BIO_meth_set_gets(meth_always_retry,
|
||||
always_retry_gets))
|
||||
|| !TEST_true(BIO_meth_set_ctrl(meth_always_retry,
|
||||
always_retry_ctrl))
|
||||
|| !TEST_true(BIO_meth_set_create(meth_always_retry,
|
||||
always_retry_new))
|
||||
|| !TEST_true(BIO_meth_set_destroy(meth_always_retry,
|
||||
always_retry_free)))
|
||||
return NULL;
|
||||
}
|
||||
return meth_always_retry;
|
||||
}
|
||||
|
||||
void bio_s_always_retry_free(void)
|
||||
{
|
||||
BIO_meth_free(meth_always_retry);
|
||||
}
|
||||
|
||||
static int always_retry_new(BIO *bio)
|
||||
{
|
||||
BIO_set_init(bio, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int always_retry_free(BIO *bio)
|
||||
{
|
||||
BIO_set_data(bio, NULL);
|
||||
BIO_set_init(bio, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int always_retry_read(BIO *bio, char *out, int outl)
|
||||
{
|
||||
BIO_set_retry_read(bio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int always_retry_write(BIO *bio, const char *in, int inl)
|
||||
{
|
||||
BIO_set_retry_write(bio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static long always_retry_ctrl(BIO *bio, int cmd, long num, void *ptr)
|
||||
{
|
||||
long ret = 1;
|
||||
|
||||
switch (cmd) {
|
||||
case BIO_CTRL_FLUSH:
|
||||
BIO_set_retry_write(bio);
|
||||
/* fall through */
|
||||
case BIO_CTRL_EOF:
|
||||
case BIO_CTRL_RESET:
|
||||
case BIO_CTRL_DUP:
|
||||
case BIO_CTRL_PUSH:
|
||||
case BIO_CTRL_POP:
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int always_retry_gets(BIO *bio, char *buf, int size)
|
||||
{
|
||||
BIO_set_retry_read(bio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int always_retry_puts(BIO *bio, const char *str)
|
||||
{
|
||||
BIO_set_retry_write(bio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int create_ssl_ctx_pair(const SSL_METHOD *sm, const SSL_METHOD *cm,
|
||||
int min_proto_version, int max_proto_version,
|
||||
SSL_CTX **sctx, SSL_CTX **cctx, char *certfile,
|
||||
@@ -824,7 +920,7 @@ int create_ssl_connection(SSL *serverssl, SSL *clientssl, int want)
|
||||
/*
|
||||
* We attempt to read some data on the client side which we expect to fail.
|
||||
* This will ensure we have received the NewSessionTicket in TLSv1.3 where
|
||||
* appropriate. We do this twice because there are 2 NewSesionTickets.
|
||||
* appropriate. We do this twice because there are 2 NewSessionTickets.
|
||||
*/
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes) > 0) {
|
||||
|
||||
Reference in New Issue
Block a user