summaryrefslogtreecommitdiff
path: root/lib/lib2.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lib2.c')
-rw-r--r--lib/lib2.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/lib/lib2.c b/lib/lib2.c
index f9904b6..2d62305 100644
--- a/lib/lib2.c
+++ b/lib/lib2.c
@@ -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)
{