From: Andy Polyakov Date: Sat, 5 Jul 2014 21:53:55 +0000 (+0200) Subject: apps/speed.c: add multi-block benchmark. X-Git-Tag: master-post-reformat~606 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=375a64e3496c7576a7dbcfdf9a549bf2693506e8;ds=inline apps/speed.c: add multi-block benchmark. --- diff --git a/apps/speed.c b/apps/speed.c index b5b7d50b06..6201a84985 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -357,6 +357,7 @@ static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) } #endif /* OPENSSL_NO_ECDH */ +static void multiblock_speed(const EVP_CIPHER *evp_cipher); int MAIN(int, char **); @@ -641,6 +642,7 @@ int MAIN(int argc, char **argv) #ifndef NO_FORK int multi=0; #endif + int multiblock=0; #ifndef TIMES usertime=-1; @@ -791,6 +793,11 @@ int MAIN(int argc, char **argv) j--; /* Otherwise, -mr gets confused with an algorithm. */ } + else if (argc > 0 && !strcmp(*argv,"-mb")) + { + multiblock=1; + j--; + } else #ifndef OPENSSL_NO_MD2 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1; @@ -1993,6 +2000,19 @@ int MAIN(int argc, char **argv) if (doit[D_EVP]) { +#ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK + if (multiblock && evp_cipher) + { + if (!(EVP_CIPHER_flags(evp_cipher)&EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) + { + fprintf(stderr,"%s is not multi-block capable\n",OBJ_nid2ln(evp_cipher->nid)); + goto end; + } + multiblock_speed(evp_cipher); + mret=0; + goto end; + } +#endif for (j=0; jnid); + + for (j=0; j0) + { + mb_param.out = out; + mb_param.inp = inp; + mb_param.len = len; + EVP_CIPHER_CTX_ctrl(&ctx, + EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT, + sizeof(mb_param),&mb_param); + } + else + { + int pad; + + RAND_bytes(out,16); + len+=16; + aad[11] = len>>8; + aad[12] = len; + pad=EVP_CIPHER_CTX_ctrl(&ctx, + EVP_CTRL_AEAD_TLS1_AAD,13,aad); + EVP_Cipher(&ctx,out,inp,len+pad); + } + } + d=Time_F(STOP); + BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n" + : "%d %s's in %.2fs\n",count,"evp",d); + results[D_EVP][j]=((double)count)/d*mblengths[j]; + } + + if (mr) + { + fprintf(stdout,"+H"); + for (j=0; j 10000) + fprintf(stdout," %11.2fk",results[D_EVP][j]/1e3); + else + fprintf(stdout," %11.2f ",results[D_EVP][j]); + } + fprintf(stdout,"\n"); + } + + OPENSSL_free(inp); + OPENSSL_free(out); + } #endif