diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/lib.c | 27 | ||||
| -rw-r--r-- | lib/lib.h | 2 | ||||
| -rw-r--r-- | lib/lib2.c | 10 | ||||
| -rw-r--r-- | lib/lib2.h | 1 |
4 files changed, 36 insertions, 4 deletions
@@ -555,4 +555,31 @@ int string_is_ecb_encrypted(char *string, int length_string, int blocksize) return (count_equal_blocks(string, length_string, blocksize) > (length_string/blocksize)); } +/** +* split ciphertext in blocks of size blocksize + * @return returns an array of string of size with blocksize elements + */ + + +char **transpose_blocks(char *ciphertext, int blocksize, int length) +{ + char **blocks; + int i, j; + int number_blocks = length / blocksize; + + blocks = malloc(blocksize*(sizeof(char*))); + + for(i=0;i<blocksize;i++) { + blocks[i] = malloc(number_blocks+1); + } + + for(j=0;j<blocksize;j++) { + for(i=0;i<number_blocks;i++) { + blocks[j][i] = ciphertext[(i*blocksize)+j]; + } + } + + return blocks; +} + @@ -24,6 +24,6 @@ char brute_force_single_byte_xor(char *string, int length, struct key_and_freq * int isprintable(char *string, int length); int read_base64_file(const char *file, char **out); int string_is_ecb_encrypted(char *string, int length_string, int blocksize); - +char **transpose_blocks(char *ciphertext, int blocksize, int length); #endif /* __CYRPTO_LIB__ */ @@ -6,12 +6,11 @@ * and append to last block so that it is also of blocksize length */ -char *pkcs7_padding(char *string, int length_string, int blocksize) +char *__pkcs7_padding(char *string, int length_string, int blocksize, int *padding) { char *result = NULL; int i; int value = blocksize - (length_string % blocksize); - result = malloc(length_string+value+1); memcpy(result, string, length_string); @@ -19,10 +18,15 @@ char *pkcs7_padding(char *string, int length_string, int blocksize) result[length_string+i] = (char) value; } result[length_string+i] = '\0'; - + *padding = value; return result; } +char *pkcs7_padding(char *string, int length_string, int blocksize) +{ + int not_interested; + return __pkcs7_padding(string, length_string, blocksize, ¬_interested); +} /** * unpadd a string * @param in string which should be unpadded @@ -15,6 +15,7 @@ char key[17]; char iv[17]; char *pkcs7_padding(char *string, int length_string, int blocksize); +char *__pkcs7_padding(char *string, int length_string, int blocksize, int *padding); int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char *init_vector, int encrypt); int valid_pkcs7_padding(const char *in, int length_in, char *unpadded, int blocksize); int aes_ecb(char *in, int length_in, char *out, unsigned char *string_key, |
