diff options
Diffstat (limited to 'lib/lib2.c')
| -rw-r--r-- | lib/lib2.c | 28 |
1 files changed, 28 insertions, 0 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 |
