A lightweight AES implementation with Cipher Block Chaining and Ciphertext Stealing.

**
Dependents:
**
AES_HelloWorld
AES_ExtendedTests
AESslave_modified_test
AESslave_modified_test_27-9-2017
... more

## Diff: AES.cpp

- Revision:
- 1:09347d4bc827
- Parent:
- 0:6132f54fa9e9

diff -r 6132f54fa9e9 -r 09347d4bc827 AES.cpp --- a/AES.cpp Fri Sep 04 02:03:00 2015 +0000 +++ b/AES.cpp Thu Sep 15 15:34:59 2016 +0000 @@ -1,5 +1,5 @@ /* AES Cipher Library - * Copyright (c) 2015 Neil Thiessen + * Copyright (c) 2016 Neil Thiessen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -161,8 +161,9 @@ //Perform CBC pre-processing if necessary if (m_CipherMode == MODE_CBC) { //XOR the state array with the carry vector - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { m_State[i] = m_State[i] ^ m_CarryVector[i]; + } } //Encrypt the state array @@ -189,8 +190,9 @@ //Perform CBC pre-processing if necessary if (m_CipherMode == MODE_CBC) { //XOR the state array with the carry vector - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { m_State[i] = m_State[i] ^ m_CarryVector[i]; + } } //Encrypt the state array @@ -205,7 +207,7 @@ //Perform ciphertext stealing if the next block is a partial block if (length > 0 && length < 16) { //Copy the last partial source block to a temporary buffer (in case of in-place encryption) - char temp[length]; + char temp[16]; memcpy(temp, srcBytes, length); //Copy the leading bytes of the state array to the last partial destination block @@ -220,8 +222,9 @@ memset(m_State + length, 0, 16 - length); //XOR the state array with the carry vector - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { m_State[i] = m_State[i] ^ m_CarryVector[i]; + } } //Encrypt the state array @@ -257,8 +260,9 @@ //Perform CBC processing if necessary if (m_CipherMode == MODE_CBC) { //XOR the state array with the carry vector - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { m_State[i] = m_State[i] ^ m_CarryVector[i]; + } //Save the source block as the next carry vector memcpy(m_CarryVector, src, 16); @@ -284,12 +288,13 @@ //Perform CBC processing if necessary if (m_CipherMode == MODE_CBC) { //XOR the state array with the last partial source block - for (int i = 0; i < length; i++) + for (int i = 0; i < length; i++) { m_State[i] = m_State[i] ^ src[i]; + } } //Copy the last partial source block to a temporary buffer (in case of in-place decryption) - char temp[length]; + char temp[16]; memcpy(temp, src, length); //Copy the leading bytes of the state array to the last partial destination block @@ -306,8 +311,9 @@ //Perform CBC processing if necessary if (m_CipherMode == MODE_CBC) { //XOR the state array with the carry vector - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { m_State[i] = m_State[i] ^ m_CarryVector[i]; + } //Save the source block as the next carry vector memcpy(m_CarryVector, src - 16, 16);