src/AESGCM.php
private static function getGCTR($K, $key_length, $ICB, $X)
    {
        if (empty($X)) {
            return '';
        }

        $n = (int) ceil(self::getLength($X) / 128);
        $CB = [];
        $Y = [];
        $CB[1] = $ICB;
        for ($i = 2; $i <= $n; $i++) {
            $CB[$i] = self::getInc(32, $CB[$i - 1]);
        }
        $mode = 'aes-'.($key_length).'-ecb';
        for ($i = 1; $i < $n; $i++) {
            $C = openssl_encrypt($CB[$i], $mode, $K, OPENSSL_NO_PADDING | OPENSSL_RAW_DATA);
            $Y[$i] = self::getBitXor(mb_substr($X, ($i - 1) * 16, 16, '8bit'), $C);
        }

        $Xn = mb_substr($X, ($n - 1) * 16, null, '8bit');
        $C = openssl_encrypt($CB[$n], $mode, $K, OPENSSL_NO_PADDING | OPENSSL_RAW_DATA);
        $Y[$n] = self::getBitXor($Xn, self::getMSB(self::getLength($Xn), $C));

        return implode('', $Y);
    }
private static function getGCTR($K, $key_length, $ICB, $X)
    {
        if (empty($X)) {
            return '';
        }

        $n = (int) ceil(self::getLength($X) / 128);
        $CB = [];
        $Y = [];
        $CB[1] = $ICB;
        for ($i = 2; $i <= $n; $i++) {
            $CB[$i] = self::getInc(32, $CB[$i - 1]);
        }
        $mode = 'aes-'.($key_length).'-ecb';
        for ($i = 1; $i < $n; $i++) {
            $C = openssl_encrypt($CB[$i], $mode, $K, OPENSSL_NO_PADDING | OPENSSL_RAW_DATA);
            $Y[$i] = self::getBitXor(mb_substr($X, ($i - 1) * 16, 16, '8bit'), $C);
        }

        $Xn = mb_substr($X, ($n - 1) * 16, null, '8bit');
        $C = openssl_encrypt($CB[$n], $mode, $K, OPENSSL_NO_PADDING | OPENSSL_RAW_DATA);
        $Y[$n] = self::getBitXor($Xn, self::getMSB(self::getLength($Xn), $C));

        return implode('', $Y);
    }
private static function getGCTR ( $ K , $ key_length , $ ICB , $ X ) { if ( empty ( $ X ) ) { return '' ; } $ n = ( int ) ceil ( self :: getLength ( $ X ) / 128 ) ; $ CB = [ ] ; $ Y = [ ] ; $ CB [ 1 ] = $ ICB ; for ( $ i = 2 ; $ i <= $ n ; $ i ++ ) { $ CB [ $ i ] = self :: getInc ( 32 , $ CB [ $ i - 1 ] ) ; } $ mode = 'aes-' . ( $ key_length ) . '-ecb' ; for ( $ i = 1 ; $ i < $ n ; $ i ++ ) { $ C = openssl_encrypt ( $ CB [ $ i ] , $ mode , $ K , OPENSSL_NO_PADDING | OPENSSL_RAW_DATA ) ; $ Y [ $ i ] = self :: getBitXor ( mb_substr ( $ X , ( $ i - 1 ) * 16 , 16 , '8bit' ) , $ C ) ; } $ Xn = mb_substr ( $ X , ( $ n - 1 ) * 16 , null , '8bit' ) ; $ C = openssl_encrypt ( $ CB [ $ n ] , $ mode , $ K , OPENSSL_NO_PADDING | OPENSSL_RAW_DATA ) ; $ Y [ $ n ] = self :: getBitXor ( $ Xn , self :: getMSB ( self :: getLength ( $ Xn ) , $ C ) ) ; return implode ( '' , $ Y ) ; }
@param string $K
@param int    $key_length
@param string $ICB
@param string $X

@return string
@param string $K @param int $key_length @param string $ICB @param string $X