From 4687ae68c3881d418f217b5c55f96f154633cf4a Mon Sep 17 00:00:00 2001
From: Ivan Deniskin <ivanmordwin@yandex.ru>
Date: Wed, 18 Jul 2018 18:27:52 +0300
Subject: [PATCH] AES tail block bug fixed

---
 crypto/dap_enc_aes.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/crypto/dap_enc_aes.c b/crypto/dap_enc_aes.c
index dae80f8..dcb2a6a 100755
--- a/crypto/dap_enc_aes.c
+++ b/crypto/dap_enc_aes.c
@@ -9,8 +9,6 @@
 #define AES_BLOCKSIZE 16
 #define AES_KEYSIZE 16
 
-uint8_t tail_block[] =  {21,27,20,36,16,20,27,31,22,41,27,33,30,21,32,28};
-
 #define DAP_ENC_AES_KEY(a) ((dap_enc_aes_key_t *)((a)->_inheritor) )
 
 static void print_bytes(uint8_t *bytes, size_t num_bytes) {
@@ -133,8 +131,12 @@ size_t dap_enc_aes_decode(struct dap_enc_key* a_key, const void * a_in, size_t a
     OQS_AES128_ECB_dec(a_in,a_in_size,a_key->data,a_out);
     int tail = 0;
     for(size_t i =a_in_size-1; i > a_in_size-15; i--)
-		if(*(char*)(a_out + i) == (char)tail_block[i%16])
-			tail++;  
+	{
+        if(*(char*)(a_out + i) == (char)0)
+			tail++;
+		else
+			break;  
+	}
 	return a_in_size - tail;
 }
 
@@ -155,8 +157,7 @@ size_t dap_enc_aes_encode(struct dap_enc_key* a_key, const void * a_in, size_t a
         tail = 16 - a_in_size % 16;
     void * a_in_new = (void*)malloc(a_in_size + tail);
     memcpy(a_in_new,a_in,a_in_size);
-    uint8_t* pointer = &tail_block;
-    memcpy(a_in_new+a_in_size,pointer+(16-tail),tail);
+    memset(a_in_new+a_in_size,0,tail);
     OQS_AES128_ECB_enc(a_in_new,a_in_size+tail,a_key->data,a_out);
     return a_in_size + tail;
 }
-- 
GitLab