code: public static function decrypt($K, $IV, $C, $A, $T)
      {
          Assertion::string($K, 'The key encryption key must be a binary string.');
          $key_length = mb_strlen($K, '8bit') * 8;
          Assertion::inArray($key_length, [128, 192, 256], 'Bad key encryption key length.');
          Assertion::string($IV, 'The Initialization Vector must be a binary string.');
          Assertion::nullOrString($C, 'The data to encrypt must be null or a binary string.');
          Assertion::nullOrString($A, 'The Additional Authentication Data must be null or a binary string.');
  
          $tag_length = self::getLength($T);
          Assertion::integer($tag_length, 'Invalid tag length. Supported values are: 128, 120, 112, 104 and 96.');
          Assertion::inArray($tag_length, [128, 120, 112, 104, 96], 'Invalid tag length. Supported values are: 128, 120, 112, 104 and 96.');
  
          if (version_compare(PHP_VERSION, '7.1.0RC5') >= 0 && null !== $C) {
              return self::decryptWithPHP71($K, $key_length, $IV, $C, $A, $T);
          } elseif (class_exists('\Crypto\Cipher')) {
              return self::decryptWithCryptoExtension($K, $key_length, $IV, $C, $A, $T, $tag_length);
          }
  
          return self::decryptWithPHP($K, $key_length, $IV, $C, $A, $T, $tag_length);
      }
docs: @param string      $K  Key encryption key
  @param string      $IV Initialization vector
  @param string|null $C  Data to encrypt (null for authentication)
  @param string|null $A  Additional Authentication Data
  @param string      $T  Tag
  
  @return string