[openssl-users] AES-GCM processing time

Amir Reda amiralex32 at gmail.com
Tue Apr 7 12:49:34 UTC 2015


dear all
i am using Authenticated Encryption AES-GCM. i am trying to calculate the
processing time for encrypting a data message of size 500 byte

    clock_t startEncryption, endEncryption;
    double msecs1;

    startEncryption = clock();

    unsigned char plaintext[500] =
{'f','a','3','1','3','2','2','5','f','8','8','4','0','6','e','5','a','5','5','9','0','9','c','5','a','f','f','5','2','6','9','a','8','6','a','7','a','9','5','3','1','5','3','4','f','7','d','a','2','e','4','c','3','0','3','d','8','a','3','1','8','a','7','2','1','c','3','c','0','c','9','5','9','5','6','8','0','9','5','3','2','f','c','f','0','e','2','4','4','9','a','6','b','5','2','5','b','1','6','a','e','d','f','5','a','a','0','d','e','6','5','7','b','a','6','3','7','b','3','9','f','a','3','1','3','2','2','5','f','8','8','4','0','6','e','5','a','5','5','9','0','9','c','5','a','f','f','5','2','6','9','a','8','6','a','7','a','9','5','3','1','5','3','4','f','7','d','a','2','e','4','c','3','0','3','d','8','a','3','1','8','a','7','2','1','c','3','c','0','c','9','5','9','5','6','8','0','9','5','3','2','f','c','f','0','e','2','4','4','9','a','6','b','5','2','5','b','1','6','a','e','d','f','5','a','a','0','d','e','6','5','7','b','a','6','3','7','b','3','9',

'f','a','3','1','3','2','2','5','f','8','8','4','0','6','e','5','a','5','5','9','0','9','c','5','a','f','f','5','2','6','9','a','8','6','a','7','a','9','5','3','1','5','3','4','f','7','d','a','2','e','4','c','3','0','3','d','8','a','3','1','8','a','7','2','1','c','3','c','0','c','9','5','9','5','6','8','0','9','5','3','2','f','c','f','0','e','2','4','4','9','a','6','b','5','2','5','b','1','6','a','e','d','f','5','a','a','0','d','e','6','5','7','b','a','6','3','7','b','3','9'

,'f','a','3','1','3','2','2','5','f','8','8','4','0','6','e','5','a','5','5','9','0','9','c','5','a','f','f','5','2','6','9','a','8','6','a','7','a','9','5','3','1','5','3','4','f','7','d','a','2','e','4','c','3','0','3','d','8','a','3','1','8','a','7','2','1','c','3','c','0','c','9','5','9','5','6','8','0','9','5','3','2','f','c','f','0','e','2','4','4','9','a','6','b','5','2','5','b','1','6','a','e','d','f','5','a','a','0','d','e','6','5','7','b','a','6','3','7','b','3','9'

,'f','a','3','1','3','2','2','5','f','8','8','4','0','6','e','5','a','5','5','9'};
    unsigned char key [32] =
{'f','e','f','f','e',9,9,2,8,6,6,5,7,3,1,'c',6,'d',6,'a',8,'f',9,4,6,7,3,0,8,3,0,8};
    //unsigned char key [48] = "000000000000000000000000";

    unsigned char aad[8] = {'f','e','e','d','f','a','c','e'};
    //unsigned char iv[24] =
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    unsigned char iv[16] = {9,3,1,3,2,2,5,'d','f',8,8,4,0,6,'e',5};
    unsigned char cipher[500];
    unsigned char tag[16];

    unsigned char extractedpalintext[500];

    int encryptionsize = 0;
    encryptionsize =
servertest.AuthenticationEncryption(plaintext,500,aad,8,key,32,iv,16,cipher,tag);
servertest.AuthenticationDecryption(cipher,500,aad,8,tag,key,32,iv,16,extractedpalintext);

servertest.AuthenticationDecryption(cipher,120,fakeaad,40,tag,key,32,iv,120,extractedpalintext);

    endEncryption = clock();
    msecs1 = ((double) (endEncryption - startEncryption)) * 1000000.0 /
