Hello,

> The encrypted.file is exactly as the original.

If length of your file is multiple of 16 then you will got this behavior.
AES_encrypt_cbc() function does not add additional padding block in this
case.

> void aes::encrypt_file(const char * key, const char * path,
> unsigned char * buf /*[in|out]*/)
> {
> // ...
> unsigned char fbuf_in[1024];
> unsigned char fbuf_out[1024];
>
> // Open the reading and writing paths.
> std::fstream in(path, std::ios::in | std::ios::binary);
> std::fstream out("/encrypted.file", std::ios:ut |

std::ios::binary);
>
> // Set up the AES key structure.
> AES_set_encrypt_key(k, 256, &m_encrypt_ctx);
>
> // Set the IV.
> std::memset(m_iv, rand(), AES_BLOCK_SIZE);

I'm not sure how this is going to work.
rand() returns integer between 0 and RAND_MAX.
m_iv should be 16-byte table (vector) and you should initialize
every 16 bytes in this table.

> // Do the actual reading, ecrypting and writing.
> while (!in.eof())
> {
> std::cout << "aes::encrypt_file: Reading..." << std::endl;
>
> in.read((char *) fbuf_in, 1024);
>
> unsigned int len = in.gcount();
>
> std::cout << "aes::encrypt_file: Encrypting..." << std::endl;
>
> AES_cbc_encrypt(fbuf_in, fbuf_out, len, &m_encrypt_ctx, m_iv,

AES_ENCRYPT);
>
> std::cout << "aes::encrypt_file: Writing..." << std::endl;
>
> out.write((char *)fbuf_out, len);
> }
> }


Best regards,
--
Marek Marcola

__________________________________________________ ____________________
OpenSSL Project http://www.openssl.org
User Support Mailing List openssl-users@openssl.org
Automated List Manager majordomo@openssl.org