title: CryptEncrypt AES 256 fails at encrypting last block
body: <p>First of all, I apologize if I'm missing something here. This is my first every attempt at the Windows CryptAPI, and although I have gone through google, MSDN, MSDN's examples, etc. I cannot figure out why this problem is happening.
  I have the following code which is supposed to copy opcode (blocks of bytes) found at a specific address, encrypt them, and then write them back. It is by no means a complete code and it does very little error checking. I am using AES256.</p>
  
  <pre><code>bool CryptoClass::encrypt(DWORD address, DWORD len)
  {
      DWORD dwBlockLen = 0; 
      DWORD dwBufferLen = 0; 
      DWORD dwCount = 0; 
      PBYTE pbBuffer = NULL;    
      dwBlockLen = AES_BLOCK_SIZE - AES_BLOCK_SIZE % ENCRYPT_BLOCK_SIZE; 
      dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE; 
      if(pbBuffer = (BYTE *)malloc(dwBufferLen))
      {
          bool EOB = FALSE;
          while ( dwCount &lt;= len) )
          {
              memcpy((void*)pbBuffer,(void*)address,dwBlockLen);              
              if ( (len - dwCount) &lt; dwBlockLen) EOB = TRUE;              
  
              if(CryptEncrypt(hKey,NULL,EOB,0,pbBuffer,&amp;dwBlockLen,dwBufferLen))
              {
                  memcpy((void*)address,(void*)pbBuffer,dwBlockLen);
                  address += dwBlockLen;                              
                  dwCount += dwBlockLen;                              
              }
              else
              {
                  error = GetLastError();
                  MessageBoxA(NULL,"problem","error",MB_OK);
              }
          }
          free(pbBuffer);
         return true;
      }
      else return false;
  }
  </code></pre>
  
  <p>From my understanding AES can encrypt blocks of 16 bytes, so AES_BLOCK_SIZE is defined to 16.
  Also my ENCRYPT_BLOCK_SIZE is set to 8. I am basically copying an example I found on MSDN, and adjusting for AES256 and for use with memory instead of a file.
  However in my while loop, whenever it reaches the end of the buffer, where the FINAL is set to TRUE, the CryptEncrypt fails. I have tried many different ways to do this but it always fails.
  Is it because the buffer at the end is less than 16bytes ?
  Can some please help, I am a total noob when it comes to encryption.
  Thank you
  EDIT: GetLastError returns: 0x000000ea</p>