#include <openssl/evp.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
EVP_CIPHER_CTX ctx;
char key[EVP_MAX_KEY_LENGTH];
char iv[EVP_MAX_IV_LENGTH];
char *ct, *out;
char final[EVP_MAX_BLOCK_LENGTH];
char str[] = "123456789abcdef";
int i;
strcpy(key,"secret");
strcpy(iv,"foo");
ct = malloc(EVP_MAX_BLOCK_LENGTH);
out = malloc(EVP_MAX_BLOCK_LENGTH);
EVP_EncryptInit(&ctx, EVP_bf_cbc(), key, iv);
EVP_EncryptUpdate(&ctx, ct, &i, str, strlen(str));
printf("Ciphertext is %d bytes.\n",i);
printf("Ciphertext is >>%s<<\n",ct);
EVP_DecryptInit(&ctx, EVP_bf_cbc(), key, iv);
EVP_DecryptUpdate(&ctx, out, &i, ct, i);
printf("Decrypted: >>%s<<\n",out);
EVP_DecryptUpdate(&ctx, out, &i, ct, i);
printf("Decrypted: >>%s<<\n",out);
if (!EVP_DecryptFinal(&ctx, final, &i))
err(-1,"padding incorrect");
final[i] = 0;
printf("Decrypted: >>%s<<\n",final);
exit(0);
}