Phalcon\Legacy\Crypt::cryptUnpadText PHP Method

cryptUnpadText() protected method

Removes $paddingType padding from text If the function detects that the text was not padded, it will return it unmodified
protected cryptUnpadText ( string $text, string $mode, integer $blockSize, integer $paddingType ) : string
$text string Message to be unpadded
$mode string Encryption mode; unpadding is applied only in CBC or ECB mode
$blockSize integer Cipher block size
$paddingType integer Padding scheme
return string
    protected function cryptUnpadText($text, $mode, $blockSize, $paddingType)
    {
        $paddingSize = 0;
        $length = strlen($text);
        if ($length > 0 && $length % $blockSize == 0 && ($mode == MCRYPT_MODE_CBC || $mode == MCRYPT_MODE_ECB)) {
            switch ($paddingType) {
                case self::PADDING_ANSI_X_923:
                    $last = substr($text, $length - 1, 1);
                    $ord = (int) ord($last);
                    if ($ord <= $blockSize) {
                        $paddingSize = $ord;
                        $padding = str_repeat(chr(0), $paddingSize - 1) . $last;
                        if (substr($text, $length - $paddingSize) != $padding) {
                            $paddingSize = 0;
                        }
                    }
                    break;
                case self::PADDING_PKCS7:
                    $last = substr($text, $length - 1, 1);
                    $ord = (int) ord($last);
                    if ($ord <= $blockSize) {
                        $paddingSize = $ord;
                        $padding = str_repeat(chr($paddingSize), $paddingSize);
                        if (substr($text, $length - $paddingSize) != $padding) {
                            $paddingSize = 0;
                        }
                    }
                    break;
                case self::PADDING_ISO_10126:
                    $last = substr($text, $length - 1, 1);
                    $paddingSize = (int) ord($last);
                    break;
                case self::PADDING_ISO_IEC_7816_4:
                    $i = $length - 1;
                    while ($i > 0 && $text[$i] == 0x0 && $paddingSize < $blockSize) {
                        $paddingSize++;
                        $i--;
                    }
                    if ($text[$i] == 0x80) {
                        $paddingSize++;
                    } else {
                        $paddingSize = 0;
                    }
                    break;
                case self::PADDING_ZERO:
                    $i = $length - 1;
                    while ($i >= 0 && $text[$i] == 0x0 && $paddingSize <= $blockSize) {
                        $paddingSize++;
                        $i--;
                    }
                    break;
                case self::PADDING_SPACE:
                    $i = $length - 1;
                    while ($i >= 0 && $text[$i] == 0x20 && $paddingSize <= $blockSize) {
                        $paddingSize++;
                        $i--;
                    }
                    break;
                default:
                    break;
            }
            if ($paddingSize && $paddingSize <= $blockSize) {
                if ($paddingSize < $length) {
                    return substr($text, 0, $length - $paddingSize);
                }
                return "";
            }
        }
        return $text;
    }