public static function ParagonIE_Sodium_Core_Curve25519::fe_frombytes in Automatic Updates 7
Same name and namespace in other branches
- 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,
));
}