Blame apps/speed.c

Packit Service 084de1
/*
Packit Service 084de1
 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
 * Copyright (c) 2002, Oracle and/or its affiliates. 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
#undef SECONDS
Packit Service 084de1
#define SECONDS                 3
Packit Service 084de1
#define RSA_SECONDS             10
Packit Service 084de1
#define DSA_SECONDS             10
Packit Service 084de1
#define ECDSA_SECONDS   10
Packit Service 084de1
#define ECDH_SECONDS    10
Packit Service 084de1
#define EdDSA_SECONDS   10
Packit Service 084de1
Packit Service 084de1
#include <stdio.h>
Packit Service 084de1
#include <stdlib.h>
Packit Service 084de1
#include <string.h>
Packit Service 084de1
#include <math.h>
Packit Service 084de1
#include "apps.h"
Packit Service 084de1
#include "progs.h"
Packit Service 084de1
#include <openssl/crypto.h>
Packit Service 084de1
#include <openssl/rand.h>
Packit Service 084de1
#include <openssl/err.h>
Packit Service 084de1
#include <openssl/evp.h>
Packit Service 084de1
#include <openssl/objects.h>
Packit Service 084de1
#include <openssl/async.h>
Packit Service 084de1
#if !defined(OPENSSL_SYS_MSDOS)
Packit Service 084de1
# include OPENSSL_UNISTD
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#if defined(_WIN32)
Packit Service 084de1
# include <windows.h>
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#include <openssl/bn.h>
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
# include <openssl/des.h>
Packit Service 084de1
#endif
Packit Service 084de1
#include <openssl/aes.h>
Packit Service 084de1
#ifndef OPENSSL_NO_CAMELLIA
Packit Service 084de1
# include <openssl/camellia.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
# include <openssl/md2.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MDC2
Packit Service 084de1
# include <openssl/mdc2.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD4
Packit Service 084de1
# include <openssl/md4.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD5
Packit Service 084de1
# include <openssl/md5.h>
Packit Service 084de1
#endif
Packit Service 084de1
#include <openssl/hmac.h>
Packit Service 084de1
#include <openssl/sha.h>
Packit Service 084de1
#ifndef OPENSSL_NO_RMD160
Packit Service 084de1
# include <openssl/ripemd.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_WHIRLPOOL
Packit Service 084de1
# include <openssl/whrlpool.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
# include <openssl/rc4.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC5
Packit Service 084de1
# include <openssl/rc5.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC2
Packit Service 084de1
# include <openssl/rc2.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
# include <openssl/idea.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_SEED
Packit Service 084de1
# include <openssl/seed.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
# include <openssl/blowfish.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_CAST
Packit Service 084de1
# include <openssl/cast.h>
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
# include <openssl/rsa.h>
Packit Service 084de1
# include "./testrsa.h"
Packit Service 084de1
#endif
Packit Service 084de1
#include <openssl/x509.h>
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
# include <openssl/dsa.h>
Packit Service 084de1
# include "./testdsa.h"
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
# include <openssl/ec.h>
Packit Service 084de1
#endif
Packit Service 084de1
#include <openssl/modes.h>
Packit Service 084de1
Packit Service 084de1
#ifndef HAVE_FORK
Packit Service 084de1
# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_VXWORKS)
Packit Service 084de1
#  define HAVE_FORK 0
Packit Service 084de1
# else
Packit Service 084de1
#  define HAVE_FORK 1
Packit Service 084de1
# endif
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#if HAVE_FORK
Packit Service 084de1
# undef NO_FORK
Packit Service 084de1
#else
Packit Service 084de1
# define NO_FORK
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#define MAX_MISALIGNMENT 63
Packit Service 084de1
#define MAX_ECDH_SIZE   256
Packit Service 084de1
#define MISALIGN        64
Packit Service 084de1
Packit Service 084de1
typedef struct openssl_speed_sec_st {
Packit Service 084de1
    int sym;
Packit Service 084de1
    int rsa;
Packit Service 084de1
    int dsa;
Packit Service 084de1
    int ecdsa;
Packit Service 084de1
    int ecdh;
Packit Service 084de1
    int eddsa;
Packit Service 084de1
} openssl_speed_sec_t;
Packit Service 084de1
Packit Service 084de1
static volatile int run = 0;
Packit Service 084de1
Packit Service 084de1
static int mr = 0;
Packit Service 084de1
static int usertime = 1;
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
static int EVP_Digest_MD2_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MDC2
Packit Service 084de1
static int EVP_Digest_MDC2_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD4
Packit Service 084de1
static int EVP_Digest_MD4_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD5
Packit Service 084de1
static int MD5_loop(void *args);
Packit Service 084de1
static int HMAC_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
static int SHA1_loop(void *args);
Packit Service 084de1
static int SHA256_loop(void *args);
Packit Service 084de1
static int SHA512_loop(void *args);
Packit Service 084de1
#ifndef OPENSSL_NO_WHIRLPOOL
Packit Service 084de1
static int WHIRLPOOL_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RMD160
Packit Service 084de1
static int EVP_Digest_RMD160_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
static int RC4_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
static int DES_ncbc_encrypt_loop(void *args);
Packit Service 084de1
static int DES_ede3_cbc_encrypt_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
static int AES_cbc_128_encrypt_loop(void *args);
Packit Service 084de1
static int AES_cbc_192_encrypt_loop(void *args);
Packit Service 084de1
static int AES_ige_128_encrypt_loop(void *args);
Packit Service 084de1
static int AES_cbc_256_encrypt_loop(void *args);
Packit Service 084de1
static int AES_ige_192_encrypt_loop(void *args);
Packit Service 084de1
static int AES_ige_256_encrypt_loop(void *args);
Packit Service 084de1
static int CRYPTO_gcm128_aad_loop(void *args);
Packit Service 084de1
static int RAND_bytes_loop(void *args);
Packit Service 084de1
static int EVP_Update_loop(void *args);
Packit Service 084de1
static int EVP_Update_loop_ccm(void *args);
Packit Service 084de1
static int EVP_Update_loop_aead(void *args);
Packit Service 084de1
static int EVP_Digest_loop(void *args);
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
static int RSA_sign_loop(void *args);
Packit Service 084de1
static int RSA_verify_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
static int DSA_sign_loop(void *args);
Packit Service 084de1
static int DSA_verify_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
static int ECDSA_sign_loop(void *args);
Packit Service 084de1
static int ECDSA_verify_loop(void *args);
Packit Service 084de1
static int EdDSA_sign_loop(void *args);
Packit Service 084de1
static int EdDSA_verify_loop(void *args);
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
static double Time_F(int s);
Packit Service 084de1
static void print_message(const char *s, long num, int length, int tm);
Packit Service 084de1
static void pkey_print_message(const char *str, const char *str2,
Packit Service 084de1
                               long num, unsigned int bits, int sec);
Packit Service 084de1
static void print_result(int alg, int run_no, int count, double time_used);
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
static int do_multi(int multi, int size_num);
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
static const int lengths_list[] = {
Packit Service 084de1
    16, 64, 256, 1024, 8 * 1024, 16 * 1024
Packit Service 084de1
};
Packit Service 084de1
static const int *lengths = lengths_list;
Packit Service 084de1
Packit Service 084de1
static const int aead_lengths_list[] = {
Packit Service 084de1
    2, 31, 136, 1024, 8 * 1024, 16 * 1024
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
#define START   0
Packit Service 084de1
#define STOP    1
Packit Service 084de1
Packit Service 084de1
#ifdef SIGALRM
Packit Service 084de1
Packit Service 084de1
static void alarmed(int sig)
Packit Service 084de1
{
Packit Service 084de1
    signal(SIGALRM, alarmed);
Packit Service 084de1
    run = 0;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static double Time_F(int s)
Packit Service 084de1
{
Packit Service 084de1
    double ret = app_tminterval(s, usertime);
Packit Service 084de1
    if (s == STOP)
Packit Service 084de1
        alarm(0);
Packit Service 084de1
    return ret;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
#elif defined(_WIN32)
Packit Service 084de1
Packit Service 084de1
# define SIGALRM -1
Packit Service 084de1
Packit Service 084de1
static unsigned int lapse;
Packit Service 084de1
static volatile unsigned int schlock;
Packit Service 084de1
static void alarm_win32(unsigned int secs)
Packit Service 084de1
{
Packit Service 084de1
    lapse = secs * 1000;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
# define alarm alarm_win32
Packit Service 084de1
Packit Service 084de1
static DWORD WINAPI sleepy(VOID * arg)
Packit Service 084de1
{
Packit Service 084de1
    schlock = 1;
Packit Service 084de1
    Sleep(lapse);
Packit Service 084de1
    run = 0;
Packit Service 084de1
    return 0;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static double Time_F(int s)
Packit Service 084de1
{
Packit Service 084de1
    double ret;
Packit Service 084de1
    static HANDLE thr;
Packit Service 084de1
Packit Service 084de1
    if (s == START) {
Packit Service 084de1
        schlock = 0;
Packit Service 084de1
        thr = CreateThread(NULL, 4096, sleepy, NULL, 0, NULL);
Packit Service 084de1
        if (thr == NULL) {
Packit Service 084de1
            DWORD err = GetLastError();
Packit Service 084de1
            BIO_printf(bio_err, "unable to CreateThread (%lu)", err);
Packit Service 084de1
            ExitProcess(err);
Packit Service 084de1
        }
Packit Service 084de1
        while (!schlock)
Packit Service 084de1
            Sleep(0);           /* scheduler spinlock */
Packit Service 084de1
        ret = app_tminterval(s, usertime);
Packit Service 084de1
    } else {
Packit Service 084de1
        ret = app_tminterval(s, usertime);
Packit Service 084de1
        if (run)
Packit Service 084de1
            TerminateThread(thr, 0);
Packit Service 084de1
        CloseHandle(thr);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    return ret;
Packit Service 084de1
}
Packit Service 084de1
#else
Packit Service 084de1
static double Time_F(int s)
Packit Service 084de1
{
Packit Service 084de1
    return app_tminterval(s, usertime);
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
static void multiblock_speed(const EVP_CIPHER *evp_cipher, int lengths_single,
Packit Service 084de1
                             const openssl_speed_sec_t *seconds);
Packit Service 084de1
Packit Service 084de1
#define found(value, pairs, result)\
Packit Service 084de1
    opt_found(value, result, pairs, OSSL_NELEM(pairs))
Packit Service 084de1
static int opt_found(const char *name, unsigned int *result,
Packit Service 084de1
                     const OPT_PAIR pairs[], unsigned int nbelem)
Packit Service 084de1
{
Packit Service 084de1
    unsigned int idx;
Packit Service 084de1
Packit Service 084de1
    for (idx = 0; idx < nbelem; ++idx, pairs++)
Packit Service 084de1
        if (strcmp(name, pairs->name) == 0) {
Packit Service 084de1
            *result = pairs->retval;
Packit Service 084de1
            return 1;
Packit Service 084de1
        }
Packit Service 084de1
    return 0;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
typedef enum OPTION_choice {
Packit Service 084de1
    OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
Packit Service 084de1
    OPT_ELAPSED, OPT_EVP, OPT_DECRYPT, OPT_ENGINE, OPT_MULTI,
Packit Service 084de1
    OPT_MR, OPT_MB, OPT_MISALIGN, OPT_ASYNCJOBS, OPT_R_ENUM,
Packit Service 084de1
    OPT_PRIMES, OPT_SECONDS, OPT_BYTES, OPT_AEAD
Packit Service 084de1
} OPTION_CHOICE;
Packit Service 084de1
Packit Service 084de1
const OPTIONS speed_options[] = {
Packit Service 084de1
    {OPT_HELP_STR, 1, '-', "Usage: %s [options] ciphers...\n"},
Packit Service 084de1
    {OPT_HELP_STR, 1, '-', "Valid options are:\n"},
Packit Service 084de1
    {"help", OPT_HELP, '-', "Display this summary"},
Packit Service 084de1
    {"evp", OPT_EVP, 's', "Use EVP-named cipher or digest"},
Packit Service 084de1
    {"decrypt", OPT_DECRYPT, '-',
Packit Service 084de1
     "Time decryption instead of encryption (only EVP)"},
Packit Service 084de1
    {"aead", OPT_AEAD, '-',
Packit Service 084de1
     "Benchmark EVP-named AEAD cipher in TLS-like sequence"},
Packit Service 084de1
    {"mb", OPT_MB, '-',
Packit Service 084de1
     "Enable (tls1>=1) multi-block mode on EVP-named cipher"},
Packit Service 084de1
    {"mr", OPT_MR, '-', "Produce machine readable output"},
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
    {"multi", OPT_MULTI, 'p', "Run benchmarks in parallel"},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_ASYNC
Packit Service 084de1
    {"async_jobs", OPT_ASYNCJOBS, 'p',
Packit Service 084de1
     "Enable async mode and start specified number of jobs"},
Packit Service 084de1
#endif
Packit Service 084de1
    OPT_R_OPTIONS,
Packit Service 084de1
#ifndef OPENSSL_NO_ENGINE
Packit Service 084de1
    {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
Packit Service 084de1
#endif
Packit Service 084de1
    {"elapsed", OPT_ELAPSED, '-',
Packit Service 084de1
     "Use wall-clock time instead of CPU user time as divisor"},
Packit Service 084de1
    {"primes", OPT_PRIMES, 'p', "Specify number of primes (for RSA only)"},
Packit Service 084de1
    {"seconds", OPT_SECONDS, 'p',
Packit Service 084de1
     "Run benchmarks for specified amount of seconds"},
Packit Service 084de1
    {"bytes", OPT_BYTES, 'p',
Packit Service 084de1
     "Run [non-PKI] benchmarks on custom-sized buffer"},
Packit Service 084de1
    {"misalign", OPT_MISALIGN, 'p',
Packit Service 084de1
     "Use specified offset to mis-align buffers"},
Packit Service 084de1
    {NULL}
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
#define D_MD2           0
Packit Service 084de1
#define D_MDC2          1
Packit Service 084de1
#define D_MD4           2
Packit Service 084de1
#define D_MD5           3
Packit Service 084de1
#define D_HMAC          4
Packit Service 084de1
#define D_SHA1          5
Packit Service 084de1
#define D_RMD160        6
Packit Service 084de1
#define D_RC4           7
Packit Service 084de1
#define D_CBC_DES       8
Packit Service 084de1
#define D_EDE3_DES      9
Packit Service 084de1
#define D_CBC_IDEA      10
Packit Service 084de1
#define D_CBC_SEED      11
Packit Service 084de1
#define D_CBC_RC2       12
Packit Service 084de1
#define D_CBC_RC5       13
Packit Service 084de1
#define D_CBC_BF        14
Packit Service 084de1
#define D_CBC_CAST      15
Packit Service 084de1
#define D_CBC_128_AES   16
Packit Service 084de1
#define D_CBC_192_AES   17
Packit Service 084de1
#define D_CBC_256_AES   18
Packit Service 084de1
#define D_CBC_128_CML   19
Packit Service 084de1
#define D_CBC_192_CML   20
Packit Service 084de1
#define D_CBC_256_CML   21
Packit Service 084de1
#define D_EVP           22
Packit Service 084de1
#define D_SHA256        23
Packit Service 084de1
#define D_SHA512        24
Packit Service 084de1
#define D_WHIRLPOOL     25
Packit Service 084de1
#define D_IGE_128_AES   26
Packit Service 084de1
#define D_IGE_192_AES   27
Packit Service 084de1
#define D_IGE_256_AES   28
Packit Service 084de1
#define D_GHASH         29
Packit Service 084de1
#define D_RAND          30
Packit Service 084de1
/* name of algorithms to test */
Packit Service 084de1
static const char *names[] = {
Packit Service 084de1
    "md2", "mdc2", "md4", "md5", "hmac(md5)", "sha1", "rmd160", "rc4",
Packit Service 084de1
    "des cbc", "des ede3", "idea cbc", "seed cbc",
Packit Service 084de1
    "rc2 cbc", "rc5-32/12 cbc", "blowfish cbc", "cast cbc",
Packit Service 084de1
    "aes-128 cbc", "aes-192 cbc", "aes-256 cbc",
Packit Service 084de1
    "camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc",
Packit Service 084de1
    "evp", "sha256", "sha512", "whirlpool",
Packit Service 084de1
    "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash",
Packit Service 084de1
    "rand"
Packit Service 084de1
};
Packit Service 084de1
#define ALGOR_NUM       OSSL_NELEM(names)
Packit Service 084de1
Packit Service 084de1
/* list of configured algorithm (remaining) */
Packit Service 084de1
static const OPT_PAIR doit_choices[] = {
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
    {"md2", D_MD2},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MDC2
Packit Service 084de1
    {"mdc2", D_MDC2},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD4
Packit Service 084de1
    {"md4", D_MD4},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MD5
Packit Service 084de1
    {"md5", D_MD5},
Packit Service 084de1
    {"hmac", D_HMAC},
Packit Service 084de1
#endif
Packit Service 084de1
    {"sha1", D_SHA1},
Packit Service 084de1
    {"sha256", D_SHA256},
Packit Service 084de1
    {"sha512", D_SHA512},
Packit Service 084de1
#ifndef OPENSSL_NO_WHIRLPOOL
Packit Service 084de1
    {"whirlpool", D_WHIRLPOOL},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RMD160
Packit Service 084de1
    {"ripemd", D_RMD160},
Packit Service 084de1
    {"rmd160", D_RMD160},
Packit Service 084de1
    {"ripemd160", D_RMD160},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
    {"rc4", D_RC4},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
    {"des-cbc", D_CBC_DES},
Packit Service 084de1
    {"des-ede3", D_EDE3_DES},
Packit Service 084de1
#endif
Packit Service 084de1
    {"aes-128-cbc", D_CBC_128_AES},
Packit Service 084de1
    {"aes-192-cbc", D_CBC_192_AES},
Packit Service 084de1
    {"aes-256-cbc", D_CBC_256_AES},
Packit Service 084de1
    {"aes-128-ige", D_IGE_128_AES},
Packit Service 084de1
    {"aes-192-ige", D_IGE_192_AES},
Packit Service 084de1
    {"aes-256-ige", D_IGE_256_AES},
Packit Service 084de1
#ifndef OPENSSL_NO_RC2
Packit Service 084de1
    {"rc2-cbc", D_CBC_RC2},
Packit Service 084de1
    {"rc2", D_CBC_RC2},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC5
Packit Service 084de1
    {"rc5-cbc", D_CBC_RC5},
Packit Service 084de1
    {"rc5", D_CBC_RC5},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
    {"idea-cbc", D_CBC_IDEA},
Packit Service 084de1
    {"idea", D_CBC_IDEA},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_SEED
Packit Service 084de1
    {"seed-cbc", D_CBC_SEED},
Packit Service 084de1
    {"seed", D_CBC_SEED},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
    {"bf-cbc", D_CBC_BF},
Packit Service 084de1
    {"blowfish", D_CBC_BF},
Packit Service 084de1
    {"bf", D_CBC_BF},
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_CAST
Packit Service 084de1
    {"cast-cbc", D_CBC_CAST},
Packit Service 084de1
    {"cast", D_CBC_CAST},
Packit Service 084de1
    {"cast5", D_CBC_CAST},
Packit Service 084de1
#endif
Packit Service 084de1
    {"ghash", D_GHASH},
Packit Service 084de1
    {"rand", D_RAND}
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static double results[ALGOR_NUM][OSSL_NELEM(lengths_list)];
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
# define R_DSA_512       0
Packit Service 084de1
# define R_DSA_1024      1
Packit Service 084de1
# define R_DSA_2048      2
Packit Service 084de1
static const OPT_PAIR dsa_choices[] = {
Packit Service 084de1
    {"dsa512", R_DSA_512},
Packit Service 084de1
    {"dsa1024", R_DSA_1024},
Packit Service 084de1
    {"dsa2048", R_DSA_2048}
Packit Service 084de1
};
Packit Service 084de1
# define DSA_NUM         OSSL_NELEM(dsa_choices)
Packit Service 084de1
Packit Service 084de1
static double dsa_results[DSA_NUM][2];  /* 2 ops: sign then verify */
Packit Service 084de1
#endif  /* OPENSSL_NO_DSA */
Packit Service 084de1
Packit Service 084de1
#define R_RSA_512       0
Packit Service 084de1
#define R_RSA_1024      1
Packit Service 084de1
#define R_RSA_2048      2
Packit Service 084de1
#define R_RSA_3072      3
Packit Service 084de1
#define R_RSA_4096      4
Packit Service 084de1
#define R_RSA_7680      5
Packit Service 084de1
#define R_RSA_15360     6
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
static const OPT_PAIR rsa_choices[] = {
Packit Service 084de1
    {"rsa512", R_RSA_512},
Packit Service 084de1
    {"rsa1024", R_RSA_1024},
Packit Service 084de1
    {"rsa2048", R_RSA_2048},
Packit Service 084de1
    {"rsa3072", R_RSA_3072},
Packit Service 084de1
    {"rsa4096", R_RSA_4096},
Packit Service 084de1
    {"rsa7680", R_RSA_7680},
Packit Service 084de1
    {"rsa15360", R_RSA_15360}
Packit Service 084de1
};
Packit Service 084de1
# define RSA_NUM OSSL_NELEM(rsa_choices)
Packit Service 084de1
Packit Service 084de1
static double rsa_results[RSA_NUM][2];  /* 2 ops: sign then verify */
Packit Service 084de1
#endif /* OPENSSL_NO_RSA */
Packit Service 084de1
Packit Service 084de1
enum {
Packit Service 084de1
    R_EC_P224,
Packit Service 084de1
    R_EC_P256,
Packit Service 084de1
    R_EC_P384,
Packit Service 084de1
    R_EC_P521,
Packit Service 084de1
    R_EC_X25519,
Packit Service 084de1
    R_EC_X448
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
static OPT_PAIR ecdsa_choices[] = {
Packit Service 084de1
    {"ecdsap224", R_EC_P224},
Packit Service 084de1
    {"ecdsap256", R_EC_P256},
Packit Service 084de1
    {"ecdsap384", R_EC_P384},
Packit Service 084de1
    {"ecdsap521", R_EC_P521},
Packit Service 084de1
};
Packit Service 084de1
# define ECDSA_NUM       OSSL_NELEM(ecdsa_choices)
Packit Service 084de1
Packit Service 084de1
static double ecdsa_results[ECDSA_NUM][2];    /* 2 ops: sign then verify */
Packit Service 084de1
Packit Service 084de1
static const OPT_PAIR ecdh_choices[] = {
Packit Service 084de1
    {"ecdhp224", R_EC_P224},
Packit Service 084de1
    {"ecdhp256", R_EC_P256},
Packit Service 084de1
    {"ecdhp384", R_EC_P384},
Packit Service 084de1
    {"ecdhp521", R_EC_P521},
Packit Service 084de1
    {"ecdhx25519", R_EC_X25519},
Packit Service 084de1
    {"ecdhx448", R_EC_X448}
Packit Service 084de1
};
Packit Service 084de1
# define EC_NUM       OSSL_NELEM(ecdh_choices)
Packit Service 084de1
Packit Service 084de1
static double ecdh_results[EC_NUM][1];  /* 1 op: derivation */
Packit Service 084de1
Packit Service 084de1
#define R_EC_Ed25519    0
Packit Service 084de1
#define R_EC_Ed448      1
Packit Service 084de1
static OPT_PAIR eddsa_choices[] = {
Packit Service 084de1
    {"ed25519", R_EC_Ed25519},
Packit Service 084de1
    {"ed448", R_EC_Ed448}
Packit Service 084de1
};
Packit Service 084de1
# define EdDSA_NUM       OSSL_NELEM(eddsa_choices)
Packit Service 084de1
Packit Service 084de1
static double eddsa_results[EdDSA_NUM][2];    /* 2 ops: sign then verify */
Packit Service 084de1
#endif /* OPENSSL_NO_EC */
Packit Service 084de1
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
# define COND(d) (count < (d))
Packit Service 084de1
# define COUNT(d) (d)
Packit Service 084de1
#else
Packit Service 084de1
# define COND(unused_cond) (run && count<0x7fffffff)
Packit Service 084de1
# define COUNT(d) (count)
Packit Service 084de1
#endif                          /* SIGALRM */
Packit Service 084de1
Packit Service 084de1
typedef struct loopargs_st {
Packit Service 084de1
    ASYNC_JOB *inprogress_job;
Packit Service 084de1
    ASYNC_WAIT_CTX *wait_ctx;
Packit Service 084de1
    unsigned char *buf;
Packit Service 084de1
    unsigned char *buf2;
Packit Service 084de1
    unsigned char *buf_malloc;
Packit Service 084de1
    unsigned char *buf2_malloc;
Packit Service 084de1
    unsigned char *key;
Packit Service 084de1
    unsigned int siglen;
Packit Service 084de1
    size_t sigsize;
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
    RSA *rsa_key[RSA_NUM];
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
    DSA *dsa_key[DSA_NUM];
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
    EC_KEY *ecdsa[ECDSA_NUM];
Packit Service 084de1
    EVP_PKEY_CTX *ecdh_ctx[EC_NUM];
Packit Service 084de1
    EVP_MD_CTX *eddsa_ctx[EdDSA_NUM];
Packit Service 084de1
    unsigned char *secret_a;
Packit Service 084de1
    unsigned char *secret_b;
Packit Service 084de1
    size_t outlen[EC_NUM];
Packit Service 084de1
#endif
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
    HMAC_CTX *hctx;
Packit Service 084de1
    GCM128_CONTEXT *gcm_ctx;
Packit Service 084de1
} loopargs_t;
Packit Service 084de1
static int run_benchmark(int async_jobs, int (*loop_function) (void *),
Packit Service 084de1
                         loopargs_t * loopargs);
Packit Service 084de1
Packit Service 084de1
static unsigned int testnum;
Packit Service 084de1
Packit Service 084de1
/* Nb of iterations to do per algorithm and key-size */
Packit Service 084de1
static long c[ALGOR_NUM][OSSL_NELEM(lengths_list)];
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
static int EVP_Digest_MD2_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char md2[MD2_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(c[D_MD2][testnum]); count++) {
Packit Service 084de1
        if (!EVP_Digest(buf, (size_t)lengths[testnum], md2, NULL, EVP_md2(),
Packit Service 084de1
                        NULL))
Packit Service 084de1
            return -1;
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MDC2
Packit Service 084de1
static int EVP_Digest_MDC2_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char mdc2[MDC2_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(c[D_MDC2][testnum]); count++) {
Packit Service 084de1
        if (!EVP_Digest(buf, (size_t)lengths[testnum], mdc2, NULL, EVP_mdc2(),
Packit Service 084de1
                        NULL))
Packit Service 084de1
            return -1;
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD4
Packit Service 084de1
static int EVP_Digest_MD4_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char md4[MD4_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(c[D_MD4][testnum]); count++) {
Packit Service 084de1
        if (!EVP_Digest(buf, (size_t)lengths[testnum], md4, NULL, EVP_md4(),
Packit Service 084de1
                        NULL))
Packit Service 084de1
            return -1;
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD5
Packit Service 084de1
static int MD5_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char md5[MD5_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_MD5][testnum]); count++)
Packit Service 084de1
        MD5(buf, lengths[testnum], md5);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int HMAC_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    HMAC_CTX *hctx = tempargs->hctx;
Packit Service 084de1
    unsigned char hmac[MD5_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(c[D_HMAC][testnum]); count++) {
Packit Service 084de1
        HMAC_Init_ex(hctx, NULL, 0, NULL, NULL);
Packit Service 084de1
        HMAC_Update(hctx, buf, lengths[testnum]);
Packit Service 084de1
        HMAC_Final(hctx, hmac, NULL);
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
static int SHA1_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char sha[SHA_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_SHA1][testnum]); count++)
Packit Service 084de1
        SHA1(buf, lengths[testnum], sha);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int SHA256_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char sha256[SHA256_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_SHA256][testnum]); count++)
Packit Service 084de1
        SHA256(buf, lengths[testnum], sha256);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int SHA512_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char sha512[SHA512_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_SHA512][testnum]); count++)
Packit Service 084de1
        SHA512(buf, lengths[testnum], sha512);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_WHIRLPOOL
Packit Service 084de1
static int WHIRLPOOL_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_WHIRLPOOL][testnum]); count++)
Packit Service 084de1
        WHIRLPOOL(buf, lengths[testnum], whirlpool);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RMD160
Packit Service 084de1
static int EVP_Digest_RMD160_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_RMD160][testnum]); count++) {
Packit Service 084de1
        if (!EVP_Digest(buf, (size_t)lengths[testnum], &(rmd160[0]),
Packit Service 084de1
                        NULL, EVP_ripemd160(), NULL))
Packit Service 084de1
            return -1;
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
static RC4_KEY rc4_ks;
Packit Service 084de1
static int RC4_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_RC4][testnum]); count++)
Packit Service 084de1
        RC4(&rc4_ks, (size_t)lengths[testnum], buf, buf);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
static unsigned char DES_iv[8];
Packit Service 084de1
static DES_key_schedule sch;
Packit Service 084de1
static DES_key_schedule sch2;
Packit Service 084de1
static DES_key_schedule sch3;
Packit Service 084de1
static int DES_ncbc_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_CBC_DES][testnum]); count++)
Packit Service 084de1
        DES_ncbc_encrypt(buf, buf, lengths[testnum], &sch,
Packit Service 084de1
                         &DES_iv, DES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int DES_ede3_cbc_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_EDE3_DES][testnum]); count++)
Packit Service 084de1
        DES_ede3_cbc_encrypt(buf, buf, lengths[testnum],
Packit Service 084de1
                             &sch, &sch2, &sch3, &DES_iv, DES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#define MAX_BLOCK_SIZE 128
Packit Service 084de1
Packit Service 084de1
static unsigned char iv[2 * MAX_BLOCK_SIZE / 8];
Packit Service 084de1
static AES_KEY aes_ks1, aes_ks2, aes_ks3;
Packit Service 084de1
static int AES_cbc_128_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_CBC_128_AES][testnum]); count++)
Packit Service 084de1
        AES_cbc_encrypt(buf, buf,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks1, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int AES_cbc_192_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_CBC_192_AES][testnum]); count++)
Packit Service 084de1
        AES_cbc_encrypt(buf, buf,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks2, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int AES_cbc_256_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_CBC_256_AES][testnum]); count++)
Packit Service 084de1
        AES_cbc_encrypt(buf, buf,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks3, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int AES_ige_128_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_IGE_128_AES][testnum]); count++)
Packit Service 084de1
        AES_ige_encrypt(buf, buf2,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks1, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int AES_ige_192_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_IGE_192_AES][testnum]); count++)
Packit Service 084de1
        AES_ige_encrypt(buf, buf2,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks2, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int AES_ige_256_encrypt_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_IGE_256_AES][testnum]); count++)
Packit Service 084de1
        AES_ige_encrypt(buf, buf2,
Packit Service 084de1
                        (size_t)lengths[testnum], &aes_ks3, iv, AES_ENCRYPT);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int CRYPTO_gcm128_aad_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    GCM128_CONTEXT *gcm_ctx = tempargs->gcm_ctx;
Packit Service 084de1
    int count;
Packit Service 084de1
    for (count = 0; COND(c[D_GHASH][testnum]); count++)
Packit Service 084de1
        CRYPTO_gcm128_aad(gcm_ctx, buf, lengths[testnum]);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int RAND_bytes_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    int count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(c[D_RAND][testnum]); count++)
Packit Service 084de1
        RAND_bytes(buf, lengths[testnum]);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static long save_count = 0;
Packit Service 084de1
static int decrypt = 0;
Packit Service 084de1
static int EVP_Update_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EVP_CIPHER_CTX *ctx = tempargs->ctx;
Packit Service 084de1
    int outl, count, rc;
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
    int nb_iter = save_count * 4 * lengths[0] / lengths[testnum];
Packit Service 084de1
#endif
Packit Service 084de1
    if (decrypt) {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            rc = EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
            if (rc != 1) {
Packit Service 084de1
                /* reset iv in case of counter overflow */
Packit Service 084de1
                EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1);
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    } else {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            rc = EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
            if (rc != 1) {
Packit Service 084de1
                /* reset iv in case of counter overflow */
Packit Service 084de1
                EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1);
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (decrypt)
Packit Service 084de1
        EVP_DecryptFinal_ex(ctx, buf, &outl);
Packit Service 084de1
    else
Packit Service 084de1
        EVP_EncryptFinal_ex(ctx, buf, &outl);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
/*
Packit Service 084de1
 * CCM does not support streaming. For the purpose of performance measurement,
Packit Service 084de1
 * each message is encrypted using the same (key,iv)-pair. Do not use this
Packit Service 084de1
 * code in your application.
Packit Service 084de1
 */
Packit Service 084de1
static int EVP_Update_loop_ccm(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EVP_CIPHER_CTX *ctx = tempargs->ctx;
Packit Service 084de1
    int outl, count;
Packit Service 084de1
    unsigned char tag[12];
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
    int nb_iter = save_count * 4 * lengths[0] / lengths[testnum];
Packit Service 084de1
#endif
Packit Service 084de1
    if (decrypt) {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(tag), tag);
Packit Service 084de1
            /* reset iv */
Packit Service 084de1
            EVP_DecryptInit_ex(ctx, NULL, NULL, NULL, iv);
Packit Service 084de1
            /* counter is reset on every update */
Packit Service 084de1
            EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
        }
Packit Service 084de1
    } else {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            /* restore iv length field */
Packit Service 084de1
            EVP_EncryptUpdate(ctx, NULL, &outl, NULL, lengths[testnum]);
Packit Service 084de1
            /* counter is reset on every update */
Packit Service 084de1
            EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (decrypt)
Packit Service 084de1
        EVP_DecryptFinal_ex(ctx, buf, &outl);
Packit Service 084de1
    else
Packit Service 084de1
        EVP_EncryptFinal_ex(ctx, buf, &outl);
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
/*
Packit Service 084de1
 * To make AEAD benchmarking more relevant perform TLS-like operations,
Packit Service 084de1
 * 13-byte AAD followed by payload. But don't use TLS-formatted AAD, as
Packit Service 084de1
 * payload length is not actually limited by 16KB...
Packit Service 084de1
 */
Packit Service 084de1
static int EVP_Update_loop_aead(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EVP_CIPHER_CTX *ctx = tempargs->ctx;
Packit Service 084de1
    int outl, count;
Packit Service 084de1
    unsigned char aad[13] = { 0xcc };
Packit Service 084de1
    unsigned char faketag[16] = { 0xcc };
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
    int nb_iter = save_count * 4 * lengths[0] / lengths[testnum];
Packit Service 084de1
#endif
Packit Service 084de1
    if (decrypt) {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            EVP_DecryptInit_ex(ctx, NULL, NULL, NULL, iv);
Packit Service 084de1
            EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,
Packit Service 084de1
                                sizeof(faketag), faketag);
Packit Service 084de1
            EVP_DecryptUpdate(ctx, NULL, &outl, aad, sizeof(aad));
Packit Service 084de1
            EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
            EVP_DecryptFinal_ex(ctx, buf + outl, &outl);
Packit Service 084de1
        }
Packit Service 084de1
    } else {
Packit Service 084de1
        for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
            EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, iv);
Packit Service 084de1
            EVP_EncryptUpdate(ctx, NULL, &outl, aad, sizeof(aad));
Packit Service 084de1
            EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]);
Packit Service 084de1
            EVP_EncryptFinal_ex(ctx, buf + outl, &outl);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static const EVP_MD *evp_md = NULL;
