⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 benchmark.cpp

📁 mysql-5.0.33源码包
💻 CPP
字号:
// benchmark.cpp// TaoCrypt benchmark#include <string.h>#include <stdio.h>#include "runtime.hpp"#include "des.hpp"#include "aes.hpp"#include "twofish.hpp"#include "blowfish.hpp"#include "arc4.hpp"#include "md5.hpp"#include "sha.hpp"#include "ripemd.hpp"#include "rsa.hpp"#include "dh.hpp"#include "dsa.hpp"using namespace TaoCrypt;void bench_aes(bool show);void bench_des();void bench_blowfish();void bench_twofish();void bench_arc4();void bench_md5();void bench_sha();void bench_ripemd();void bench_rsa();void bench_dh();void bench_dsa();double current_time();int main(int argc, char** argv){    bench_aes(false);    bench_aes(true);    bench_blowfish();    bench_twofish();    bench_arc4();    bench_des();        printf("\n");    bench_md5();    bench_sha();    bench_ripemd();    printf("\n");        bench_rsa();    bench_dh();    bench_dsa();    return 0;}const int megs = 5;  // how much to testconst byte key[] = {    0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,    0xfe,0xde,0xba,0x98,0x76,0x54,0x32,0x10,    0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67};const byte iv[] = {    0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,    0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,    0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x81    };byte plain [1024*1024];byte cipher[1024*1024];void bench_des(){    DES_EDE3_CBC_Encryption enc;    enc.SetKey(key, 16, iv);    double start = current_time();    for(int i = 0; i < megs; i++)        enc.Process(plain, cipher, sizeof(plain));    double total = current_time() - start;    double persec = 1 / total * megs;    printf("3DES     %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}void bench_aes(bool show){    AES_CBC_Encryption enc;    enc.SetKey(key, 16, iv);    double start = current_time();     for(int i = 0; i < megs; i++)        enc.Process(plain, cipher, sizeof(plain));    double total = current_time() - start;    double persec = 1 / total * megs;    if (show)        printf("AES      %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                                 persec);}void bench_twofish(){    Twofish_CBC_Encryption enc;    enc.SetKey(key, 16, iv);    double start = current_time();    for(int i = 0; i < megs; i++)        enc.Process(plain, cipher, sizeof(plain));    double total = current_time() - start;    double persec = 1 / total * megs;    printf("Twofish  %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                            persec);}void bench_blowfish(){    Blowfish_CBC_Encryption enc;    enc.SetKey(key, 16, iv);    double start = current_time();    for(int i = 0; i < megs; i++)        enc.Process(plain, cipher, sizeof(plain));    double total = current_time() - start;    double persec = 1 / total * megs;    printf("Blowfish %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}void bench_arc4(){    ARC4 enc;    enc.SetKey(key, 16);    double start = current_time();    for(int i = 0; i < megs; i++)        enc.Process(cipher, plain, sizeof(plain));    double total = current_time() - start;    double persec = 1 / total * megs;    printf("ARC4     %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}void bench_md5(){    MD5 hash;    byte digest[MD5::DIGEST_SIZE];    double start = current_time();        for(int i = 0; i < megs; i++)        hash.Update(plain, sizeof(plain));       hash.Final(digest);    double total = current_time() - start;    double persec = 1 / total * megs;    printf("MD5      %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}void bench_sha(){    SHA hash;    byte digest[SHA::DIGEST_SIZE];    double start = current_time();        for(int i = 0; i < megs; i++)        hash.Update(plain, sizeof(plain));       hash.Final(digest);    /*    for(int i = 0; i < megs; i++)        hash.AsmTransform(plain, 16384);    */    double total = current_time() - start;    double persec = 1 / total * megs;    printf("SHA      %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}void bench_ripemd(){    RIPEMD160 hash;    byte digest[RIPEMD160::DIGEST_SIZE];    double start = current_time();        for(int i = 0; i < megs; i++)        hash.Update(plain, sizeof(plain));       hash.Final(digest);    double total = current_time() - start;    double persec = 1 / total * megs;    printf("RIPEMD   %d megs took %5.3f seconds, %5.2f MB/s\n", megs, total,                                                             persec);}RandomNumberGenerator rng;void bench_rsa(){    const int times = 100;    Source source;    FileSource("./rsa1024.der", source);    if (source.size() == 0) {        printf("can't find ./rsa1024.der\n");        return;    }    RSA_PrivateKey priv(source);    RSAES_Encryptor enc(priv);    byte      message[] = "Everyone gets Friday off.";    byte      cipher[128];  // for 1024 bit    byte      plain[128];   // for 1024 bit    const int len = strlen((char*)message);        int i;        double start = current_time();    for (i = 0; i < times; i++)        enc.Encrypt(message, len, cipher, rng);    double total = current_time() - start;    double each  = total / times;   // per second    double milliEach = each * 1000; // milliseconds    printf("RSA 1024 encryption took %6.2f milliseconds, avg over %d"            " iterations\n", milliEach, times);    RSAES_Decryptor dec(priv);    start = current_time();    for (i = 0; i < times; i++)        dec.Decrypt(cipher, 128, plain, rng);    total = current_time() - start;    each  = total / times;   // per second    milliEach = each * 1000; // milliseconds    printf("RSA 1024 decryption took %6.2f milliseconds, avg over %d"            " iterations\n", milliEach, times);}void bench_dh(){    const int times = 100;    Source source;    FileSource("./dh1024.der", source);    if (source.size() == 0) {        printf("can't find ./dh1024.der\n");        return;    }    DH dh(source);    byte      pub[128];    // for 1024 bit    byte      priv[128];   // for 1024 bit        int i;        double start = current_time();    for (i = 0; i < times; i++)        dh.GenerateKeyPair(rng, priv, pub);    double total = current_time() - start;    double each  = total / times;   // per second    double milliEach = each * 1000; // milliseconds    printf("DH  1024 key generation  %6.2f milliseconds, avg over %d"            " iterations\n", milliEach, times);    DH dh2(dh);     byte      pub2[128];    // for 1024 bit    byte      priv2[128];   // for 1024 bit    dh2.GenerateKeyPair(rng, priv2, pub2);    unsigned char key[256];    start = current_time();    for (i = 0; i < times; i++)        dh.Agree(key, priv, pub2);    total = current_time() - start;    each  = total / times;      // per second    milliEach = each * 1000;   //  in milliseconds    printf("DH  1024 key agreement   %6.2f milliseconds, avg over %d"           " iterations\n", milliEach, times);}void bench_dsa(){    const int times = 100;    Source source;    FileSource("./dsa1024.der", source);    if (source.size() == 0) {        printf("can't find ./dsa1024.der\n");        return;    }    DSA_PrivateKey key(source);    DSA_Signer signer(key);    SHA sha;    byte digest[SHA::DIGEST_SIZE];    byte signature[40];    const char msg[] = "this is the message";    sha.Update((byte*)msg, sizeof(msg));    sha.Final(digest);        int i;        double start = current_time();    for (i = 0; i < times; i++)        signer.Sign(digest, signature, rng);     double total = current_time() - start;    double each  = total / times;   // per second    double milliEach = each * 1000; // milliseconds    printf("DSA 1024 sign   took     %6.2f milliseconds, avg over %d"            " iterations\n", milliEach, times);    DSA_Verifier verifier(key);    start = current_time();    for (i = 0; i < times; i++)        verifier.Verify(digest, signature);     total = current_time() - start;    each  = total / times;      // per second    milliEach = each * 1000;   //  in milliseconds    printf("DSA 1024 verify took     %6.2f milliseconds, avg over %d"           " iterations\n", milliEach, times);}#ifdef _WIN32    #define WIN32_LEAN_AND_MEAN    #include <windows.h>    double current_time()    {        static bool          init(false);        static LARGE_INTEGER freq;            if (!init) {            QueryPerformanceFrequency(&freq);            init = true;        }        LARGE_INTEGER count;        QueryPerformanceCounter(&count);        return static_cast<double>(count.QuadPart) / freq.QuadPart;    }#else    #include <sys/time.h>    double current_time()    {        struct timeval tv;        gettimeofday(&tv, 0);        return static_cast<double>(tv.tv_sec)              + static_cast<double>(tv.tv_usec) / 1000000;    }#endif // _WIN32

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -