[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/vendor/paragonie/constant_time_encoding/src/ -> Binary.php (source)

   1  <?php
   2  declare(strict_types=1);
   3  namespace ParagonIE\ConstantTime;
   4  
   5  use TypeError;
   6  
   7  /**
   8   *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
   9   *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
  10   *
  11   *  Permission is hereby granted, free of charge, to any person obtaining a copy
  12   *  of this software and associated documentation files (the "Software"), to deal
  13   *  in the Software without restriction, including without limitation the rights
  14   *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  15   *  copies of the Software, and to permit persons to whom the Software is
  16   *  furnished to do so, subject to the following conditions:
  17   *
  18   *  The above copyright notice and this permission notice shall be included in all
  19   *  copies or substantial portions of the Software.
  20   *
  21   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  22   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  23   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  24   *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  25   *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  26   *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  27   *  SOFTWARE.
  28   */
  29  
  30  /**
  31   * Class Binary
  32   *
  33   * Binary string operators that don't choke on
  34   * mbstring.func_overload
  35   *
  36   * @package ParagonIE\ConstantTime
  37   */
  38  abstract class Binary
  39  {
  40      /**
  41       * Safe string length
  42       *
  43       * @ref mbstring.func_overload
  44       *
  45       * @param string $str
  46       * @return int
  47       */
  48      public static function safeStrlen(string $str): int
  49      {
  50          if (\function_exists('mb_strlen')) {
  51              // mb_strlen in PHP 7.x can return false.
  52              /** @psalm-suppress RedundantCast */
  53              return (int) \mb_strlen($str, '8bit');
  54          } else {
  55              return \strlen($str);
  56          }
  57      }
  58  
  59      /**
  60       * Safe substring
  61       *
  62       * @ref mbstring.func_overload
  63       *
  64       * @staticvar boolean $exists
  65       * @param string $str
  66       * @param int $start
  67       * @param ?int $length
  68       * @return string
  69       *
  70       * @throws TypeError
  71       */
  72      public static function safeSubstr(
  73          string $str,
  74          int $start = 0,
  75          $length = null
  76      ): string {
  77          if ($length === 0) {
  78              return '';
  79          }
  80          if (\function_exists('mb_substr')) {
  81              return \mb_substr($str, $start, $length, '8bit');
  82          }
  83          // Unlike mb_substr(), substr() doesn't accept NULL for length
  84          if ($length !== null) {
  85              return \substr($str, $start, $length);
  86          } else {
  87              return \substr($str, $start);
  88          }
  89      }
  90  }