예제 #1
0
void bench_rabbit(void)
{
    Rabbit  enc;
    double start, total, persec;
    int    i;

    RabbitSetKey(&enc, key, iv);
    start = current_time();

    for(i = 0; i < megs; i++)
        RabbitProcess(&enc, cipher, plain, sizeof(plain));

    total = current_time() - start;
    persec = 1 / total * megs;

    printf("RABBIT   %d megs took %5.3f seconds, %6.2f MB/s\n", megs, total,
           persec);
}
예제 #2
0
void bench_rabbit(void)
{
    Rabbit  enc;
    double start, total, persec;
    int    i;
    
    RabbitSetKey(&enc, key, iv);
    start = current_time(1);

    for(i = 0; i < numBlocks; i++)
        RabbitProcess(&enc, cipher, plain, sizeof(plain));

    total = current_time(0) - start;
    persec = 1 / total * numBlocks;
#ifdef BENCH_EMBEDDED
    /* since using kB, convert to MB/s */
    persec = persec / 1024;
#endif

    printf("RABBIT   %d %s took %5.3f seconds, %7.3f MB/s\n", numBlocks,
                                              blockType, total, persec);
}
예제 #3
0
파일: keys.c 프로젝트: agoragames/cyassl
static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs,
                   byte side)
{
#ifdef BUILD_ARC4
    word32 sz = specs->key_size;
    if (specs->bulk_cipher_algorithm == rc4) {
        if (side == CLIENT_END) {
            Arc4SetKey(&enc->arc4, keys->client_write_key, sz);
            Arc4SetKey(&dec->arc4, keys->server_write_key, sz);
        }
        else {
            Arc4SetKey(&enc->arc4, keys->server_write_key, sz);
            Arc4SetKey(&dec->arc4, keys->client_write_key, sz);
        }
    }
#endif
    
#ifdef BUILD_HC128
    if (specs->bulk_cipher_algorithm == hc128) {
        if (side == CLIENT_END) {
            Hc128_SetKey(&enc->hc128, keys->client_write_key,
                                          keys->client_write_IV);
            Hc128_SetKey(&dec->hc128, keys->server_write_key,
                                          keys->server_write_IV);
        }
        else {
            Hc128_SetKey(&enc->hc128, keys->server_write_key,
                                         keys->server_write_IV);
            Hc128_SetKey(&dec->hc128, keys->client_write_key,
                                         keys->client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_RABBIT
    if (specs->bulk_cipher_algorithm == rabbit) {
        if (side == CLIENT_END) {
            RabbitSetKey(&enc->rabbit, keys->client_write_key,
                                           keys->client_write_IV);
            RabbitSetKey(&dec->rabbit, keys->server_write_key,
                                           keys->server_write_IV);
        }
        else {
            RabbitSetKey(&enc->rabbit, keys->server_write_key,
                                           keys->server_write_IV);
            RabbitSetKey(&dec->rabbit, keys->client_write_key,
                                           keys->client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_DES3
    if (specs->bulk_cipher_algorithm == triple_des) {
        if (side == CLIENT_END) {
            Des3_SetKey(&enc->des3, keys->client_write_key,
                        keys->client_write_IV, DES_ENCRYPTION);
            Des3_SetKey(&dec->des3, keys->server_write_key,
                        keys->server_write_IV, DES_DECRYPTION);
        }
        else {
            Des3_SetKey(&enc->des3, keys->server_write_key,
                        keys->server_write_IV, DES_ENCRYPTION);
            Des3_SetKey(&dec->des3, keys->client_write_key,
                keys->client_write_IV, DES_DECRYPTION);
        }
    }
#endif

#ifdef BUILD_AES
    if (specs->bulk_cipher_algorithm == aes) {
        if (side == CLIENT_END) {
            AesSetKey(&enc->aes, keys->client_write_key,
                      specs->key_size, keys->client_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(&dec->aes, keys->server_write_key,
                      specs->key_size, keys->server_write_IV,
                      AES_DECRYPTION);
        }
        else {
            AesSetKey(&enc->aes, keys->server_write_key,
                      specs->key_size, keys->server_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(&dec->aes, keys->client_write_key,
                      specs->key_size, keys->client_write_IV,
                      AES_DECRYPTION);
        }
    }
#endif

    keys->sequence_number      = 0;
    keys->peer_sequence_number = 0;
    keys->encryptionOn         = 0;

    return 0;
}
예제 #4
0
파일: test.c 프로젝트: GreenLunar/smaFS
int rabbit_test()
{
    byte cipher[16];
    byte plain[16];

    const char* keys[] = 
    {           
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
        "\xAC\xC3\x51\xDC\xF1\x62\xFC\x3B\xFE\x36\x3D\x2E\x29\x13\x28\x91"
    };

    const char* ivs[] =
    {
        "\x00\x00\x00\x00\x00\x00\x00\x00",
        "\x59\x7E\x26\xC1\x75\xF5\x73\xC3",
        0
    };


    testVector a, b, c;
    testVector test_rabbit[3];

    int times = sizeof(test_rabbit) / sizeof(testVector), i;

    a.input  = "\x00\x00\x00\x00\x00\x00\x00\x00";
    a.output = "\xED\xB7\x05\x67\x37\x5D\xCD\x7C";
    a.inLen  = strlen(a.input);
    a.outLen = strlen(a.output);

    b.input  = "\x00\x00\x00\x00\x00\x00\x00\x00";
    b.output = "\x6D\x7D\x01\x22\x92\xCC\xDC\xE0";
    b.inLen  = strlen(b.input);
    b.outLen = strlen(b.output);

    c.input  = "\x00\x00\x00\x00\x00\x00\x00\x00";
    c.output = "\x9C\x51\xE2\x87\x84\xC3\x7F\xE9";
    c.inLen  = strlen(c.input);
    c.outLen = strlen(c.output);

    test_rabbit[0] = a;
    test_rabbit[1] = b;
    test_rabbit[2] = c;

    for (i = 0; i < times; ++i) {
        Rabbit enc;
        Rabbit dec;

        RabbitSetKey(&enc, (byte*)keys[i], (byte*)ivs[i]);
        RabbitSetKey(&dec, (byte*)keys[i], (byte*)ivs[i]);

        RabbitProcess(&enc, cipher, (byte*)test_rabbit[i].input,
                    (word32)test_rabbit[i].outLen);
        RabbitProcess(&dec, plain,  cipher, (word32)test_rabbit[i].outLen);

        if (memcmp(plain, test_rabbit[i].input, test_rabbit[i].outLen))
            return -130 - i;

        if (memcmp(cipher, test_rabbit[i].output, test_rabbit[i].outLen))
            return -130 - 5 - i;
    }

    return 0;
}
예제 #5
0
파일: rabbit_test.c 프로젝트: yangk/Mico
/*********************  Defination of rabbit_test() ***************************/
int rabbit_test(void)
{
    byte cipher[16];
    byte plain[16];

    const char* keys[] = 
    {    /* each keys[i] must be 128 bits��16 bytes��*/     
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
        "\xAC\xC3\x51\xDC\xF1\x62\xFC\x3B\xFE\x36\x3D\x2E\x29\x13\x28\x91",
    };

    const char* ivs[] =
    {   /* each iv[i] must be 64 bits��8 bytes��*/     
        "\x00\x00\x00\x00\x00\x00\x00\x00",
        "\x59\x7E\x26\xC1\x75\xF5\x73\xC3",       
    };

    testVector a, b, c;
    testVector test_rabbit[3];

    int times = sizeof(test_rabbit) / sizeof(testVector);

    a.input  = "\x00\x00\x00\x00\x00\x00\x00\x00";
    a.output = "\xED\xB7\x05\x67\x37\x5D\xCD\x7C";
    a.inLen  = 8;/* must be the right number of bytes of input*/
    a.outLen = 8;/* must be the right number of bytes of output*/

    b.input  = "\x00\x00\x00\x00\x00\x00\x00\x00\x00";
    b.output = "\x6D\x7D\x01\x22\x92\xCC\xDC\xE0\xE2";
    b.inLen  = 9;
    b.outLen = 9;

    c.input  = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
    c.output = "\x04\xCE\xCA\x7A\x1A\x86\x6E\x77\xFC\xCA";
    c.inLen  = 10;
    c.outLen = 10;

    test_rabbit[0] = a;
    test_rabbit[1] = b;
    test_rabbit[2] = c;

    for (int i = 0; i < times; ++i) 
    {
        Rabbit enc;
        Rabbit dec;
        byte*  iv;

        /* align keys/ivs in plain/cipher buffers */
        memcpy(plain,  keys[i],16);
        
        /* get 64 bits iv */
        if (ivs[i]) {
            memcpy(cipher, ivs[i],8);
            iv = cipher;
        } else
            iv = NULL;
        
        RabbitSetKey(&enc, plain, iv);
        RabbitSetKey(&dec, plain, iv);
        
        
        /* align input */
        memcpy(plain, test_rabbit[i].input, test_rabbit[i].outLen);
        
        /* Rabbit Encryption process */
        RabbitProcess(&enc, cipher, plain,  (word32)test_rabbit[i].outLen);
        
        /*Print the cipher text */
        printf("The %d's Cipher Text is��",i+1);
        for(int j=0;j<test_rabbit[i].outLen;j++)
        {
            printf("-%x",cipher[j]);
         }
        printf("\r\n");
        printf("\r\n");
        
        /* Rabbit Decryption process */

        RabbitProcess(&dec, plain,  cipher, (word32)test_rabbit[i].outLen);
        
        /*Print the plain text */
        printf("The %d's Plain  Text is��",i+1);
        for(int j=0;j<test_rabbit[i].outLen;j++)
        {
            printf("-%x",plain[j]);
         }
         printf("\r\n");    
         printf("\r\n");
 
         /* Compare plain text��generated from decryption, with test_rabbit[i].input defined */  
         if (memcmp(plain, test_rabbit[i].input, test_rabbit[i].outLen))
           return  i+1;

         /* Compare cipher text, generated from encryption, with vtest_rabbit[i].output predefined */           
         if (memcmp(cipher, test_rabbit[i].output, test_rabbit[i].outLen))
           return  -(i+1);
    }

    return 0;
}
예제 #6
0
파일: keys.c 프로젝트: GreenLunar/smaFS
static int SetKeys(SSL* ssl)
{
#ifdef BUILD_ARC4
    word32 sz = ssl->specs.key_size;
    if (ssl->specs.bulk_cipher_algorithm == rc4) {
        if (ssl->options.side == CLIENT_END) {
            Arc4SetKey(&ssl->encrypt.arc4, ssl->keys.client_write_key, sz);
            Arc4SetKey(&ssl->decrypt.arc4, ssl->keys.server_write_key, sz);
        }
        else {
            Arc4SetKey(&ssl->encrypt.arc4, ssl->keys.server_write_key, sz);
            Arc4SetKey(&ssl->decrypt.arc4, ssl->keys.client_write_key, sz);
        }
    }
#endif
    
#ifdef BUILD_HC128
    if (ssl->specs.bulk_cipher_algorithm == hc128) {
        if (ssl->options.side == CLIENT_END) {
            Hc128_SetKey(&ssl->encrypt.hc128, ssl->keys.client_write_key,
                                              ssl->keys.client_write_IV);
            Hc128_SetKey(&ssl->decrypt.hc128, ssl->keys.server_write_key,
                                              ssl->keys.server_write_IV);
        }
        else {
            Hc128_SetKey(&ssl->encrypt.hc128, ssl->keys.server_write_key,
                                              ssl->keys.server_write_IV);
            Hc128_SetKey(&ssl->decrypt.hc128, ssl->keys.client_write_key,
                                              ssl->keys.client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_RABBIT
    if (ssl->specs.bulk_cipher_algorithm == rabbit) {
        if (ssl->options.side == CLIENT_END) {
            RabbitSetKey(&ssl->encrypt.rabbit, ssl->keys.client_write_key,
                                               ssl->keys.client_write_IV);
            RabbitSetKey(&ssl->decrypt.rabbit, ssl->keys.server_write_key,
                                               ssl->keys.server_write_IV);
        }
        else {
            RabbitSetKey(&ssl->encrypt.rabbit, ssl->keys.server_write_key,
                                               ssl->keys.server_write_IV);
            RabbitSetKey(&ssl->decrypt.rabbit, ssl->keys.client_write_key,
                                               ssl->keys.client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_DES3
    if (ssl->specs.bulk_cipher_algorithm == triple_des) {
        if (ssl->options.side == CLIENT_END) {
            Des3_SetKey(&ssl->encrypt.des3, ssl->keys.client_write_key,
                        ssl->keys.client_write_IV, DES_ENCRYPTION);
            Des3_SetKey(&ssl->decrypt.des3, ssl->keys.server_write_key,
                        ssl->keys.server_write_IV, DES_DECRYPTION);
        }
        else {
            Des3_SetKey(&ssl->encrypt.des3, ssl->keys.server_write_key,
                        ssl->keys.server_write_IV, DES_ENCRYPTION);
            Des3_SetKey(&ssl->decrypt.des3, ssl->keys.client_write_key,
                ssl->keys.client_write_IV, DES_DECRYPTION);
        }
    }
#endif

#ifdef BUILD_AES
    if (ssl->specs.bulk_cipher_algorithm == aes) {
        if (ssl->options.side == CLIENT_END) {
            AesSetKey(&ssl->encrypt.aes, ssl->keys.client_write_key,
                      ssl->specs.key_size, ssl->keys.client_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(&ssl->decrypt.aes, ssl->keys.server_write_key,
                      ssl->specs.key_size, ssl->keys.server_write_IV,
                      AES_DECRYPTION);
        }
        else {
            AesSetKey(&ssl->encrypt.aes, ssl->keys.server_write_key,
                      ssl->specs.key_size, ssl->keys.server_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(&ssl->decrypt.aes, ssl->keys.client_write_key,
                      ssl->specs.key_size, ssl->keys.client_write_IV,
                      AES_DECRYPTION);
        }
    }
#endif

    ssl->keys.sequence_number      = 0;
    ssl->keys.peer_sequence_number = 0;
    ssl->keys.encryptionOn         = 0;

    return 0;
}
예제 #7
0
static int SetKeys(Ciphers* enc, Ciphers* dec, Keys* keys, CipherSpecs* specs,
                   byte side, void* heap, RNG* rng)
{
#ifdef BUILD_ARC4
    word32 sz = specs->key_size;
    if (specs->bulk_cipher_algorithm == rc4) {
        enc->arc4 = (Arc4*)XMALLOC(sizeof(Arc4), heap, DYNAMIC_TYPE_CIPHER);
        if (enc->arc4 == NULL)
            return MEMORY_E;
        dec->arc4 = (Arc4*)XMALLOC(sizeof(Arc4), heap, DYNAMIC_TYPE_CIPHER);
        if (dec->arc4 == NULL)
            return MEMORY_E;
        if (side == CLIENT_END) {
            Arc4SetKey(enc->arc4, keys->client_write_key, sz);
            Arc4SetKey(dec->arc4, keys->server_write_key, sz);
        }
        else {
            Arc4SetKey(enc->arc4, keys->server_write_key, sz);
            Arc4SetKey(dec->arc4, keys->client_write_key, sz);
        }
    }
#endif
    
#ifdef HAVE_HC128
    if (specs->bulk_cipher_algorithm == hc128) {
        enc->hc128 = (HC128*)XMALLOC(sizeof(HC128), heap, DYNAMIC_TYPE_CIPHER);
        if (enc->hc128 == NULL)
            return MEMORY_E;
        dec->hc128 = (HC128*)XMALLOC(sizeof(HC128), heap, DYNAMIC_TYPE_CIPHER);
        if (dec->hc128 == NULL)
            return MEMORY_E;
        if (side == CLIENT_END) {
            Hc128_SetKey(enc->hc128, keys->client_write_key,
                                          keys->client_write_IV);
            Hc128_SetKey(dec->hc128, keys->server_write_key,
                                          keys->server_write_IV);
        }
        else {
            Hc128_SetKey(enc->hc128, keys->server_write_key,
                                         keys->server_write_IV);
            Hc128_SetKey(dec->hc128, keys->client_write_key,
                                         keys->client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_RABBIT
    if (specs->bulk_cipher_algorithm == rabbit) {
        enc->rabbit = (Rabbit*)XMALLOC(sizeof(Rabbit),heap,DYNAMIC_TYPE_CIPHER);
        if (enc->rabbit == NULL)
            return MEMORY_E;
        dec->rabbit = (Rabbit*)XMALLOC(sizeof(Rabbit),heap,DYNAMIC_TYPE_CIPHER);
        if (dec->rabbit == NULL)
            return MEMORY_E;
        if (side == CLIENT_END) {
            RabbitSetKey(enc->rabbit, keys->client_write_key,
                                           keys->client_write_IV);
            RabbitSetKey(dec->rabbit, keys->server_write_key,
                                           keys->server_write_IV);
        }
        else {
            RabbitSetKey(enc->rabbit, keys->server_write_key,
                                           keys->server_write_IV);
            RabbitSetKey(dec->rabbit, keys->client_write_key,
                                           keys->client_write_IV);
        }
    }
#endif
    
#ifdef BUILD_DES3
    if (specs->bulk_cipher_algorithm == triple_des) {
        enc->des3 = (Des3*)XMALLOC(sizeof(Des3), heap, DYNAMIC_TYPE_CIPHER);
        if (enc->des3 == NULL)
            return MEMORY_E;
        dec->des3 = (Des3*)XMALLOC(sizeof(Des3), heap, DYNAMIC_TYPE_CIPHER);
        if (dec->des3 == NULL)
            return MEMORY_E;
        if (side == CLIENT_END) {
            Des3_SetKey(enc->des3, keys->client_write_key,
                        keys->client_write_IV, DES_ENCRYPTION);
            Des3_SetKey(dec->des3, keys->server_write_key,
                        keys->server_write_IV, DES_DECRYPTION);
        }
        else {
            Des3_SetKey(enc->des3, keys->server_write_key,
                        keys->server_write_IV, DES_ENCRYPTION);
            Des3_SetKey(dec->des3, keys->client_write_key,
                keys->client_write_IV, DES_DECRYPTION);
        }
    }
#endif

#ifdef BUILD_AES
    if (specs->bulk_cipher_algorithm == aes) {
        enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
        if (enc->aes == NULL)
            return MEMORY_E;
        dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
        if (dec->aes == NULL)
            return MEMORY_E;
        if (side == CLIENT_END) {
            AesSetKey(enc->aes, keys->client_write_key,
                      specs->key_size, keys->client_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(dec->aes, keys->server_write_key,
                      specs->key_size, keys->server_write_IV,
                      AES_DECRYPTION);
        }
        else {
            AesSetKey(enc->aes, keys->server_write_key,
                      specs->key_size, keys->server_write_IV,
                      AES_ENCRYPTION);
            AesSetKey(dec->aes, keys->client_write_key,
                      specs->key_size, keys->client_write_IV,
                      AES_DECRYPTION);
        }
    }
#endif

#ifdef BUILD_AESGCM
    if (specs->bulk_cipher_algorithm == aes_gcm) {
        byte iv[AES_GCM_EXP_IV_SZ];
        enc->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
        if (enc->aes == NULL)
            return MEMORY_E;
        dec->aes = (Aes*)XMALLOC(sizeof(Aes), heap, DYNAMIC_TYPE_CIPHER);
        if (dec->aes == NULL)
            return MEMORY_E;

        /* Initialize the AES-GCM explicit IV to a random number. */
        RNG_GenerateBlock(rng, iv, sizeof(iv));
        AesGcmSetExpIV(enc->aes, iv);

        if (side == CLIENT_END) {
            AesGcmSetKey(enc->aes, keys->client_write_key, specs->key_size,
                        keys->client_write_IV);
            AesGcmSetKey(dec->aes, keys->server_write_key, specs->key_size,
                        keys->server_write_IV);
        }
        else {
            AesGcmSetKey(enc->aes, keys->server_write_key, specs->key_size,
                        keys->server_write_IV);
            AesGcmSetKey(dec->aes, keys->client_write_key, specs->key_size,
                        keys->client_write_IV);
        }
    }
#endif

    keys->sequence_number      = 0;
    keys->peer_sequence_number = 0;
    keys->encryptionOn         = 0;
    (void)rng;

    return 0;
}