Blame tests/pkd/pkd_hello.c

Packit Service 31306d
/*
Packit Service 31306d
 * pkd_hello.c --
Packit Service 31306d
 *
Packit Service 31306d
 * (c) 2014, 2017-2018 Jon Simons <jon@jonsimons.org>
Packit Service 31306d
 */
Packit Service 31306d
#include "config.h"
Packit Service 31306d
Packit Service 31306d
#include <setjmp.h> // for cmocka
Packit Service 31306d
#include <stdarg.h> // for cmocka
Packit Service 31306d
#include <stdio.h>
Packit Service 31306d
#include <stdlib.h>
Packit Service 31306d
#include <unistd.h> // for cmocka
Packit Service 31306d
#include <cmocka.h>
Packit Service 31306d
Packit Service 31306d
#include "libssh/priv.h"
Packit Service 31306d
#include "torture.h" // for ssh_fips_mode()
Packit Service 31306d
Packit Service 31306d
#include "pkd_client.h"
Packit Service 31306d
#include "pkd_daemon.h"
Packit Service 31306d
#include "pkd_keyutil.h"
Packit Service 31306d
#include "pkd_util.h"
Packit Service 31306d
Packit Service 31306d
#define DEFAULT_ITERATIONS 10
Packit Service 31306d
static struct pkd_daemon_args pkd_dargs;
Packit Service 31306d
Packit Service 31306d
static uint8_t default_payload_buf[] = {
Packit Service 31306d
    'h', 'e', 'l', 'l', 'o', '\n',
Packit Service 31306d
};
Packit Service 31306d
Packit Service 31306d
static size_t default_payload_len = sizeof(default_payload_buf);
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_ARGP_H
Packit Service 31306d
#include <argp.h>
Packit Service 31306d
#define PROGNAME "pkd_hello"
Packit Service 31306d
#define ARGP_PROGNAME "libssh " PROGNAME
Packit Service 31306d
const char *argp_program_version = ARGP_PROGNAME " 2017-07-12";
Packit Service 31306d
const char *argp_program_bug_address = "Jon Simons <jon@jonsimons.org>";
Packit Service 31306d
Packit Service 31306d
static char doc[] = \
Packit Service 31306d
    "\nExample usage:\n\n"
Packit Service 31306d
    "    " PROGNAME "\n"
Packit Service 31306d
    "        Run all tests with default number of iterations.\n"
Packit Service 31306d
    "    " PROGNAME " --list\n"
Packit Service 31306d
    "        List available individual test names.\n"
Packit Service 31306d
    "    " PROGNAME " -i 1000 -t torture_pkd_rsa_ecdh_sha2_nistp256\n"
Packit Service 31306d
    "        Run only the torture_pkd_rsa_ecdh_sha2_nistp256 testcase 1000 times.\n"
Packit Service 31306d
    "    " PROGNAME " -i 1000 -m curve25519\n"
Packit Service 31306d
    "        Run all tests with the string 'curve25519' 1000 times.\n"
Packit Service 31306d
    "    " PROGNAME " -v -v -v -v -e -o\n"
Packit Service 31306d
    "        Run all tests with maximum libssh and pkd logging.\n"
Packit Service 31306d
;
Packit Service 31306d
Packit Service 31306d
static struct argp_option options[] = {
Packit Service 31306d
    { "buffer", 'b', "string", 0,
Packit Service 31306d
      "Use the given string for test buffer payload contents", 0 },
Packit Service 31306d
    { "stderr", 'e', NULL, 0,
Packit Service 31306d
      "Emit pkd stderr messages", 0 },
Packit Service 31306d
    { "list", 'l', NULL, 0,
Packit Service 31306d
      "List available individual test names", 0 },
Packit Service 31306d
    { "iterations", 'i', "number", 0,
Packit Service 31306d
      "Run each test for the given number of iterations (default is 10)", 0 },
Packit Service 31306d
    { "match", 'm', "testmatch", 0,
Packit Service 31306d
      "Run all tests with the given string", 0 },
Packit Service 31306d
    { "socket-wrapper-dir", 'w', "<mkdtemp-template>", 0,
Packit Service 31306d
      "Run in socket-wrapper mode using the given mkdtemp directory template", 0 },
Packit Service 31306d
    { "stdout", 'o', NULL, 0,
Packit Service 31306d
      "Emit pkd stdout messages", 0 },
Packit Service 31306d
    { "rekey", 'r', "limit", 0,
Packit Service 31306d
      "Set the given rekey data limit, in bytes, using SSH_OPTIONS_REKEY_DATA", 0 },
Packit Service 31306d
    { "test", 't', "testname", 0,
Packit Service 31306d
      "Run tests matching the given testname", 0 },
Packit Service 31306d
    { "verbose", 'v', NULL, 0,
Packit Service 31306d
      "Increase libssh verbosity (can be used multiple times)", 0 },
Packit Service 31306d
    { NULL, 0, NULL, 0,
Packit Service 31306d
      NULL, 0 },
Packit Service 31306d
};
Packit Service 31306d
Packit Service 31306d
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
Packit Service 31306d
    (void) arg;
Packit Service 31306d
    (void) state;
Packit Service 31306d
Packit Service 31306d
    switch(key) {
Packit Service 31306d
    case 'b':
Packit Service 31306d
        pkd_dargs.payload.buf = (uint8_t *) arg;
Packit Service 31306d
        pkd_dargs.payload.len = strlen(arg);
Packit Service 31306d
        break;
Packit Service 31306d
    case 'e':
Packit Service 31306d
        pkd_dargs.opts.log_stderr = 1;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'l':
Packit Service 31306d
        pkd_dargs.opts.list = 1;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'i':
Packit Service 31306d
        pkd_dargs.opts.iterations = atoi(arg);
Packit Service 31306d
        break;
Packit Service 31306d
    case 'm':
Packit Service 31306d
        pkd_dargs.opts.testmatch = arg;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'o':
Packit Service 31306d
        pkd_dargs.opts.log_stdout = 1;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'r':
Packit Service 31306d
        pkd_dargs.rekey_data_limit = atoi(arg);
Packit Service 31306d
        break;
Packit Service 31306d
    case 't':
Packit Service 31306d
        pkd_dargs.opts.testname = arg;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'v':
Packit Service 31306d
        pkd_dargs.opts.libssh_log_level += 1;
Packit Service 31306d
        break;
Packit Service 31306d
    case 'w':
Packit Service 31306d
        pkd_dargs.opts.socket_wrapper.mkdtemp_str = arg;
Packit Service 31306d
        break;
Packit Service 31306d
    default:
Packit Service 31306d
        return ARGP_ERR_UNKNOWN;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static struct argp parser = {
Packit Service 31306d
    options,
Packit Service 31306d
    parse_opt,
Packit Service 31306d
    NULL,
Packit Service 31306d
    doc,
Packit Service 31306d
    NULL,
Packit Service 31306d
    NULL,
Packit Service 31306d
    NULL
Packit Service 31306d
};
Packit Service 31306d
#endif /* HAVE_ARGP_H */
Packit Service 31306d
Packit Service 31306d
static struct pkd_state *torture_pkd_setup(enum pkd_hostkey_type_e type,
Packit Service 31306d
                                           const char *hostkeypath) {
Packit Service 31306d
    int rc = 0;
Packit Service 31306d
Packit Service 31306d
    pkd_dargs.type = type;
Packit Service 31306d
    pkd_dargs.hostkeypath = hostkeypath;
Packit Service 31306d
Packit Service 31306d
    rc = pkd_start(&pkd_dargs);
Packit Service 31306d
    assert_int_equal(rc, 0);
Packit Service 31306d
Packit Service 31306d
    return NULL;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_teardown(void **state) {
Packit Service 31306d
    struct pkd_result result = { .ok = 0 };
Packit Service 31306d
Packit Service 31306d
    (void) state;
Packit Service 31306d
Packit Service 31306d
    pkd_stop(&result);
Packit Service 31306d
    assert_int_equal(result.ok, 1);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
/*
Packit Service 31306d
 * one setup for each server keytype ------------------------------------
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_noop(void **state) {
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_RSA, NULL /*path*/);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_rsa(void **state) {
Packit Service 31306d
    setup_rsa_key();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_RSA, LIBSSH_RSA_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_ed25519(void **state) {
Packit Service 31306d
    setup_ed25519_key();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_ED25519, LIBSSH_ED25519_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
static int torture_pkd_setup_dsa(void **state) {
Packit Service 31306d
    setup_dsa_key();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_DSA, LIBSSH_DSA_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_ecdsa_256(void **state) {
Packit Service 31306d
    setup_ecdsa_keys();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_ECDSA, LIBSSH_ECDSA_256_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_ecdsa_384(void **state) {
Packit Service 31306d
    setup_ecdsa_keys();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_ECDSA, LIBSSH_ECDSA_384_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int torture_pkd_setup_ecdsa_521(void **state) {
Packit Service 31306d
    setup_ecdsa_keys();
Packit Service 31306d
    *state = (void *) torture_pkd_setup(PKD_ECDSA, LIBSSH_ECDSA_521_TESTKEY);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
/*
Packit Service 31306d
 * Test matrices: f(clientname, testname, ssh-command, setup-function, teardown-function).
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_DEFAULT_FIPS(f, client, cmd) \
Packit Service 31306d
    f(client, rsa_default,        cmd,  setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_default,  cmd,  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_default,  cmd,  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_default,  cmd,  setup_ecdsa_521,  teardown)
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define PKDTESTS_DEFAULT(f, client, cmd) \
Packit Service 31306d
    /* Default passes by server key type. */ \
Packit Service 31306d
    PKDTESTS_DEFAULT_FIPS(f, client, cmd) \
Packit Service 31306d
    f(client, dsa_default,        cmd,  setup_dsa,        teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_DEFAULT(f, client, cmd) \
Packit Service 31306d
    /* Default passes by server key type. */ \
Packit Service 31306d
    PKDTESTS_DEFAULT_FIPS(f, client, cmd)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_DEFAULT_OPENSSHONLY(f, client, cmd) \
Packit Service 31306d
    /* Default passes by server key type. */ \
Packit Service 31306d
    f(client, ed25519_default,    cmd,  setup_ed25519,    teardown)
Packit Service 31306d
Packit Service 31306d
#define GEX_SHA256 "diffie-hellman-group-exchange-sha256"
Packit Service 31306d
#define GEX_SHA1   "diffie-hellman-group-exchange-sha1"
Packit Service 31306d
Packit Service 31306d
#if defined(WITH_GEX)
Packit Service 31306d
#define PKDTESTS_KEX_FIPS(f, client, kexcmd) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp256,                 kexcmd("ecdh-sha2-nistp256"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp384,                 kexcmd("ecdh-sha2-nistp384"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp521,                 kexcmd("ecdh-sha2-nistp521"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group16_sha512,      kexcmd("diffie-hellman-group16-sha512"), setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group18_sha512,      kexcmd("diffie-hellman-group18-sha512"), setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group_exchange_sha256,       kexcmd(GEX_SHA256),              setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),              setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),              setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),              setup_ecdsa_521,  teardown)
Packit Service 31306d
#else /* !defined(WITH_GEX) */
Packit Service 31306d
#define PKDTESTS_KEX_FIPS(f, client, kexcmd) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp256,                 kexcmd("ecdh-sha2-nistp256"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp384,                 kexcmd("ecdh-sha2-nistp384"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_ecdh_sha2_nistp521,                 kexcmd("ecdh-sha2-nistp521"),            setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group14_sha256,      kexcmd("diffie-hellman-group14-sha256"), setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group16_sha512,      kexcmd("diffie-hellman-group16-sha512"), setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group18_sha512,      kexcmd("diffie-hellman-group18-sha512"), setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group14_sha256,kexcmd("diffie-hellman-group14-sha256"), setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group14_sha256,kexcmd("diffie-hellman-group14-sha256"), setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp256,           kexcmd("ecdh-sha2-nistp256"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp384,           kexcmd("ecdh-sha2-nistp384"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_ecdh_sha2_nistp521,           kexcmd("ecdh-sha2-nistp521"),            setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group14_sha256,kexcmd("diffie-hellman-group14-sha256"), setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group16_sha512,kexcmd("diffie-hellman-group16-sha512"), setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group18_sha512,kexcmd("diffie-hellman-group18-sha512"), setup_ecdsa_521,  teardown)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_KEX_COMMON(f, client, kexcmd) \
Packit Service 31306d
    PKDTESTS_KEX_FIPS(f, client, kexcmd) \
Packit Service 31306d
    f(client, rsa_curve25519_sha256,                  kexcmd("curve25519-sha256"),             setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_curve25519_sha256_libssh_org,       kexcmd("curve25519-sha256@libssh.org"),  setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group14_sha1,        kexcmd("diffie-hellman-group14-sha1"),   setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group1_sha1,         kexcmd("diffie-hellman-group1-sha1"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_curve25519_sha256,            kexcmd("curve25519-sha256"),             setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_curve25519_sha256_libssh_org, kexcmd("curve25519-sha256@libssh.org"),  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group14_sha1,  kexcmd("diffie-hellman-group14-sha1"),   setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group1_sha1,   kexcmd("diffie-hellman-group1-sha1"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_curve25519_sha256,            kexcmd("curve25519-sha256"),             setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_curve25519_sha256_libssh_org, kexcmd("curve25519-sha256@libssh.org"),  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group14_sha1,  kexcmd("diffie-hellman-group14-sha1"),   setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group1_sha1,   kexcmd("diffie-hellman-group1-sha1"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_curve25519_sha256,            kexcmd("curve25519-sha256"),             setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_curve25519_sha256_libssh_org, kexcmd("curve25519-sha256@libssh.org"),  setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group14_sha1,  kexcmd("diffie-hellman-group14-sha1"),   setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group1_sha1,   kexcmd("diffie-hellman-group1-sha1"),    setup_ecdsa_521,  teardown)
Packit Service 31306d
Packit Service 31306d
#if defined(HAVE_DSA) && defined(WITH_GEX)
Packit Service 31306d
    /* GEX_SHA256 with RSA and ECDSA is included in PKDTESTS_KEX_FIPS if available */
Packit Service 31306d
#define PKDTESTS_KEX(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    PKDTESTS_KEX_COMMON(f, client, kexcmd) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                        setup_rsa,        teardown) \
Packit Service 31306d
    f(client, dsa_curve25519_sha256,                  kexcmd("curve25519-sha256"),             setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_curve25519_sha256_libssh_org,       kexcmd("curve25519-sha256@libssh.org"),  setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp256,                 kexcmd("ecdh-sha2-nistp256 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp384,                 kexcmd("ecdh-sha2-nistp384 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp521,                 kexcmd("ecdh-sha2-nistp521 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group16_sha512,      kexcmd("diffie-hellman-group16-sha512"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group18_sha512,      kexcmd("diffie-hellman-group18-sha512"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group14_sha1,        kexcmd("diffie-hellman-group14-sha1"),   setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group14_sha256,      kexcmd("diffie-hellman-group14-sha256"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group1_sha1,         kexcmd("diffie-hellman-group1-sha1"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),                    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                        setup_dsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                  setup_ecdsa_521,  teardown)
Packit Service 31306d
Packit Service 31306d
#elif defined(HAVE_DSA) /* && !defined(WITH_GEX) */
Packit Service 31306d
#define PKDTESTS_KEX(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    PKDTESTS_KEX_COMMON(f, client, kexcmd) \
Packit Service 31306d
    f(client, dsa_curve25519_sha256,                  kexcmd("curve25519-sha256"),             setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_curve25519_sha256_libssh_org,       kexcmd("curve25519-sha256@libssh.org"),  setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp256,                 kexcmd("ecdh-sha2-nistp256 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp384,                 kexcmd("ecdh-sha2-nistp384 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_ecdh_sha2_nistp521,                 kexcmd("ecdh-sha2-nistp521 "),           setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group16_sha512,      kexcmd("diffie-hellman-group16-sha512"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group18_sha512,      kexcmd("diffie-hellman-group18-sha512"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group14_sha1,        kexcmd("diffie-hellman-group14-sha1"),   setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group14_sha256,      kexcmd("diffie-hellman-group14-sha256"), setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_diffie_hellman_group1_sha1,         kexcmd("diffie-hellman-group1-sha1"),    setup_dsa,        teardown)
Packit Service 31306d
Packit Service 31306d
#elif defined(WITH_GEX) /* && !defined(HAVE_DSA) */
Packit Service 31306d
    /* GEX_SHA256 is included in PKDTESTS_KEX_FIPS if available */
Packit Service 31306d
#define PKDTESTS_KEX(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    PKDTESTS_KEX_COMMON(f, client, kexcmd) \
Packit Service 31306d
    f(client, rsa_diffie_hellman_group_exchange_sha1,         kexcmd(GEX_SHA1),                setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_diffie_hellman_group_exchange_sha1,   kexcmd(GEX_SHA1),                setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_diffie_hellman_group_exchange_sha1,   kexcmd(GEX_SHA1),                setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_diffie_hellman_group_exchange_sha1,   kexcmd(GEX_SHA1),                setup_ecdsa_521,  teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_KEX(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    PKDTESTS_KEX_COMMON(f, client, kexcmd)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define PKDTESTS_KEX_OPENSSHONLY(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    f(client, ed25519_curve25519_sha256,              kexcmd("curve25519-sha256"),             setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_curve25519_sha256_libssh_org,   kexcmd("curve25519-sha256@libssh.org"),  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp256,             kexcmd("ecdh-sha2-nistp256"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp384,             kexcmd("ecdh-sha2-nistp384"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp521,             kexcmd("ecdh-sha2-nistp521"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group14_sha256,  kexcmd("diffie-hellman-group14-sha256"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group16_sha512,  kexcmd("diffie-hellman-group16-sha512"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group18_sha512,  kexcmd("diffie-hellman-group18-sha512"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group14_sha1,    kexcmd("diffie-hellman-group14-sha1"),   setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group1_sha1,     kexcmd("diffie-hellman-group1-sha1"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),                setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                    setup_ed25519,    teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_KEX_OPENSSHONLY(f, client, kexcmd) \
Packit Service 31306d
    /* Kex algorithms. */ \
Packit Service 31306d
    f(client, ed25519_curve25519_sha256,              kexcmd("curve25519-sha256"),             setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_curve25519_sha256_libssh_org,   kexcmd("curve25519-sha256@libssh.org"),  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp256,             kexcmd("ecdh-sha2-nistp256"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp384,             kexcmd("ecdh-sha2-nistp384"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_ecdh_sha2_nistp521,             kexcmd("ecdh-sha2-nistp521"),            setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group14_sha256,  kexcmd("diffie-hellman-group14-sha256"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group16_sha512,  kexcmd("diffie-hellman-group16-sha512"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group18_sha512,  kexcmd("diffie-hellman-group18-sha512"), setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group1_sha1,     kexcmd("diffie-hellman-group1-sha1"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group_exchange_sha256, kexcmd(GEX_SHA256),                setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_diffie_hellman_group_exchange_sha1, kexcmd(GEX_SHA1),                    setup_ed25519,    teardown)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_CIPHER_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_aes128_cbc,          ciphercmd("aes128-cbc"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes128_ctr,          ciphercmd("aes128-ctr"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes256_cbc,          ciphercmd("aes256-cbc"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes256_ctr,          ciphercmd("aes256-ctr"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes128_cbc,    ciphercmd("aes128-cbc"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes128_ctr,    ciphercmd("aes128-ctr"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes256_cbc,    ciphercmd("aes256-cbc"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes256_ctr,    ciphercmd("aes256-ctr"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes128_cbc,    ciphercmd("aes128-cbc"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes128_ctr,    ciphercmd("aes128-ctr"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes256_cbc,    ciphercmd("aes256-cbc"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes256_ctr,    ciphercmd("aes256-ctr"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes128_cbc,    ciphercmd("aes128-cbc"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes128_ctr,    ciphercmd("aes128-ctr"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes256_cbc,    ciphercmd("aes256-cbc"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes256_ctr,    ciphercmd("aes256-ctr"),    setup_ecdsa_521,  teardown)
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define PKDTESTS_CIPHER(f, client, ciphercmd) \
Packit Service 31306d
    /* Ciphers. */ \
Packit Service 31306d
    PKDTESTS_CIPHER_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_3des_cbc,            ciphercmd("3des-cbc"),      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, dsa_3des_cbc,            ciphercmd("3des-cbc"),      setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes128_cbc,          ciphercmd("aes128-cbc"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes128_ctr,          ciphercmd("aes128-ctr"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes256_cbc,          ciphercmd("aes256-cbc"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes256_ctr,          ciphercmd("aes256-ctr"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_521,  teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_CIPHER(f, client, ciphercmd) \
Packit Service 31306d
    /* Ciphers. */ \
Packit Service 31306d
    PKDTESTS_CIPHER_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_3des_cbc,            ciphercmd("3des-cbc"),      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_3des_cbc,      ciphercmd("3des-cbc"),      setup_ecdsa_521,  teardown)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#define CHACHA20 "chacha20-poly1305@openssh.com"
Packit Service 31306d
#define AES128_GCM "aes128-gcm@openssh.com"
Packit Service 31306d
#define AES256_GCM "aes256-gcm@openssh.com"
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_CIPHER_OPENSSHONLY_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_aes128_gcm,          ciphercmd(AES128_GCM),      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes256_gcm,          ciphercmd(AES256_GCM),      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes128_gcm,    ciphercmd(AES128_GCM),      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes256_gcm,    ciphercmd(AES256_GCM),      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes128_gcm,    ciphercmd(AES128_GCM),      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes256_gcm,    ciphercmd(AES256_GCM),      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes128_gcm,    ciphercmd(AES128_GCM),      setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes256_gcm,    ciphercmd(AES256_GCM),      setup_ecdsa_521,  teardown)
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define PKDTESTS_CIPHER_OPENSSHONLY(f, client, ciphercmd) \
Packit Service 31306d
    /* Ciphers. */ \
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_aes192_cbc,          ciphercmd("aes192-cbc"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes192_ctr,          ciphercmd("aes192-ctr"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_chacha20,            ciphercmd(CHACHA20),        setup_rsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes192_cbc,          ciphercmd("aes192-cbc"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes192_ctr,          ciphercmd("aes192-ctr"),    setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_chacha20,            ciphercmd(CHACHA20),        setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes128_gcm,          ciphercmd(AES128_GCM),      setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_aes256_gcm,          ciphercmd(AES256_GCM),      setup_dsa,        teardown) \
Packit Service 31306d
    f(client, ed25519_3des_cbc,        ciphercmd("3des-cbc"),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes128_cbc,      ciphercmd("aes128-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes128_ctr,      ciphercmd("aes128-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes256_cbc,      ciphercmd("aes256-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes256_ctr,      ciphercmd("aes256-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes192_cbc,      ciphercmd("aes192-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes192_ctr,      ciphercmd("aes192-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_chacha20,        ciphercmd(CHACHA20),        setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes128_gcm,      ciphercmd(AES128_GCM),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes256_gcm,      ciphercmd(AES256_GCM),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_521,  teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_CIPHER_OPENSSHONLY(f, client, ciphercmd) \
Packit Service 31306d
    /* Ciphers. */ \
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY_FIPS(f, client, ciphercmd) \
Packit Service 31306d
    f(client, rsa_aes192_cbc,          ciphercmd("aes192-cbc"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_aes192_ctr,          ciphercmd("aes192-ctr"),    setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_chacha20,            ciphercmd(CHACHA20),        setup_rsa,        teardown) \
Packit Service 31306d
    f(client, ed25519_3des_cbc,        ciphercmd("3des-cbc"),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes128_cbc,      ciphercmd("aes128-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes128_ctr,      ciphercmd("aes128-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes256_cbc,      ciphercmd("aes256-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes256_ctr,      ciphercmd("aes256-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes192_cbc,      ciphercmd("aes192-cbc"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_aes192_ctr,      ciphercmd("aes192-ctr"),    setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_chacha20,        ciphercmd(CHACHA20),        setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes192_cbc,    ciphercmd("aes192-cbc"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_aes192_ctr,    ciphercmd("aes192-ctr"),    setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_chacha20,      ciphercmd(CHACHA20),        setup_ecdsa_521,  teardown)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_MAC_FIPS(f, client, maccmd) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha1,          maccmd("hmac-sha1"),                      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha2_256,      maccmd("hmac-sha2-256"),                  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha1,          maccmd("hmac-sha1"),                      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha2_256,      maccmd("hmac-sha2-256"),                  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha1,          maccmd("hmac-sha1"),                      setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha2_256,      maccmd("hmac-sha2-256"),                  setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha1,                maccmd("hmac-sha1"),                      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha2_256,            maccmd("hmac-sha2-256"),                  setup_rsa,        teardown)
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_MAC_OPENSSHONLY_FIPS(f, client, maccmd) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha1_etm,      maccmd("hmac-sha1-etm@openssh.com"),      setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha2_256_etm,  maccmd("hmac-sha2-256-etm@openssh.com"),  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha2_512,      maccmd("hmac-sha2-512"),                  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_256_hmac_sha2_512_etm,  maccmd("hmac-sha2-512-etm@openssh.com"),  setup_ecdsa_256,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha1_etm,      maccmd("hmac-sha1-etm@openssh.com"),      setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha2_256_etm,  maccmd("hmac-sha2-256-etm@openssh.com"),  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha2_512,      maccmd("hmac-sha2-512"),                  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_384_hmac_sha2_512_etm,  maccmd("hmac-sha2-512-etm@openssh.com"),  setup_ecdsa_384,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha1_etm,      maccmd("hmac-sha1-etm@openssh.com"),      setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha2_256_etm,  maccmd("hmac-sha2-256-etm@openssh.com"),  setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha2_512,      maccmd("hmac-sha2-512"),                  setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, ecdsa_521_hmac_sha2_512_etm,  maccmd("hmac-sha2-512-etm@openssh.com"),  setup_ecdsa_521,  teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha1_etm,            maccmd("hmac-sha1-etm@openssh.com"),      setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha2_256_etm,        maccmd("hmac-sha2-256-etm@openssh.com"),  setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha2_512,            maccmd("hmac-sha2-512"),                  setup_rsa,        teardown) \
Packit Service 31306d
    f(client, rsa_hmac_sha2_512_etm,        maccmd("hmac-sha2-512-etm@openssh.com"),  setup_rsa,        teardown)
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define PKDTESTS_MAC(f, client, maccmd) \
Packit Service 31306d
    /* MACs. */ \
Packit Service 31306d
    PKDTESTS_MAC_FIPS(f, client, maccmd) \
Packit Service 31306d
    f(client, dsa_hmac_sha1,                maccmd("hmac-sha1"),                      setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_hmac_sha2_256,            maccmd("hmac-sha2-256"),                  setup_dsa,        teardown)
Packit Service 31306d
#define PKDTESTS_MAC_OPENSSHONLY(f, client, maccmd) \
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY_FIPS(f, client, maccmd) \
Packit Service 31306d
    f(client, dsa_hmac_sha1_etm,            maccmd("hmac-sha1-etm@openssh.com"),      setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_hmac_sha2_256_etm,        maccmd("hmac-sha2-256-etm@openssh.com"),  setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_hmac_sha2_512,            maccmd("hmac-sha2-512"),                  setup_dsa,        teardown) \
Packit Service 31306d
    f(client, dsa_hmac_sha2_512_etm,        maccmd("hmac-sha2-512-etm@openssh.com"),  setup_dsa,        teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha1,            maccmd("hmac-sha1"),                      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha1_etm,        maccmd("hmac-sha1-etm@openssh.com"),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_256,        maccmd("hmac-sha2-256"),                  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_256_etm,    maccmd("hmac-sha2-256-etm@openssh.com"),  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_512,        maccmd("hmac-sha2-512"),                  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_512_etm,    maccmd("hmac-sha2-512-etm@openssh.com"),  setup_ed25519,    teardown)
Packit Service 31306d
#else
Packit Service 31306d
#define PKDTESTS_MAC(f, client, maccmd) \
Packit Service 31306d
    /* MACs. */ \
Packit Service 31306d
    PKDTESTS_MAC_FIPS(f, client, maccmd)
Packit Service 31306d
#define PKDTESTS_MAC_OPENSSHONLY(f, client, maccmd) \
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY_FIPS(f, client, maccmd) \
Packit Service 31306d
    f(client, ed25519_hmac_sha1,            maccmd("hmac-sha1"),                      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha1_etm,        maccmd("hmac-sha1-etm@openssh.com"),      setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_256,        maccmd("hmac-sha2-256"),                  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_256_etm,    maccmd("hmac-sha2-256-etm@openssh.com"),  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_512,        maccmd("hmac-sha2-512"),                  setup_ed25519,    teardown) \
Packit Service 31306d
    f(client, ed25519_hmac_sha2_512_etm,    maccmd("hmac-sha2-512-etm@openssh.com"),  setup_ed25519,    teardown)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_HOSTKEY_OPENSSHONLY_FIPS(f, client, hkcmd) \
Packit Service 31306d
    f(client, rsa_sha2_256,     hkcmd("rsa-sha2-256"),               setup_rsa,    teardown) \
Packit Service 31306d
    f(client, rsa_sha2_512,     hkcmd("rsa-sha2-512"),               setup_rsa,    teardown) \
Packit Service 31306d
    f(client, rsa_sha2_256_512, hkcmd("rsa-sha2-256,rsa-sha2-512"),  setup_rsa,    teardown) \
Packit Service 31306d
    f(client, rsa_sha2_512_256, hkcmd("rsa-sha2-512,rsa-sha2-256"),  setup_rsa,    teardown)
Packit Service 31306d
Packit Service 31306d
#define PKDTESTS_HOSTKEY_OPENSSHONLY(f, client, hkcmd) \
Packit Service 31306d
    PKDTESTS_HOSTKEY_OPENSSHONLY_FIPS(f, client, hkcmd)
Packit Service 31306d
Packit Service 31306d
static void torture_pkd_client_noop(void **state) {
Packit Service 31306d
    struct pkd_state *pstate = (struct pkd_state *) (*state);
Packit Service 31306d
    (void) pstate;
Packit Service 31306d
    return;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static void torture_pkd_runtest(const char *testname,
Packit Service 31306d
                                const char *testcmd)
Packit Service 31306d
{
Packit Service 31306d
    int i, rc;
Packit Service 31306d
    char logfile[1024] = { 0 };
Packit Service 31306d
    int iterations =
Packit Service 31306d
        (pkd_dargs.opts.iterations != 0) ? pkd_dargs.opts.iterations
Packit Service 31306d
                                         : DEFAULT_ITERATIONS;
Packit Service 31306d
Packit Service 31306d
    for (i = 0; i < iterations; i++) {
Packit Service 31306d
        rc = system_checked(testcmd);
Packit Service 31306d
        assert_int_equal(rc, 0);
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    /* Asserts did not trip: cleanup logs. */
Packit Service 31306d
    snprintf(&logfile[0], sizeof(logfile), "%s.out", testname);
Packit Service 31306d
    unlink(logfile);
Packit Service 31306d
    snprintf(&logfile[0], sizeof(logfile), "%s.err", testname);
Packit Service 31306d
    unlink(logfile);
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
/*
Packit Service 31306d
 * Though each keytest function body is the same, separate functions are
Packit Service 31306d
 * defined here to result in distinct output when running the tests.
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
#define emit_keytest(client, testname, sshcmd, setup, teardown) \
Packit Service 31306d
    static void torture_pkd_## client ## _ ## testname(void **state) { \
Packit Service 31306d
        const char *tname = "torture_pkd_" #client "_" #testname;      \
Packit Service 31306d
        char testcmd[1024] = { 0 };                                    \
Packit Service 31306d
        (void) state;                                                  \
Packit Service 31306d
        snprintf(&testcmd[0], sizeof(testcmd), sshcmd, tname, tname);  \
Packit Service 31306d
        torture_pkd_runtest(tname, testcmd);                           \
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
/*
Packit Service 31306d
 * Actual test functions are emitted here.
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
#define CLIENT_ID_FILE OPENSSH_DSA_TESTKEY
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_cert_dsa, OPENSSH_CERT_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT_OPENSSHONLY(emit_keytest, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_KEX(emit_keytest, openssh_dsa, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_KEX_OPENSSHONLY(emit_keytest, openssh_dsa, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_CIPHER(emit_keytest, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_CIPHER_OPENSSHONLY(emit_keytest, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_MAC(emit_keytest, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
PKDTESTS_MAC_OPENSSHONLY(emit_keytest, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
#undef CLIENT_ID_FILE
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#define CLIENT_ID_FILE OPENSSH_RSA_TESTKEY
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_cert_rsa, OPENSSH_CERT_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_sha256_cert_rsa, OPENSSH_SHA256_CERT_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT_OPENSSHONLY(emit_keytest, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_KEX(emit_keytest, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_KEX_OPENSSHONLY(emit_keytest, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_CIPHER(emit_keytest, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_CIPHER_OPENSSHONLY(emit_keytest, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_MAC(emit_keytest, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
PKDTESTS_MAC_OPENSSHONLY(emit_keytest, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
PKDTESTS_HOSTKEY_OPENSSHONLY(emit_keytest, openssh_rsa, OPENSSH_HOSTKEY_CMD)
Packit Service 31306d
#undef CLIENT_ID_FILE
Packit Service 31306d
Packit Service 31306d
#define CLIENT_ID_FILE OPENSSH_ECDSA256_TESTKEY
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_cert_e256, OPENSSH_CERT_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT_OPENSSHONLY(emit_keytest, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_KEX(emit_keytest, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_KEX_OPENSSHONLY(emit_keytest, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_CIPHER(emit_keytest, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_CIPHER_OPENSSHONLY(emit_keytest, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_MAC(emit_keytest, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
PKDTESTS_MAC_OPENSSHONLY(emit_keytest, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
#undef CLIENT_ID_FILE
Packit Service 31306d
Packit Service 31306d
/* Could add these passes, too: */
Packit Service 31306d
//#define CLIENT_ID_FILE OPENSSH_ECDSA384_TESTKEY
Packit Service 31306d
//#define CLIENT_ID_FILE OPENSSH_ECDSA521_TESTKEY
Packit Service 31306d
Packit Service 31306d
#define CLIENT_ID_FILE OPENSSH_ED25519_TESTKEY
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, openssh_cert_ed, OPENSSH_CERT_CMD)
Packit Service 31306d
PKDTESTS_DEFAULT_OPENSSHONLY(emit_keytest, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
PKDTESTS_KEX(emit_keytest, openssh_ed, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_KEX_OPENSSHONLY(emit_keytest, openssh_ed, OPENSSH_KEX_CMD)
Packit Service 31306d
PKDTESTS_CIPHER(emit_keytest, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_CIPHER_OPENSSHONLY(emit_keytest, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_MAC(emit_keytest, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
PKDTESTS_MAC_OPENSSHONLY(emit_keytest, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
#undef CLIENT_ID_FILE
Packit Service 31306d
Packit Service 31306d
#define CLIENT_ID_FILE DROPBEAR_RSA_TESTKEY
Packit Service 31306d
PKDTESTS_DEFAULT(emit_keytest, dropbear, DROPBEAR_CMD)
Packit Service 31306d
PKDTESTS_CIPHER(emit_keytest, dropbear, DROPBEAR_CIPHER_CMD)
Packit Service 31306d
PKDTESTS_MAC(emit_keytest, dropbear, DROPBEAR_MAC_CMD)
Packit Service 31306d
#undef CLIENT_ID_FILE
Packit Service 31306d
Packit Service 31306d
/*
Packit Service 31306d
 * Define an array of testname strings mapped to their associated
Packit Service 31306d
 * test function.  Enables running tests individually by name from
Packit Service 31306d
 * the command line.
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
#define emit_testmap(client, testname, sshcmd, setup, teardown) \
Packit Service 31306d
    { "torture_pkd_" #client "_" #testname,                     \
Packit Service 31306d
      emit_unit_test(client, testname, sshcmd, setup, teardown) },
Packit Service 31306d
Packit Service 31306d
#define emit_unit_test(client, testname, sshcmd, setup, teardown) \
Packit Service 31306d
    cmocka_unit_test_setup_teardown(torture_pkd_ ## client ## _ ## testname, \
Packit Service 31306d
                                    torture_pkd_ ## setup, \
Packit Service 31306d
                                    torture_pkd_ ## teardown)
Packit Service 31306d
Packit Service 31306d
#define emit_unit_test_comma(client, testname, sshcmd, setup, teardown) \
Packit Service 31306d
    emit_unit_test(client, testname, sshcmd, setup, teardown),
Packit Service 31306d
Packit Service 31306d
struct {
Packit Service 31306d
    const char *testname;
Packit Service 31306d
    const struct CMUnitTest test;
Packit Service 31306d
} testmap[] = {
Packit Service 31306d
    /* OpenSSH */
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_cert_dsa, OPENSSH_CERT_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT_OPENSSHONLY(emit_testmap, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_KEX(emit_testmap, openssh_dsa, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_KEX_OPENSSHONLY(emit_testmap, openssh_dsa, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER(emit_testmap, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY(emit_testmap, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_MAC(emit_testmap, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY(emit_testmap, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_cert_rsa, OPENSSH_CERT_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_sha256_cert_rsa, OPENSSH_SHA256_CERT_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT_OPENSSHONLY(emit_testmap, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_KEX(emit_testmap, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_KEX_OPENSSHONLY(emit_testmap, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER(emit_testmap, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY(emit_testmap, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_MAC(emit_testmap, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY(emit_testmap, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
    PKDTESTS_HOSTKEY_OPENSSHONLY(emit_testmap, openssh_rsa, OPENSSH_HOSTKEY_CMD)
Packit Service 31306d
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_cert_e256, OPENSSH_CERT_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT_OPENSSHONLY(emit_testmap, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_KEX(emit_testmap, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_KEX_OPENSSHONLY(emit_testmap, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER(emit_testmap, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY(emit_testmap, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_MAC(emit_testmap, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY(emit_testmap, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, openssh_cert_ed, OPENSSH_CERT_CMD)
Packit Service 31306d
    PKDTESTS_DEFAULT_OPENSSHONLY(emit_testmap, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
    PKDTESTS_KEX(emit_testmap, openssh_ed, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_KEX_OPENSSHONLY(emit_testmap, openssh_ed, OPENSSH_KEX_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER(emit_testmap, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER_OPENSSHONLY(emit_testmap, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_MAC(emit_testmap, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
    PKDTESTS_MAC_OPENSSHONLY(emit_testmap, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
    /* Dropbear */
Packit Service 31306d
    PKDTESTS_DEFAULT(emit_testmap, dropbear, DROPBEAR_CMD)
Packit Service 31306d
    PKDTESTS_CIPHER(emit_testmap, dropbear, DROPBEAR_CIPHER_CMD)
Packit Service 31306d
    PKDTESTS_MAC(emit_testmap, dropbear, DROPBEAR_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
    /* Noop */
Packit Service 31306d
    emit_testmap(client, noop, "", setup_noop, teardown)
Packit Service 31306d
Packit Service 31306d
    /* NULL tail entry */
Packit Service 31306d
    { .testname = NULL,
Packit Service 31306d
      .test = { .name = NULL,
Packit Service 31306d
                .test_func = NULL,
Packit Service 31306d
                .setup_func = NULL,
Packit Service 31306d
                .teardown_func = NULL } }
Packit Service 31306d
};
Packit Service 31306d
Packit Service 31306d
static int pkd_run_tests(void) {
Packit Service 31306d
    int rc = -1;
Packit Service 31306d
    int tindex = 0;
Packit Service 31306d
Packit Service 31306d
    const struct CMUnitTest openssh_tests[] = {
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_cert_dsa, OPENSSH_CERT_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_OPENSSHONLY(emit_unit_test_comma, openssh_dsa, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_KEX(emit_unit_test_comma, openssh_dsa, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER(emit_unit_test_comma, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY(emit_unit_test_comma, openssh_dsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC(emit_unit_test_comma, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY(emit_unit_test_comma, openssh_dsa, OPENSSH_MAC_CMD)
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_cert_rsa, OPENSSH_CERT_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_FIPS(emit_unit_test_comma, openssh_sha256_cert_rsa,
Packit Service 31306d
                              OPENSSH_SHA256_CERT_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_OPENSSHONLY(emit_unit_test_comma, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_KEX(emit_unit_test_comma, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER(emit_unit_test_comma, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY(emit_unit_test_comma, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC(emit_unit_test_comma, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY(emit_unit_test_comma, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_cert_e256, OPENSSH_CERT_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_OPENSSHONLY(emit_unit_test_comma, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_KEX(emit_unit_test_comma, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER(emit_unit_test_comma, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY(emit_unit_test_comma, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC(emit_unit_test_comma, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY(emit_unit_test_comma, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, openssh_cert_ed, OPENSSH_CERT_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_OPENSSHONLY(emit_unit_test_comma, openssh_ed, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_KEX(emit_unit_test_comma, openssh_ed, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER(emit_unit_test_comma, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY(emit_unit_test_comma, openssh_ed, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC(emit_unit_test_comma, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY(emit_unit_test_comma, openssh_ed, OPENSSH_MAC_CMD)
Packit Service 31306d
    };
Packit Service 31306d
Packit Service 31306d
    const struct CMUnitTest dropbear_tests[] = {
Packit Service 31306d
        PKDTESTS_DEFAULT(emit_unit_test_comma, dropbear, DROPBEAR_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER(emit_unit_test_comma, dropbear, DROPBEAR_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC(emit_unit_test_comma, dropbear, DROPBEAR_MAC_CMD)
Packit Service 31306d
    };
Packit Service 31306d
Packit Service 31306d
    const struct CMUnitTest openssh_fips_tests[] = {
Packit Service 31306d
        PKDTESTS_DEFAULT_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_FIPS(emit_unit_test_comma, openssh_sha256_cert_rsa,
Packit Service 31306d
                              OPENSSH_SHA256_CERT_CMD)
Packit Service 31306d
        PKDTESTS_KEX_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY_FIPS(emit_unit_test_comma, openssh_rsa, OPENSSH_MAC_CMD)
Packit Service 31306d
Packit Service 31306d
        PKDTESTS_DEFAULT_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_CMD)
Packit Service 31306d
        PKDTESTS_DEFAULT_FIPS(emit_unit_test_comma, openssh_cert_e256, OPENSSH_CERT_CMD)
Packit Service 31306d
        PKDTESTS_KEX_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_KEX_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_CIPHER_OPENSSHONLY_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_CIPHER_CMD)
Packit Service 31306d
        PKDTESTS_MAC_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
        PKDTESTS_MAC_OPENSSHONLY_FIPS(emit_unit_test_comma, openssh_e256, OPENSSH_MAC_CMD)
Packit Service 31306d
    };
Packit Service 31306d
Packit Service 31306d
    const struct CMUnitTest noop_tests[] = {
Packit Service 31306d
        emit_unit_test(client, noop, "", setup_noop, teardown)
Packit Service 31306d
    };
Packit Service 31306d
Packit Service 31306d
    /* Test list is populated depending on which clients are enabled. */
Packit Service 31306d
    struct CMUnitTest all_tests[(sizeof(openssh_tests) / sizeof(openssh_tests[0])) +
Packit Service 31306d
                                (sizeof(dropbear_tests) / sizeof(dropbear_tests[0])) +
Packit Service 31306d
                                (sizeof(noop_tests) / sizeof(noop_tests[0]))];
Packit Service 31306d
    memset(&all_tests[0], 0x0, sizeof(all_tests));
Packit Service 31306d
Packit Service 31306d
    /* Generate client keys and populate test list for each enabled client. */
Packit Service 31306d
    if (is_openssh_client_enabled()) {
Packit Service 31306d
        setup_openssh_client_keys();
Packit Service 31306d
        if (ssh_fips_mode()) {
Packit Service 31306d
            memcpy(&all_tests[tindex], &openssh_fips_tests[0], sizeof(openssh_fips_tests));
Packit Service 31306d
            tindex += (sizeof(openssh_fips_tests) / sizeof(openssh_fips_tests[0]));
Packit Service 31306d
        } else {
Packit Service 31306d
            memcpy(&all_tests[tindex], &openssh_tests[0], sizeof(openssh_tests));
Packit Service 31306d
            tindex += (sizeof(openssh_tests) / sizeof(openssh_tests[0]));
Packit Service 31306d
        }
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    if (is_dropbear_client_enabled()) {
Packit Service 31306d
        setup_dropbear_client_rsa_key();
Packit Service 31306d
        if (!ssh_fips_mode()) {
Packit Service 31306d
            memcpy(&all_tests[tindex], &dropbear_tests[0], sizeof(dropbear_tests));
Packit Service 31306d
            tindex += (sizeof(dropbear_tests) / sizeof(dropbear_tests[0]));
Packit Service 31306d
        }
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    memcpy(&all_tests[tindex], &noop_tests[0], sizeof(noop_tests));
Packit Service 31306d
    tindex += (sizeof(noop_tests) / sizeof(noop_tests[0]));
Packit Service 31306d
Packit Service 31306d
    if ((pkd_dargs.opts.testname == NULL) &&
Packit Service 31306d
        (pkd_dargs.opts.testmatch == NULL)) {
Packit Service 31306d
        rc = _cmocka_run_group_tests("all tests", all_tests, tindex, NULL, NULL);
Packit Service 31306d
    } else {
Packit Service 31306d
        size_t i = 0;
Packit Service 31306d
        size_t num_found = 0;
Packit Service 31306d
        const char *testname = pkd_dargs.opts.testname;
Packit Service 31306d
        const char *testmatch = pkd_dargs.opts.testmatch;
Packit Service 31306d
Packit Service 31306d
        struct CMUnitTest matching_tests[sizeof(all_tests)];
Packit Service 31306d
        memset(&matching_tests[0], 0x0, sizeof(matching_tests));
Packit Service 31306d
Packit Service 31306d
        while (testmap[i].testname != NULL) {
Packit Service 31306d
            if ((testname != NULL) &&
Packit Service 31306d
                (strcmp(testmap[i].testname, testname) == 0)) {
Packit Service 31306d
                memcpy(&matching_tests[0],
Packit Service 31306d
                       &testmap[i].test,
Packit Service 31306d
                       sizeof(struct CMUnitTest));
Packit Service 31306d
                num_found += 1;
Packit Service 31306d
                break;
Packit Service 31306d
            }
Packit Service 31306d
Packit Service 31306d
            if ((testmatch != NULL) &&
Packit Service 31306d
                (strstr(testmap[i].testname, testmatch) != NULL)) {
Packit Service 31306d
                memcpy(&matching_tests[num_found],
Packit Service 31306d
                       &testmap[i].test,
Packit Service 31306d
                       sizeof(struct CMUnitTest));
Packit Service 31306d
                num_found += 1;
Packit Service 31306d
            }
Packit Service 31306d
Packit Service 31306d
            i += 1;
Packit Service 31306d
        }
Packit Service 31306d
Packit Service 31306d
        if (num_found > 0) {
Packit Service 31306d
            rc = _cmocka_run_group_tests("found", matching_tests, num_found, NULL, NULL);
Packit Service 31306d
        } else {
Packit Service 31306d
            fprintf(stderr, "Did not find test '%s'\n", testname);
Packit Service 31306d
        }
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    /* Clean up client keys for each enabled client. */
Packit Service 31306d
    if (is_dropbear_client_enabled()) {
Packit Service 31306d
        cleanup_dropbear_client_rsa_key();
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    if (is_openssh_client_enabled()) {
Packit Service 31306d
        cleanup_openssh_client_keys();
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    /* Clean up any server keys that were generated. */
Packit Service 31306d
    cleanup_rsa_key();
Packit Service 31306d
    cleanup_ecdsa_keys();
Packit Service 31306d
    if (!ssh_fips_mode()) {
Packit Service 31306d
        cleanup_ed25519_key();
Packit Service 31306d
#ifdef HAVE_DSA
Packit Service 31306d
        cleanup_dsa_key();
Packit Service 31306d
#endif
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    return rc;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int pkd_init_socket_wrapper(void) {
Packit Service 31306d
    int rc = 0;
Packit Service 31306d
    char *mkdtemp_str = NULL;
Packit Service 31306d
Packit Service 31306d
    if (pkd_dargs.opts.socket_wrapper.mkdtemp_str == NULL) {
Packit Service 31306d
        goto out;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    mkdtemp_str = strdup(pkd_dargs.opts.socket_wrapper.mkdtemp_str);
Packit Service 31306d
    if (mkdtemp_str == NULL) {
Packit Service 31306d
        fprintf(stderr, "pkd_init_socket_wrapper strdup failed\n");
Packit Service 31306d
        goto errstrdup;
Packit Service 31306d
    }
Packit Service 31306d
    pkd_dargs.opts.socket_wrapper.mkdtemp_str = mkdtemp_str;
Packit Service 31306d
Packit Service 31306d
    if (mkdtemp(mkdtemp_str) == NULL) {
Packit Service 31306d
        fprintf(stderr, "pkd_init_socket_wrapper mkdtemp '%s' failed\n", mkdtemp_str);
Packit Service 31306d
        goto errmkdtemp;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    if (setenv("SOCKET_WRAPPER_DIR", mkdtemp_str, 1) != 0) {
Packit Service 31306d
        fprintf(stderr, "pkd_init_socket_wrapper setenv failed\n");
Packit Service 31306d
        goto errsetenv;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    goto out;
Packit Service 31306d
errsetenv:
Packit Service 31306d
errmkdtemp:
Packit Service 31306d
    free(mkdtemp_str);
Packit Service 31306d
errstrdup:
Packit Service 31306d
    rc = -1;
Packit Service 31306d
out:
Packit Service 31306d
    return rc;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int pkd_rmfiles(const char *path) {
Packit Service 31306d
    char bin[1024] = { 0 };
Packit Service 31306d
    snprintf(&bin[0], sizeof(bin), "rm -f %s/*", path);
Packit Service 31306d
    return system_checked(bin);
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
static int pkd_cleanup_socket_wrapper(void) {
Packit Service 31306d
    int rc = 0;
Packit Service 31306d
Packit Service 31306d
    if (pkd_dargs.opts.socket_wrapper.mkdtemp_str == NULL) {
Packit Service 31306d
        goto out;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    /* clean up socket-wrapper unix domain sockets */
Packit Service 31306d
    if (pkd_rmfiles(pkd_dargs.opts.socket_wrapper.mkdtemp_str) != 0) {
Packit Service 31306d
        fprintf(stderr, "pkd_cleanup_socket_wrapper pkd_rmfiles '%s' failed\n",
Packit Service 31306d
                        pkd_dargs.opts.socket_wrapper.mkdtemp_str);
Packit Service 31306d
        goto errrmfiles;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    if (rmdir(pkd_dargs.opts.socket_wrapper.mkdtemp_str) != 0) {
Packit Service 31306d
        fprintf(stderr, "pkd_cleanup_socket_wrapper rmdir '%s' failed\n",
Packit Service 31306d
                        pkd_dargs.opts.socket_wrapper.mkdtemp_str);
Packit Service 31306d
        goto errrmdir;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    free(pkd_dargs.opts.socket_wrapper.mkdtemp_str);
Packit Service 31306d
Packit Service 31306d
    goto out;
Packit Service 31306d
errrmdir:
Packit Service 31306d
errrmfiles:
Packit Service 31306d
    rc = -1;
Packit Service 31306d
out:
Packit Service 31306d
    return rc;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
int main(int argc, char **argv) {
Packit Service 31306d
    int i = 0;
Packit Service 31306d
    int rc = 0;
Packit Service 31306d
    int exit_code = -1;
Packit Service 31306d
Packit Service 31306d
    unsetenv("SSH_AUTH_SOCK");
Packit Service 31306d
Packit Service 31306d
    pkd_dargs.payload.buf = default_payload_buf;
Packit Service 31306d
    pkd_dargs.payload.len = default_payload_len;
Packit Service 31306d
Packit Service 31306d
    rc = ssh_init();
Packit Service 31306d
    if (rc != 0) {
Packit Service 31306d
        goto out;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_ARGP_H
Packit Service 31306d
    argp_parse(&parser, argc, argv, 0, 0, NULL);
Packit Service 31306d
#else /* HAVE_ARGP_H */
Packit Service 31306d
    (void) argc;  (void) argv;
Packit Service 31306d
#endif /* HAVE_ARGP_H */
Packit Service 31306d
Packit Service 31306d
    rc = pkd_init_socket_wrapper();
Packit Service 31306d
    if (rc != 0) {
Packit Service 31306d
        fprintf(stderr, "pkd_init_socket_wrapper failed: %d\n", rc);
Packit Service 31306d
        goto out_finalize;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    if (pkd_dargs.opts.list != 0) {
Packit Service 31306d
        while (testmap[i].testname != NULL) {
Packit Service 31306d
            printf("%s\n", testmap[i++].testname);
Packit Service 31306d
        }
Packit Service 31306d
    } else {
Packit Service 31306d
        exit_code = pkd_run_tests();
Packit Service 31306d
        if (exit_code != 0) {
Packit Service 31306d
            fprintf(stderr, "pkd_run_tests failed: %d\n", exit_code);
Packit Service 31306d
        }
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    rc = pkd_cleanup_socket_wrapper();
Packit Service 31306d
    if (rc != 0) {
Packit Service 31306d
        fprintf(stderr, "pkd_cleanup_socket_wrapper failed: %d\n", rc);
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
out_finalize:
Packit Service 31306d
    rc = ssh_finalize();
Packit Service 31306d
    if (rc != 0) {
Packit Service 31306d
        fprintf(stderr, "ssh_finalize: %d\n", rc);
Packit Service 31306d
    }
Packit Service 31306d
out:
Packit Service 31306d
    return exit_code;
Packit Service 31306d
}