#include "lib2.h" #include "lib.h" /** * appends PKCS#7 padding to string. devide string in blocks of size blocksize * and append to last block so that it is also of blocksize length */ char *pkcs7_padding(char *string, int length_string, int blocksize) { char *result = NULL; int i; int value = blocksize - (length_string % blocksize); result = malloc(length_string+value+1); memcpy(result, string, length_string); for(i=0;i0;i--) { if(in[i] != in[i-1]) break; } padding_length = length_in - i; if ((length_in % padding_length) != 0) return 0; if(in[length_in-1] != padding_length) return 0; memcpy(unpadded, in, (length_in-padding_length)); return 1; } /** * decrypts content which is encrypted in AES CBC mode * @param in input content * @param length_in length of parametere in * @param out place where the decrypted content should be written to * @param string_key key with which the content in in has been decrypted * @param iv initalization vector */ int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char *init_vector) { char iv[16]; AES_KEY key; int number_blocks = length_in / 16; int i, j; unsigned char ciphertext[128+1]; unsigned char tmp_after_aes[128+1]; unsigned char cleartext[128+1]; // set the key and bits AES_set_decrypt_key(string_key, 128, &key); memcpy(init_vector, iv, 16); // implement cbc mode for(i=0;i