From 76362254146f0bf92cf860fc556dc2d7d61d89d7 Mon Sep 17 00:00:00 2001 From: wangyu Date: Tue, 16 Jul 2019 00:47:36 -0400 Subject: [PATCH] update cfb --- encrypt.cpp | 15 ++++++++++++++- lib/aes-common.h | 5 ++--- lib/aes_acc/aesacc.c | 21 +++++++-------------- lib/aes_faster_c/wrapper.cpp | 22 ++++++++++++++++++---- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/encrypt.cpp b/encrypt.cpp index 0df0c01..c96a395 100755 --- a/encrypt.cpp +++ b/encrypt.cpp @@ -326,6 +326,11 @@ int cipher_aes128cfb_encrypt(const char *data,char *output,int &len,char * key) if(first_time==0) key=0; else first_time=0; } + + if(len>=16) + { + AES_ECB_encrypt_buffer(data,key,buf); //tmp solution, to fix a problem + } AES_CFB_encrypt_buffer((unsigned char *)output,(unsigned char *)buf,len,(unsigned char *)key,(unsigned char *)zero_iv); return 0; @@ -374,7 +379,15 @@ int cipher_aes128cfb_decrypt(const char *data,char *output,int &len,char * key) if(first_time==0) key=0; else first_time=0; } - AES_CFB_decrypt_buffer((unsigned char *)output,(unsigned char *)data,len,(unsigned char *)key,(unsigned char *)zero_iv); + char buf[buf_len]; + memcpy(buf,data,len);//TODO inefficient code + + if(len>=16) + { + AES_ECB_decrypt_buffer(data,key,buf);//tmp solution to fix a problem + } + + AES_CFB_decrypt_buffer((unsigned char *)output,(unsigned char *)buf,len,(unsigned char *)key,(unsigned char *)zero_iv); //if(de_padding(output,len,16)<0) return -1; return 0; } diff --git a/lib/aes-common.h b/lib/aes-common.h index cabc7d9..de6ebd9 100755 --- a/lib/aes-common.h +++ b/lib/aes-common.h @@ -7,9 +7,8 @@ #include -//not used -//void AES_ECB_encrypt(const uint8_t* input, const uint8_t* key, uint8_t *output, const uint32_t length); -//void AES_ECB_decrypt(const uint8_t* input, const uint8_t* key, uint8_t *output, const uint32_t length); +void AES_ECB_encrypt_buffer(const uint8_t* input, const uint8_t* key, uint8_t *output); +void AES_ECB_decrypt_buffer(const uint8_t* input, const uint8_t* key, uint8_t *output); void AES_CBC_encrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv); void AES_CBC_decrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv); diff --git a/lib/aes_acc/aesacc.c b/lib/aes_acc/aesacc.c index 90412aa..236cd13 100644 --- a/lib/aes_acc/aesacc.c +++ b/lib/aes_acc/aesacc.c @@ -366,32 +366,25 @@ void AES_CBC_decrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, co decrypt_cbc(rk, length, iv_tmp, input, output); } -/* void AES_ECB_encrypt(const uint8_t* input, const uint8_t* key, uint8_t* output, const uint32_t length) { - uint8_t rk[AES_RKSIZE]; + static uint8_t rk[AES_RKSIZE]; - if (key == NULL) - { - return; - } aeshw_init(); - setkey_enc(rk, key); + if(key!=NULL) + setkey_enc(rk, key); encrypt_ecb(AES_NR, rk, input, output); } void AES_ECB_decrypt(const uint8_t* input, const uint8_t* key, uint8_t *output, const uint32_t length) { - uint8_t rk[AES_RKSIZE]; + static uint8_t rk[AES_RKSIZE]; - if (key == NULL) - { - return; - } aeshw_init(); - setkey_dec(rk, key); + if(key!=NULL) + setkey_dec(rk, key); decrypt_ecb(AES_NR, rk, input, output); -}*/ +} static void encrypt_cfb( uint8_t* rk, uint32_t length,size_t *iv_off, diff --git a/lib/aes_faster_c/wrapper.cpp b/lib/aes_faster_c/wrapper.cpp index 7a35b2f..01cd94f 100644 --- a/lib/aes_faster_c/wrapper.cpp +++ b/lib/aes_faster_c/wrapper.cpp @@ -14,13 +14,27 @@ void AES_ECB_encrypt(const uint8_t* input, const uint8_t* key, uint8_t *output, const uint32_t length) { - printf("AES_ECB_encrypt not implemented\n"); - exit(-1); + static aes_context ctx; + if(key!=0) + { + aes_init( &ctx); + aes_setkey_enc(&ctx,key,AES_KEYSIZE); + } + int ret=aes_crypt_ecb( &ctx, AES_ENCRYPT, (const unsigned char*)input,(unsigned char*) output ); + assert(ret==0); + return ; } void AES_ECB_decrypt(const uint8_t* input, const uint8_t* key, uint8_t *output, const uint32_t length) { - printf("AES_ECB_encrypt not implemented\n"); - exit(-1); + static aes_context ctx; + if(key!=0) + { + aes_init( &ctx); + aes_setkey_dec(&ctx,key,AES_KEYSIZE); + } + int ret=aes_crypt_ecb( &ctx, AES_DECRYPT, (const unsigned char*)input,(unsigned char*) output ); + assert(ret==0); + return ; } void AES_CBC_encrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv)