Hi, I have tried your code and replaced the length param with bit length (*8) instead. It worked. It seems that there are inconsistent with the usage of API.
- re.est On Sun, Oct 30, 2011 at 4:55 PM, Ananthasayanan Kandiah <ananthasaya...@obtino.com> wrote: > Hi, > > I'm trying to use AES-CFB1 through the "low-level" calls. Here's the example > program I have come up with: > > #include <stdio.h> > #include <string.h> > #include <openssl/aes.h> > #include <openssl/bio.h> > > #define KEY_SIZE 16 > > int main(void) > { > int i; > AES_KEY key; > BIO* bio_out; > > unsigned char key_data[KEY_SIZE] = { > 0xfe, 0xec, 0x82, 0x17, 0xb5, 0x1, 0x98, 0x6b, > 0x5e, 0xf1, 0xb8, 0x6, 0x52, 0x74, 0x2e, 0x52 > }; > > unsigned char iv[AES_BLOCK_SIZE]; > > unsigned char const iv_data[AES_BLOCK_SIZE] = { > 0x10, 0x8a, 0xc9, 0x30, 0xb7, 0xf2, 0x35, 0x21, > 0xfb, 0xac, 0x6b, 0xdf, 0x80, 0x95, 0xeb, 0x1e > }; > > char* data = "Internet is a wonderful mechanism for making a fool " > "of yourself in front of a very large audience"; > > > int length = (int) strlen(data); > > int num = 0; > > /* Allocate some space for the ciphertext and plaintext */ > char* ciphertext = (char*) malloc(sizeof(char) * length); > char* plaintext = (char*) malloc(sizeof(char) * length); > > /* Copy the IV data to the IV array */ > memcpy(iv, iv_data, AES_BLOCK_SIZE); > > /* Set the encrypt key structure using the predefined key */ > AES_set_encrypt_key(key_data, KEY_SIZE * 8, &key); > > /* Carry out the encryption */ > AES_cfb1_encrypt(data, ciphertext, length, &key, iv, &num, AES_ENCRYPT); > > /* Setup output */ > bio_out = BIO_new_fp(stdout, BIO_NOCLOSE); > > BIO_printf(bio_out, "Original plaintext: %s\n\n", data); > > BIO_printf(bio_out, "Ciphertext: "); > > /* Print out the ciphertext */ > for (i = 0; i < length; i++) > BIO_printf(bio_out, "%02x", ((unsigned char*)ciphertext)[i]); > > BIO_printf(bio_out, "\n\n"); > > /* Start the decryption process */ > > /* First, copy the original IV data back to the IV array - as it was > overwritten > * during the encryption process > */ > memcpy(iv, iv_data, AES_BLOCK_SIZE); > > /* Reset how far we've gone through the IV */ > num = 0; > > /* Carry out the decryption */ > AES_cfb1_encrypt(ciphertext, plaintext, length, &key, iv, &num, > AES_DECRYPT); > > BIO_printf(bio_out, "Recovered plaintext: "); > > /* print out the plaintext */ > for (i = 0; i < length; i++) > BIO_printf(bio_out, "%c", ((unsigned char*)plaintext)[i]); > > BIO_printf(bio_out, "\n\n"); > > BIO_free(bio_out); > > free(ciphertext); > free(plaintext); > > > return 0; > } > > When I run it, the output which I receive is: > > Original plaintext: Internet is a wonderful mechanism for making a foolof > yourself in front of a very large audience > > Ciphertext: > 92c0883c54eb8df072b43278000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > 000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > > Recovered plaintext: Internet is > > > d:\ananthasayanan\stuff\projects\programming\openssl\openssl-1.0.0d\demos\crypto\low_level\ciphers\symmetric\aes\aes_cfb > 1_128\x64\Release>aes_cfb1_128.exe > Original plaintext: Internet is a wonderful mechanism for making a fool of > yourself in front of a very large audience > > Ciphertext: > 92c0883c54eb8df072b43278000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > > Recovered plaintext: Internet is > > As you can see, the ciphertext that is produced is only 12 bytes in length. > Hence, the recovered plaintext has only 12 characters. I have had a look at > the source-code for AES_cfb1_encrypt and the comment says that the input > should be "packed". What does this mean? Am I doing something wrong or is > there a bug with AES-CFB1? > > > Thanks, > Anantha > > ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org