ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

Fe.php (2977B)


      1 <?php
      2 
      3 if (class_exists('ParagonIE_Sodium_Core_Curve25519_Fe', false)) {
      4     return;
      5 }
      6 
      7 /**
      8  * Class ParagonIE_Sodium_Core_Curve25519_Fe
      9  *
     10  * This represents a Field Element
     11  */
     12 class ParagonIE_Sodium_Core_Curve25519_Fe implements ArrayAccess
     13 {
     14     /**
     15      * @var array<int, int>
     16      */
     17     protected $container = array();
     18 
     19     /**
     20      * @var int
     21      */
     22     protected $size = 10;
     23 
     24     /**
     25      * @internal You should not use this directly from another application
     26      *
     27      * @param array<int, int> $array
     28      * @param bool $save_indexes
     29      * @return self
     30      */
     31     public static function fromArray($array, $save_indexes = null)
     32     {
     33         $count = count($array);
     34         if ($save_indexes) {
     35             $keys = array_keys($array);
     36         } else {
     37             $keys = range(0, $count - 1);
     38         }
     39         $array = array_values($array);
     40         /** @var array<int, int> $keys */
     41 
     42         $obj = new ParagonIE_Sodium_Core_Curve25519_Fe();
     43         if ($save_indexes) {
     44             for ($i = 0; $i < $count; ++$i) {
     45                 $obj->offsetSet($keys[$i], $array[$i]);
     46             }
     47         } else {
     48             for ($i = 0; $i < $count; ++$i) {
     49                 $obj->offsetSet($i, $array[$i]);
     50             }
     51         }
     52         return $obj;
     53     }
     54 
     55     /**
     56      * @internal You should not use this directly from another application
     57      *
     58      * @param int|null $offset
     59      * @param int $value
     60      * @return void
     61      * @psalm-suppress MixedArrayOffset
     62      */
     63     public function offsetSet($offset, $value)
     64     {
     65         if (!is_int($value)) {
     66             throw new InvalidArgumentException('Expected an integer');
     67         }
     68         if (is_null($offset)) {
     69             $this->container[] = $value;
     70         } else {
     71             $this->container[$offset] = $value;
     72         }
     73     }
     74 
     75     /**
     76      * @internal You should not use this directly from another application
     77      *
     78      * @param int $offset
     79      * @return bool
     80      * @psalm-suppress MixedArrayOffset
     81      */
     82     public function offsetExists($offset)
     83     {
     84         return isset($this->container[$offset]);
     85     }
     86 
     87     /**
     88      * @internal You should not use this directly from another application
     89      *
     90      * @param int $offset
     91      * @return void
     92      * @psalm-suppress MixedArrayOffset
     93      */
     94     public function offsetUnset($offset)
     95     {
     96         unset($this->container[$offset]);
     97     }
     98 
     99     /**
    100      * @internal You should not use this directly from another application
    101      *
    102      * @param int $offset
    103      * @return int
    104      * @psalm-suppress MixedArrayOffset
    105      */
    106     public function offsetGet($offset)
    107     {
    108         if (!isset($this->container[$offset])) {
    109             $this->container[$offset] = 0;
    110         }
    111         return (int) ($this->container[$offset]);
    112     }
    113 
    114     /**
    115      * @internal You should not use this directly from another application
    116      *
    117      * @return array
    118      */
    119     public function __debugInfo()
    120     {
    121         return array(implode(', ', $this->container));
    122     }
    123 }