You are here

public static function ParagonIE_Sodium_Core32_Curve25519::ge_select in Automatic Updates 7

Same name and namespace in other branches
  1. 8 vendor/paragonie/sodium_compat/src/Core32/Curve25519.php \ParagonIE_Sodium_Core32_Curve25519::ge_select()

@internal You should not use this directly from another application

@psalm-suppress MixedArrayAccess @psalm-suppress MixedArrayOffset @psalm-suppress MixedArgument

Parameters

int $pos:

int $b:

Return value

ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp

Throws

SodiumException

TypeError

1 call to ParagonIE_Sodium_Core32_Curve25519::ge_select()
ParagonIE_Sodium_Core32_Curve25519::ge_scalarmult_base in vendor/paragonie/sodium_compat/src/Core32/Curve25519.php
@internal You should not use this directly from another application

File

vendor/paragonie/sodium_compat/src/Core32/Curve25519.php, line 1897

Class

ParagonIE_Sodium_Core32_Curve25519
Class ParagonIE_Sodium_Core32_Curve25519

Code

public static function ge_select($pos = 0, $b = 0) {
  static $base = null;
  if ($base === null) {
    $base = array();
    foreach (self::$base as $i => $bas) {
      for ($j = 0; $j < 8; ++$j) {
        $base[$i][$j] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(array(
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][0]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][1]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][2]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][3]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][4]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][5]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][6]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][7]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][8]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][9]),
        )), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(array(
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][0]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][1]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][2]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][3]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][4]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][5]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][6]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][7]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][8]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][9]),
        )), ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(array(
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][0]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][1]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][2]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][3]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][4]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][5]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][6]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][7]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][8]),
          ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][9]),
        )));
      }
    }
  }
  if (!is_int($pos)) {
    throw new InvalidArgumentException('Position must be an integer');
  }
  if ($pos < 0 || $pos > 31) {
    throw new RangeException('Position is out of range [0, 31]');
  }
  $bnegative = self::negative($b);

  /** @var int $babs */
  $babs = $b - ((-$bnegative & $b) << 1);
  $t = self::ge_precomp_0();
  for ($i = 0; $i < 8; ++$i) {
    $t = self::cmov($t, $base[$pos][$i], self::equal($babs, $i + 1));
  }
  $minusT = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(self::fe_copy($t->yminusx), self::fe_copy($t->yplusx), self::fe_neg($t->xy2d));
  return self::cmov($t, $minusT, -$bnegative);
}