WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта
функция не описана

ParagonIE_Sodium_Core_Ristretto255::ristretto255_p3_tobytes() public WP 1.0

{} Это метод класса: ParagonIE_Sodium_Core_Ristretto255{}

Хуков нет.

Возвращает

Строку.

Использование

$result = ParagonIE_Sodium_Core_Ristretto255::ristretto255_p3_tobytes( $h );
$h(ParagonIE_Sodium_Core_Curve25519_Ge_P3) (обязательный)
-

Код ParagonIE_Sodium_Core_Ristretto255::ristretto255_p3_tobytes() WP 5.8

<?php
public static function ristretto255_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h)
{
    $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);
    $invsqrtamd = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$invsqrtamd);

    $u1 = self::fe_add($h->Z, $h->Y); /* u1 = Z+Y */
    $zmy = self::fe_sub($h->Z, $h->Y); /* zmy = Z-Y */
    $u1 = self::fe_mul($u1, $zmy); /* u1 = (Z+Y)*(Z-Y) */
    $u2 = self::fe_mul($h->X, $h->Y); /* u2 = X*Y */

    $u1_u2u2 = self::fe_mul(self::fe_sq($u2), $u1); /* u1_u2u2 = u1*u2^2 */
    $one = self::fe_1();

    // fe25519_1(one);
    // (void) ristretto255_sqrt_ratio_m1(inv_sqrt, one, u1_u2u2);
    $result = self::ristretto255_sqrt_ratio_m1($one, $u1_u2u2);
    $inv_sqrt = $result['x'];

    $den1 = self::fe_mul($inv_sqrt, $u1); /* den1 = inv_sqrt*u1 */
    $den2 = self::fe_mul($inv_sqrt, $u2); /* den2 = inv_sqrt*u2 */
    $z_inv = self::fe_mul($h->T, self::fe_mul($den1, $den2)); /* z_inv = den1*den2*T */

    $ix = self::fe_mul($h->X, $sqrtm1); /* ix = X*sqrt(-1) */
    $iy = self::fe_mul($h->Y, $sqrtm1); /* iy = Y*sqrt(-1) */
    $eden = self::fe_mul($den1, $invsqrtamd);

    $t_z_inv =  self::fe_mul($h->T, $z_inv); /* t_z_inv = T*z_inv */
    $rotate = self::fe_isnegative($t_z_inv);

    $x_ = self::fe_copy($h->X);
    $y_ = self::fe_copy($h->Y);
    $den_inv = self::fe_copy($den2);

    $x_ = self::fe_cmov($x_, $iy, $rotate);
    $y_ = self::fe_cmov($y_, $ix, $rotate);
    $den_inv = self::fe_cmov($den_inv, $eden, $rotate);

    $x_z_inv = self::fe_mul($x_, $z_inv);
    $y_ = self::fe_cneg($y_, self::fe_isnegative($x_z_inv));


    // fe25519_sub(s_, h->Z, y_);
    // fe25519_mul(s_, den_inv, s_);
    // fe25519_abs(s_, s_);
    // fe25519_tobytes(s, s_);
    return self::fe_tobytes(
        self::fe_abs(
            self::fe_mul(
                $den_inv,
                self::fe_sub($h->Z, $y_)
            )
        )
    );
}