+ if(cipher->padding) {
+ if(!oneshot)
+ return false;
+
+ uint8_t padbyte = ((uint8_t *)outdata)[inlen - 1];
+
+ if(padbyte == 0 || padbyte > cipher->blklen || padbyte > inlen) {
+ logger(LOG_ERR, "Error while decrypting: invalid padding");
+ return false;
+ }
+
+ size_t origlen = inlen - padbyte;
+
+ for(int i = inlen - 1; i >= origlen; i--)
+ if(((uint8_t *)outdata)[i] != padbyte) {
+ logger(LOG_ERR, "Error while decrypting: invalid padding");
+ return false;
+ }
+
+ *outlen = origlen;
+ } else
+ *outlen = inlen;
+