You are here

public static function ParagonIE_Sodium_Core32_Curve25519::fe_frombytes 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::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

@psalm-suppress MixedMethodCall

Parameters

string $s:

Return value

ParagonIE_Sodium_Core32_Curve25519_Fe

Throws

RangeException

SodiumException

TypeError

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

File

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

Class

ParagonIE_Sodium_Core32_Curve25519
Class ParagonIE_Sodium_Core32_Curve25519

Code

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

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

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

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

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

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

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

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

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

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

  /** @var ParagonIE_Sodium_Core32_Int32 $h9 */
  $h9 = ParagonIE_Sodium_Core32_Int32::fromInt((self::load_3(self::substr($s, 29, 3)) & 8388607) << 2);
  $carry9 = $h9
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h0 = $h0
    ->addInt32($carry9
    ->mulInt(19, 5));
  $h9 = $h9
    ->subInt32($carry9
    ->shiftLeft(25));
  $carry1 = $h1
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h2 = $h2
    ->addInt32($carry1);
  $h1 = $h1
    ->subInt32($carry1
    ->shiftLeft(25));
  $carry3 = $h3
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h4 = $h4
    ->addInt32($carry3);
  $h3 = $h3
    ->subInt32($carry3
    ->shiftLeft(25));
  $carry5 = $h5
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h6 = $h6
    ->addInt32($carry5);
  $h5 = $h5
    ->subInt32($carry5
    ->shiftLeft(25));
  $carry7 = $h7
    ->addInt(1 << 24)
    ->shiftRight(25);
  $h8 = $h8
    ->addInt32($carry7);
  $h7 = $h7
    ->subInt32($carry7
    ->shiftLeft(25));
  $carry0 = $h0
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h1 = $h1
    ->addInt32($carry0);
  $h0 = $h0
    ->subInt32($carry0
    ->shiftLeft(26));
  $carry2 = $h2
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h3 = $h3
    ->addInt32($carry2);
  $h2 = $h2
    ->subInt32($carry2
    ->shiftLeft(26));
  $carry4 = $h4
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h5 = $h5
    ->addInt32($carry4);
  $h4 = $h4
    ->subInt32($carry4
    ->shiftLeft(26));
  $carry6 = $h6
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h7 = $h7
    ->addInt32($carry6);
  $h6 = $h6
    ->subInt32($carry6
    ->shiftLeft(26));
  $carry8 = $h8
    ->addInt(1 << 25)
    ->shiftRight(26);
  $h9 = $h9
    ->addInt32($carry8);
  $h8 = $h8
    ->subInt32($carry8
    ->shiftLeft(26));
  return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(array(
    $h0,
    $h1,
    $h2,
    $h3,
    $h4,
    $h5,
    $h6,
    $h7,
    $h8,
    $h9,
  ));
}