[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/ -> SSH2.php (source)

   1  <?php
   2  
   3  /**
   4   * SSH2 Signature Handler
   5   *
   6   * PHP version 5
   7   *
   8   * Handles signatures in the format used by SSH2
   9   *
  10   * @category  Crypt
  11   * @package   Common
  12   * @author    Jim Wigginton <[email protected]>
  13   * @copyright 2016 Jim Wigginton
  14   * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  15   * @link      http://phpseclib.sourceforge.net
  16   */
  17  
  18  namespace phpseclib3\Crypt\EC\Formats\Signature;
  19  
  20  use phpseclib3\Common\Functions\Strings;
  21  use phpseclib3\Math\BigInteger;
  22  
  23  /**
  24   * SSH2 Signature Handler
  25   *
  26   * @package Common
  27   * @author  Jim Wigginton <[email protected]>
  28   * @access  public
  29   */
  30  abstract class SSH2
  31  {
  32      /**
  33       * Loads a signature
  34       *
  35       * @access public
  36       * @param string $sig
  37       * @return mixed
  38       */
  39      public static function load($sig)
  40      {
  41          if (!is_string($sig)) {
  42              return false;
  43          }
  44  
  45          $result = Strings::unpackSSH2('ss', $sig);
  46          if ($result === false) {
  47              return false;
  48          }
  49          list($type, $blob) = $result;
  50          switch ($type) {
  51              // see https://tools.ietf.org/html/rfc5656#section-3.1.2
  52              case 'ecdsa-sha2-nistp256':
  53              case 'ecdsa-sha2-nistp384':
  54              case 'ecdsa-sha2-nistp521':
  55                  break;
  56              default:
  57                  return false;
  58          }
  59  
  60          $result = Strings::unpackSSH2('ii', $blob);
  61          if ($result === false) {
  62              return false;
  63          }
  64  
  65          return [
  66              'r' => $result[0],
  67              's' => $result[1]
  68          ];
  69      }
  70  
  71      /**
  72       * Returns a signature in the appropriate format
  73       *
  74       * @access public
  75       * @param \phpseclib3\Math\BigInteger $r
  76       * @param \phpseclib3\Math\BigInteger $s
  77       * @param string $curve
  78       * @return string
  79       */
  80      public static function save(BigInteger $r, BigInteger $s, $curve)
  81      {
  82          switch ($curve) {
  83              case 'secp256r1':
  84                  $curve = 'nistp256';
  85                  break;
  86              case 'secp384r1':
  87                  $curve = 'nistp384';
  88                  break;
  89              case 'secp521r1':
  90                  $curve = 'nistp521';
  91                  break;
  92              default:
  93                  return false;
  94          }
  95  
  96          $blob = Strings::packSSH2('ii', $r, $s);
  97  
  98          return Strings::packSSH2('ss', 'ecdsa-sha2-' . $curve, $blob);
  99      }
 100  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer