unsigned char *buf2;
unsigned char *buf_malloc;
unsigned char *buf2_malloc;
- unsigned int *siglen;
+ unsigned int siglen;
#ifndef OPENSSL_NO_RSA
RSA *rsa_key[RSA_NUM];
#endif
EC_KEY *ecdh_b[EC_NUM];
unsigned char *secret_a;
unsigned char *secret_b;
- int outlen;
+ size_t outlen;
kdf_fn kdf;
#endif
EVP_CIPHER_CTX *ctx;
}
#endif
-#ifndef OPENSSL_NO_EC
-static const int KDF1_SHA1_len = 20;
-static void *KDF1_SHA1(const void *in, size_t inlen, void *out,
- size_t *outlen)
-{
- if (*outlen < SHA_DIGEST_LENGTH)
- return NULL;
- *outlen = SHA_DIGEST_LENGTH;
- return SHA1(in, inlen, out);
-}
-#endif /* OPENSSL_NO_EC */
-
static void multiblock_speed(const EVP_CIPHER *evp_cipher);
static int found(const char *name, const OPT_PAIR * pairs, int *result)
{"decrypt", OPT_DECRYPT, '-',
"Time decryption instead of encryption (only EVP)"},
{"mr", OPT_MR, '-', "Produce machine readable output"},
- {"mb", OPT_MB, '-'},
+ {"mb", OPT_MB, '-',
+ "Enable (tls1.1) multi-block mode on evp_cipher requested with -evp"},
{"misalign", OPT_MISALIGN, 'n', "Amount to mis-align buffers"},
{"elapsed", OPT_ELAPSED, '-',
"Measure time in real time instead of CPU user time"},
static int testnum;
+/* Nb of iterations to do per algorithm and key-size */
static long c[ALGOR_NUM][SIZE_NUM];
#ifndef OPENSSL_NO_MD2
}
#ifndef OPENSSL_NO_RSA
-static long rsa_c[RSA_NUM][2];
+static long rsa_c[RSA_NUM][2]; /* # RSA iteration test */
static int RSA_sign_loop(void *args)
{
loopargs_t *tempargs = (loopargs_t *)args;
unsigned char *buf = tempargs->buf;
unsigned char *buf2 = tempargs->buf2;
- unsigned int *rsa_num = tempargs->siglen;
+ unsigned int *rsa_num = &tempargs->siglen;
RSA **rsa_key = tempargs->rsa_key;
int ret, count;
for (count = 0; COND(rsa_c[testnum][0]); count++) {
loopargs_t *tempargs = (loopargs_t *)args;
unsigned char *buf = tempargs->buf;
unsigned char *buf2 = tempargs->buf2;
- unsigned int rsa_num = *(tempargs->siglen);
+ unsigned int rsa_num = tempargs->siglen;
RSA **rsa_key = tempargs->rsa_key;
int ret, count;
for (count = 0; COND(rsa_c[testnum][1]); count++) {
unsigned char *buf = tempargs->buf;
unsigned char *buf2 = tempargs->buf2;
DSA **dsa_key = tempargs->dsa_key;
- unsigned int *siglen = tempargs->siglen;
+ unsigned int *siglen = &tempargs->siglen;
int ret, count;
for (count = 0; COND(dsa_c[testnum][0]); count++) {
ret = DSA_sign(0, buf, 20, buf2, siglen, dsa_key[testnum]);
unsigned char *buf = tempargs->buf;
unsigned char *buf2 = tempargs->buf2;
DSA **dsa_key = tempargs->dsa_key;
- unsigned int siglen = *(tempargs->siglen);
+ unsigned int siglen = tempargs->siglen;
int ret, count;
for (count = 0; COND(dsa_c[testnum][1]); count++) {
ret = DSA_verify(0, buf, 20, buf2, siglen, dsa_key[testnum]);
unsigned char *buf = tempargs->buf;
EC_KEY **ecdsa = tempargs->ecdsa;
unsigned char *ecdsasig = tempargs->buf2;
- unsigned int *ecdsasiglen = tempargs->siglen;
+ unsigned int *ecdsasiglen = &tempargs->siglen;
int ret, count;
for (count = 0; COND(ecdsa_c[testnum][0]); count++) {
ret = ECDSA_sign(0, buf, 20,
unsigned char *buf = tempargs->buf;
EC_KEY **ecdsa = tempargs->ecdsa;
unsigned char *ecdsasig = tempargs->buf2;
- unsigned int ecdsasiglen = *(tempargs->siglen);
+ unsigned int ecdsasiglen = tempargs->siglen;
int ret, count;
for (count = 0; COND(ecdsa_c[testnum][1]); count++) {
ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen,
EC_KEY **ecdh_a = tempargs->ecdh_a;
EC_KEY **ecdh_b = tempargs->ecdh_b;
unsigned char *secret_a = tempargs->secret_a;
- int count, outlen = tempargs->outlen;
+ int count;
+ size_t outlen = tempargs->outlen;
kdf_fn kdf = tempargs->kdf;
for (count = 0; COND(ecdh_c[testnum][0]); count++) {
}
return count;
}
+
+static const size_t KDF1_SHA1_len = 20;
+static void *KDF1_SHA1(const void *in, size_t inlen, void *out,
+ size_t *outlen)
+{
+ if (*outlen < SHA_DIGEST_LENGTH)
+ return NULL;
+ *outlen = SHA_DIGEST_LENGTH;
+ return SHA1(in, inlen, out);
+}
#endif /* ndef OPENSSL_NO_EC */
-static int run_benchmark(int async_jobs, int (*loop_function)(void *), loopargs_t *loopargs)
+static int run_benchmark(int async_jobs,
+ int (*loop_function)(void *), loopargs_t *loopargs)
{
int job_op_count = 0;
int total_op_count = 0;
int num_inprogress = 0;
- int error = 0;
- int i = 0;
+ int error = 0, i = 0, ret = 0;
OSSL_ASYNC_FD job_fd = 0;
size_t num_job_fds = 0;
return loop_function((void *)loopargs);
}
-
for (i = 0; i < async_jobs && !error; i++) {
- switch (ASYNC_start_job(&(loopargs[i].inprogress_job), loopargs[i].wait_ctx,
- &job_op_count, loop_function,
- (void *)(loopargs + i), sizeof(loopargs_t))) {
- case ASYNC_PAUSE:
- ++num_inprogress;
- break;
- case ASYNC_FINISH:
- if (job_op_count == -1) {
- error = 1;
- } else {
- total_op_count += job_op_count;
- }
- break;
- case ASYNC_NO_JOBS:
- case ASYNC_ERR:
- BIO_printf(bio_err, "Failure in the job\n");
- ERR_print_errors(bio_err);
+ ret = ASYNC_start_job(&loopargs[i].inprogress_job, loopargs[i].wait_ctx,
+ &job_op_count, loop_function,
+ (void *)(loopargs + i), sizeof(loopargs_t));
+ switch (ret) {
+ case ASYNC_PAUSE:
+ ++num_inprogress;
+ break;
+ case ASYNC_FINISH:
+ if (job_op_count == -1) {
error = 1;
- break;
+ } else {
+ total_op_count += job_op_count;
+ }
+ break;
+ case ASYNC_NO_JOBS:
+ case ASYNC_ERR:
+ BIO_printf(bio_err, "Failure in the job\n");
+ ERR_print_errors(bio_err);
+ error = 1;
+ break;
}
}
if (num_job_fds == 1 && !FD_ISSET(job_fd, &waitfdset))
continue;
#elif defined(OPENSSL_SYS_WINDOWS)
- if (num_job_fds == 1 &&
- !PeekNamedPipe(job_fd, NULL, 0, NULL, &avail, NULL) && avail > 0)
+ if (num_job_fds == 1
+ && !PeekNamedPipe(job_fd, NULL, 0, NULL, &avail, NULL)
+ && avail > 0)
continue;
#endif
- switch (ASYNC_start_job(&(loopargs[i].inprogress_job), loopargs[i].wait_ctx,
- &job_op_count, loop_function, (void *)(loopargs + i),
- sizeof(loopargs_t))) {
- case ASYNC_PAUSE:
- break;
- case ASYNC_FINISH:
- if (job_op_count == -1) {
- error = 1;
- } else {
- total_op_count += job_op_count;
- }
- --num_inprogress;
- loopargs[i].inprogress_job = NULL;
- break;
- case ASYNC_NO_JOBS:
- case ASYNC_ERR:
- --num_inprogress;
- loopargs[i].inprogress_job = NULL;
- BIO_printf(bio_err, "Failure in the job\n");
- ERR_print_errors(bio_err);
+ ret = ASYNC_start_job(&loopargs[i].inprogress_job,
+ loopargs[i].wait_ctx, &job_op_count, loop_function,
+ (void *)(loopargs + i), sizeof(loopargs_t));
+ switch (ret) {
+ case ASYNC_PAUSE:
+ break;
+ case ASYNC_FINISH:
+ if (job_op_count == -1) {
error = 1;
- break;
+ } else {
+ total_op_count += job_op_count;
+ }
+ --num_inprogress;
+ loopargs[i].inprogress_job = NULL;
+ break;
+ case ASYNC_NO_JOBS:
+ case ASYNC_ERR:
+ --num_inprogress;
+ loopargs[i].inprogress_job = NULL;
+ BIO_printf(bio_err, "Failure in the job\n");
+ ERR_print_errors(bio_err);
+ error = 1;
+ break;
}
}
}
OPTION_CHOICE o;
int multiblock = 0, pr_header = 0;
int doit[ALGOR_NUM] = { 0 };
-#ifndef OPENSSL_NO_DSA
- int dsa_doit[DSA_NUM] = { 0 };
-#endif
- int rsa_doit[RSA_NUM] = { 0 };
int ret = 1, i, k, misalign = 0;
long count = 0;
#ifndef NO_FORK
int multi = 0;
#endif
int async_jobs = 0;
- /* What follows are the buffers and key material. */
-#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA)
+#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) \
+ || !defined(OPENSSL_NO_EC)
long rsa_count = 1;
#endif
+
+ /* What follows are the buffers and key material. */
#ifndef OPENSSL_NO_RC5
RC5_32_KEY rc5_ks;
#endif
sizeof(test4096), sizeof(test7680),
sizeof(test15360)
};
+ int rsa_doit[RSA_NUM] = { 0 };
#endif
#ifndef OPENSSL_NO_DSA
static const unsigned int dsa_bits[DSA_NUM] = { 512, 1024, 2048 };
+ int dsa_doit[DSA_NUM] = { 0 };
#endif
#ifndef OPENSSL_NO_EC
/*
evp_md = EVP_get_digestbyname(opt_arg());
if (evp_cipher == NULL && evp_md == NULL) {
BIO_printf(bio_err,
- "%s: %s an unknown cipher or digest\n",
+ "%s: %s is an unknown cipher or digest\n",
prog, opt_arg());
goto end;
}
/* Align the start of buffers on a 64 byte boundary */
loopargs[i].buf = loopargs[i].buf_malloc + misalign;
loopargs[i].buf2 = loopargs[i].buf2_malloc + misalign;
- loopargs[i].siglen = app_malloc(sizeof(unsigned int), "signature length");
#ifndef OPENSSL_NO_EC
loopargs[i].secret_a = app_malloc(MAX_ECDH_SIZE, "ECDH secret a");
loopargs[i].secret_b = app_malloc(MAX_ECDH_SIZE, "ECDH secret b");
for (i = 1; i < RSA_NUM; i++) {
rsa_c[i][0] = rsa_c[i - 1][0] / 8;
rsa_c[i][1] = rsa_c[i - 1][1] / 4;
- if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
+ if (rsa_doit[i] <= 1 && rsa_c[i][0] == 0)
rsa_doit[i] = 0;
else {
if (rsa_c[i][0] == 0) {
- rsa_c[i][0] = 1;
+ rsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */
rsa_c[i][1] = 20;
}
}
for (i = 1; i < DSA_NUM; i++) {
dsa_c[i][0] = dsa_c[i - 1][0] / 4;
dsa_c[i][1] = dsa_c[i - 1][1] / 4;
- if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
+ if (dsa_doit[i] <= 1 && dsa_c[i][0] == 0)
dsa_doit[i] = 0;
else {
- if (dsa_c[i] == 0) { /* Always false */
- dsa_c[i][0] = 1;
+ if (dsa_c[i][0] == 0) {
+ dsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */
dsa_c[i][1] = 1;
}
}
for (i = R_EC_P192; i <= R_EC_P521; i++) {
ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
- if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
+ if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
ecdsa_doit[i] = 0;
else {
- if (ecdsa_c[i] == 0) { /* Always false */
+ if (ecdsa_c[i][0] == 0) {
ecdsa_c[i][0] = 1;
ecdsa_c[i][1] = 1;
}
for (i = R_EC_K233; i <= R_EC_K571; i++) {
ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
- if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
+ if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
ecdsa_doit[i] = 0;
else {
- if (ecdsa_c[i] == 0) { /* Always false */
+ if (ecdsa_c[i][0] == 0) {
ecdsa_c[i][0] = 1;
ecdsa_c[i][1] = 1;
}
for (i = R_EC_B233; i <= R_EC_B571; i++) {
ecdsa_c[i][0] = ecdsa_c[i - 1][0] / 2;
ecdsa_c[i][1] = ecdsa_c[i - 1][1] / 2;
- if ((ecdsa_doit[i] <= 1) && (ecdsa_c[i][0] == 0))
+ if (ecdsa_doit[i] <= 1 && ecdsa_c[i][0] == 0)
ecdsa_doit[i] = 0;
else {
- if (ecdsa_c[i] == 0) { /* Always false */
+ if (ecdsa_c[i][0] == 0) {
ecdsa_c[i][0] = 1;
ecdsa_c[i][1] = 1;
}
ecdh_c[R_EC_P160][0] = count / 1000;
for (i = R_EC_P192; i <= R_EC_P521; i++) {
ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
- if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
+ if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
ecdh_doit[i] = 0;
else {
- if (ecdh_c[i] == 0) { /* always false */
+ if (ecdh_c[i][0] == 0) {
ecdh_c[i][0] = 1;
}
}
ecdh_c[R_EC_K163][0] = count / 1000;
for (i = R_EC_K233; i <= R_EC_K571; i++) {
ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
- if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
+ if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
ecdh_doit[i] = 0;
else {
- if (ecdh_c[i] == 0) { /* always false */
+ if (ecdh_c[i][0] == 0) {
ecdh_c[i][0] = 1;
}
}
ecdh_c[R_EC_B163][0] = count / 1000;
for (i = R_EC_B233; i <= R_EC_B571; i++) {
ecdh_c[i][0] = ecdh_c[i - 1][0] / 2;
- if ((ecdh_doit[i] <= 1) && (ecdh_c[i][0] == 0))
+ if (ecdh_doit[i] <= 1 && ecdh_c[i][0] == 0)
ecdh_doit[i] = 0;
else {
- if (ecdh_c[i] == 0) { /* always false */
+ if (ecdh_c[i][0] == 0) {
ecdh_c[i][0] = 1;
}
}
continue;
for (i = 0; i < loopargs_len; i++) {
st = RSA_sign(NID_md5_sha1, loopargs[i].buf, 36, loopargs[i].buf2,
- loopargs[i].siglen, loopargs[i].rsa_key[testnum]);
+ &loopargs[i].siglen, loopargs[i].rsa_key[testnum]);
if (st == 0)
break;
}
for (i = 0; i < loopargs_len; i++) {
st = RSA_verify(NID_md5_sha1, loopargs[i].buf, 36, loopargs[i].buf2,
- *(loopargs[i].siglen), loopargs[i].rsa_key[testnum]);
+ loopargs[i].siglen, loopargs[i].rsa_key[testnum]);
if (st <= 0)
break;
}
/* DSA_sign_setup(dsa_key[testnum],NULL); */
for (i = 0; i < loopargs_len; i++) {
st = DSA_sign(0, loopargs[i].buf, 20, loopargs[i].buf2,
- loopargs[i].siglen, loopargs[i].dsa_key[testnum]);
+ &loopargs[i].siglen, loopargs[i].dsa_key[testnum]);
if (st == 0)
break;
}
for (i = 0; i < loopargs_len; i++) {
st = DSA_verify(0, loopargs[i].buf, 20, loopargs[i].buf2,
- *(loopargs[i].siglen), loopargs[i].dsa_key[testnum]);
+ loopargs[i].siglen, loopargs[i].dsa_key[testnum]);
if (st <= 0)
break;
}
/* Perform ECDSA signature test */
EC_KEY_generate_key(loopargs[i].ecdsa[testnum]);
st = ECDSA_sign(0, loopargs[i].buf, 20, loopargs[i].buf2,
- loopargs[i].siglen, loopargs[i].ecdsa[testnum]);
+ &loopargs[i].siglen, loopargs[i].ecdsa[testnum]);
if (st == 0)
break;
}
/* Perform ECDSA verification test */
for (i = 0; i < loopargs_len; i++) {
st = ECDSA_verify(0, loopargs[i].buf, 20, loopargs[i].buf2,
- *(loopargs[i].siglen), loopargs[i].ecdsa[testnum]);
+ loopargs[i].siglen, loopargs[i].ecdsa[testnum]);
if (st != 1)
break;
}
}
}
}
-#endif
-#ifndef OPENSSL_NO_EC
if (RAND_status() != 1) {
RAND_seed(rnd_seed, sizeof rnd_seed);
}
ecdsa_results[k][0], ecdsa_results[k][1],
1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1]);
}
-#endif
-#ifndef OPENSSL_NO_EC
testnum = 1;
for (k = 0; k < EC_NUM; k++) {
if (!ecdh_doit[k])
for (i = 0; i < loopargs_len; i++) {
OPENSSL_free(loopargs[i].buf_malloc);
OPENSSL_free(loopargs[i].buf2_malloc);
- OPENSSL_free(loopargs[i].siglen);
- }
+
#ifndef OPENSSL_NO_RSA
- for (i = 0; i < loopargs_len; i++) {
for (k = 0; k < RSA_NUM; k++)
RSA_free(loopargs[i].rsa_key[k]);
- }
#endif
#ifndef OPENSSL_NO_DSA
- for (i = 0; i < loopargs_len; i++) {
for (k = 0; k < DSA_NUM; k++)
DSA_free(loopargs[i].dsa_key[k]);
- }
#endif
-
#ifndef OPENSSL_NO_EC
- for (i = 0; i < loopargs_len; i++) {
for (k = 0; k < EC_NUM; k++) {
EC_KEY_free(loopargs[i].ecdsa[k]);
EC_KEY_free(loopargs[i].ecdh_a[k]);
}
OPENSSL_free(loopargs[i].secret_a);
OPENSSL_free(loopargs[i].secret_b);
- }
#endif
+ }
+
if (async_jobs > 0) {
for (i = 0; i < loopargs_len; i++)
ASYNC_WAIT_CTX_free(loopargs[i].wait_ctx);