Packit Service 084de1
static int EVP_Digest_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char md[EVP_MAX_MD_SIZE];
Packit Service 084de1
    int count;
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
    int nb_iter = save_count * 4 * lengths[0] / lengths[testnum];
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(nb_iter); count++) {
Packit Service 084de1
        if (!EVP_Digest(buf, lengths[testnum], md, NULL, evp_md, NULL))
Packit Service 084de1
            return -1;
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
static long rsa_c[RSA_NUM][2];  /* # RSA iteration test */
Packit Service 084de1
Packit Service 084de1
static int RSA_sign_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    unsigned int *rsa_num = &tempargs->siglen;
Packit Service 084de1
    RSA **rsa_key = tempargs->rsa_key;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(rsa_c[testnum][0]); count++) {
Packit Service 084de1
        ret = RSA_sign(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[testnum]);
Packit Service 084de1
        if (ret == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "RSA sign failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int RSA_verify_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    unsigned int rsa_num = tempargs->siglen;
Packit Service 084de1
    RSA **rsa_key = tempargs->rsa_key;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(rsa_c[testnum][1]); count++) {
Packit Service 084de1
        ret =
Packit Service 084de1
            RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[testnum]);
Packit Service 084de1
        if (ret <= 0) {
Packit Service 084de1
            BIO_printf(bio_err, "RSA verify failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
static long dsa_c[DSA_NUM][2];
Packit Service 084de1
static int DSA_sign_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    DSA **dsa_key = tempargs->dsa_key;
Packit Service 084de1
    unsigned int *siglen = &tempargs->siglen;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(dsa_c[testnum][0]); count++) {
Packit Service 084de1
        ret = DSA_sign(0, buf, 20, buf2, siglen, dsa_key[testnum]);
Packit Service 084de1
        if (ret == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "DSA sign failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int DSA_verify_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    unsigned char *buf2 = tempargs->buf2;
Packit Service 084de1
    DSA **dsa_key = tempargs->dsa_key;
Packit Service 084de1
    unsigned int siglen = tempargs->siglen;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(dsa_c[testnum][1]); count++) {
Packit Service 084de1
        ret = DSA_verify(0, buf, 20, buf2, siglen, dsa_key[testnum]);
Packit Service 084de1
        if (ret <= 0) {
Packit Service 084de1
            BIO_printf(bio_err, "DSA verify failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
static long ecdsa_c[ECDSA_NUM][2];
Packit Service 084de1
static int ECDSA_sign_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EC_KEY **ecdsa = tempargs->ecdsa;
Packit Service 084de1
    unsigned char *ecdsasig = tempargs->buf2;
Packit Service 084de1
    unsigned int *ecdsasiglen = &tempargs->siglen;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(ecdsa_c[testnum][0]); count++) {
Packit Service 084de1
        ret = ECDSA_sign(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[testnum]);
Packit Service 084de1
        if (ret == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "ECDSA sign failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int ECDSA_verify_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EC_KEY **ecdsa = tempargs->ecdsa;
Packit Service 084de1
    unsigned char *ecdsasig = tempargs->buf2;
Packit Service 084de1
    unsigned int ecdsasiglen = tempargs->siglen;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
    for (count = 0; COND(ecdsa_c[testnum][1]); count++) {
Packit Service 084de1
        ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[testnum]);
Packit Service 084de1
        if (ret != 1) {
Packit Service 084de1
            BIO_printf(bio_err, "ECDSA verify failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
/* ******************************************************************** */
Packit Service 084de1
static long ecdh_c[EC_NUM][1];
Packit Service 084de1
Packit Service 084de1
static int ECDH_EVP_derive_key_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    EVP_PKEY_CTX *ctx = tempargs->ecdh_ctx[testnum];
Packit Service 084de1
    unsigned char *derived_secret = tempargs->secret_a;
Packit Service 084de1
    int count;
Packit Service 084de1
    size_t *outlen = &(tempargs->outlen[testnum]);
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(ecdh_c[testnum][0]); count++)
Packit Service 084de1
        EVP_PKEY_derive(ctx, derived_secret, outlen);
Packit Service 084de1
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static long eddsa_c[EdDSA_NUM][2];
Packit Service 084de1
static int EdDSA_sign_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EVP_MD_CTX **edctx = tempargs->eddsa_ctx;
Packit Service 084de1
    unsigned char *eddsasig = tempargs->buf2;
Packit Service 084de1
    size_t *eddsasigsize = &tempargs->sigsize;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(eddsa_c[testnum][0]); count++) {
Packit Service 084de1
        ret = EVP_DigestSign(edctx[testnum], eddsasig, eddsasigsize, buf, 20);
Packit Service 084de1
        if (ret == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "EdDSA sign failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int EdDSA_verify_loop(void *args)
Packit Service 084de1
{
Packit Service 084de1
    loopargs_t *tempargs = *(loopargs_t **) args;
Packit Service 084de1
    unsigned char *buf = tempargs->buf;
Packit Service 084de1
    EVP_MD_CTX **edctx = tempargs->eddsa_ctx;
Packit Service 084de1
    unsigned char *eddsasig = tempargs->buf2;
Packit Service 084de1
    size_t eddsasigsize = tempargs->sigsize;
Packit Service 084de1
    int ret, count;
Packit Service 084de1
Packit Service 084de1
    for (count = 0; COND(eddsa_c[testnum][1]); count++) {
Packit Service 084de1
        ret = EVP_DigestVerify(edctx[testnum], eddsasig, eddsasigsize, buf, 20);
Packit Service 084de1
        if (ret != 1) {
Packit Service 084de1
            BIO_printf(bio_err, "EdDSA verify failure\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            count = -1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    return count;
Packit Service 084de1
}
Packit Service 084de1
#endif                          /* OPENSSL_NO_EC */
Packit Service 084de1
Packit Service 084de1
static int run_benchmark(int async_jobs,
Packit Service 084de1
                         int (*loop_function) (void *), loopargs_t * loopargs)
Packit Service 084de1
{
Packit Service 084de1
    int job_op_count = 0;
Packit Service 084de1
    int total_op_count = 0;
Packit Service 084de1
    int num_inprogress = 0;
Packit Service 084de1
    int error = 0, i = 0, ret = 0;
Packit Service 084de1
    OSSL_ASYNC_FD job_fd = 0;
Packit Service 084de1
    size_t num_job_fds = 0;
Packit Service 084de1
Packit Service 084de1
    if (async_jobs == 0) {
Packit Service 084de1
        return loop_function((void *)&loopargs);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < async_jobs && !error; i++) {
Packit Service 084de1
        loopargs_t *looparg_item = loopargs + i;
Packit Service 084de1
Packit Service 084de1
        /* Copy pointer content (looparg_t item address) into async context */
Packit Service 084de1
        ret = ASYNC_start_job(&loopargs[i].inprogress_job, loopargs[i].wait_ctx,
Packit Service 084de1
                              &job_op_count, loop_function,
Packit Service 084de1
                              (void *)&looparg_item, sizeof(looparg_item));
Packit Service 084de1
        switch (ret) {
Packit Service 084de1
        case ASYNC_PAUSE:
Packit Service 084de1
            ++num_inprogress;
Packit Service 084de1
            break;
Packit Service 084de1
        case ASYNC_FINISH:
Packit Service 084de1
            if (job_op_count == -1) {
Packit Service 084de1
                error = 1;
Packit Service 084de1
            } else {
Packit Service 084de1
                total_op_count += job_op_count;
Packit Service 084de1
            }
Packit Service 084de1
            break;
Packit Service 084de1
        case ASYNC_NO_JOBS:
Packit Service 084de1
        case ASYNC_ERR:
Packit Service 084de1
            BIO_printf(bio_err, "Failure in the job\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            error = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    while (num_inprogress > 0) {
Packit Service 084de1
#if defined(OPENSSL_SYS_WINDOWS)
Packit Service 084de1
        DWORD avail = 0;
Packit Service 084de1
#elif defined(OPENSSL_SYS_UNIX)
Packit Service 084de1
        int select_result = 0;
Packit Service 084de1
        OSSL_ASYNC_FD max_fd = 0;
Packit Service 084de1
        fd_set waitfdset;
Packit Service 084de1
Packit Service 084de1
        FD_ZERO(&waitfdset);
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < async_jobs && num_inprogress > 0; i++) {
Packit Service 084de1
            if (loopargs[i].inprogress_job == NULL)
Packit Service 084de1
                continue;
Packit Service 084de1
Packit Service 084de1
            if (!ASYNC_WAIT_CTX_get_all_fds
Packit Service 084de1
                (loopargs[i].wait_ctx, NULL, &num_job_fds)
Packit Service 084de1
                || num_job_fds > 1) {
Packit Service 084de1
                BIO_printf(bio_err, "Too many fds in ASYNC_WAIT_CTX\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                error = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
            ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd,
Packit Service 084de1
                                       &num_job_fds);
Packit Service 084de1
            FD_SET(job_fd, &waitfdset);
Packit Service 084de1
            if (job_fd > max_fd)
Packit Service 084de1
                max_fd = job_fd;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (max_fd >= (OSSL_ASYNC_FD)FD_SETSIZE) {
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "Error: max_fd (%d) must be smaller than FD_SETSIZE (%d). "
Packit Service 084de1
                       "Decrease the value of async_jobs\n",
Packit Service 084de1
                       max_fd, FD_SETSIZE);
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            error = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        select_result = select(max_fd + 1, &waitfdset, NULL, NULL, NULL);
Packit Service 084de1
        if (select_result == -1 && errno == EINTR)
Packit Service 084de1
            continue;
Packit Service 084de1
Packit Service 084de1
        if (select_result == -1) {
Packit Service 084de1
            BIO_printf(bio_err, "Failure in the select\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            error = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (select_result == 0)
Packit Service 084de1
            continue;
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < async_jobs; i++) {
Packit Service 084de1
            if (loopargs[i].inprogress_job == NULL)
Packit Service 084de1
                continue;
Packit Service 084de1
Packit Service 084de1
            if (!ASYNC_WAIT_CTX_get_all_fds
Packit Service 084de1
                (loopargs[i].wait_ctx, NULL, &num_job_fds)
Packit Service 084de1
                || num_job_fds > 1) {
Packit Service 084de1
                BIO_printf(bio_err, "Too many fds in ASYNC_WAIT_CTX\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                error = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
            ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd,
Packit Service 084de1
                                       &num_job_fds);
Packit Service 084de1
Packit Service 084de1
#if defined(OPENSSL_SYS_UNIX)
Packit Service 084de1
            if (num_job_fds == 1 && !FD_ISSET(job_fd, &waitfdset))
Packit Service 084de1
                continue;
Packit Service 084de1
#elif defined(OPENSSL_SYS_WINDOWS)
Packit Service 084de1
            if (num_job_fds == 1
Packit Service 084de1
                && !PeekNamedPipe(job_fd, NULL, 0, NULL, &avail, NULL)
Packit Service 084de1
                && avail > 0)
Packit Service 084de1
                continue;
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
            ret = ASYNC_start_job(&loopargs[i].inprogress_job,
Packit Service 084de1
                                  loopargs[i].wait_ctx, &job_op_count,
Packit Service 084de1
                                  loop_function, (void *)(loopargs + i),
Packit Service 084de1
                                  sizeof(loopargs_t));
Packit Service 084de1
            switch (ret) {
Packit Service 084de1
            case ASYNC_PAUSE:
Packit Service 084de1
                break;
Packit Service 084de1
            case ASYNC_FINISH:
Packit Service 084de1
                if (job_op_count == -1) {
Packit Service 084de1
                    error = 1;
Packit Service 084de1
                } else {
Packit Service 084de1
                    total_op_count += job_op_count;
Packit Service 084de1
                }
Packit Service 084de1
                --num_inprogress;
Packit Service 084de1
                loopargs[i].inprogress_job = NULL;
Packit Service 084de1
                break;
Packit Service 084de1
            case ASYNC_NO_JOBS:
Packit Service 084de1
            case ASYNC_ERR:
Packit Service 084de1
                --num_inprogress;
Packit Service 084de1
                loopargs[i].inprogress_job = NULL;
Packit Service 084de1
                BIO_printf(bio_err, "Failure in the job\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                error = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    return error ? -1 : total_op_count;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
int speed_main(int argc, char **argv)
Packit Service 084de1
{
Packit Service 084de1
    ENGINE *e = NULL;
Packit Service 084de1
    loopargs_t *loopargs = NULL;
Packit Service 084de1
    const char *prog;
Packit Service 084de1
    const char *engine_id = NULL;
Packit Service 084de1
    const EVP_CIPHER *evp_cipher = NULL;
Packit Service 084de1
    double d = 0.0;
Packit Service 084de1
    OPTION_CHOICE o;
Packit Service 084de1
    int async_init = 0, multiblock = 0, pr_header = 0;
Packit Service 084de1
    int doit[ALGOR_NUM] = { 0 };
Packit Service 084de1
    int ret = 1, misalign = 0, lengths_single = 0, aead = 0;
Packit Service 084de1
    long count = 0;
Packit Service 084de1
    unsigned int size_num = OSSL_NELEM(lengths_list);
Packit Service 084de1
    unsigned int i, k, loop, loopargs_len = 0, async_jobs = 0;
Packit Service 084de1
    int keylen;
Packit Service 084de1
    int buflen;
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
    int multi = 0;
Packit Service 084de1
#endif
Packit Service 084de1
#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) \
Packit Service 084de1
    || !defined(OPENSSL_NO_EC)
Packit Service 084de1
    long rsa_count = 1;
Packit Service 084de1
#endif
Packit Service 084de1
    openssl_speed_sec_t seconds = { SECONDS, RSA_SECONDS, DSA_SECONDS,
Packit Service 084de1
                                    ECDSA_SECONDS, ECDH_SECONDS,
Packit Service 084de1
                                    EdDSA_SECONDS };
Packit Service 084de1
Packit Service 084de1
    /* What follows are the buffers and key material. */
Packit Service 084de1
#ifndef OPENSSL_NO_RC5
Packit Service 084de1
    RC5_32_KEY rc5_ks;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC2
Packit Service 084de1
    RC2_KEY rc2_ks;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
    IDEA_KEY_SCHEDULE idea_ks;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_SEED
Packit Service 084de1
    SEED_KEY_SCHEDULE seed_ks;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
    BF_KEY bf_ks;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_CAST
Packit Service 084de1
    CAST_KEY cast_ks;
Packit Service 084de1
#endif
Packit Service 084de1
    static const unsigned char key16[16] = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12
Packit Service 084de1
    };
Packit Service 084de1
    static const unsigned char key24[24] = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12,
Packit Service 084de1
        0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34
Packit Service 084de1
    };
Packit Service 084de1
    static const unsigned char key32[32] = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12,
Packit Service 084de1
        0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34,
Packit Service 084de1
        0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56
Packit Service 084de1
    };
Packit Service 084de1
#ifndef OPENSSL_NO_CAMELLIA
Packit Service 084de1
    static const unsigned char ckey24[24] = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12,
Packit Service 084de1
        0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34
Packit Service 084de1
    };
Packit Service 084de1
    static const unsigned char ckey32[32] = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12,
Packit Service 084de1
        0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34,
Packit Service 084de1
        0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56
Packit Service 084de1
    };
Packit Service 084de1
    CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
    static DES_cblock key = {
Packit Service 084de1
        0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0
Packit Service 084de1
    };
Packit Service 084de1
    static DES_cblock key2 = {
Packit Service 084de1
        0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12
Packit Service 084de1
    };
Packit Service 084de1
    static DES_cblock key3 = {
Packit Service 084de1
        0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34
Packit Service 084de1
    };
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
    static const unsigned int rsa_bits[RSA_NUM] = {
Packit Service 084de1
        512, 1024, 2048, 3072, 4096, 7680, 15360
Packit Service 084de1
    };
Packit Service 084de1
    static const unsigned char *rsa_data[RSA_NUM] = {
Packit Service 084de1
        test512, test1024, test2048, test3072, test4096, test7680, test15360
Packit Service 084de1
    };
Packit Service 084de1
    static const int rsa_data_length[RSA_NUM] = {
Packit Service 084de1
        sizeof(test512), sizeof(test1024),
Packit Service 084de1
        sizeof(test2048), sizeof(test3072),
Packit Service 084de1
        sizeof(test4096), sizeof(test7680),
Packit Service 084de1
        sizeof(test15360)
Packit Service 084de1
    };
Packit Service 084de1
    int rsa_doit[RSA_NUM] = { 0 };
Packit Service 084de1
    int primes = RSA_DEFAULT_PRIME_NUM;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
    static const unsigned int dsa_bits[DSA_NUM] = { 512, 1024, 2048 };
Packit Service 084de1
    int dsa_doit[DSA_NUM] = { 0 };
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
    /*
Packit Service 084de1
     * We only test over the following curves as they are representative, To
Packit Service 084de1
     * add tests over more curves, simply add the curve NID and curve name to
Packit Service 084de1
     * the following arrays and increase the |ecdh_choices| list accordingly.
Packit Service 084de1
     */
Packit Service 084de1
    static const struct {
Packit Service 084de1
        const char *name;
Packit Service 084de1
        unsigned int nid;
Packit Service 084de1
        unsigned int bits;
Packit Service 084de1
    } test_curves[] = {
Packit Service 084de1
        /* Prime Curves */
Packit Service 084de1
        {"nistp224", NID_secp224r1, 224},
Packit Service 084de1
        {"nistp256", NID_X9_62_prime256v1, 256},
Packit Service 084de1
        {"nistp384", NID_secp384r1, 384},
Packit Service 084de1
        {"nistp521", NID_secp521r1, 521},
Packit Service 084de1
        /* Other and ECDH only ones */
Packit Service 084de1
        {"X25519", NID_X25519, 253},
Packit Service 084de1
        {"X448", NID_X448, 448}
Packit Service 084de1
    };
Packit Service 084de1
    static const struct {
Packit Service 084de1
        const char *name;
Packit Service 084de1
        unsigned int nid;
Packit Service 084de1
        unsigned int bits;
Packit Service 084de1
        size_t sigsize;
Packit Service 084de1
    } test_ed_curves[] = {
Packit Service 084de1
        /* EdDSA */
Packit Service 084de1
        {"Ed25519", NID_ED25519, 253, 64},
Packit Service 084de1
        {"Ed448", NID_ED448, 456, 114}
Packit Service 084de1
    };
Packit Service 084de1
    int ecdsa_doit[ECDSA_NUM] = { 0 };
Packit Service 084de1
    int ecdh_doit[EC_NUM] = { 0 };
Packit Service 084de1
    int eddsa_doit[EdDSA_NUM] = { 0 };
Packit Service 084de1
    OPENSSL_assert(OSSL_NELEM(test_curves) >= EC_NUM);
Packit Service 084de1
    OPENSSL_assert(OSSL_NELEM(test_ed_curves) >= EdDSA_NUM);
Packit Service 084de1
#endif                          /* ndef OPENSSL_NO_EC */
Packit Service 084de1
Packit Service 084de1
    prog = opt_init(argc, argv, speed_options);
Packit Service 084de1
    while ((o = opt_next()) != OPT_EOF) {
Packit Service 084de1
        switch (o) {
Packit Service 084de1
        case OPT_EOF:
Packit Service 084de1
        case OPT_ERR:
Packit Service 084de1
 opterr:
Packit Service 084de1
            BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
Packit Service 084de1
            goto end;
Packit Service 084de1
        case OPT_HELP:
Packit Service 084de1
            opt_help(speed_options);
Packit Service 084de1
            ret = 0;
Packit Service 084de1
            goto end;
Packit Service 084de1
        case OPT_ELAPSED:
Packit Service 084de1
            usertime = 0;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_EVP:
Packit Service 084de1
            evp_md = NULL;
Packit Service 084de1
            evp_cipher = EVP_get_cipherbyname(opt_arg());
Packit Service 084de1
            if (evp_cipher == NULL)
Packit Service 084de1
                evp_md = EVP_get_digestbyname(opt_arg());
Packit Service 084de1
            if (evp_cipher == NULL && evp_md == NULL) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "%s: %s is an unknown cipher or digest\n",
Packit Service 084de1
                           prog, opt_arg());
Packit Service 084de1
                goto end;
Packit Service 084de1
            }
Packit Service 084de1
            doit[D_EVP] = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_DECRYPT:
Packit Service 084de1
            decrypt = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_ENGINE:
Packit Service 084de1
            /*
Packit Service 084de1
             * In a forked execution, an engine might need to be
Packit Service 084de1
             * initialised by each child process, not by the parent.
Packit Service 084de1
             * So store the name here and run setup_engine() later on.
Packit Service 084de1
             */
Packit Service 084de1
            engine_id = opt_arg();
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_MULTI:
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
            multi = atoi(opt_arg());
Packit Service 084de1
#endif
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_ASYNCJOBS:
Packit Service 084de1
#ifndef OPENSSL_NO_ASYNC
Packit Service 084de1
            async_jobs = atoi(opt_arg());
Packit Service 084de1
            if (!ASYNC_is_capable()) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "%s: async_jobs specified but async not supported\n",
Packit Service 084de1
                           prog);
Packit Service 084de1
                goto opterr;
Packit Service 084de1
            }
Packit Service 084de1
            if (async_jobs > 99999) {
Packit Service 084de1
                BIO_printf(bio_err, "%s: too many async_jobs\n", prog);
Packit Service 084de1
                goto opterr;
Packit Service 084de1
            }
Packit Service 084de1
#endif
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_MISALIGN:
Packit Service 084de1
            if (!opt_int(opt_arg(), &misalign))
Packit Service 084de1
                goto end;
Packit Service 084de1
            if (misalign > MISALIGN) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "%s: Maximum offset is %d\n", prog, MISALIGN);
Packit Service 084de1
                goto opterr;
Packit Service 084de1
            }
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_MR:
Packit Service 084de1
            mr = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_MB:
Packit Service 084de1
            multiblock = 1;
Packit Service 084de1
#ifdef OPENSSL_NO_MULTIBLOCK
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "%s: -mb specified but multi-block support is disabled\n",
Packit Service 084de1
                       prog);
Packit Service 084de1
            goto end;
Packit Service 084de1
#endif
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_R_CASES:
Packit Service 084de1
            if (!opt_rand(o))
Packit Service 084de1
                goto end;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_PRIMES:
Packit Service 084de1
            if (!opt_int(opt_arg(), &primes))
Packit Service 084de1
                goto end;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_SECONDS:
Packit Service 084de1
            seconds.sym = seconds.rsa = seconds.dsa = seconds.ecdsa
Packit Service 084de1
                        = seconds.ecdh = seconds.eddsa = atoi(opt_arg());
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_BYTES:
Packit Service 084de1
            lengths_single = atoi(opt_arg());
Packit Service 084de1
            lengths = &lengths_single;
Packit Service 084de1
            size_num = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        case OPT_AEAD:
Packit Service 084de1
            aead = 1;
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    argc = opt_num_rest();
Packit Service 084de1
    argv = opt_rest();
Packit Service 084de1
Packit Service 084de1
    /* Remaining arguments are algorithms. */
Packit Service 084de1
    for (; *argv; argv++) {
Packit Service 084de1
        if (found(*argv, doit_choices, &i)) {
Packit Service 084de1
            doit[i] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
        if (strcmp(*argv, "des") == 0) {
Packit Service 084de1
            doit[D_CBC_DES] = doit[D_EDE3_DES] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#endif
Packit Service 084de1
        if (strcmp(*argv, "sha") == 0) {
Packit Service 084de1
            doit[D_SHA1] = doit[D_SHA256] = doit[D_SHA512] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
        if (strcmp(*argv, "openssl") == 0)
Packit Service 084de1
            continue;
Packit Service 084de1
        if (strcmp(*argv, "rsa") == 0) {
Packit Service 084de1
            for (loop = 0; loop < OSSL_NELEM(rsa_doit); loop++)
Packit Service 084de1
		if (!FIPS_mode() || loop != R_RSA_512)
Packit Service 084de1
                    rsa_doit[loop] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (found(*argv, rsa_choices, &i)) {
Packit Service 084de1
            rsa_doit[i] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
        if (strcmp(*argv, "dsa") == 0) {
Packit Service 084de1
            if (!FIPS_mode())
Packit Service 084de1
                dsa_doit[R_DSA_512] = 1;
Packit Service 084de1
            dsa_doit[R_DSA_1024] =
Packit Service 084de1
                dsa_doit[R_DSA_2048] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (found(*argv, dsa_choices, &i)) {
Packit Service 084de1
            dsa_doit[i] = 2;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#endif
Packit Service 084de1
        if (strcmp(*argv, "aes") == 0) {
Packit Service 084de1
            doit[D_CBC_128_AES] = doit[D_CBC_192_AES] = doit[D_CBC_256_AES] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#ifndef OPENSSL_NO_CAMELLIA
Packit Service 084de1
        if (strcmp(*argv, "camellia") == 0) {
Packit Service 084de1
            doit[D_CBC_128_CML] = doit[D_CBC_192_CML] = doit[D_CBC_256_CML] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
        if (strcmp(*argv, "ecdsa") == 0) {
Packit Service 084de1
            for (loop = 0; loop < OSSL_NELEM(ecdsa_doit); loop++)
Packit Service 084de1
                ecdsa_doit[loop] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (found(*argv, ecdsa_choices, &i)) {
Packit Service 084de1
            ecdsa_doit[i] = 2;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (strcmp(*argv, "ecdh") == 0) {
Packit Service 084de1
            for (loop = 0; loop < OSSL_NELEM(ecdh_doit); loop++)
Packit Service 084de1
                if(!FIPS_mode() || (loop != R_EC_X25519 && loop != R_EC_X448))
Packit Service 084de1
                    ecdh_doit[loop] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (found(*argv, ecdh_choices, &i)) {
Packit Service 084de1
            if(!FIPS_mode() || (i != R_EC_X25519 && i != R_EC_X448))
Packit Service 084de1
                ecdh_doit[i] = 2;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (!FIPS_mode() && strcmp(*argv, "eddsa") == 0) {
Packit Service 084de1
            for (loop = 0; loop < OSSL_NELEM(eddsa_doit); loop++)
Packit Service 084de1
                eddsa_doit[loop] = 1;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
        if (!FIPS_mode() && found(*argv, eddsa_choices, &i)) {
Packit Service 084de1
            eddsa_doit[i] = 2;
Packit Service 084de1
            continue;
Packit Service 084de1
        }
Packit Service 084de1
#endif
Packit Service 084de1
        BIO_printf(bio_err, "%s: Unknown algorithm %s\n", prog, *argv);
Packit Service 084de1
        goto end;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    /* Sanity checks */
Packit Service 084de1
    if (aead) {
Packit Service 084de1
        if (evp_cipher == NULL) {
Packit Service 084de1
            BIO_printf(bio_err, "-aead can be used only with an AEAD cipher\n");
Packit Service 084de1
            goto end;
Packit Service 084de1
        } else if (!(EVP_CIPHER_flags(evp_cipher) &
Packit Service 084de1
                     EVP_CIPH_FLAG_AEAD_CIPHER)) {
Packit Service 084de1
            BIO_printf(bio_err, "%s is not an AEAD cipher\n",
Packit Service 084de1
                       OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher)));
Packit Service 084de1
            goto end;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (multiblock) {
Packit Service 084de1
        if (evp_cipher == NULL) {
Packit Service 084de1
            BIO_printf(bio_err,"-mb can be used only with a multi-block"
Packit Service 084de1
                               " capable cipher\n");
Packit Service 084de1
            goto end;
Packit Service 084de1
        } else if (!(EVP_CIPHER_flags(evp_cipher) &
Packit Service 084de1
                     EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) {
Packit Service 084de1
            BIO_printf(bio_err, "%s is not a multi-block capable\n",
Packit Service 084de1
                       OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher)));
Packit Service 084de1
            goto end;
Packit Service 084de1
        } else if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with -mb");
Packit Service 084de1
            goto end;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    /* Initialize the job pool if async mode is enabled */
Packit Service 084de1
    if (async_jobs > 0) {
Packit Service 084de1
        async_init = ASYNC_init_thread(async_jobs, async_jobs);
Packit Service 084de1
        if (!async_init) {
Packit Service 084de1
            BIO_printf(bio_err, "Error creating the ASYNC job pool\n");
Packit Service 084de1
            goto end;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    loopargs_len = (async_jobs == 0 ? 1 : async_jobs);
Packit Service 084de1
    loopargs =
Packit Service 084de1
        app_malloc(loopargs_len * sizeof(loopargs_t), "array of loopargs");
Packit Service 084de1
    memset(loopargs, 0, loopargs_len * sizeof(loopargs_t));
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            loopargs[i].wait_ctx = ASYNC_WAIT_CTX_new();
Packit Service 084de1
            if (loopargs[i].wait_ctx == NULL) {
Packit Service 084de1
                BIO_printf(bio_err, "Error creating the ASYNC_WAIT_CTX\n");
Packit Service 084de1
                goto end;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        buflen = lengths[size_num - 1];
Packit Service 084de1
        if (buflen < 36)    /* size of random vector in RSA benchmark */
Packit Service 084de1
            buflen = 36;
Packit Service 084de1
        buflen += MAX_MISALIGNMENT + 1;
Packit Service 084de1
        loopargs[i].buf_malloc = app_malloc(buflen, "input buffer");
Packit Service 084de1
        loopargs[i].buf2_malloc = app_malloc(buflen, "input buffer");
Packit Service 084de1
        memset(loopargs[i].buf_malloc, 0, buflen);
Packit Service 084de1
        memset(loopargs[i].buf2_malloc, 0, buflen);
Packit Service 084de1
Packit Service 084de1
        /* Align the start of buffers on a 64 byte boundary */
Packit Service 084de1
        loopargs[i].buf = loopargs[i].buf_malloc + misalign;
Packit Service 084de1
        loopargs[i].buf2 = loopargs[i].buf2_malloc + misalign;
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
        loopargs[i].secret_a = app_malloc(MAX_ECDH_SIZE, "ECDH secret a");
Packit Service 084de1
        loopargs[i].secret_b = app_malloc(MAX_ECDH_SIZE, "ECDH secret b");
Packit Service 084de1
#endif
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
    if (multi && do_multi(multi, size_num))
Packit Service 084de1
        goto show_res;
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
    /* Initialize the engine after the fork */
Packit Service 084de1
    e = setup_engine(engine_id, 0);
Packit Service 084de1
Packit Service 084de1
    /* No parameters; turn on everything. */
Packit Service 084de1
    if ((argc == 0) && !doit[D_EVP]) {
Packit Service 084de1
        for (i = 0; i < ALGOR_NUM; i++)
Packit Service 084de1
            if (i != D_EVP &&
Packit Service 084de1
                (!FIPS_mode() || (i != D_WHIRLPOOL &&
Packit Service 084de1
                                  i != D_MD2 && i != D_MD4 &&
Packit Service 084de1
                                  i != D_MD5 && i != D_MDC2 &&
Packit Service 084de1
                                  i != D_RMD160)))
Packit Service 084de1
                doit[i] = 1;
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
        for (i = 0; i < RSA_NUM; i++)
Packit Service 084de1
            if (!FIPS_mode() || i != R_RSA_512)
Packit Service 084de1
                rsa_doit[i] = 1;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
        for (i = 0; i < DSA_NUM; i++)
Packit Service 084de1
            if (!FIPS_mode() || i != R_DSA_512)
Packit Service 084de1
                dsa_doit[i] = 1;
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
        for (loop = 0; loop < OSSL_NELEM(ecdsa_doit); loop++)
Packit Service 084de1
            ecdsa_doit[loop] = 1;
Packit Service 084de1
        for (loop = 0; loop < OSSL_NELEM(ecdh_doit); loop++)
Packit Service 084de1
            if(!FIPS_mode() || (loop != R_EC_X25519 && loop != R_EC_X448))
Packit Service 084de1
                ecdh_doit[loop] = 1;
Packit Service 084de1
        if (!FIPS_mode())
Packit Service 084de1
            for (loop = 0; loop < OSSL_NELEM(eddsa_doit); loop++)
Packit Service 084de1
                eddsa_doit[loop] = 1;
Packit Service 084de1
#endif
Packit Service 084de1
    }
Packit Service 084de1
    for (i = 0; i < ALGOR_NUM; i++)
Packit Service 084de1
        if (doit[i])
Packit Service 084de1
            pr_header++;
Packit Service 084de1
Packit Service 084de1
    if (usertime == 0 && !mr)
Packit Service 084de1
        BIO_printf(bio_err,
Packit Service 084de1
                   "You have chosen to measure elapsed time "
Packit Service 084de1
                   "instead of user CPU time.\n");
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
        if (primes > RSA_DEFAULT_PRIME_NUM) {
Packit Service 084de1
            /* for multi-prime RSA, skip this */
Packit Service 084de1
            break;
Packit Service 084de1
        }
Packit Service 084de1
        for (k = 0; k < RSA_NUM; k++) {
Packit Service 084de1
            const unsigned char *p;
Packit Service 084de1
Packit Service 084de1
            p = rsa_data[k];
Packit Service 084de1
            loopargs[i].rsa_key[k] =
Packit Service 084de1
                d2i_RSAPrivateKey(NULL, &p, rsa_data_length[k]);
Packit Service 084de1
            if (loopargs[i].rsa_key[k] == NULL) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "internal error loading RSA key number %d\n", k);
Packit Service 084de1
                goto end;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
        loopargs[i].dsa_key[0] = get_dsa(512);
Packit Service 084de1
        loopargs[i].dsa_key[1] = get_dsa(1024);
Packit Service 084de1
        loopargs[i].dsa_key[2] = get_dsa(2048);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
    DES_set_key_unchecked(&key, &sch;;
Packit Service 084de1
    DES_set_key_unchecked(&key2, &sch2);
Packit Service 084de1
    DES_set_key_unchecked(&key3, &sch3);
Packit Service 084de1
#endif
Packit Service 084de1
    AES_set_encrypt_key(key16, 128, &aes_ks1);
Packit Service 084de1
    AES_set_encrypt_key(key24, 192, &aes_ks2);
Packit Service 084de1
    AES_set_encrypt_key(key32, 256, &aes_ks3);
Packit Service 084de1
#ifndef OPENSSL_NO_CAMELLIA
Packit Service 084de1
    if (doit[D_CBC_128_CML] || doit[D_CBC_192_CML] || doit[D_CBC_256_CML]) {
Packit Service 084de1
        Camellia_set_key(key16, 128, &camellia_ks1);
Packit Service 084de1
        Camellia_set_key(ckey24, 192, &camellia_ks2);
Packit Service 084de1
        Camellia_set_key(ckey32, 256, &camellia_ks3);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
    if (doit[D_CBC_IDEA]) {
Packit Service 084de1
        IDEA_set_encrypt_key(key16, &idea_ks);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_SEED
Packit Service 084de1
    if (doit[D_CBC_SEED]) {
Packit Service 084de1
        SEED_set_key(key16, &seed_ks);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
   if (doit[D_RC4]) {
Packit Service 084de1
        RC4_set_key(&rc4_ks, 16, key16);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC2
Packit Service 084de1
    if (doit[D_CBC_RC2]) {
Packit Service 084de1
        RC2_set_key(&rc2_ks, 16, key16, 128);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC5
Packit Service 084de1
    if (doit[D_CBC_RC5]) {
Packit Service 084de1
        RC5_32_set_key(&rc5_ks, 16, key16, 12);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
    if (doit[D_CBC_BF]) {
Packit Service 084de1
        BF_set_key(&bf_ks, 16, key16);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_CAST
Packit Service 084de1
    if (doit[D_CBC_CAST]) {
Packit Service 084de1
        CAST_set_key(&cast_ks, 16, key16);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef SIGALRM
Packit Service 084de1
# ifndef OPENSSL_NO_DES
Packit Service 084de1
    BIO_printf(bio_err, "First we calculate the approximate speed ...\n");
Packit Service 084de1
    count = 10;
Packit Service 084de1
    do {
Packit Service 084de1
        long it;
Packit Service 084de1
        count *= 2;
Packit Service 084de1
        Time_F(START);
Packit Service 084de1
        for (it = count; it; it--)
Packit Service 084de1
            DES_ecb_encrypt((DES_cblock *)loopargs[0].buf,
Packit Service 084de1
                            (DES_cblock *)loopargs[0].buf, &sch, DES_ENCRYPT);
Packit Service 084de1
        d = Time_F(STOP);
Packit Service 084de1
    } while (d < 3);
Packit Service 084de1
    save_count = count;
Packit Service 084de1
    c[D_MD2][0] = count / 10;
Packit Service 084de1
    c[D_MDC2][0] = count / 10;
Packit Service 084de1
    c[D_MD4][0] = count;
Packit Service 084de1
    c[D_MD5][0] = count;
Packit Service 084de1
    c[D_HMAC][0] = count;
Packit Service 084de1
    c[D_SHA1][0] = count;
Packit Service 084de1
    c[D_RMD160][0] = count;
Packit Service 084de1
    c[D_RC4][0] = count * 5;
Packit Service 084de1
    c[D_CBC_DES][0] = count;
Packit Service 084de1
    c[D_EDE3_DES][0] = count / 3;
Packit Service 084de1
    c[D_CBC_IDEA][0] = count;
Packit Service 084de1
    c[D_CBC_SEED][0] = count;
Packit Service 084de1
    c[D_CBC_RC2][0] = count;
Packit Service 084de1
    c[D_CBC_RC5][0] = count;
Packit Service 084de1
    c[D_CBC_BF][0] = count;
Packit Service 084de1
    c[D_CBC_CAST][0] = count;
Packit Service 084de1
    c[D_CBC_128_AES][0] = count;
Packit Service 084de1
    c[D_CBC_192_AES][0] = count;
Packit Service 084de1
    c[D_CBC_256_AES][0] = count;
Packit Service 084de1
    c[D_CBC_128_CML][0] = count;
Packit Service 084de1
    c[D_CBC_192_CML][0] = count;
Packit Service 084de1
    c[D_CBC_256_CML][0] = count;
Packit Service 084de1
    c[D_SHA256][0] = count;
Packit Service 084de1
    c[D_SHA512][0] = count;
Packit Service 084de1
    c[D_WHIRLPOOL][0] = count;
Packit Service 084de1
    c[D_IGE_128_AES][0] = count;
Packit Service 084de1
    c[D_IGE_192_AES][0] = count;
Packit Service 084de1
    c[D_IGE_256_AES][0] = count;
Packit Service 084de1
    c[D_GHASH][0] = count;
Packit Service 084de1
    c[D_RAND][0] = count;
Packit Service 084de1
Packit Service 084de1
    for (i = 1; i < size_num; i++) {
Packit Service 084de1
        long l0, l1;
Packit Service 084de1
Packit Service 084de1
        l0 = (long)lengths[0];
Packit Service 084de1
        l1 = (long)lengths[i];
Packit Service 084de1
Packit Service 084de1
        c[D_MD2][i] = c[D_MD2][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_MDC2][i] = c[D_MDC2][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_MD4][i] = c[D_MD4][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_MD5][i] = c[D_MD5][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_HMAC][i] = c[D_HMAC][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_SHA1][i] = c[D_SHA1][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_RMD160][i] = c[D_RMD160][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_SHA256][i] = c[D_SHA256][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_SHA512][i] = c[D_SHA512][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_WHIRLPOOL][i] = c[D_WHIRLPOOL][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_GHASH][i] = c[D_GHASH][0] * 4 * l0 / l1;
Packit Service 084de1
        c[D_RAND][i] = c[D_RAND][0] * 4 * l0 / l1;
Packit Service 084de1
Packit Service 084de1
        l0 = (long)lengths[i - 1];
Packit Service 084de1
Packit Service 084de1
        c[D_RC4][i] = c[D_RC4][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_DES][i] = c[D_CBC_DES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_EDE3_DES][i] = c[D_EDE3_DES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_IDEA][i] = c[D_CBC_IDEA][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_SEED][i] = c[D_CBC_SEED][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_RC2][i] = c[D_CBC_RC2][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_RC5][i] = c[D_CBC_RC5][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_BF][i] = c[D_CBC_BF][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_CAST][i] = c[D_CBC_CAST][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_128_AES][i] = c[D_CBC_128_AES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_192_AES][i] = c[D_CBC_192_AES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_256_AES][i] = c[D_CBC_256_AES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_128_CML][i] = c[D_CBC_128_CML][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_192_CML][i] = c[D_CBC_192_CML][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_CBC_256_CML][i] = c[D_CBC_256_CML][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_IGE_128_AES][i] = c[D_IGE_128_AES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_IGE_192_AES][i] = c[D_IGE_192_AES][i - 1] * l0 / l1;
Packit Service 084de1
        c[D_IGE_256_AES][i] = c[D_IGE_256_AES][i - 1] * l0 / l1;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
#  ifndef OPENSSL_NO_RSA
Packit Service 084de1
    rsa_c[R_RSA_512][0] = count / 2000;
Packit Service 084de1
    rsa_c[R_RSA_512][1] = count / 400;
Packit Service 084de1
    for (i = 1; i < RSA_NUM; i++) {
Packit Service 084de1
        rsa_c[i][0] = rsa_c[i - 1][0] / 8;
Packit Service 084de1
        rsa_c[i][1] = rsa_c[i - 1][1] / 4;
Packit Service 084de1
        if (rsa_doit[i] <= 1 && rsa_c[i][0] == 0)
Packit Service 084de1
            rsa_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (rsa_c[i][0] == 0) {
Packit Service 084de1
                rsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */
Packit Service 084de1
                rsa_c[i][1] = 20;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  ifndef OPENSSL_NO_DSA
Packit Service 084de1
    dsa_c[R_DSA_512][0] = count / 1000;
Packit Service 084de1
    dsa_c[R_DSA_512][1] = count / 1000 / 2;
Packit Service 084de1
    for (i = 1; i < DSA_NUM; i++) {
Packit Service 084de1
        dsa_c[i][0] = dsa_c[i - 1][0] / 4;
Packit Service 084de1
        dsa_c[i][1] = dsa_c[i - 1][1] / 4;
Packit Service 084de1
        if (dsa_doit[i] <= 1 && dsa_c[i][0] == 0)
Packit Service 084de1
            dsa_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (dsa_c[i][0] == 0) {
Packit Service 084de1
                dsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */
Packit Service 084de1
                dsa_c[i][1] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
#  ifndef OPENSSL_NO_EC
Packit Service 084de1
    ecdsa_c[R_EC_P224][0] = count / 1000;
Packit Service 084de1
    ecdsa_c[R_EC_P224][1] = count / 1000 / 2;
Packit Service 084de1
    for (i = R_EC_P256; i <= R_EC_P521; i++) {
Packit Service 084de1
        ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
Packit Service 084de1
        ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
Packit Service 084de1
        if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
Packit Service 084de1
            ecdsa_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdsa_c[i][0] == 0) {
Packit Service 084de1
                ecdsa_c[i][0] = 1;
Packit Service 084de1
                ecdsa_c[i][1] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#   if 0
Packit Service 084de1
    ecdsa_c[R_EC_K163][0] = count / 1000;
Packit Service 084de1
    ecdsa_c[R_EC_K163][1] = count / 1000 / 2;
Packit Service 084de1
    for (i = R_EC_K233; i <= R_EC_K571; i++) {
Packit Service 084de1
        ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
Packit Service 084de1
        ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
Packit Service 084de1
        if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
Packit Service 084de1
            ecdsa_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdsa_c[i][0] == 0) {
Packit Service 084de1
                ecdsa_c[i][0] = 1;
Packit Service 084de1
                ecdsa_c[i][1] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    ecdsa_c[R_EC_B163][0] = count / 1000;
Packit Service 084de1
    ecdsa_c[R_EC_B163][1] = count / 1000 / 2;
Packit Service 084de1
    for (i = R_EC_B233; i <= R_EC_B571; i++) {
Packit Service 084de1
        ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
Packit Service 084de1
        ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
Packit Service 084de1
        if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
Packit Service 084de1
            ecdsa_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdsa_c[i][0] == 0) {
Packit Service 084de1
                ecdsa_c[i][0] = 1;
Packit Service 084de1
                ecdsa_c[i][1] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#   endif
Packit Service 084de1
Packit Service 084de1
    ecdh_c[R_EC_P224][0] = count / 1000;
Packit Service 084de1
    for (i = R_EC_P256; i <= R_EC_P521; i++) {
Packit Service 084de1
        ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
Packit Service 084de1
        if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
Packit Service 084de1
            ecdh_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdh_c[i][0] == 0) {
Packit Service 084de1
                ecdh_c[i][0] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#   if 0
Packit Service 084de1
    ecdh_c[R_EC_K163][0] = count / 1000;
Packit Service 084de1
    for (i = R_EC_K233; i <= R_EC_K571; i++) {
Packit Service 084de1
        ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
Packit Service 084de1
        if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
Packit Service 084de1
            ecdh_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdh_c[i][0] == 0) {
Packit Service 084de1
                ecdh_c[i][0] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    ecdh_c[R_EC_B163][0] = count / 1000;
Packit Service 084de1
    for (i = R_EC_B233; i <= R_EC_B571; i++) {
Packit Service 084de1
        ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
Packit Service 084de1
        if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
Packit Service 084de1
            ecdh_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdh_c[i][0] == 0) {
Packit Service 084de1
                ecdh_c[i][0] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#   endif
Packit Service 084de1
    /* repeated code good to factorize */
Packit Service 084de1
    ecdh_c[R_EC_BRP256R1][0] = count / 1000;
Packit Service 084de1
    for (i = R_EC_BRP384R1; i <= R_EC_BRP512R1; i += 2) {
Packit Service 084de1
        ecdh_c[i][0] = ecdh_c[i - 2][0] / 2;
Packit Service 084de1
        if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
Packit Service 084de1
            ecdh_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdh_c[i][0] == 0) {
Packit Service 084de1
                ecdh_c[i][0] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    ecdh_c[R_EC_BRP256T1][0] = count / 1000;
Packit Service 084de1
    for (i = R_EC_BRP384T1; i <= R_EC_BRP512T1; i += 2) {
Packit Service 084de1
        ecdh_c[i][0] = ecdh_c[i - 2][0] / 2;
Packit Service 084de1
        if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
Packit Service 084de1
            ecdh_doit[i] = 0;
Packit Service 084de1
        else {
Packit Service 084de1
            if (ecdh_c[i][0] == 0) {
Packit Service 084de1
                ecdh_c[i][0] = 1;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    /* default iteration count for the last two EC Curves */
Packit Service 084de1
    ecdh_c[R_EC_X25519][0] = count / 1800;
Packit Service 084de1
    ecdh_c[R_EC_X448][0] = count / 7200;
Packit Service 084de1
Packit Service 084de1
    eddsa_c[R_EC_Ed25519][0] = count / 1800;
Packit Service 084de1
    eddsa_c[R_EC_Ed448][0] = count / 7200;
Packit Service 084de1
#  endif
Packit Service 084de1
Packit Service 084de1
# else
Packit Service 084de1
/* not worth fixing */
Packit Service 084de1
#  error "You cannot disable DES on systems without SIGALRM."
Packit Service 084de1
# endif                         /* OPENSSL_NO_DES */
Packit Service 084de1
#elif SIGALRM > 0
Packit Service 084de1
    signal(SIGALRM, alarmed);
Packit Service 084de1
#endif                          /* SIGALRM */
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
    if (doit[D_MD2]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_MD2], c[D_MD2][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, EVP_Digest_MD2_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_MD2, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_MDC2
Packit Service 084de1
    if (doit[D_MDC2]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_MDC2], c[D_MDC2][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, EVP_Digest_MDC2_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_MDC2, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD4
Packit Service 084de1
    if (doit[D_MD4]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_MD4], c[D_MD4][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, EVP_Digest_MD4_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_MD4, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_MD5
Packit Service 084de1
    if (doit[D_MD5]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_MD5], c[D_MD5][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, MD5_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_MD5, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (doit[D_HMAC]) {
Packit Service 084de1
        static const char hmac_key[] = "This is a key...";
Packit Service 084de1
        int len = strlen(hmac_key);
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            loopargs[i].hctx = HMAC_CTX_new();
Packit Service 084de1
            HMAC_CTX_set_flags(loopargs[i].hctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
Packit Service 084de1
            if (loopargs[i].hctx == NULL) {
Packit Service 084de1
                BIO_printf(bio_err, "HMAC malloc failure, exiting...");
Packit Service 084de1
                exit(1);
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            HMAC_Init_ex(loopargs[i].hctx, hmac_key, len, EVP_md5(), NULL);
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_HMAC], c[D_HMAC][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, HMAC_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_HMAC, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            HMAC_CTX_free(loopargs[i].hctx);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
    if (doit[D_SHA1]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_SHA1], c[D_SHA1][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, SHA1_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_SHA1, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_SHA256]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_SHA256], c[D_SHA256][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, SHA256_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_SHA256, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_SHA512]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_SHA512], c[D_SHA512][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, SHA512_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_SHA512, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#ifndef OPENSSL_NO_WHIRLPOOL
Packit Service 084de1
    if (doit[D_WHIRLPOOL]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_WHIRLPOOL], c[D_WHIRLPOOL][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, WHIRLPOOL_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_WHIRLPOOL, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RMD160
Packit Service 084de1
    if (doit[D_RMD160]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_RMD160], c[D_RMD160][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, EVP_Digest_RMD160_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_RMD160, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
    if (doit[D_RC4]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_RC4], c[D_RC4][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, RC4_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_RC4, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
    if (doit[D_CBC_DES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_DES], c[D_CBC_DES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, DES_ncbc_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_DES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (doit[D_EDE3_DES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_EDE3_DES], c[D_EDE3_DES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, DES_ede3_cbc_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_EDE3_DES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
    if (doit[D_CBC_128_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_128_AES], c[D_CBC_128_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_cbc_128_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_128_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_CBC_192_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_192_AES], c[D_CBC_192_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_cbc_192_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_192_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_CBC_256_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_256_AES], c[D_CBC_256_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_cbc_256_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_256_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (doit[D_IGE_128_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_IGE_128_AES], c[D_IGE_128_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_ige_128_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_IGE_128_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_IGE_192_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_IGE_192_AES], c[D_IGE_192_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_ige_192_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_IGE_192_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_IGE_256_AES]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_IGE_256_AES], c[D_IGE_256_AES][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, AES_ige_256_encrypt_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_IGE_256_AES, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_GHASH]) {
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            loopargs[i].gcm_ctx =
Packit Service 084de1
                CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt);
Packit Service 084de1
            CRYPTO_gcm128_setiv(loopargs[i].gcm_ctx,
Packit Service 084de1
                                (unsigned char *)"0123456789ab", 12);
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_GHASH], c[D_GHASH][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, CRYPTO_gcm128_aad_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_GHASH, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++)
Packit Service 084de1
            CRYPTO_gcm128_release(loopargs[i].gcm_ctx);
Packit Service 084de1
    }
Packit Service 084de1
#ifndef OPENSSL_NO_CAMELLIA
Packit Service 084de1
    if (doit[D_CBC_128_CML]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_128_CML]);
Packit Service 084de1
            doit[D_CBC_128_CML] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_128_CML], c[D_CBC_128_CML][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_128_CML][testnum]); count++)
Packit Service 084de1
                Camellia_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                     (size_t)lengths[testnum], &camellia_ks1,
Packit Service 084de1
                                     iv, CAMELLIA_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_128_CML, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_CBC_192_CML]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_192_CML]);
Packit Service 084de1
            doit[D_CBC_192_CML] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_192_CML], c[D_CBC_192_CML][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            if (async_jobs > 0) {
Packit Service 084de1
                BIO_printf(bio_err, "Async mode is not supported, exiting...");
Packit Service 084de1
                exit(1);
Packit Service 084de1
            }
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_192_CML][testnum]); count++)
Packit Service 084de1
                Camellia_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                     (size_t)lengths[testnum], &camellia_ks2,
Packit Service 084de1
                                     iv, CAMELLIA_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_192_CML, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
    if (doit[D_CBC_256_CML]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_256_CML]);
Packit Service 084de1
            doit[D_CBC_256_CML] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_256_CML], c[D_CBC_256_CML][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_256_CML][testnum]); count++)
Packit Service 084de1
                Camellia_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                     (size_t)lengths[testnum], &camellia_ks3,
Packit Service 084de1
                                     iv, CAMELLIA_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_256_CML, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
    if (doit[D_CBC_IDEA]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_IDEA]);
Packit Service 084de1
            doit[D_CBC_IDEA] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_IDEA], c[D_CBC_IDEA][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_IDEA][testnum]); count++)
Packit Service 084de1
                IDEA_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                 (size_t)lengths[testnum], &idea_ks,
Packit Service 084de1
                                 iv, IDEA_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_IDEA, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_SEED
Packit Service 084de1
    if (doit[D_CBC_SEED]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_SEED]);
Packit Service 084de1
            doit[D_CBC_SEED] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_SEED], c[D_CBC_SEED][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_SEED][testnum]); count++)
Packit Service 084de1
                SEED_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                 (size_t)lengths[testnum], &seed_ks, iv, 1);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_SEED, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC2
Packit Service 084de1
    if (doit[D_CBC_RC2]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_RC2]);
Packit Service 084de1
            doit[D_CBC_RC2] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_RC2], c[D_CBC_RC2][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            if (async_jobs > 0) {
Packit Service 084de1
                BIO_printf(bio_err, "Async mode is not supported, exiting...");
Packit Service 084de1
                exit(1);
Packit Service 084de1
            }
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_RC2][testnum]); count++)
Packit Service 084de1
                RC2_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                (size_t)lengths[testnum], &rc2_ks,
Packit Service 084de1
                                iv, RC2_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_RC2, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC5
Packit Service 084de1
    if (doit[D_CBC_RC5]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_RC5]);
Packit Service 084de1
            doit[D_CBC_RC5] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_RC5], c[D_CBC_RC5][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            if (async_jobs > 0) {
Packit Service 084de1
                BIO_printf(bio_err, "Async mode is not supported, exiting...");
Packit Service 084de1
                exit(1);
Packit Service 084de1
            }
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_RC5][testnum]); count++)
Packit Service 084de1
                RC5_32_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                   (size_t)lengths[testnum], &rc5_ks,
Packit Service 084de1
                                   iv, RC5_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_RC5, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
    if (doit[D_CBC_BF]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_BF]);
Packit Service 084de1
            doit[D_CBC_BF] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_BF], c[D_CBC_BF][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_BF][testnum]); count++)
Packit Service 084de1
                BF_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                               (size_t)lengths[testnum], &bf_ks,
Packit Service 084de1
                               iv, BF_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_BF, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_CAST
Packit Service 084de1
    if (doit[D_CBC_CAST]) {
Packit Service 084de1
        if (async_jobs > 0) {
Packit Service 084de1
            BIO_printf(bio_err, "Async mode is not supported with %s\n",
Packit Service 084de1
                       names[D_CBC_CAST]);
Packit Service 084de1
            doit[D_CBC_CAST] = 0;
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num && async_init == 0; testnum++) {
Packit Service 084de1
            print_message(names[D_CBC_CAST], c[D_CBC_CAST][testnum],
Packit Service 084de1
                          lengths[testnum], seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            for (count = 0; COND(c[D_CBC_CAST][testnum]); count++)
Packit Service 084de1
                CAST_cbc_encrypt(loopargs[0].buf, loopargs[0].buf,
Packit Service 084de1
                                 (size_t)lengths[testnum], &cast_ks,
Packit Service 084de1
                                 iv, CAST_ENCRYPT);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_CBC_CAST, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
    if (doit[D_RAND]) {
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            print_message(names[D_RAND], c[D_RAND][testnum], lengths[testnum],
Packit Service 084de1
                          seconds.sym);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, RAND_bytes_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            print_result(D_RAND, testnum, count, d);
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (doit[D_EVP]) {
Packit Service 084de1
        if (evp_cipher != NULL) {
Packit Service 084de1
            int (*loopfunc)(void *args) = EVP_Update_loop;
Packit Service 084de1
Packit Service 084de1
            if (multiblock && (EVP_CIPHER_flags(evp_cipher) &
Packit Service 084de1
                               EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) {
Packit Service 084de1
                multiblock_speed(evp_cipher, lengths_single, &seconds);
Packit Service 084de1
                ret = 0;
Packit Service 084de1
                goto end;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            names[D_EVP] = OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher));
Packit Service 084de1
Packit Service 084de1
            if (EVP_CIPHER_mode(evp_cipher) == EVP_CIPH_CCM_MODE) {
Packit Service 084de1
                loopfunc = EVP_Update_loop_ccm;
Packit Service 084de1
            } else if (aead && (EVP_CIPHER_flags(evp_cipher) &
Packit Service 084de1
                                EVP_CIPH_FLAG_AEAD_CIPHER)) {
Packit Service 084de1
                loopfunc = EVP_Update_loop_aead;
Packit Service 084de1
                if (lengths == lengths_list) {
Packit Service 084de1
                    lengths = aead_lengths_list;
Packit Service 084de1
                    size_num = OSSL_NELEM(aead_lengths_list);
Packit Service 084de1
                }
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
                print_message(names[D_EVP], save_count, lengths[testnum],
Packit Service 084de1
                              seconds.sym);
Packit Service 084de1
Packit Service 084de1
                for (k = 0; k < loopargs_len; k++) {
Packit Service 084de1
                    loopargs[k].ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
                    if (loopargs[k].ctx == NULL) {
Packit Service 084de1
                        BIO_printf(bio_err, "\nEVP_CIPHER_CTX_new failure\n");
Packit Service 084de1
                        exit(1);
Packit Service 084de1
                    }
Packit Service 084de1
                    if (!EVP_CipherInit_ex(loopargs[k].ctx, evp_cipher, NULL,
Packit Service 084de1
                                           NULL, iv, decrypt ? 0 : 1)) {
Packit Service 084de1
                        BIO_printf(bio_err, "\nEVP_CipherInit_ex failure\n");
Packit Service 084de1
                        ERR_print_errors(bio_err);
Packit Service 084de1
                        exit(1);
Packit Service 084de1
                    }
Packit Service 084de1
Packit Service 084de1
                    EVP_CIPHER_CTX_set_padding(loopargs[k].ctx, 0);
Packit Service 084de1
Packit Service 084de1
                    keylen = EVP_CIPHER_CTX_key_length(loopargs[k].ctx);
Packit Service 084de1
                    loopargs[k].key = app_malloc(keylen, "evp_cipher key");
Packit Service 084de1
                    EVP_CIPHER_CTX_rand_key(loopargs[k].ctx, loopargs[k].key);
Packit Service 084de1
                    if (!EVP_CipherInit_ex(loopargs[k].ctx, NULL, NULL,
Packit Service 084de1
                                           loopargs[k].key, NULL, -1)) {
Packit Service 084de1
                        BIO_printf(bio_err, "\nEVP_CipherInit_ex failure\n");
Packit Service 084de1
                        ERR_print_errors(bio_err);
Packit Service 084de1
                        exit(1);
Packit Service 084de1
                    }
Packit Service 084de1
                    OPENSSL_clear_free(loopargs[k].key, keylen);
Packit Service 084de1
                }
Packit Service 084de1
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, loopfunc, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
                for (k = 0; k < loopargs_len; k++) {
Packit Service 084de1
                    EVP_CIPHER_CTX_free(loopargs[k].ctx);
Packit Service 084de1
                }
Packit Service 084de1
                print_result(D_EVP, testnum, count, d);
Packit Service 084de1
            }
Packit Service 084de1
        } else if (evp_md != NULL) {
Packit Service 084de1
            names[D_EVP] = OBJ_nid2ln(EVP_MD_type(evp_md));
Packit Service 084de1
Packit Service 084de1
            for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
                print_message(names[D_EVP], save_count, lengths[testnum],
Packit Service 084de1
                              seconds.sym);
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, EVP_Digest_loop, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
                print_result(D_EVP, testnum, count, d);
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++)
Packit Service 084de1
        if (RAND_bytes(loopargs[i].buf, 36) <= 0)
Packit Service 084de1
            goto end;
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
    for (testnum = 0; testnum < RSA_NUM; testnum++) {
Packit Service 084de1
        int st = 0;
Packit Service 084de1
        if (!rsa_doit[testnum])
Packit Service 084de1
            continue;
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            if (primes > 2) {
Packit Service 084de1
                /* we haven't set keys yet,  generate multi-prime RSA keys */
Packit Service 084de1
                BIGNUM *bn = BN_new();
Packit Service 084de1
Packit Service 084de1
                if (bn == NULL)
Packit Service 084de1
                    goto end;
Packit Service 084de1
                if (!BN_set_word(bn, RSA_F4)) {
Packit Service 084de1
                    BN_free(bn);
Packit Service 084de1
                    goto end;
Packit Service 084de1
                }
Packit Service 084de1
Packit Service 084de1
                BIO_printf(bio_err, "Generate multi-prime RSA key for %s\n",
Packit Service 084de1
                           rsa_choices[testnum].name);
Packit Service 084de1
Packit Service 084de1
                loopargs[i].rsa_key[testnum] = RSA_new();
Packit Service 084de1
                if (loopargs[i].rsa_key[testnum] == NULL) {
Packit Service 084de1
                    BN_free(bn);
Packit Service 084de1
                    goto end;
Packit Service 084de1
                }
Packit Service 084de1
Packit Service 084de1
                if (!RSA_generate_multi_prime_key(loopargs[i].rsa_key[testnum],
Packit Service 084de1
                                                  rsa_bits[testnum],
Packit Service 084de1
                                                  primes, bn, NULL)) {
Packit Service 084de1
                    BN_free(bn);
Packit Service 084de1
                    goto end;
Packit Service 084de1
                }
Packit Service 084de1
                BN_free(bn);
Packit Service 084de1
            }
Packit Service 084de1
            st = RSA_sign(NID_md5_sha1, loopargs[i].buf, 36, loopargs[i].buf2,
Packit Service 084de1
                          &loopargs[i].siglen, loopargs[i].rsa_key[testnum]);
Packit Service 084de1
            if (st == 0)
Packit Service 084de1
                break;
Packit Service 084de1
        }
Packit Service 084de1
        if (st == 0) {
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "RSA sign failure.  No RSA sign will be done.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            rsa_count = 1;
Packit Service 084de1
        } else {
Packit Service 084de1
            pkey_print_message("private", "rsa",
Packit Service 084de1
                               rsa_c[testnum][0], rsa_bits[testnum],
Packit Service 084de1
                               seconds.rsa);
Packit Service 084de1
            /* RSA_blinding_on(rsa_key[testnum],NULL); */
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, RSA_sign_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       mr ? "+R1:%ld:%d:%.2f\n"
Packit Service 084de1
                       : "%ld %u bits private RSA's in %.2fs\n",
Packit Service 084de1
                       count, rsa_bits[testnum], d);
Packit Service 084de1
            rsa_results[testnum][0] = (double)count / d;
Packit Service 084de1
            rsa_count = count;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            st = RSA_verify(NID_md5_sha1, loopargs[i].buf, 36, loopargs[i].buf2,
Packit Service 084de1
                            loopargs[i].siglen, loopargs[i].rsa_key[testnum]);
Packit Service 084de1
            if (st <= 0)
Packit Service 084de1
                break;
Packit Service 084de1
        }
Packit Service 084de1
        if (st <= 0) {
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "RSA verify failure.  No RSA verify will be done.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            rsa_doit[testnum] = 0;
Packit Service 084de1
        } else {
Packit Service 084de1
            pkey_print_message("public", "rsa",
Packit Service 084de1
                               rsa_c[testnum][1], rsa_bits[testnum],
Packit Service 084de1
                               seconds.rsa);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, RSA_verify_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       mr ? "+R2:%ld:%d:%.2f\n"
Packit Service 084de1
                       : "%ld %u bits public RSA's in %.2fs\n",
Packit Service 084de1
                       count, rsa_bits[testnum], d);
Packit Service 084de1
            rsa_results[testnum][1] = (double)count / d;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (rsa_count <= 1) {
Packit Service 084de1
            /* if longer than 10s, don't do any more */
Packit Service 084de1
            for (testnum++; testnum < RSA_NUM; testnum++)
Packit Service 084de1
                rsa_doit[testnum] = 0;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif                          /* OPENSSL_NO_RSA */
Packit Service 084de1
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++)
Packit Service 084de1
        if (RAND_bytes(loopargs[i].buf, 36) <= 0)
Packit Service 084de1
            goto end;
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
    for (testnum = 0; testnum < DSA_NUM; testnum++) {
Packit Service 084de1
        int st = 0;
Packit Service 084de1
        if (!dsa_doit[testnum])
Packit Service 084de1
            continue;
Packit Service 084de1
Packit Service 084de1
        /* DSA_generate_key(dsa_key[testnum]); */
Packit Service 084de1
        /* DSA_sign_setup(dsa_key[testnum],NULL); */
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            st = DSA_sign(0, loopargs[i].buf, 20, loopargs[i].buf2,
Packit Service 084de1
                          &loopargs[i].siglen, loopargs[i].dsa_key[testnum]);
Packit Service 084de1
            if (st == 0)
Packit Service 084de1
                break;
Packit Service 084de1
        }
Packit Service 084de1
        if (st == 0) {
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "DSA sign failure.  No DSA sign will be done.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            rsa_count = 1;
Packit Service 084de1
        } else {
Packit Service 084de1
            pkey_print_message("sign", "dsa",
Packit Service 084de1
                               dsa_c[testnum][0], dsa_bits[testnum],
Packit Service 084de1
                               seconds.dsa);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, DSA_sign_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       mr ? "+R3:%ld:%u:%.2f\n"
Packit Service 084de1
                       : "%ld %u bits DSA signs in %.2fs\n",
Packit Service 084de1
                       count, dsa_bits[testnum], d);
Packit Service 084de1
            dsa_results[testnum][0] = (double)count / d;
Packit Service 084de1
            rsa_count = count;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            st = DSA_verify(0, loopargs[i].buf, 20, loopargs[i].buf2,
Packit Service 084de1
                            loopargs[i].siglen, loopargs[i].dsa_key[testnum]);
Packit Service 084de1
            if (st <= 0)
Packit Service 084de1
                break;
Packit Service 084de1
        }
Packit Service 084de1
        if (st <= 0) {
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       "DSA verify failure.  No DSA verify will be done.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            dsa_doit[testnum] = 0;
Packit Service 084de1
        } else {
Packit Service 084de1
            pkey_print_message("verify", "dsa",
Packit Service 084de1
                               dsa_c[testnum][1], dsa_bits[testnum],
Packit Service 084de1
                               seconds.dsa);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count = run_benchmark(async_jobs, DSA_verify_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       mr ? "+R4:%ld:%u:%.2f\n"
Packit Service 084de1
                       : "%ld %u bits DSA verify in %.2fs\n",
Packit Service 084de1
                       count, dsa_bits[testnum], d);
Packit Service 084de1
            dsa_results[testnum][1] = (double)count / d;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (rsa_count <= 1) {
Packit Service 084de1
            /* if longer than 10s, don't do any more */
Packit Service 084de1
            for (testnum++; testnum < DSA_NUM; testnum++)
Packit Service 084de1
                dsa_doit[testnum] = 0;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
#endif                          /* OPENSSL_NO_DSA */
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
    for (testnum = 0; testnum < ECDSA_NUM; testnum++) {
Packit Service 084de1
        int st = 1;
Packit Service 084de1
Packit Service 084de1
        if (!ecdsa_doit[testnum])
Packit Service 084de1
            continue;           /* Ignore Curve */
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            loopargs[i].ecdsa[testnum] =
Packit Service 084de1
                EC_KEY_new_by_curve_name(test_curves[testnum].nid);
Packit Service 084de1
            if (loopargs[i].ecdsa[testnum] == NULL) {
Packit Service 084de1
                st = 0;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
        if (st == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "ECDSA failure.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            rsa_count = 1;
Packit Service 084de1
        } else {
Packit Service 084de1
            for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
                EC_KEY_precompute_mult(loopargs[i].ecdsa[testnum], NULL);
Packit Service 084de1
                /* Perform ECDSA signature test */
Packit Service 084de1
                EC_KEY_generate_key(loopargs[i].ecdsa[testnum]);
Packit Service 084de1
                st = ECDSA_sign(0, loopargs[i].buf, 20, loopargs[i].buf2,
Packit Service 084de1
                                &loopargs[i].siglen,
Packit Service 084de1
                                loopargs[i].ecdsa[testnum]);
Packit Service 084de1
                if (st == 0)
Packit Service 084de1
                    break;
Packit Service 084de1
            }
Packit Service 084de1
            if (st == 0) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "ECDSA sign failure.  No ECDSA sign will be done.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
            } else {
Packit Service 084de1
                pkey_print_message("sign", "ecdsa",
Packit Service 084de1
                                   ecdsa_c[testnum][0],
Packit Service 084de1
                                   test_curves[testnum].bits, seconds.ecdsa);
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, ECDSA_sign_loop, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           mr ? "+R5:%ld:%u:%.2f\n" :
Packit Service 084de1
                           "%ld %u bits ECDSA signs in %.2fs \n",
Packit Service 084de1
                           count, test_curves[testnum].bits, d);
Packit Service 084de1
                ecdsa_results[testnum][0] = (double)count / d;
Packit Service 084de1
                rsa_count = count;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            /* Perform ECDSA verification test */
Packit Service 084de1
            for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
                st = ECDSA_verify(0, loopargs[i].buf, 20, loopargs[i].buf2,
Packit Service 084de1
                                  loopargs[i].siglen,
Packit Service 084de1
                                  loopargs[i].ecdsa[testnum]);
Packit Service 084de1
                if (st != 1)
Packit Service 084de1
                    break;
Packit Service 084de1
            }
Packit Service 084de1
            if (st != 1) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "ECDSA verify failure.  No ECDSA verify will be done.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                ecdsa_doit[testnum] = 0;
Packit Service 084de1
            } else {
Packit Service 084de1
                pkey_print_message("verify", "ecdsa",
Packit Service 084de1
                                   ecdsa_c[testnum][1],
Packit Service 084de1
                                   test_curves[testnum].bits, seconds.ecdsa);
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, ECDSA_verify_loop, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           mr ? "+R6:%ld:%u:%.2f\n"
Packit Service 084de1
                           : "%ld %u bits ECDSA verify in %.2fs\n",
Packit Service 084de1
                           count, test_curves[testnum].bits, d);
Packit Service 084de1
                ecdsa_results[testnum][1] = (double)count / d;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            if (rsa_count <= 1) {
Packit Service 084de1
                /* if longer than 10s, don't do any more */
Packit Service 084de1
                for (testnum++; testnum < ECDSA_NUM; testnum++)
Packit Service 084de1
                    ecdsa_doit[testnum] = 0;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    for (testnum = 0; testnum < EC_NUM; testnum++) {
Packit Service 084de1
        int ecdh_checks = 1;
Packit Service 084de1
Packit Service 084de1
        if (!ecdh_doit[testnum])
Packit Service 084de1
            continue;
Packit Service 084de1
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            EVP_PKEY_CTX *kctx = NULL;
Packit Service 084de1
            EVP_PKEY_CTX *test_ctx = NULL;
Packit Service 084de1
            EVP_PKEY_CTX *ctx = NULL;
Packit Service 084de1
            EVP_PKEY *key_A = NULL;
Packit Service 084de1
            EVP_PKEY *key_B = NULL;
Packit Service 084de1
            size_t outlen;
Packit Service 084de1
            size_t test_outlen;
Packit Service 084de1
Packit Service 084de1
            /* Ensure that the error queue is empty */
Packit Service 084de1
            if (ERR_peek_error()) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "WARNING: the error queue contains previous unhandled errors.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            /* Let's try to create a ctx directly from the NID: this works for
Packit Service 084de1
             * curves like Curve25519 that are not implemented through the low
Packit Service 084de1
             * level EC interface.
Packit Service 084de1
             * If this fails we try creating a EVP_PKEY_EC generic param ctx,
Packit Service 084de1
             * then we set the curve by NID before deriving the actual keygen
Packit Service 084de1
             * ctx for that specific curve. */
Packit Service 084de1
            kctx = EVP_PKEY_CTX_new_id(test_curves[testnum].nid, NULL); /* keygen ctx from NID */
Packit Service 084de1
            if (!kctx) {
Packit Service 084de1
                EVP_PKEY_CTX *pctx = NULL;
Packit Service 084de1
                EVP_PKEY *params = NULL;
Packit Service 084de1
Packit Service 084de1
                /* If we reach this code EVP_PKEY_CTX_new_id() failed and a
Packit Service 084de1
                 * "int_ctx_new:unsupported algorithm" error was added to the
Packit Service 084de1
                 * error queue.
Packit Service 084de1
                 * We remove it from the error queue as we are handling it. */
Packit Service 084de1
                unsigned long error = ERR_peek_error(); /* peek the latest error in the queue */
Packit Service 084de1
                if (error == ERR_peek_last_error() && /* oldest and latest errors match */
Packit Service 084de1
                    /* check that the error origin matches */
Packit Service 084de1
                    ERR_GET_LIB(error) == ERR_LIB_EVP &&
Packit Service 084de1
                    ERR_GET_FUNC(error) == EVP_F_INT_CTX_NEW &&
Packit Service 084de1
                    ERR_GET_REASON(error) == EVP_R_UNSUPPORTED_ALGORITHM)
Packit Service 084de1
                    ERR_get_error(); /* pop error from queue */
Packit Service 084de1
                if (ERR_peek_error()) {
Packit Service 084de1
                    BIO_printf(bio_err,
Packit Service 084de1
                               "Unhandled error in the error queue during ECDH init.\n");
Packit Service 084de1
                    ERR_print_errors(bio_err);
Packit Service 084de1
                    rsa_count = 1;
Packit Service 084de1
                    break;
Packit Service 084de1
                }
Packit Service 084de1
Packit Service 084de1
                if (            /* Create the context for parameter generation */
Packit Service 084de1
                       !(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) ||
Packit Service 084de1
                       /* Initialise the parameter generation */
Packit Service 084de1
                       !EVP_PKEY_paramgen_init(pctx) ||
Packit Service 084de1
                       /* Set the curve by NID */
Packit Service 084de1
                       !EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx,
Packit Service 084de1
                                                               test_curves
Packit Service 084de1
                                                               [testnum].nid) ||
Packit Service 084de1
                       /* Create the parameter object params */
Packit Service 084de1
                       !EVP_PKEY_paramgen(pctx, &params)) {
Packit Service 084de1
                    ecdh_checks = 0;
Packit Service 084de1
                    BIO_printf(bio_err, "ECDH EC params init failure.\n");
Packit Service 084de1
                    ERR_print_errors(bio_err);
Packit Service 084de1
                    rsa_count = 1;
Packit Service 084de1
                    break;
Packit Service 084de1
                }
Packit Service 084de1
                /* Create the context for the key generation */
Packit Service 084de1
                kctx = EVP_PKEY_CTX_new(params, NULL);
Packit Service 084de1
Packit Service 084de1
                EVP_PKEY_free(params);
Packit Service 084de1
                params = NULL;
Packit Service 084de1
                EVP_PKEY_CTX_free(pctx);
Packit Service 084de1
                pctx = NULL;
Packit Service 084de1
            }
Packit Service 084de1
            if (kctx == NULL ||      /* keygen ctx is not null */
Packit Service 084de1
                EVP_PKEY_keygen_init(kctx) <= 0/* init keygen ctx */ ) {
Packit Service 084de1
                ecdh_checks = 0;
Packit Service 084de1
                BIO_printf(bio_err, "ECDH keygen failure.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            if (EVP_PKEY_keygen(kctx, &key_A) <= 0 || /* generate secret key A */
Packit Service 084de1
                EVP_PKEY_keygen(kctx, &key_B) <= 0 || /* generate secret key B */
Packit Service 084de1
                !(ctx = EVP_PKEY_CTX_new(key_A, NULL)) || /* derivation ctx from skeyA */
Packit Service 084de1
                EVP_PKEY_derive_init(ctx) <= 0 || /* init derivation ctx */
Packit Service 084de1
                EVP_PKEY_derive_set_peer(ctx, key_B) <= 0 || /* set peer pubkey in ctx */
Packit Service 084de1
                EVP_PKEY_derive(ctx, NULL, &outlen) <= 0 || /* determine max length */
Packit Service 084de1
                outlen == 0 ||  /* ensure outlen is a valid size */
Packit Service 084de1
                outlen > MAX_ECDH_SIZE /* avoid buffer overflow */ ) {
Packit Service 084de1
                ecdh_checks = 0;
Packit Service 084de1
                BIO_printf(bio_err, "ECDH key generation failure.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            /* Here we perform a test run, comparing the output of a*B and b*A;
Packit Service 084de1
             * we try this here and assume that further EVP_PKEY_derive calls
Packit Service 084de1
             * never fail, so we can skip checks in the actually benchmarked
Packit Service 084de1
             * code, for maximum performance. */
Packit Service 084de1
            if (!(test_ctx = EVP_PKEY_CTX_new(key_B, NULL)) || /* test ctx from skeyB */
Packit Service 084de1
                !EVP_PKEY_derive_init(test_ctx) || /* init derivation test_ctx */
Packit Service 084de1
                !EVP_PKEY_derive_set_peer(test_ctx, key_A) || /* set peer pubkey in test_ctx */
Packit Service 084de1
                !EVP_PKEY_derive(test_ctx, NULL, &test_outlen) || /* determine max length */
Packit Service 084de1
                !EVP_PKEY_derive(ctx, loopargs[i].secret_a, &outlen) || /* compute a*B */
Packit Service 084de1
                !EVP_PKEY_derive(test_ctx, loopargs[i].secret_b, &test_outlen) || /* compute b*A */
Packit Service 084de1
                test_outlen != outlen /* compare output length */ ) {
Packit Service 084de1
                ecdh_checks = 0;
Packit Service 084de1
                BIO_printf(bio_err, "ECDH computation failure.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            /* Compare the computation results: CRYPTO_memcmp() returns 0 if equal */
Packit Service 084de1
            if (CRYPTO_memcmp(loopargs[i].secret_a,
Packit Service 084de1
                              loopargs[i].secret_b, outlen)) {
Packit Service 084de1
                ecdh_checks = 0;
Packit Service 084de1
                BIO_printf(bio_err, "ECDH computations don't match.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            loopargs[i].ecdh_ctx[testnum] = ctx;
Packit Service 084de1
            loopargs[i].outlen[testnum] = outlen;
Packit Service 084de1
Packit Service 084de1
            EVP_PKEY_free(key_A);
Packit Service 084de1
            EVP_PKEY_free(key_B);
Packit Service 084de1
            EVP_PKEY_CTX_free(kctx);
Packit Service 084de1
            kctx = NULL;
Packit Service 084de1
            EVP_PKEY_CTX_free(test_ctx);
Packit Service 084de1
            test_ctx = NULL;
Packit Service 084de1
        }
Packit Service 084de1
        if (ecdh_checks != 0) {
Packit Service 084de1
            pkey_print_message("", "ecdh",
Packit Service 084de1
                               ecdh_c[testnum][0],
Packit Service 084de1
                               test_curves[testnum].bits, seconds.ecdh);
Packit Service 084de1
            Time_F(START);
Packit Service 084de1
            count =
Packit Service 084de1
                run_benchmark(async_jobs, ECDH_EVP_derive_key_loop, loopargs);
Packit Service 084de1
            d = Time_F(STOP);
Packit Service 084de1
            BIO_printf(bio_err,
Packit Service 084de1
                       mr ? "+R7:%ld:%d:%.2f\n" :
Packit Service 084de1
                       "%ld %u-bits ECDH ops in %.2fs\n", count,
Packit Service 084de1
                       test_curves[testnum].bits, d);
Packit Service 084de1
            ecdh_results[testnum][0] = (double)count / d;
Packit Service 084de1
            rsa_count = count;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (rsa_count <= 1) {
Packit Service 084de1
            /* if longer than 10s, don't do any more */
Packit Service 084de1
            for (testnum++; testnum < OSSL_NELEM(ecdh_doit); testnum++)
Packit Service 084de1
                ecdh_doit[testnum] = 0;
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    for (testnum = 0; testnum < EdDSA_NUM; testnum++) {
Packit Service 084de1
        int st = 1;
Packit Service 084de1
        EVP_PKEY *ed_pkey = NULL;
Packit Service 084de1
        EVP_PKEY_CTX *ed_pctx = NULL;
Packit Service 084de1
Packit Service 084de1
        if (!eddsa_doit[testnum])
Packit Service 084de1
            continue;           /* Ignore Curve */
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
            loopargs[i].eddsa_ctx[testnum] = EVP_MD_CTX_new();
Packit Service 084de1
            if (loopargs[i].eddsa_ctx[testnum] == NULL) {
Packit Service 084de1
                st = 0;
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            if ((ed_pctx = EVP_PKEY_CTX_new_id(test_ed_curves[testnum].nid, NULL))
Packit Service 084de1
                    == NULL
Packit Service 084de1
                || EVP_PKEY_keygen_init(ed_pctx) <= 0
Packit Service 084de1
                || EVP_PKEY_keygen(ed_pctx, &ed_pkey) <= 0) {
Packit Service 084de1
                st = 0;
Packit Service 084de1
                EVP_PKEY_CTX_free(ed_pctx);
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
            EVP_PKEY_CTX_free(ed_pctx);
Packit Service 084de1
Packit Service 084de1
            if (!EVP_DigestSignInit(loopargs[i].eddsa_ctx[testnum], NULL, NULL,
Packit Service 084de1
                                    NULL, ed_pkey)) {
Packit Service 084de1
                st = 0;
Packit Service 084de1
                EVP_PKEY_free(ed_pkey);
Packit Service 084de1
                break;
Packit Service 084de1
            }
Packit Service 084de1
            EVP_PKEY_free(ed_pkey);
Packit Service 084de1
        }
Packit Service 084de1
        if (st == 0) {
Packit Service 084de1
            BIO_printf(bio_err, "EdDSA failure.\n");
Packit Service 084de1
            ERR_print_errors(bio_err);
Packit Service 084de1
            rsa_count = 1;
Packit Service 084de1
        } else {
Packit Service 084de1
            for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
                /* Perform EdDSA signature test */
Packit Service 084de1
                loopargs[i].sigsize = test_ed_curves[testnum].sigsize;
Packit Service 084de1
                st = EVP_DigestSign(loopargs[i].eddsa_ctx[testnum],
Packit Service 084de1
                                    loopargs[i].buf2, &loopargs[i].sigsize,
Packit Service 084de1
                                    loopargs[i].buf, 20);
Packit Service 084de1
                if (st == 0)
Packit Service 084de1
                    break;
Packit Service 084de1
            }
Packit Service 084de1
            if (st == 0) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "EdDSA sign failure.  No EdDSA sign will be done.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                rsa_count = 1;
Packit Service 084de1
            } else {
Packit Service 084de1
                pkey_print_message("sign", test_ed_curves[testnum].name,
Packit Service 084de1
                                   eddsa_c[testnum][0],
Packit Service 084de1
                                   test_ed_curves[testnum].bits, seconds.eddsa);
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, EdDSA_sign_loop, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           mr ? "+R8:%ld:%u:%s:%.2f\n" :
Packit Service 084de1
                           "%ld %u bits %s signs in %.2fs \n",
Packit Service 084de1
                           count, test_ed_curves[testnum].bits,
Packit Service 084de1
                           test_ed_curves[testnum].name, d);
Packit Service 084de1
                eddsa_results[testnum][0] = (double)count / d;
Packit Service 084de1
                rsa_count = count;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            /* Perform EdDSA verification test */
Packit Service 084de1
            for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
                st = EVP_DigestVerify(loopargs[i].eddsa_ctx[testnum],
Packit Service 084de1
                                      loopargs[i].buf2, loopargs[i].sigsize,
Packit Service 084de1
                                      loopargs[i].buf, 20);
Packit Service 084de1
                if (st != 1)
Packit Service 084de1
                    break;
Packit Service 084de1
            }
Packit Service 084de1
            if (st != 1) {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "EdDSA verify failure.  No EdDSA verify will be done.\n");
Packit Service 084de1
                ERR_print_errors(bio_err);
Packit Service 084de1
                eddsa_doit[testnum] = 0;
Packit Service 084de1
            } else {
Packit Service 084de1
                pkey_print_message("verify", test_ed_curves[testnum].name,
Packit Service 084de1
                                   eddsa_c[testnum][1],
Packit Service 084de1
                                   test_ed_curves[testnum].bits, seconds.eddsa);
Packit Service 084de1
                Time_F(START);
Packit Service 084de1
                count = run_benchmark(async_jobs, EdDSA_verify_loop, loopargs);
Packit Service 084de1
                d = Time_F(STOP);
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           mr ? "+R9:%ld:%u:%s:%.2f\n"
Packit Service 084de1
                           : "%ld %u bits %s verify in %.2fs\n",
Packit Service 084de1
                           count, test_ed_curves[testnum].bits,
Packit Service 084de1
                           test_ed_curves[testnum].name, d);
Packit Service 084de1
                eddsa_results[testnum][1] = (double)count / d;
Packit Service 084de1
            }
Packit Service 084de1
Packit Service 084de1
            if (rsa_count <= 1) {
Packit Service 084de1
                /* if longer than 10s, don't do any more */
Packit Service 084de1
                for (testnum++; testnum < EdDSA_NUM; testnum++)
Packit Service 084de1
                    eddsa_doit[testnum] = 0;
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
#endif                          /* OPENSSL_NO_EC */
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
 show_res:
Packit Service 084de1
#endif
Packit Service 084de1
    if (!mr) {
Packit Service 084de1
        printf("%s\n", OpenSSL_version(OPENSSL_VERSION));
Packit Service 084de1
        printf("%s\n", OpenSSL_version(OPENSSL_BUILT_ON));
Packit Service 084de1
        printf("options:");
Packit Service 084de1
        printf("%s ", BN_options());
Packit Service 084de1
#ifndef OPENSSL_NO_MD2
Packit Service 084de1
        printf("%s ", MD2_options());
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_RC4
Packit Service 084de1
        printf("%s ", RC4_options());
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DES
Packit Service 084de1
        printf("%s ", DES_options());
Packit Service 084de1
#endif
Packit Service 084de1
        printf("%s ", AES_options());
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
        printf("%s ", IDEA_options());
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_BF
Packit Service 084de1
        printf("%s ", BF_options());
Packit Service 084de1
#endif
Packit Service 084de1
        printf("\n%s\n", OpenSSL_version(OPENSSL_CFLAGS));
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (pr_header) {
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+H");
Packit Service 084de1
        else {
Packit Service 084de1
            printf
Packit Service 084de1
                ("The 'numbers' are in 1000s of bytes per second processed.\n");
Packit Service 084de1
            printf("type        ");
Packit Service 084de1
        }
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++)
Packit Service 084de1
            printf(mr ? ":%d" : "%7d bytes", lengths[testnum]);
Packit Service 084de1
        printf("\n");
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    for (k = 0; k < ALGOR_NUM; k++) {
Packit Service 084de1
        if (!doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F:%u:%s", k, names[k]);
Packit Service 084de1
        else
Packit Service 084de1
            printf("%-13s", names[k]);
Packit Service 084de1
        for (testnum = 0; testnum < size_num; testnum++) {
Packit Service 084de1
            if (results[k][testnum] > 10000 && !mr)
Packit Service 084de1
                printf(" %11.2fk", results[k][testnum] / 1e3);
Packit Service 084de1
            else
Packit Service 084de1
                printf(mr ? ":%.2f" : " %11.2f ", results[k][testnum]);
Packit Service 084de1
        }
Packit Service 084de1
        printf("\n");
Packit Service 084de1
    }
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
    testnum = 1;
Packit Service 084de1
    for (k = 0; k < RSA_NUM; k++) {
Packit Service 084de1
        if (!rsa_doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (testnum && !mr) {
Packit Service 084de1
            printf("%18ssign    verify    sign/s verify/s\n", " ");
Packit Service 084de1
            testnum = 0;
Packit Service 084de1
        }
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F2:%u:%u:%f:%f\n",
Packit Service 084de1
                   k, rsa_bits[k], rsa_results[k][0], rsa_results[k][1]);
Packit Service 084de1
        else
Packit Service 084de1
            printf("rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
Packit Service 084de1
                   rsa_bits[k], 1.0 / rsa_results[k][0], 1.0 / rsa_results[k][1],
Packit Service 084de1
                   rsa_results[k][0], rsa_results[k][1]);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
    testnum = 1;
Packit Service 084de1
    for (k = 0; k < DSA_NUM; k++) {
Packit Service 084de1
        if (!dsa_doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (testnum && !mr) {
Packit Service 084de1
            printf("%18ssign    verify    sign/s verify/s\n", " ");
Packit Service 084de1
            testnum = 0;
Packit Service 084de1
        }
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F3:%u:%u:%f:%f\n",
Packit Service 084de1
                   k, dsa_bits[k], dsa_results[k][0], dsa_results[k][1]);
Packit Service 084de1
        else
Packit Service 084de1
            printf("dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n",
Packit Service 084de1
                   dsa_bits[k], 1.0 / dsa_results[k][0], 1.0 / dsa_results[k][1],
Packit Service 084de1
                   dsa_results[k][0], dsa_results[k][1]);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
    testnum = 1;
Packit Service 084de1
    for (k = 0; k < OSSL_NELEM(ecdsa_doit); k++) {
Packit Service 084de1
        if (!ecdsa_doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (testnum && !mr) {
Packit Service 084de1
            printf("%30ssign    verify    sign/s verify/s\n", " ");
Packit Service 084de1
            testnum = 0;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F4:%u:%u:%f:%f\n",
Packit Service 084de1
                   k, test_curves[k].bits,
Packit Service 084de1
                   ecdsa_results[k][0], ecdsa_results[k][1]);
Packit Service 084de1
        else
Packit Service 084de1
            printf("%4u bits ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
Packit Service 084de1
                   test_curves[k].bits, test_curves[k].name,
Packit Service 084de1
                   1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1],
Packit Service 084de1
                   ecdsa_results[k][0], ecdsa_results[k][1]);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    testnum = 1;
Packit Service 084de1
    for (k = 0; k < EC_NUM; k++) {
Packit Service 084de1
        if (!ecdh_doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (testnum && !mr) {
Packit Service 084de1
            printf("%30sop      op/s\n", " ");
Packit Service 084de1
            testnum = 0;
Packit Service 084de1
        }
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F5:%u:%u:%f:%f\n",
Packit Service 084de1
                   k, test_curves[k].bits,
Packit Service 084de1
                   ecdh_results[k][0], 1.0 / ecdh_results[k][0]);
Packit Service 084de1
Packit Service 084de1
        else
Packit Service 084de1
            printf("%4u bits ecdh (%s) %8.4fs %8.1f\n",
Packit Service 084de1
                   test_curves[k].bits, test_curves[k].name,
Packit Service 084de1
                   1.0 / ecdh_results[k][0], ecdh_results[k][0]);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    testnum = 1;
Packit Service 084de1
    for (k = 0; k < OSSL_NELEM(eddsa_doit); k++) {
Packit Service 084de1
        if (!eddsa_doit[k])
Packit Service 084de1
            continue;
Packit Service 084de1
        if (testnum && !mr) {
Packit Service 084de1
            printf("%30ssign    verify    sign/s verify/s\n", " ");
Packit Service 084de1
            testnum = 0;
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        if (mr)
Packit Service 084de1
            printf("+F6:%u:%u:%s:%f:%f\n",
Packit Service 084de1
                   k, test_ed_curves[k].bits, test_ed_curves[k].name,
Packit Service 084de1
                   eddsa_results[k][0], eddsa_results[k][1]);
Packit Service 084de1
        else
Packit Service 084de1
            printf("%4u bits EdDSA (%s) %8.4fs %8.4fs %8.1f %8.1f\n",
Packit Service 084de1
                   test_ed_curves[k].bits, test_ed_curves[k].name,
Packit Service 084de1
                   1.0 / eddsa_results[k][0], 1.0 / eddsa_results[k][1],
Packit Service 084de1
                   eddsa_results[k][0], eddsa_results[k][1]);
Packit Service 084de1
    }
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
    ret = 0;
Packit Service 084de1
Packit Service 084de1
 end:
Packit Service 084de1
    ERR_print_errors(bio_err);
Packit Service 084de1
    for (i = 0; i < loopargs_len; i++) {
Packit Service 084de1
        OPENSSL_free(loopargs[i].buf_malloc);
Packit Service 084de1
        OPENSSL_free(loopargs[i].buf2_malloc);
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_RSA
Packit Service 084de1
        for (k = 0; k < RSA_NUM; k++)
Packit Service 084de1
            RSA_free(loopargs[i].rsa_key[k]);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_DSA
Packit Service 084de1
        for (k = 0; k < DSA_NUM; k++)
Packit Service 084de1
            DSA_free(loopargs[i].dsa_key[k]);
Packit Service 084de1
#endif
Packit Service 084de1
#ifndef OPENSSL_NO_EC
Packit Service 084de1
        for (k = 0; k < ECDSA_NUM; k++)
Packit Service 084de1
            EC_KEY_free(loopargs[i].ecdsa[k]);
Packit Service 084de1
        for (k = 0; k < EC_NUM; k++)
Packit Service 084de1
            EVP_PKEY_CTX_free(loopargs[i].ecdh_ctx[k]);
Packit Service 084de1
        for (k = 0; k < EdDSA_NUM; k++)
Packit Service 084de1
            EVP_MD_CTX_free(loopargs[i].eddsa_ctx[k]);
Packit Service 084de1
        OPENSSL_free(loopargs[i].secret_a);
Packit Service 084de1
        OPENSSL_free(loopargs[i].secret_b);
Packit Service 084de1
#endif
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (async_jobs > 0) {
Packit Service 084de1
        for (i = 0; i < loopargs_len; i++)
Packit Service 084de1
            ASYNC_WAIT_CTX_free(loopargs[i].wait_ctx);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (async_init) {
Packit Service 084de1
        ASYNC_cleanup_thread();
Packit Service 084de1
    }
Packit Service 084de1
    OPENSSL_free(loopargs);
Packit Service 084de1
    release_engine(e);
Packit Service 084de1
    return ret;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static void print_message(const char *s, long num, int length, int tm)
Packit Service 084de1
{
Packit Service 084de1
#ifdef SIGALRM
Packit Service 084de1
    BIO_printf(bio_err,
Packit Service 084de1
               mr ? "+DT:%s:%d:%d\n"
Packit Service 084de1
               : "Doing %s for %ds on %d size blocks: ", s, tm, length);
Packit Service 084de1
    (void)BIO_flush(bio_err);
Packit Service 084de1
    run = 1;
Packit Service 084de1
    alarm(tm);
Packit Service 084de1
#else
Packit Service 084de1
    BIO_printf(bio_err,
Packit Service 084de1
               mr ? "+DN:%s:%ld:%d\n"
Packit Service 084de1
               : "Doing %s %ld times on %d size blocks: ", s, num, length);
Packit Service 084de1
    (void)BIO_flush(bio_err);
Packit Service 084de1
#endif
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static void pkey_print_message(const char *str, const char *str2, long num,
Packit Service 084de1
                               unsigned int bits, int tm)
Packit Service 084de1
{
Packit Service 084de1
#ifdef SIGALRM
Packit Service 084de1
    BIO_printf(bio_err,
Packit Service 084de1
               mr ? "+DTP:%d:%s:%s:%d\n"
Packit Service 084de1
               : "Doing %u bits %s %s's for %ds: ", bits, str, str2, tm);
Packit Service 084de1
    (void)BIO_flush(bio_err);
Packit Service 084de1
    run = 1;
Packit Service 084de1
    alarm(tm);
Packit Service 084de1
#else
Packit Service 084de1
    BIO_printf(bio_err,
Packit Service 084de1
               mr ? "+DNP:%ld:%d:%s:%s\n"
Packit Service 084de1
               : "Doing %ld %u bits %s %s's: ", num, bits, str, str2);
Packit Service 084de1
    (void)BIO_flush(bio_err);
Packit Service 084de1
#endif
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static void print_result(int alg, int run_no, int count, double time_used)
Packit Service 084de1
{
Packit Service 084de1
    if (count == -1) {
Packit Service 084de1
        BIO_puts(bio_err, "EVP error!\n");
Packit Service 084de1
        exit(1);
Packit Service 084de1
    }
Packit Service 084de1
    BIO_printf(bio_err,
Packit Service 084de1
               mr ? "+R:%d:%s:%f\n"
Packit Service 084de1
               : "%d %s's in %.2fs\n", count, names[alg], time_used);
Packit Service 084de1
    results[alg][run_no] = ((double)count) / time_used * lengths[run_no];
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
#ifndef NO_FORK
Packit Service 084de1
static char *sstrsep(char **string, const char *delim)
Packit Service 084de1
{
Packit Service 084de1
    char isdelim[256];
Packit Service 084de1
    char *token = *string;
Packit Service 084de1
Packit Service 084de1
    if (**string == 0)
Packit Service 084de1
        return NULL;
Packit Service 084de1
Packit Service 084de1
    memset(isdelim, 0, sizeof(isdelim));
Packit Service 084de1
    isdelim[0] = 1;
Packit Service 084de1
Packit Service 084de1
    while (*delim) {
Packit Service 084de1
        isdelim[(unsigned char)(*delim)] = 1;
Packit Service 084de1
        delim++;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    while (!isdelim[(unsigned char)(**string)]) {
Packit Service 084de1
        (*string)++;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (**string) {
Packit Service 084de1
        **string = 0;
Packit Service 084de1
        (*string)++;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    return token;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int do_multi(int multi, int size_num)
Packit Service 084de1
{
Packit Service 084de1
    int n;
Packit Service 084de1
    int fd[2];
Packit Service 084de1
    int *fds;
Packit Service 084de1
    static char sep[] = ":";
Packit Service 084de1
Packit Service 084de1
    fds = app_malloc(sizeof(*fds) * multi, "fd buffer for do_multi");
Packit Service 084de1
    for (n = 0; n < multi; ++n) {
Packit Service 084de1
        if (pipe(fd) == -1) {
Packit Service 084de1
            BIO_printf(bio_err, "pipe failure\n");
Packit Service 084de1
            exit(1);
Packit Service 084de1
        }
Packit Service 084de1
        fflush(stdout);
Packit Service 084de1
        (void)BIO_flush(bio_err);
Packit Service 084de1
        if (fork()) {
Packit Service 084de1
            close(fd[1]);
Packit Service 084de1
            fds[n] = fd[0];
Packit Service 084de1
        } else {
Packit Service 084de1
            close(fd[0]);
Packit Service 084de1
            close(1);
Packit Service 084de1
            if (dup(fd[1]) == -1) {
Packit Service 084de1
                BIO_printf(bio_err, "dup failed\n");
Packit Service 084de1
                exit(1);
Packit Service 084de1
            }
Packit Service 084de1
            close(fd[1]);
Packit Service 084de1
            mr = 1;
Packit Service 084de1
            usertime = 0;
Packit Service 084de1
            free(fds);
Packit Service 084de1
            return 0;
Packit Service 084de1
        }
Packit Service 084de1
        printf("Forked child %d\n", n);
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    /* for now, assume the pipe is long enough to take all the output */
Packit Service 084de1
    for (n = 0; n < multi; ++n) {
Packit Service 084de1
        FILE *f;
Packit Service 084de1
        char buf[1024];
Packit Service 084de1
        char *p;
Packit Service 084de1
Packit Service 084de1
        f = fdopen(fds[n], "r");
Packit Service 084de1
        while (fgets(buf, sizeof(buf), f)) {
Packit Service 084de1
            p = strchr(buf, '\n');
Packit Service 084de1
            if (p)
Packit Service 084de1
                *p = '\0';
Packit Service 084de1
            if (buf[0] != '+') {
Packit Service 084de1
                BIO_printf(bio_err,
Packit Service 084de1
                           "Don't understand line '%s' from child %d\n", buf,
Packit Service 084de1
                           n);
Packit Service 084de1
                continue;
Packit Service 084de1
            }
Packit Service 084de1
            printf("Got: %s from %d\n", buf, n);
Packit Service 084de1
            if (strncmp(buf, "+F:", 3) == 0) {
Packit Service 084de1
                int alg;
Packit Service 084de1
                int j;
Packit Service 084de1
Packit Service 084de1
                p = buf + 3;
Packit Service 084de1
                alg = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
                for (j = 0; j < size_num; ++j)
Packit Service 084de1
                    results[alg][j] += atof(sstrsep(&p, sep));
Packit Service 084de1
            } else if (strncmp(buf, "+F2:", 4) == 0) {
Packit Service 084de1
                int k;
Packit Service 084de1
                double d;
Packit Service 084de1
Packit Service 084de1
                p = buf + 4;
Packit Service 084de1
                k = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                rsa_results[k][0] += d;
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                rsa_results[k][1] += d;
Packit Service 084de1
            }
Packit Service 084de1
# ifndef OPENSSL_NO_DSA
Packit Service 084de1
            else if (strncmp(buf, "+F3:", 4) == 0) {
Packit Service 084de1
                int k;
Packit Service 084de1
                double d;
Packit Service 084de1
Packit Service 084de1
                p = buf + 4;
Packit Service 084de1
                k = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                dsa_results[k][0] += d;
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                dsa_results[k][1] += d;
Packit Service 084de1
            }
Packit Service 084de1
# endif
Packit Service 084de1
# ifndef OPENSSL_NO_EC
Packit Service 084de1
            else if (strncmp(buf, "+F4:", 4) == 0) {
Packit Service 084de1
                int k;
Packit Service 084de1
                double d;
Packit Service 084de1
Packit Service 084de1
                p = buf + 4;
Packit Service 084de1
                k = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                ecdsa_results[k][0] += d;
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                ecdsa_results[k][1] += d;
Packit Service 084de1
            } else if (strncmp(buf, "+F5:", 4) == 0) {
Packit Service 084de1
                int k;
Packit Service 084de1
                double d;
Packit Service 084de1
Packit Service 084de1
                p = buf + 4;
Packit Service 084de1
                k = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                ecdh_results[k][0] += d;
Packit Service 084de1
            } else if (strncmp(buf, "+F6:", 4) == 0) {
Packit Service 084de1
                int k;
Packit Service 084de1
                double d;
Packit Service 084de1
Packit Service 084de1
                p = buf + 4;
Packit Service 084de1
                k = atoi(sstrsep(&p, sep));
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
                sstrsep(&p, sep);
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                eddsa_results[k][0] += d;
Packit Service 084de1
Packit Service 084de1
                d = atof(sstrsep(&p, sep));
Packit Service 084de1
                eddsa_results[k][1] += d;
Packit Service 084de1
            }
Packit Service 084de1
# endif
Packit Service 084de1
Packit Service 084de1
            else if (strncmp(buf, "+H:", 3) == 0) {
Packit Service 084de1
                ;
Packit Service 084de1
            } else
Packit Service 084de1
                BIO_printf(bio_err, "Unknown type '%s' from child %d\n", buf,
Packit Service 084de1
                           n);
Packit Service 084de1
        }
Packit Service 084de1
Packit Service 084de1
        fclose(f);
Packit Service 084de1
    }
Packit Service 084de1
    free(fds);
Packit Service 084de1
    return 1;
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
static void multiblock_speed(const EVP_CIPHER *evp_cipher, int lengths_single,
Packit Service 084de1
                             const openssl_speed_sec_t *seconds)
Packit Service 084de1
{
Packit Service 084de1
    static const int mblengths_list[] =
Packit Service 084de1
        { 8 * 1024, 2 * 8 * 1024, 4 * 8 * 1024, 8 * 8 * 1024, 8 * 16 * 1024 };
Packit Service 084de1
    const int *mblengths = mblengths_list;
Packit Service 084de1
    int j, count, keylen, num = OSSL_NELEM(mblengths_list);
Packit Service 084de1
    const char *alg_name;
Packit Service 084de1
    unsigned char *inp, *out, *key, no_key[32], no_iv[16];
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
    double d = 0.0;
Packit Service 084de1
Packit Service 084de1
    if (lengths_single) {
Packit Service 084de1
        mblengths = &lengths_single;
Packit Service 084de1
        num = 1;
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    inp = app_malloc(mblengths[num - 1], "multiblock input buffer");
Packit Service 084de1
    out = app_malloc(mblengths[num - 1] + 1024, "multiblock output buffer");
Packit Service 084de1
    ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
    EVP_EncryptInit_ex(ctx, evp_cipher, NULL, NULL, no_iv);
Packit Service 084de1
Packit Service 084de1
    keylen = EVP_CIPHER_CTX_key_length(ctx);
Packit Service 084de1
    key = app_malloc(keylen, "evp_cipher key");
Packit Service 084de1
    EVP_CIPHER_CTX_rand_key(ctx, key);
Packit Service 084de1
    EVP_EncryptInit_ex(ctx, NULL, NULL, key, NULL);
Packit Service 084de1
    OPENSSL_clear_free(key, keylen);
Packit Service 084de1
Packit Service 084de1
    EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_MAC_KEY, sizeof(no_key), no_key);
Packit Service 084de1
    alg_name = OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher));
Packit Service 084de1
Packit Service 084de1
    for (j = 0; j < num; j++) {
Packit Service 084de1
        print_message(alg_name, 0, mblengths[j], seconds->sym);
Packit Service 084de1
        Time_F(START);
Packit Service 084de1
        for (count = 0; run && count < 0x7fffffff; count++) {
Packit Service 084de1
            unsigned char aad[EVP_AEAD_TLS1_AAD_LEN];
Packit Service 084de1
            EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
Packit Service 084de1
            size_t len = mblengths[j];
Packit Service 084de1
            int packlen;
Packit Service 084de1
Packit Service 084de1
            memset(aad, 0, 8);  /* avoid uninitialized values */
Packit Service 084de1
            aad[8] = 23;        /* SSL3_RT_APPLICATION_DATA */
Packit Service 084de1
            aad[9] = 3;         /* version */
Packit Service 084de1
            aad[10] = 2;
Packit Service 084de1
            aad[11] = 0;        /* length */
Packit Service 084de1
            aad[12] = 0;
Packit Service 084de1
            mb_param.out = NULL;
Packit Service 084de1
            mb_param.inp = aad;
Packit Service 084de1
            mb_param.len = len;
Packit Service 084de1
            mb_param.interleave = 8;
Packit Service 084de1
Packit Service 084de1
            packlen = EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
Packit Service 084de1
                                          sizeof(mb_param), &mb_param);
Packit Service 084de1
Packit Service 084de1
            if (packlen > 0) {
Packit Service 084de1
                mb_param.out = out;
Packit Service 084de1
                mb_param.inp = inp;
Packit Service 084de1
                mb_param.len = len;
Packit Service 084de1
                EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
Packit Service 084de1
                                    sizeof(mb_param), &mb_param);
Packit Service 084de1
            } else {
Packit Service 084de1
                int pad;
Packit Service 084de1
Packit Service 084de1
                RAND_bytes(out, 16);
Packit Service 084de1
                len += 16;
Packit Service 084de1
                aad[11] = (unsigned char)(len >> 8);
Packit Service 084de1
                aad[12] = (unsigned char)(len);
Packit Service 084de1
                pad = EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_TLS1_AAD,
Packit Service 084de1
                                          EVP_AEAD_TLS1_AAD_LEN, aad);
Packit Service 084de1
                EVP_Cipher(ctx, out, inp, len + pad);
Packit Service 084de1
            }
Packit Service 084de1
        }
Packit Service 084de1
        d = Time_F(STOP);
Packit Service 084de1
        BIO_printf(bio_err, mr ? "+R:%d:%s:%f\n"
Packit Service 084de1
                   : "%d %s's in %.2fs\n", count, "evp", d);
Packit Service 084de1
        results[D_EVP][j] = ((double)count) / d * mblengths[j];
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    if (mr) {
Packit Service 084de1
        fprintf(stdout, "+H");
Packit Service 084de1
        for (j = 0; j < num; j++)
Packit Service 084de1
            fprintf(stdout, ":%d", mblengths[j]);
Packit Service 084de1
        fprintf(stdout, "\n");
Packit Service 084de1
        fprintf(stdout, "+F:%d:%s", D_EVP, alg_name);
Packit Service 084de1
        for (j = 0; j < num; j++)
Packit Service 084de1
            fprintf(stdout, ":%.2f", results[D_EVP][j]);
Packit Service 084de1
        fprintf(stdout, "\n");
Packit Service 084de1
    } else {
Packit Service 084de1
        fprintf(stdout,
Packit Service 084de1
                "The 'numbers' are in 1000s of bytes per second processed.\n");
Packit Service 084de1
        fprintf(stdout, "type                    ");
Packit Service 084de1
        for (j = 0; j < num; j++)
Packit Service 084de1
            fprintf(stdout, "%7d bytes", mblengths[j]);
Packit Service 084de1
        fprintf(stdout, "\n");
Packit Service 084de1
        fprintf(stdout, "%-24s", alg_name);
Packit Service 084de1
Packit Service 084de1
        for (j = 0; j < num; j++) {
Packit Service 084de1
            if (results[D_EVP][j] > 10000)
Packit Service 084de1
                fprintf(stdout, " %11.2fk", results[D_EVP][j] / 1e3);
Packit Service 084de1
            else
Packit Service 084de1
                fprintf(stdout, " %11.2f ", results[D_EVP][j]);
Packit Service 084de1
        }
Packit Service 084de1
        fprintf(stdout, "\n");
Packit Service 084de1
    }
Packit Service 084de1
Packit Service 084de1
    OPENSSL_free(inp);
Packit Service 084de1
    OPENSSL_free(out);
Packit Service 084de1
    EVP_CIPHER_CTX_free(ctx);
Packit Service 084de1
}