This repository has been archived on 2025-02-12. You can view files and clone it, but cannot push or open issues or pull requests.
NeoStats-NeoIRCd/tools/encspeed.c

239 lines
6 KiB
C
Raw Permalink Normal View History

2002-08-13 14:34:25 +00:00
/*
* encspeed.c - originally written by einride
* - modified for ircd-hybrid-7 by davidt
*
2002-08-13 14:45:13 +00:00
* $Id: encspeed.c,v 1.2 2002/08/13 14:45:13 fishwaldo Exp $
2002-08-13 14:34:25 +00:00
*/
#include "../include/setup.h"
#ifndef HAVE_LIBCRYPTO
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("No OpenSSL support.\n");
return 0;
}
#else
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
#define CIPHER_BF128 0
#define CIPHER_BF256 1
#define CIPHER_3DES168 2
#define CIPHER_DES56 3
#define CIPHER_CAST128 4
#define CIPHER_IDEA128 5
#define CIPHER_RC58128 6
#define CIPHER_RC512128 7
#define CIPHER_RC516128 8
#define NUM_CIPHERS 9
#define MAXKEYSIZE 64
#define BLOCKSIZE 1000
#define BLOCKCOUNT 20000
#define TICKINT 1000
struct timeval tvstart, tvstop;
static void starttimer(void) {
gettimeofday(&tvstart, 0);
}
static double stoptimer(void) {
gettimeofday(&tvstop, 0);
return (tvstop.tv_sec - tvstart.tv_sec) + ( (tvstop.tv_usec - tvstart.tv_usec) / 1000000.0);
}
#define DATASIZE ( (double) (BLOCKSIZE * BLOCKCOUNT) / (1024.0*1024.0))
int main(int argc, char * argv[]) {
int i, n, skipped = 0;
int bs = BLOCKSIZE;
char *cipherstr = NULL;
char key[MAXKEYSIZE];
char iv[MAXKEYSIZE];
char plaintext[BLOCKSIZE];
char ciphertext[BLOCKSIZE];
double elapsed;
EVP_CIPHER_CTX ctx;
EVP_CIPHER *cipher;
printf("Encryption speed test\n\n");
for(n = 0; n < NUM_CIPHERS; n++)
{
/* setup cipher */
if (skipped)
{
printf("%20.20s encryption: not supported by OpenSSL\n", cipherstr);
printf("%20.20s decryption: not supported by OpenSSL\n", cipherstr);
}
skipped = 1;
switch(n)
{
case CIPHER_BF256:
cipherstr = "Blowfish 256-bit";
#ifdef HAVE_EVP_BF_CFB
cipher = EVP_bf_cfb();
*(unsigned int *)(&cipher->flags) |= EVP_CIPH_VARIABLE_LENGTH;
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 32);
#else
continue;
#endif
break;
case CIPHER_BF128:
cipherstr = "Blowfish 128-bit";
#ifdef HAVE_EVP_BF_CFB
cipher = EVP_bf_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 16);
#else
continue;
#endif
break;
case CIPHER_CAST128:
cipherstr = "CAST 128-bit";
#ifdef HAVE_EVP_CAST5_CFB
cipher = EVP_cast5_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 16);
#else
continue;
#endif
break;
case CIPHER_IDEA128:
cipherstr = "IDEA 128-bit";
#ifdef HAVE_EVP_IDEA_CFB
cipher = EVP_idea_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 16);
#else
continue;
#endif
break;
case CIPHER_DES56:
cipherstr = "DES 56-bit";
#ifdef HAVE_EVP_DES_CFB
cipher = EVP_des_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 8);
#else
continue;
#endif
break;
case CIPHER_3DES168:
cipherstr = "3DES 168-bit";
#ifdef HAVE_EVP_DES_EDE3_CFB
cipher = EVP_des_ede3_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 24);
#else
continue;
#endif
break;
case CIPHER_RC58128:
cipherstr = "RC5 8 round 128-bit";
#ifdef HAVE_EVP_RC5_32_12_16_CFB
cipher = EVP_rc5_32_12_16_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 8);
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC5_ROUNDS, 8, NULL);
#else
continue;
#endif
break;
case CIPHER_RC512128:
cipherstr = "RC5 12 round 128-bit";
#ifdef HAVE_EVP_RC5_32_12_16_CFB
cipher = EVP_rc5_32_12_16_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 12);
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC5_ROUNDS, 12, NULL);
#else
continue;
#endif
break;
case CIPHER_RC516128:
cipherstr = "RC5 16 round 128-bit";
#ifdef HAVE_EVP_RC5_32_12_16_CFB
cipher = EVP_rc5_32_12_16_cfb();
EVP_EncryptInit(&ctx, cipher, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&ctx, 16);
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_SET_RC5_ROUNDS, 16, NULL);
#else
continue;
#endif
break;
default:
exit(1);
}
skipped = 0;
RAND_pseudo_bytes((unsigned char *)key, MAXKEYSIZE);
RAND_pseudo_bytes((unsigned char *)iv, MAXKEYSIZE);
RAND_pseudo_bytes((unsigned char *)plaintext, BLOCKSIZE);
RAND_pseudo_bytes((unsigned char *)ciphertext, BLOCKSIZE);
EVP_EncryptInit(&ctx, NULL, (unsigned char *)key, (unsigned char *)iv);
printf("%20.20s encryption: ", cipherstr);
fflush(stdout);
starttimer();
bs = BLOCKSIZE;
for (i=1;i<=BLOCKCOUNT;i++) {
if (!(i % TICKINT)) {
printf(".");
fflush(stdout);
}
EVP_EncryptUpdate(&ctx, (unsigned char *)ciphertext, &bs,
(unsigned char *)plaintext, BLOCKSIZE);
bs = BLOCKSIZE;
}
EVP_EncryptFinal(&ctx, (unsigned char *)ciphertext, &bs);
elapsed=stoptimer();
printf(" done, %f MB/sec\n", DATASIZE / elapsed);
EVP_DecryptInit(&ctx, NULL, (unsigned char *)key, (unsigned char *)iv);
printf("%20.20s decryption: ", cipherstr);
fflush(stdout);
starttimer();
bs = BLOCKSIZE;
for (i=1;i<=BLOCKCOUNT;i++) {
if (!(i % TICKINT)) {
printf(".");
fflush(stdout);
}
EVP_DecryptUpdate(&ctx, (unsigned char *)ciphertext, &bs,
(unsigned char *)plaintext, BLOCKSIZE);
bs = BLOCKSIZE;
}
EVP_DecryptFinal(&ctx, (unsigned char *)ciphertext, &bs);
elapsed=stoptimer();
printf(" done, %f MB/sec\n", DATASIZE / elapsed);
}
if (skipped)
{
printf("%20.20s encryption: not supported by OpenSSL\n", cipherstr);
printf("%20.20s decryption: not supported by OpenSSL\n", cipherstr);
}
return(0);
}
#endif