summaryrefslogtreecommitdiff
path: root/lib/lib2.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lib2.c')
-rw-r--r--lib/lib2.c28
1 files changed, 28 insertions, 0 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