diff options
| -rw-r--r-- | lib/lib2.c | 28 | ||||
| -rw-r--r-- | lib/lib2.h | 1 | ||||
| -rw-r--r-- | set2/Makefile | 6 | ||||
| -rw-r--r-- | set2/task15.c | 21 |
4 files changed, 54 insertions, 2 deletions
@@ -24,6 +24,34 @@ char *pkcs7_padding(char *string, int length_string, int blocksize) } /** + * unpadd a string + * @param in string which should be unpadded + * @param length_in length of paramter length_in + * @param unpadded place where the unpadded text should be stored + * @param blocksize size of the block to which should be padded + */ +int valid_pkcs7_padding(const char *in, int length_in, char *unpadded, int blocksize) +{ + int i, padding_length; + // look how many equal bytes are at the end + // ignore last byte \0 + for(i=length_in-1;i>0;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 @@ -8,5 +8,6 @@ char *pkcs7_padding(char *string, int length_string, int blocksize); int aes_cbc(char *in, int length_in, char *out, unsigned char *string_key, char *init_vector); +int valid_pkcs7_padding(const char *in, int length_in, char *unpadded, int blocksize); #endif diff --git a/set2/Makefile b/set2/Makefile index b0c56a2..1f8f890 100644 --- a/set2/Makefile +++ b/set2/Makefile @@ -3,11 +3,13 @@ CC=gcc CFLAGS := -g $(CFLAGS) CLIBS=`pkg-config --cflags --libs libcrypto` -all: task9 task10 +all: task9 task10 task15 task9: $(CC) $(CFLAGS) task9.c $(LIB) $(CLIBS) -o task9 task10: $(CC) $(CFLAGS) task10.c $(LIB) $(CLIBS) -o task10 +task15: + $(CC) $(CFLAGS) task15.c $(LIB) $(CLIBS) -o task15 clean: - rm task9 task10 + rm task9 task10 task15 diff --git a/set2/task15.c b/set2/task15.c new file mode 100644 index 0000000..504eabb --- /dev/null +++ b/set2/task15.c @@ -0,0 +1,21 @@ +#include "../lib/lib2.h" + + + + +int main(int argc, char **Argv) +{ + + + char *padded_text = pkcs7_padding("YELLOW SUBMARINE", 16, 20); + char *unpadded = malloc(100); + //char *padded_text = "ICE ICE BABY\x01\x02\x03\x04"; + printf("padded text: %s\n", padded_text); + int result = valid_pkcs7_padding(padded_text, 20,unpadded, 20); + + if(result) + printf("valid padding: %s\n", unpadded); + else + printf("invalid padding\n"); + +} |
