code: private static function common($K, $key_length, $IV, $A)
      {
          $H = openssl_encrypt(str_repeat("\0", 16), 'aes-'.($key_length).'-ecb', $K, OPENSSL_NO_PADDING | OPENSSL_RAW_DATA); //---
          $iv_len = self::getLength($IV);
  
          if (96 === $iv_len) {
              $J0 = $IV.pack('H*', '00000001');
          } else {
              $s = self::calcVector($IV);
              Assertion::eq(($s + 64) % 8, 0, 'Unable to decrypt or to verify the tag.');
  
              $packed_iv_len = pack('N', $iv_len);
              $iv_len_padding = str_pad($packed_iv_len, 8, "\0", STR_PAD_LEFT);
              $hash_X = $IV.str_pad('', ($s + 64) / 8, "\0").$iv_len_padding;
              $J0 = self::getHash($H, $hash_X);
          }
          $v = self::calcVector($A);
          $a_len_padding = self::addPadding($A);
  
          return [$J0, $v, $a_len_padding, $H];
      }
docs: @param $K
  @param $key_length
  @param $IV
  @param $A
  
  @return array