apps/speed.c: add multi-block benchmark.
(cherry picked from commit 375a64e3496c7576a7dbcfdf9a549bf2693506e8)
This commit is contained in:
parent
ff5b11f547
commit
9c1cf94f34
124
apps/speed.c
124
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 */
|
#endif /* OPENSSL_NO_ECDH */
|
||||||
|
|
||||||
|
static void multiblock_speed(const EVP_CIPHER *evp_cipher);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
@ -629,6 +630,7 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef NO_FORK
|
#ifndef NO_FORK
|
||||||
int multi=0;
|
int multi=0;
|
||||||
#endif
|
#endif
|
||||||
|
int multiblock=0;
|
||||||
|
|
||||||
#ifndef TIMES
|
#ifndef TIMES
|
||||||
usertime=-1;
|
usertime=-1;
|
||||||
@ -777,6 +779,11 @@ int MAIN(int argc, char **argv)
|
|||||||
j--; /* Otherwise, -mr gets confused with
|
j--; /* Otherwise, -mr gets confused with
|
||||||
an algorithm. */
|
an algorithm. */
|
||||||
}
|
}
|
||||||
|
else if (argc > 0 && !strcmp(*argv,"-mb"))
|
||||||
|
{
|
||||||
|
multiblock=1;
|
||||||
|
j--;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#ifndef OPENSSL_NO_MD2
|
#ifndef OPENSSL_NO_MD2
|
||||||
if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
|
if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
|
||||||
@ -1949,6 +1956,19 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if (doit[D_EVP])
|
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; j<SIZE_NUM; j++)
|
for (j=0; j<SIZE_NUM; j++)
|
||||||
{
|
{
|
||||||
if (evp_cipher)
|
if (evp_cipher)
|
||||||
@ -2839,4 +2859,108 @@ static int do_multi(int multi)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void multiblock_speed(const EVP_CIPHER *evp_cipher)
|
||||||
|
{
|
||||||
|
static int mblengths[]={8*1024,2*8*1024,4*8*1024,8*8*1024,8*16*1024};
|
||||||
|
int j,count,num=sizeof(lengths)/sizeof(lengths[0]);
|
||||||
|
const char *alg_name;
|
||||||
|
unsigned char *inp,*out,no_key[32],no_iv[16];
|
||||||
|
EVP_CIPHER_CTX ctx;
|
||||||
|
double d=0.0;
|
||||||
|
|
||||||
|
inp = OPENSSL_malloc(mblengths[num-1]);
|
||||||
|
out = OPENSSL_malloc(mblengths[num-1]+1024);
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_init(&ctx);
|
||||||
|
EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,no_key,no_iv);
|
||||||
|
EVP_CIPHER_CTX_ctrl(&ctx,EVP_CTRL_AEAD_SET_MAC_KEY,sizeof(no_key),no_key);
|
||||||
|
alg_name=OBJ_nid2ln(evp_cipher->nid);
|
||||||
|
|
||||||
|
for (j=0; j<num; j++)
|
||||||
|
{
|
||||||
|
print_message(alg_name,0,mblengths[j]);
|
||||||
|
Time_F(START);
|
||||||
|
for (count=0,run=1; run && count<0x7fffffff; count++)
|
||||||
|
{
|
||||||
|
unsigned char aad[13];
|
||||||
|
EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param = {NULL,aad,sizeof(aad),0};
|
||||||
|
size_t len = mblengths[j];
|
||||||
|
int packlen;
|
||||||
|
|
||||||
|
aad[8] = 23;
|
||||||
|
aad[9] = 3;
|
||||||
|
aad[10] = 2;
|
||||||
|
aad[11] = 0;
|
||||||
|
aad[12] = 0;
|
||||||
|
mb_param.out = NULL;
|
||||||
|
mb_param.inp = aad;
|
||||||
|
mb_param.len = len;
|
||||||
|
mb_param.interleave = 8;
|
||||||
|
|
||||||
|
packlen=EVP_CIPHER_CTX_ctrl(&ctx,
|
||||||
|
EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
|
||||||
|
sizeof(mb_param),&mb_param);
|
||||||
|
|
||||||
|
if (packlen>0)
|
||||||
|
{
|
||||||
|
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<num; j++)
|
||||||
|
fprintf(stdout,":%d",mblengths[j]);
|
||||||
|
fprintf(stdout,"\n");
|
||||||
|
fprintf(stdout,"+F:%d:%s",D_EVP,alg_name);
|
||||||
|
for (j=0; j<num; j++)
|
||||||
|
fprintf(stdout,":%.2f",results[D_EVP][j]);
|
||||||
|
fprintf(stdout,"\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
|
||||||
|
fprintf(stdout,"type ");
|
||||||
|
for (j=0; j<num; j++)
|
||||||
|
fprintf(stdout,"%7d bytes",mblengths[j]);
|
||||||
|
fprintf(stdout,"\n");
|
||||||
|
fprintf(stdout,"%-24s",alg_name);
|
||||||
|
|
||||||
|
for (j=0; j<num; j++)
|
||||||
|
{
|
||||||
|
if (results[D_EVP][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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user