From 9edbd0767c9523f4b14c365016f27deb2a974d92 Mon Sep 17 00:00:00 2001 From: couturier <raphael.couturie@univ-fcomte.fr> Date: Thu, 4 Nov 2021 15:43:57 +0100 Subject: [PATCH 1/1] new --- OneRoundIoT/openssl/Makefile | 6 +- .../openssl/openssl_evp_chacha20_poly1305 | Bin 0 -> 23128 bytes .../openssl/openssl_evp_chacha20_poly1305.c | 4 +- .../openssl_evp_chacha20_poly1305_v2.c | 499 ++++++++++++++++++ 4 files changed, 506 insertions(+), 3 deletions(-) create mode 100755 OneRoundIoT/openssl/openssl_evp_chacha20_poly1305 create mode 100644 OneRoundIoT/openssl/openssl_evp_chacha20_poly1305_v2.c diff --git a/OneRoundIoT/openssl/Makefile b/OneRoundIoT/openssl/Makefile index 150f06a..59643a3 100644 --- a/OneRoundIoT/openssl/Makefile +++ b/OneRoundIoT/openssl/Makefile @@ -8,6 +8,7 @@ OBJ5 = pixmap_io.o openssl_evp_gcm.o OBJ6 = pixmap_io.o openssl_evp_hmac.o OBJ7 = pixmap_io.o openssl_evp_ocb.o OBJ8 = pixmap_io.o openssl_chacha20_poly1305.o +OBJ9 = pixmap_io.o openssl_chacha20_poly1305_v2.o openssl_evp: $(OBJ) $(C) -o $@ $^ $(CFLAGS) @@ -34,11 +35,14 @@ openssl_evp_ocb: $(OBJ7) openssl_evp_chacha20_poly1305: $(OBJ7) $(C) -o $@ $^ $(CFLAGS) +openssl_evp_chacha20_poly1305_v2: $(OBJ7) + $(C) -o $@ $^ $(CFLAGS) + %.o: %.c $(C) -c -o $@ $< -O3 clean: - rm -rf $(OBJ) openssl_evp openssl_evp_cmac openssl_evp_ccm openssl_evp_ocb + rm -rf $(OBJ) openssl_evp openssl_evp_cmac openssl_evp_ccm openssl_evp_ocb openssl_evp_chacha20_poly1305_v2 openssl_evp_chacha20_poly1305 diff --git a/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305 b/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305 new file mode 100755 index 0000000000000000000000000000000000000000..1a11e749ded26bd58e5d6e23639a5341d6080070 GIT binary patch literal 23128 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 literal 0 HcmV?d00001 diff --git a/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305.c b/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305.c index dbe0bc3..a0e7d8d 100755 --- a/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305.c +++ b/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305.c @@ -72,11 +72,11 @@ int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, //256 //avant ecb if(ctr) { - if(1 != CMAC_Init(ctx, key, 16, EVP_chacha20_poly1305(), NULL)) + if(1 != CMAC_Init(ctx, key, 32, EVP_chacha20_poly1305(), NULL)) handleErrors(); } else - if(1 != CMAC_Init(ctx, key, 16, EVP_chacha20_poly1305(), NULL)) + if(1 != CMAC_Init(ctx, key, 32, EVP_chacha20_poly1305(), NULL)) handleErrors(); size_t mactlen; unsigned char mact[16] = {0}; diff --git a/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305_v2.c b/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305_v2.c new file mode 100644 index 0000000..928ee2a --- /dev/null +++ b/OneRoundIoT/openssl/openssl_evp_chacha20_poly1305_v2.c @@ -0,0 +1,499 @@ +//gcc pixmap_io.c -c +//gcc openssl_evp.c pixmap_io.o -o openssl_evp -I /usr/include/openssl/ -lcrypto -O3 -std=c99 + + +#include <openssl/conf.h> +#include <openssl/evp.h> +#include <openssl/err.h> +#include <openssl/ssl.h> +#include <openssl/bio.h> +#include <string.h> +#include <sys/time.h> +#include "pixmap_io.h" + +typedef unsigned char uchar; + +int nb_test=1; +int ctr=0; + + + + + +double TimeStart() +{ + struct timeval tstart; + gettimeofday(&tstart,0); + return( (double) (tstart.tv_sec + tstart.tv_usec*1e-6) ); +} + +double TimeStop(double t) +{ + struct timeval tend; + + gettimeofday(&tend,0); + t = (double) (tend.tv_sec + tend.tv_usec*1e-6) - t; + return (t); +} + + +void handleErrors(void) +{ + ERR_print_errors_fp(stderr); + abort(); +} + + +int encryptccm(unsigned char *plaintext, int plaintext_len, unsigned char *aad, + int aad_len, unsigned char *key, unsigned char *iv, + unsigned char *ciphertext, unsigned char *tag) +{ + EVP_CIPHER_CTX *ctx; + + int len; + + int ciphertext_len; + + + /* Create and initialise the context */ + if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors(); + + /* Initialise the encryption operation. */ + if(1 != EVP_EncryptInit_ex(ctx, EVP_chacha20_poly1305(), NULL, NULL, NULL)) + handleErrors(); + + /* Setting IV len to 7. Not strictly necessary as this is the default + * but shown here for the purposes of this example */ + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, 7, NULL)) + handleErrors(); + + /* Set tag length */ + EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, 16, NULL); + + /* Initialise key and IV */ + if(1 != EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) handleErrors(); + + /* Provide the total plaintext length + */ + if(1 != EVP_EncryptUpdate(ctx, NULL, &len, NULL, plaintext_len)) + handleErrors(); + + /* Provide any AAD data. This can be called zero or one times as + * required + */ + if(1 != EVP_EncryptUpdate(ctx, NULL, &len, aad, aad_len)) + handleErrors(); + + /* Provide the message to be encrypted, and obtain the encrypted output. + * EVP_EncryptUpdate can only be called once for this + */ + if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) + handleErrors(); + ciphertext_len = len; + + /* Finalise the encryption. Normally ciphertext bytes may be written at + * this stage, but this does not occur in CCM mode + */ + if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors(); + ciphertext_len += len; + + /* Get the tag */ + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, 16, tag)) + handleErrors(); + + /* Clean up */ + EVP_CIPHER_CTX_free(ctx); + + return ciphertext_len; +} + + +int decryptccm(unsigned char *ciphertext, int ciphertext_len, unsigned char *aad, + int aad_len, unsigned char *tag, unsigned char *key, unsigned char *iv, + unsigned char *plaintext) +{ + EVP_CIPHER_CTX *ctx; + int len; + int plaintext_len; + int ret; + + /* Create and initialise the context */ + if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors(); + + /* Initialise the decryption operation. */ + if(1 != EVP_DecryptInit_ex(ctx, EVP_chacha20_poly1305(), NULL, NULL, NULL)) + handleErrors(); + + /* Setting IV len to 7. Not strictly necessary as this is the default + * but shown here for the purposes of this example */ + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, 7, NULL)) + handleErrors(); + + /* Set expected tag value. */ + if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, 16, tag)) + handleErrors(); + + /* Initialise key and IV */ + if(1 != EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv)) handleErrors(); + + + /* Provide the total ciphertext length + */ + if(1 != EVP_DecryptUpdate(ctx, NULL, &len, NULL, ciphertext_len)) + handleErrors(); + + /* Provide any AAD data. This can be called zero or more times as + * required + */ + if(1 != EVP_DecryptUpdate(ctx, NULL, &len, aad, aad_len)) + handleErrors(); + + /* Provide the message to be decrypted, and obtain the plaintext output. + * EVP_DecryptUpdate can be called multiple times if necessary + */ + ret = EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len); + + // printf("RET %d len %d\n",ret,len); + + plaintext_len = len; + + /* Clean up */ + EVP_CIPHER_CTX_free(ctx); + + if(ret > 0) + { + /* Success */ + return plaintext_len; + } + else + { + /* Verify failed */ + return -1; + } +} + + + + +/* int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, */ +/* unsigned char *iv, unsigned char *ciphertext, int ctr, int index) */ +/* { */ +/* EVP_CIPHER_CTX *ctx; */ + +/* int len; */ + +/* int ciphertext_len; */ + +/* /\* Create and initialise the context *\/ */ +/* if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors(); */ + +/* /\* Initialise the encryption operation. IMPORTANT - ensure you use a key */ +/* * and IV size appropriate for your cipher */ +/* * In this example we are using 256 bit AES (i.e. a 256 bit key). The */ +/* * IV size for *most* modes is the same as the block size. For AES this */ +/* * is 128 bits *\/ */ +/* //static double time=0; */ +/* //double t=0; */ +/* //t=TimeStart(); */ +/* //256 */ +/* //avant ecb */ +/* if(ctr) { */ +/* if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv)) */ +/* handleErrors(); */ +/* } */ +/* else */ +/* if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) */ +/* handleErrors(); */ + +/* //time+=TimeStop(t); */ +/* //printf("Time init %f\n",time); */ + + +/* // int cipherBlockSize = EVP_CIPHER_CTX_block_size(ctx); */ +/* // printf("INFO(evp_encrypt): block size: %d\n", cipherBlockSize); */ + + +/* /\* Provide the message to be encrypted, and obtain the encrypted output. */ +/* * EVP_EncryptUpdate can be called multiple times if necessary */ +/* *\/ */ + +/* /\* */ +/* static double time=0; */ +/* double t=0; */ +/* t=TimeStart(); */ +/* *\/ */ +/* for(int i=0;i<nb_test;i++) */ +/* { */ + +/* if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) */ +/* handleErrors(); */ +/* ciphertext_len = len; */ + +/* } */ +/* /\* time+=TimeStop(t); */ +/* // if(index==nb_test-1) */ +/* printf("Time encrypt %f\n",time); */ + +/* *\/ */ + + +/* /\* Finalise the encryption. Further ciphertext bytes may be written at */ +/* * this stage. */ +/* *\/ */ +/* if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors(); */ +/* ciphertext_len += len; */ + +/* /\* Clean up *\/ */ +/* EVP_CIPHER_CTX_free(ctx); */ + +/* return ciphertext_len; */ +/* } */ + +/* int decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, */ +/* unsigned char *iv, unsigned char *plaintext, int ctr, int index) */ +/* { */ +/* EVP_CIPHER_CTX *ctx; */ + +/* int len; */ + +/* int plaintext_len; */ + +/* /\* Create and initialise the context *\/ */ +/* if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors(); */ + +/* /\* Initialise the decryption operation. IMPORTANT - ensure you use a key */ +/* * and IV size appropriate for your cipher */ +/* * In this example we are using 256 bit AES (i.e. a 256 bit key). The */ +/* * IV size for *most* modes is the same as the block size. For AES this */ +/* * is 128 bits *\/ */ + +/* //256 */ + +/* //avant => ecb */ +/* if(ctr) { */ +/* if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv)) */ +/* handleErrors(); */ +/* } */ +/* else */ +/* if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) */ +/* handleErrors(); */ + +/* /\* Provide the message to be decrypted, and obtain the plaintext output. */ +/* * EVP_DecryptUpdate can be called multiple times if necessary */ +/* *\/ */ + +/* /\* static double time=0; */ +/* double t=0; */ +/* t=TimeStart(); */ +/* *\/ */ +/* for(int i=0;i<nb_test;i++) */ +/* { */ +/* plaintext_len = 0; */ +/* if(1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len)) */ +/* handleErrors(); */ +/* plaintext_len = len; */ +/* } */ +/* /\* time+=TimeStop(t); */ +/* // if(index==nb_test-1) */ +/* printf("Time decrypt %f\n",time); */ +/* *\/ */ + + +/* /\* Finalise the decryption. Further plaintext bytes may be written at */ +/* * this stage. */ +/* *\/ */ +/* if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) handleErrors(); */ +/* plaintext_len += len; */ + + + +/* /\* Clean up *\/ */ +/* EVP_CIPHER_CTX_free(ctx); */ + +/* return plaintext_len; */ +/* } */ + + + + +int main (int argc, char** argv) +{ + /* Set up the key and iv. Do I need to say to not hard code these in a + * real application? :-) + */ + + int size_buf=1; + int lena=0; + + + for(int i=1; i<argc; i++){ + if(strncmp(argv[i],"nb",2)==0) nb_test = atoi(&(argv[i][2])); //nb of test + if(strncmp(argv[i],"ctr",3)==0) ctr = atoi(&(argv[i][3])); //CTR ? 1 otherwise CBC like + if(strncmp(argv[i],"sizebuf",7)==0) size_buf = atoi(&(argv[i][7])); //SIZE of the buffer + if(strncmp(argv[i],"lena",4)==0) lena = atoi(&(argv[i][4])); //Use Lena or buffer + } + +/* printf("nb times %d\n",nb_test); + printf("ctr %d\n",ctr); + printf("lena %d\n",lena); + printf("size_buf %d\n",size_buf); +*/ + + + + + /* A 256 bit key */ +// unsigned char *key = (unsigned char *)"01234567890123456789012345678901"; + unsigned char *key = (unsigned char *)"01234567890123450123456789012345"; + + /* A 128 bit IV */ + unsigned char *iv = (unsigned char *)"0123456789012345"; + + unsigned char *tag= malloc(16); + + /* Message to be encrypted */ + + /* Buffer for ciphertext. Ensure the buffer is long enough for the + * ciphertext which may be longer than the plaintext, dependant on the + * algorithm and mode + */ + + int width; + int height; + uchar *data_R, *data_G, *data_B; + int imsize; + uchar *buffer; + + + if(lena==1) { + load_RGB_pixmap("lena.ppm", &width, &height, &data_R, &data_G, &data_B); + imsize=width*height*3; +// load_RGB_pixmap("No_ecb_mode_picture.ppm", &width, &height, &data_R, &data_G, &data_B); + } + else { + width=size_buf; + height=size_buf; + imsize=width*height; + buffer=malloc(imsize*sizeof(uchar)); + for(int i=0;i<imsize;i++) { + buffer[i]=lrand48(); + } + } + + + + int oneD=width*height; + uchar *plaintext = malloc(imsize+1000); //add that for cbc + if(lena) { + for(int i=0;i<oneD;i++) { + plaintext[i]=data_R[i]; + plaintext[oneD+i]=data_G[i]; + plaintext[2*oneD+i]=data_B[i]; + } + } + else + { + for(int i=0;i<oneD;i++) { + plaintext[i]=buffer[i]; + } + } + + + + uchar *ciphertext = malloc(imsize+1000); //add that for cbc + + /* Buffer for the decrypted text */ + uchar *decryptedtext = malloc(imsize+1000); //add that for cbc + + int decryptedtext_len, ciphertext_len; + + /* Initialise the library */ +/* ERR_load_crypto_strings(); + OpenSSL_add_all_algorithms(); + OPENSSL_config(NULL); +*/ + + + double time_encrypt=0; + double time_decrypt=0; + double t=TimeStart(); + + + /* Encrypt the plaintext */ + + + int i; + + + + /* for(int i=0;i<16;i++) + printf("%d ",tag[i]); + printf("\n"); + */ + for(i=0;i<nb_test;i++) + { + ciphertext_len = encryptccm (plaintext, imsize, plaintext, imsize, key, iv, + ciphertext, tag); + } + /*for(int i=0;i<16;i++) { + printf("%d ",tag[i]); + } + printf("\n");*/ + time_encrypt+=TimeStop(t); + +// printf("Time encrypt %f\n",time); + printf("%e\t",(double)imsize*nb_test/time_encrypt); + + if(lena) { + for(int i=0;i<oneD;i++) { + data_R[i]=ciphertext[i]; + data_G[i]=ciphertext[oneD+i]; + data_B[i]=ciphertext[2*oneD+i]; + } + store_RGB_pixmap("lena2.ppm", data_R, data_G, data_B, width, height); + } + + + t=0; + t=TimeStart(); + + + + for(int i=0;i<nb_test;i++) + { + /* Decrypt the ciphertext */ + decryptedtext_len = decryptccm(ciphertext, ciphertext_len,ciphertext, ciphertext_len,tag, key, iv, + decryptedtext); + } + + time_decrypt+=TimeStop(t); + + //printf("Time decrypt %f\n",time); + printf("%e\t",(double)imsize*nb_test/time_decrypt); + + if(lena) { + for(int i=0;i<oneD;i++) { + data_R[i]=decryptedtext[i]; + data_G[i]=decryptedtext[oneD+i]; + data_B[i]=decryptedtext[2*oneD+i]; + } + store_RGB_pixmap("lena3.ppm", data_R, data_G, data_B, width, height); + } + else { + int equal=1; + for(int i=0;i<imsize;i++) { + //cout<<(int)buffer[i]<<endl; + if(buffer[i]!=decryptedtext[i]) { + equal=0; + } + } +// printf("RESULT CORRECT: %d\n",equal); + } + + + /* Clean up */ + EVP_cleanup(); + ERR_free_strings(); + + return 0; +} -- 2.39.5