CLOCKS_PER_SEC;
    cout<<"time for encryption "<< " start "<<startEncryption<<" msec "<<"
end time "<<endEncryption<<" msec"<<endl;
    cout<<" encryption start time "<<msecs1<<"msec"<<endl;


the time at start and end time

time for encryption  start 4870000 msec  end time 4870000 msec

this made the processing time is 0 msec


functions for encryption and decryption

int
Server::AuthenticationEncryption(unsigned char plaintext[], int ptextsize,
        unsigned char aad[], int aadlen, unsigned char key[],int keysize,
        unsigned char iv[],int ivsize, unsigned char ciphertext[], unsigned
char tag[])
{
    int len;
    int ciphertext_len;
    EVP_CIPHER_CTX *ctx;
    ctx = EVP_CIPHER_CTX_new();

    //Initialize the encryption operation
     if (1 == EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL))
     {
         cout<<"success inttialize"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //Set IV length should be more than 12 byte or 96 bit normally 16
     if (1 == EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivsize,
NULL))
     {
         cout<<"success adding iv"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //Initialize key and IV
     if (1 == EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv))
     {
         cout<<"success initialize key and iv "<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //add AAD data
     if (1 == EVP_EncryptUpdate(ctx, NULL, &len, aad, aadlen))
     {
         cout<<"success adding AAD"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //encrypt the message
     if (1 == EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext,
ptextsize))
     {
         cout<<"success encryption"<<endl;
         ciphertext_len = len;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //finalize the encryption
     if (1 == EVP_EncryptFinal_ex(ctx, ciphertext + len, &len))
     {
         cout<<"success final encryption"<<endl;
         ciphertext_len += len;
         cout<<"cipher length is "<<ciphertext_len<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
     //get the tag
     if (1 == EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, tag))
        {
         cout<<"success creating tag"<<endl;
        }
     else
     {
         cout<<"something wrong "<<endl;
     }
     EVP_CIPHER_CTX_free(ctx);
    return ciphertext_len;
}

int
Server::AuthenticationDecryption(unsigned char ciphertext[], int ctextsize,
        unsigned char aad[], int aadlen, unsigned char tag[],
        unsigned char key[], int keysize, unsigned char iv[], int ivsize,
        unsigned char plaintext[])
{
    int len;
    int plaintext_len;

    EVP_CIPHER_CTX *ctx;
    ctx = EVP_CIPHER_CTX_new();

    //Initialize the encryption operation
    if (1 == EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL))
     {
         cout<<"success initialize"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //Set IV length should be more than 12 byte or 96 bit normally 16
    if (1 == EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivsize, NULL))
     {
         cout<<"success adding iv"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //Initialize key and IV
    if (1 == EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv))
     {
         cout<<"success adding key and iv"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //add AAD data
    if (1 == EVP_DecryptUpdate(ctx, NULL, &len, aad, aadlen))
     {
         cout<<"success adding AAD"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //Decrypt the message
    if (1 == EVP_DecryptUpdate(ctx, plaintext, &len , ciphertext,
ctextsize))
     {
         cout<<"success decryption"<<endl;
         plaintext_len = len;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //add the tag
    if (1 == EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, 16, tag))
     {
         cout<<"success adding tag"<<endl;
     }
     else
     {
         cout<<"something wrong"<<endl;
     }
    //finalize the Decryption
    int ret = -1;
    ret = EVP_DecryptFinal_ex(ctx, plaintext + len, &len);

    cout<<" ret value is "<<ret<<endl;
    EVP_CIPHER_CTX_free(ctx);

    if (ret > 0)
     {
         cout<<"success final decryption"<<endl;
         plaintext_len += len;
         cout<<"palin text is "<<plaintext_len<<endl;
         return plaintext_len;

     }
     else
     {
         cout<<"decrypt fail"<<endl;
         return -1;
     }
    return ret;

}

*the processing time is 0 and this is not reasonable  *thanks for help

-- 
Warmest regards and best wishes for a good health,*urs sincerely *
*mero*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20150407/50c01c0d/attachment-0001.html>


More information about the openssl-users mailing list