Blame test/dtlsv1listentest.c

Packit Service 084de1
/*
Packit Service 084de1
 * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
 *
Packit Service 084de1
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
 * this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
 * in the file LICENSE in the source distribution or at
Packit Service 084de1
 * https://www.openssl.org/source/license.html
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
#include <string.h>
Packit Service 084de1
#include <openssl/ssl.h>
Packit Service 084de1
#include <openssl/bio.h>
Packit Service 084de1
#include <openssl/err.h>
Packit Service 084de1
#include <openssl/conf.h>
Packit Service 084de1
#include "internal/nelem.h"
Packit Service 084de1
#include "testutil.h"
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_SOCK
Packit Service 084de1
Packit Service 084de1
/* Just a ClientHello without a cookie */
Packit Service 084de1
static const unsigned char clienthello_nocookie[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x3A, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x2E, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x2E, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x00, /* Cookie len */
Packit Service 084de1
    0x00, 0x04, /* Ciphersuites len */
Packit Service 084de1
    0x00, 0x2f, /* AES128-SHA */
Packit Service 084de1
    0x00, 0xff, /* Empty reneg info SCSV */
Packit Service 084de1
    0x01, /* Compression methods len */
Packit Service 084de1
    0x00, /* Null compression */
Packit Service 084de1
    0x00, 0x00 /* Extensions len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* First fragment of a ClientHello without a cookie */
Packit Service 084de1
static const unsigned char clienthello_nocookie_frag[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x30, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x2E, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x24, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x00 /* Cookie len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* First fragment of a ClientHello which is too short */
Packit Service 084de1
static const unsigned char clienthello_nocookie_short[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x2F, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x2E, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x23, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00 /* Session id len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* Second fragment of a ClientHello */
Packit Service 084de1
static const unsigned char clienthello_2ndfrag[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x38, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x2E, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x02, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x2C, /* Fragment length */
Packit Service 084de1
    /* Version skipped - sent in first fragment */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x00, /* Cookie len */
Packit Service 084de1
    0x00, 0x04, /* Ciphersuites len */
Packit Service 084de1
    0x00, 0x2f, /* AES128-SHA */
Packit Service 084de1
    0x00, 0xff, /* Empty reneg info SCSV */
Packit Service 084de1
    0x01, /* Compression methods len */
Packit Service 084de1
    0x00, /* Null compression */
Packit Service 084de1
    0x00, 0x00 /* Extensions len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* A ClientHello with a good cookie */
Packit Service 084de1
static const unsigned char clienthello_cookie[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x4E, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x14, /* Cookie len */
Packit Service 084de1
    0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
Packit Service 084de1
    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, /* Cookie */
Packit Service 084de1
    0x00, 0x04, /* Ciphersuites len */
Packit Service 084de1
    0x00, 0x2f, /* AES128-SHA */
Packit Service 084de1
    0x00, 0xff, /* Empty reneg info SCSV */
Packit Service 084de1
    0x01, /* Compression methods len */
Packit Service 084de1
    0x00, /* Null compression */
Packit Service 084de1
    0x00, 0x00 /* Extensions len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* A fragmented ClientHello with a good cookie */
Packit Service 084de1
static const unsigned char clienthello_cookie_frag[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x44, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x38, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x14, /* Cookie len */
Packit Service 084de1
    0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
Packit Service 084de1
    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 /* Cookie */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
Packit Service 084de1
/* A ClientHello with a bad cookie */
Packit Service 084de1
static const unsigned char clienthello_badcookie[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x4E, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x14, /* Cookie len */
Packit Service 084de1
    0x01, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
Packit Service 084de1
    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, /* Cookie */
Packit Service 084de1
    0x00, 0x04, /* Ciphersuites len */
Packit Service 084de1
    0x00, 0x2f, /* AES128-SHA */
Packit Service 084de1
    0x00, 0xff, /* Empty reneg info SCSV */
Packit Service 084de1
    0x01, /* Compression methods len */
Packit Service 084de1
    0x00, /* Null compression */
Packit Service 084de1
    0x00, 0x00 /* Extensions len */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* A fragmented ClientHello with the fragment boundary mid cookie */
Packit Service 084de1
static const unsigned char clienthello_cookie_short[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x43, /* Record Length */
Packit Service 084de1
    0x01, /* ClientHello */
Packit Service 084de1
    0x00, 0x00, 0x42, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x37, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFD, /* DTLSv1.2 */
Packit Service 084de1
    0xCA, 0x18, 0x9F, 0x76, 0xEC, 0x57, 0xCE, 0xE5, 0xB3, 0xAB, 0x79, 0x90,
Packit Service 084de1
    0xAD, 0xAC, 0x6E, 0xD1, 0x58, 0x35, 0x03, 0x97, 0x16, 0x10, 0x82, 0x56,
Packit Service 084de1
    0xD8, 0x55, 0xFF, 0xE1, 0x8A, 0xA3, 0x2E, 0xF6, /* Random */
Packit Service 084de1
    0x00, /* Session id len */
Packit Service 084de1
    0x14, /* Cookie len */
Packit Service 084de1
    0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
Packit Service 084de1
    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12 /* Cookie */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
/* Bad record - too short */
Packit Service 084de1
static const unsigned char record_short[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* Record sequence number */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char verify[] = {
Packit Service 084de1
    0x16, /* Handshake */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x00, 0x00, /* Epoch */
Packit Service 084de1
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Record sequence number */
Packit Service 084de1
    0x00, 0x23, /* Record Length */
Packit Service 084de1
    0x03, /* HelloVerifyRequest */
Packit Service 084de1
    0x00, 0x00, 0x17, /* Message length */
Packit Service 084de1
    0x00, 0x00, /* Message sequence */
Packit Service 084de1
    0x00, 0x00, 0x00, /* Fragment offset */
Packit Service 084de1
    0x00, 0x00, 0x17, /* Fragment length */
Packit Service 084de1
    0xFE, 0xFF, /* DTLSv1.0 */
Packit Service 084de1
    0x14, /* Cookie len */
Packit Service 084de1
    0x00, 0x01, 0x02, 0x03, 0x04, 005, 0x06, 007, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
Packit Service 084de1
    0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 /* Cookie */
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
typedef struct {
Packit Service 084de1
    const unsigned char *in;
Packit Service 084de1
    unsigned int inlen;
Packit Service 084de1
    /*
Packit Service 084de1
     * GOOD == positive return value from DTLSv1_listen, no output yet
Packit Service 084de1
     * VERIFY == 0 return value, HelloVerifyRequest sent
Packit Service 084de1
     * DROP == 0 return value, no output
Packit Service 084de1
     */
Packit Service 084de1
    enum {GOOD, VERIFY, DROP} outtype;
Packit Service 084de1
} tests;
Packit Service 084de1
Packit Service 084de1
static tests testpackets[9] = {
Packit Service 084de1
    { clienthello_nocookie, sizeof(clienthello_nocookie), VERIFY },
Packit Service 084de1
    { clienthello_nocookie_frag, sizeof(clienthello_nocookie_frag), VERIFY },
Packit Service 084de1
    { clienthello_nocookie_short, sizeof(clienthello_nocookie_short), DROP },
Packit Service 084de1
    { clienthello_2ndfrag, sizeof(clienthello_2ndfrag), DROP },
Packit Service 084de1
    { clienthello_cookie, sizeof(clienthello_cookie), GOOD },
Packit Service 084de1
    { clienthello_cookie_frag, sizeof(clienthello_cookie_frag), GOOD },
Packit Service 084de1
    { clienthello_badcookie, sizeof(clienthello_badcookie), VERIFY },
Packit Service 084de1
    { clienthello_cookie_short, sizeof(clienthello_cookie_short), DROP },
Packit Service 084de1
    { record_short, sizeof(record_short), DROP }
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
# define COOKIE_LEN  20
Packit Service 084de1
Packit Service 084de1
static int cookie_gen(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)
Packit Service 084de1
{
Packit Service 084de1
    unsigned int i;
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < COOKIE_LEN; i++, cookie++)
Packit Service 084de1
        *cookie = i;
Packit Service 084de1
    *cookie_len = COOKIE_LEN;
Packit Service 084de1
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int cookie_verify(SSL *ssl, const unsigned char *cookie,
Packit Service 084de1
                         unsigned int cookie_len)
Packit Service 084de1
{
Packit Service 084de1
    unsigned int i;
Packit Service 084de1
Packit Service 084de1
    if (cookie_len != COOKIE_LEN)
Packit Service 084de1
        return 0;
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < COOKIE_LEN; i++, cookie++) {
Packit Service 084de1
        if (*cookie != i)
Packit Service 084de1
            return 0;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int dtls_listen_test(int i)
Packit Service 084de1
{
Packit Service 084de1
    SSL_CTX *ctx = NULL;
Packit Service 084de1
    SSL *ssl = NULL;
Packit Service 084de1
    BIO *outbio = NULL;
Packit Service 084de1
    BIO *inbio = NULL;
Packit Service 084de1
    BIO_ADDR *peer = NULL;
Packit Service 084de1
    tests *tp = &testpackets[i];
Packit Service 084de1
    char *data;
Packit Service 084de1
    long datalen;
Packit Service 084de1
    int ret, success = 0;
Packit Service 084de1
Packit Service 084de1
    if (!TEST_ptr(ctx = SSL_CTX_new(DTLS_server_method()))
Packit Service 084de1
            || !TEST_ptr(peer = BIO_ADDR_new()))
Packit Service 084de1
        goto err;
Packit Service 084de1
    SSL_CTX_set_cookie_generate_cb(ctx, cookie_gen);
Packit Service 084de1
    SSL_CTX_set_cookie_verify_cb(ctx, cookie_verify);
Packit Service 084de1
Packit Service 084de1
    /* Create an SSL object and set the BIO */
Packit Service 084de1
    if (!TEST_ptr(ssl = SSL_new(ctx))
Packit Service 084de1
            || !TEST_ptr(outbio = BIO_new(BIO_s_mem())))
Packit Service 084de1
        goto err;
Packit Service 084de1
    SSL_set0_wbio(ssl, outbio);
Packit Service 084de1
Packit Service 084de1
    /* Set Non-blocking IO behaviour */
Packit Service 084de1
    if (!TEST_ptr(inbio = BIO_new_mem_buf((char *)tp->in, tp->inlen)))
Packit Service 084de1
        goto err;
Packit Service 084de1
    BIO_set_mem_eof_return(inbio, -1);
Packit Service 084de1
    SSL_set0_rbio(ssl, inbio);
Packit Service 084de1
Packit Service 084de1
    /* Process the incoming packet */
Packit Service 084de1
    if (!TEST_int_ge(ret = DTLSv1_listen(ssl, peer), 0))
Packit Service 084de1
        goto err;
Packit Service 084de1
    datalen = BIO_get_mem_data(outbio, &data);
Packit Service 084de1
Packit Service 084de1
    if (tp->outtype == VERIFY) {
Packit Service 084de1
        if (!TEST_int_eq(ret, 0)
Packit Service 084de1
                || !TEST_mem_eq(data, datalen, verify, sizeof(verify)))
Packit Service 084de1
            goto err;
Packit Service 084de1
    } else if (datalen == 0) {
Packit Service 084de1
        if (!TEST_true((ret == 0 && tp->outtype == DROP)
Packit Service 084de1
                || (ret == 1 && tp->outtype == GOOD)))
Packit Service 084de1
            goto err;
Packit Service 084de1
    } else {
Packit Service 084de1
        TEST_info("Test %d: unexpected data output", i);
Packit Service 084de1
        goto err;
Packit Service 084de1
    }
Packit Service 084de1
    (void)BIO_reset(outbio);
Packit Service 084de1
    inbio = NULL;
Packit Service 084de1
    SSL_set0_rbio(ssl, NULL);
Packit Service 084de1
    success = 1;
Packit Service 084de1
Packit Service 084de1
 err:
Packit Service 084de1
    /* Also frees up outbio */
Packit Service 084de1
    SSL_free(ssl);
Packit Service 084de1
    SSL_CTX_free(ctx);
Packit Service 084de1
    BIO_free(inbio);
Packit Service 084de1
    OPENSSL_free(peer);
Packit Service 084de1
    return success;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
int setup_tests(void)
Packit Service 084de1
{
Packit Service 084de1
#ifndef OPENSSL_NO_SOCK
Packit Service 084de1
    ADD_ALL_TESTS(dtls_listen_test, (int)OSSL_NELEM(testpackets));
Packit Service 084de1
#endif
Packit Service 084de1
    return 1;
Packit Service 084de1
}