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