Subversion Repositories oidplus

Rev

Rev 846 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. /**
  4.  * ASN1 Signature Handler
  5.  *
  6.  * PHP version 5
  7.  *
  8.  * Handles signatures in the format described in
  9.  * https://tools.ietf.org/html/rfc3279#section-2.2.2
  10.  *
  11.  * @category  Crypt
  12.  * @package   Common
  13.  * @author    Jim Wigginton <terrafrost@php.net>
  14.  * @copyright 2016 Jim Wigginton
  15.  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  16.  * @link      http://phpseclib.sourceforge.net
  17.  */
  18.  
  19. namespace phpseclib3\Crypt\DSA\Formats\Signature;
  20.  
  21. use phpseclib3\File\ASN1 as Encoder;
  22. use phpseclib3\File\ASN1\Maps;
  23. use phpseclib3\Math\BigInteger;
  24.  
  25. /**
  26.  * ASN1 Signature Handler
  27.  *
  28.  * @package Common
  29.  * @author  Jim Wigginton <terrafrost@php.net>
  30.  * @access  public
  31.  */
  32. abstract class ASN1
  33. {
  34.     /**
  35.      * Loads a signature
  36.      *
  37.      * @access public
  38.      * @param string $sig
  39.      * @return array|bool
  40.      */
  41.     public static function load($sig)
  42.     {
  43.         if (!is_string($sig)) {
  44.             return false;
  45.         }
  46.  
  47.         $decoded = Encoder::decodeBER($sig);
  48.         if (empty($decoded)) {
  49.             return false;
  50.         }
  51.         $components = Encoder::asn1map($decoded[0], Maps\DssSigValue::MAP);
  52.  
  53.         return $components;
  54.     }
  55.  
  56.     /**
  57.      * Returns a signature in the appropriate format
  58.      *
  59.      * @access public
  60.      * @param \phpseclib3\Math\BigInteger $r
  61.      * @param \phpseclib3\Math\BigInteger $s
  62.      * @return string
  63.      */
  64.     public static function save(BigInteger $r, BigInteger $s)
  65.     {
  66.         return Encoder::encodeDER(compact('r', 's'), Maps\DssSigValue::MAP);
  67.     }
  68. }
  69.