#include #include #include #include #include char *m = "This is the message"; uint8_t key[32] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}; uint8_t nonce[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; int main(int argc, char **argv) { int mlen =strlen(m)+1; /* NULL byte termination */ EVP_CIPHER_CTX e_ctx; //HMAC_CTX h_ctx; int clen; int flen; unsigned int mdlen; uint8_t c[mlen+EVP_MAX_BLOCK_LENGTH]; uint8_t md[EVP_MAX_MD_SIZE]; EVP_CIPHER_CTX_init(&e_ctx); EVP_EncryptInit_ex(&e_ctx, EVP_aes_256_cbc(), NULL, key, nonce); EVP_EncryptUpdate(&e_ctx, c, &clen, (uint8_t *)m, mlen); EVP_EncryptFinal_ex(&e_ctx, c+clen, &flen); EVP_CIPHER_CTX_cleanup(&e_ctx); clen += flen; HMAC(EVP_sha256(), key, 32, c, clen, md, &mdlen); /* Do something with the ciphertext and the auth tag */ return 0; }