summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/lib2.c28
-rw-r--r--lib/lib2.h1
-rw-r--r--set2/Makefile6
-rw-r--r--set2/task15.c21
4 files changed, 54 insertions, 2 deletions
diff --git a/lib/lib2.c b/lib/lib2.c
index fe65bb8..49f7363 100644
--- a/lib/lib2.c
+++ b/lib/lib2.c
@@ -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
diff --git a/lib/lib2.h b/lib/lib2.h
index fabca8a..7036388 100644
--- a/lib/lib2.h
+++ b/lib/lib2.h
@@ -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");
+
+}