title: Does AES_cbc_encrypt add padding?
body: <p>Consider the following snippet of C++ code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;openssl/aes.h&gt;
  
  #define AES_KEY_LENGTH 32
  
  using namespace std;
  
  int main()
  {
      AES_KEY encryption_key;
      AES_KEY decryption_key;
  
      unsigned char key[AES_KEY_LENGTH] = {'t', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't'};
  
      unsigned char iv[AES_BLOCK_SIZE] = {'t', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't', 't', 'e', 's', 't'};
  
      unsigned char iv_enc[AES_BLOCK_SIZE];
      unsigned char iv_dec[AES_BLOCK_SIZE];
  
      memcpy(iv_enc, iv, AES_BLOCK_SIZE);
      memcpy(iv_dec, iv, AES_BLOCK_SIZE);
  
      AES_set_encrypt_key(key, AES_KEY_LENGTH * 8, &amp;(encryption_key));
      AES_set_decrypt_key(key, AES_KEY_LENGTH * 8, &amp;(decryption_key));
  
      char message[] = "Attack at dawn! Attack.";
  
      unsigned char * encryption_output = new unsigned char[32];
      encryption_output[31] = 3;
  
      AES_cbc_encrypt((unsigned char *) message, encryption_output, sizeof(message), &amp;encryption_key, iv_enc, AES_ENCRYPT);
  
      unsigned char * decryption_output = new unsigned char[32];
  
      AES_cbc_encrypt(encryption_output, decryption_output, 32, &amp;decryption_key, iv_dec, AES_DECRYPT);
  }
  </code></pre>
  
  <p>What I do here is encrypt and then decrypt a message using openssl aes library. What I am concerned about is the length encryption_output. As far as my understanding goes, since AES encrypts in blocks of size AES_BLOCK_SIZE (aka 16 bytes) the number of output bytes should be equal to the size of the message, rounded up to the closest multiple of AES_BLOCK_SIZE. Is this correct? In particular, what happens if I extend the message to be exactly 32 bytes long? Will this still work, or will 16 empty padding bytes be added thus causing a segmentation fault when trying to write bytes 32 to 47 in encryption_output?</p>