You are here

public static function ParagonIE_Sodium_Core_Curve25519::fe_frombytes in Automatic Updates 7

Same name and namespace in other branches
  1. 8 vendor/paragonie/sodium_compat/src/Core/Curve25519.php \ParagonIE_Sodium_Core_Curve25519::fe_frombytes()

Give: 32-byte string. Receive: A field element object to use for internal calculations.

@internal You should not use this directly from another application

Parameters

string $s:

Return value

ParagonIE_Sodium_Core_Curve25519_Fe

Throws

RangeException

TypeError

2 calls to ParagonIE_Sodium_Core_Curve25519::fe_frombytes()
ParagonIE_Sodium_Core_Curve25519::ge_frombytes_negate_vartime in vendor/paragonie/sodium_compat/src/Core/Curve25519.php
@internal You should not use this directly from another application
ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10 in vendor/paragonie/sodium_compat/src/Core/X25519.php
@internal You should not use this directly from another application

File

vendor/paragonie/sodium_compat/src/Core/Curve25519.php, line 121

Class

ParagonIE_Sodium_Core_Curve25519
Class ParagonIE_Sodium_Core_Curve25519

Code

public static function fe_frombytes($s) {
  if (self::strlen($s) !== 32) {
    throw new RangeException('Expected a 32-byte string.');
  }

  /** @var int $h0 */
  $h0 = self::load_4($s);

  /** @var int $h1 */
  $h1 = self::load_3(self::substr($s, 4, 3)) << 6;

  /** @var int $h2 */
  $h2 = self::load_3(self::substr($s, 7, 3)) << 5;

  /** @var int $h3 */
  $h3 = self::load_3(self::substr($s, 10, 3)) << 3;

  /** @var int $h4 */
  $h4 = self::load_3(self::substr($s, 13, 3)) << 2;

  /** @var int $h5 */
  $h5 = self::load_4(self::substr($s, 16, 4));

  /** @var int $h6 */
  $h6 = self::load_3(self::substr($s, 20, 3)) << 7;

  /** @var int $h7 */
  $h7 = self::load_3(self::substr($s, 23, 3)) << 5;

  /** @var int $h8 */
  $h8 = self::load_3(self::substr($s, 26, 3)) << 4;

  /** @var int $h9 */
  $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2;

  /** @var int $carry9 */
  $carry9 = $h9 + (1 << 24) >> 25;
  $h0 += self::mul($carry9, 19, 5);
  $h9 -= $carry9 << 25;

  /** @var int $carry1 */
  $carry1 = $h1 + (1 << 24) >> 25;
  $h2 += $carry1;
  $h1 -= $carry1 << 25;

  /** @var int $carry3 */
  $carry3 = $h3 + (1 << 24) >> 25;
  $h4 += $carry3;
  $h3 -= $carry3 << 25;

  /** @var int $carry5 */
  $carry5 = $h5 + (1 << 24) >> 25;
  $h6 += $carry5;
  $h5 -= $carry5 << 25;

  /** @var int $carry7 */
  $carry7 = $h7 + (1 << 24) >> 25;
  $h8 += $carry7;
  $h7 -= $carry7 << 25;

  /** @var int $carry0 */
  $carry0 = $h0 + (1 << 25) >> 26;
  $h1 += $carry0;
  $h0 -= $carry0 << 26;

  /** @var int $carry2 */
  $carry2 = $h2 + (1 << 25) >> 26;
  $h3 += $carry2;
  $h2 -= $carry2 << 26;

  /** @var int $carry4 */
  $carry4 = $h4 + (1 << 25) >> 26;
  $h5 += $carry4;
  $h4 -= $carry4 << 26;

  /** @var int $carry6 */
  $carry6 = $h6 + (1 << 25) >> 26;
  $h7 += $carry6;
  $h6 -= $carry6 << 26;

  /** @var int $carry8 */
  $carry8 = $h8 + (1 << 25) >> 26;
  $h9 += $carry8;
  $h8 -= $carry8 << 26;
  return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(array(
    (int) $h0,
    (int) $h1,
    (int) $h2,
    (int) $h3,
    (int) $h4,
    (int) $h5,
    (int) $h6,
    (int) $h7,
    (int) $h8,
    (int) $h9,
  ));
}