diff options
Diffstat (limited to 'lib/lib2.c')
| -rw-r--r-- | lib/lib2.c | 31 |
1 files changed, 28 insertions, 3 deletions
@@ -71,20 +71,22 @@ int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char AES_KEY key; int number_blocks = length_in / 16; int i, j; + unsigned char debug[16]; unsigned char ciphertext[128+1]; unsigned char tmp_after_aes[128+1]; unsigned char cleartext[128+1]; // set the key and bits + memset(tmp_after_aes, 0, 129); if(encrypt) AES_set_encrypt_key(string_key, 128, &key); else AES_set_decrypt_key(string_key, 128, &key); - memcpy(init_vector, iv, 16); + memcpy(iv, init_vector, 16); // implement cbc mode for(i=0;i<number_blocks;i++) { - if (!encrypt) { + if (encrypt == 0) { //do aes decryption AES_decrypt(&in[i*16], tmp_after_aes, &key); // xor @@ -94,7 +96,7 @@ int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char iv[j] = in[i*16+j]; } } - else { + else if (encrypt == 1) { // first xor xor_string(iv, &in[i*16], tmp_after_aes, 16, 16); // aes encrypt @@ -109,6 +111,18 @@ int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char } +int aes_cbc_padded(char *in, int length_in, char **out, unsigned char *string_key, char *init_vector, int encrypt) +{ + int padding, padded_length; + char *in_padded = __pkcs7_padding(in, length_in, 16, &padding); + padded_length = length_in + padding; + *out = malloc(padded_length + 16); + aes_cbc(in_padded, padded_length, *out, string_key, init_vector, encrypt); + memcpy(&((*out)[padded_length]), iv, 16); + return padded_length; +} + + int aes_ecb(char *in, int length_in, char *out, unsigned char *string_key, int blocksize_bytes, int encrypt) { @@ -138,6 +152,17 @@ int random_number_between(int min, int max) return (rand() % (max-min) + min); } +int generate_random_hex(char *buf, int length) +{ + int i; + + for(i=0;i<length;i++) { + if (random_number_between(0,15) > 9) + buf[i] = random_number_between(48,57); + else + buf[i] = random_number_between(97,102); + } +} int generate_random_bytes(char *buf, int length_key_bytes) { |
