fe_add example

            self::fe_cswap($x2$x3$swap);
            # fe_cswap(z2,z3,swap);             self::fe_cswap($z2$z3$swap);
            # swap = b;             $swap = $b;
            # fe_sub(tmp0,x3,z3);             $tmp0 = self::fe_sub($x3$z3);
            # fe_sub(tmp1,x2,z2);             $tmp1 = self::fe_sub($x2$z2);

            # fe_add(x2,x2,z2);             $x2 = self::fe_add($x2$z2);

            # fe_add(z2,x3,z3);             $z2 = self::fe_add($x3$z3);

            # fe_mul(z3,tmp0,x2);             $z3 = self::fe_mul($tmp0$x2);

            # fe_mul(z2,z2,tmp1);             $z2 = self::fe_mul($z2$tmp1);

            # fe_sq(tmp0,tmp1);
# swap = b;             /** @var int $swap */
            $swap = $b;

            # fe_sub(tmp0,x3,z3);             $tmp0 = self::fe_sub($x3$z3);

            # fe_sub(tmp1,x2,z2);             $tmp1 = self::fe_sub($x2$z2);

            # fe_add(x2,x2,z2);             $x2 = self::fe_add($x2$z2);

            # fe_add(z2,x3,z3);             $z2 = self::fe_add($x3$z3);

            # fe_mul(z3,tmp0,x2);             $z3 = self::fe_mul($tmp0$x2);

            # fe_mul(z2,z2,tmp1);             $z2 = self::fe_mul($z2$tmp1);

            # fe_sq(tmp0,tmp1);

    public static function ge_add(
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YplusX);
        $r->Y = self::fe_mul($r->Y, $q->YminusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0   = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0$r->T);
        $r->T = self::fe_sub($t0$r->T);
        return $r;
    }
self::fe_sub(
                self::fe_1(),
                $A->Y
            )
        );


        # fe_1(x);         # fe_add(x, x, A.Y);         # fe_mul(x, x, one_minus_y);         $x = self::fe_mul(
            self::fe_add(self::fe_1()$A->Y),
            $one_minux_y
        );

        # fe_tobytes(curve25519_pk, x);         return self::fe_tobytes($x);
    }

    /** * @internal You should not use this directly from another application * * @param string $sk * @return string * @throws SodiumException * @throws TypeError */

    public static function ge_add(
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1();
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YplusX);
        $r->Y = self::fe_mul($r->Y, $q->YminusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0   = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0$r->T);
        $r->T = self::fe_sub($t0$r->T);
        return $r;
    }
        $one_minux_y = self::fe_invert(
            self::fe_sub(
                self::fe_1(),
                $A->Y
            )
        );

        # fe_1(x);         # fe_add(x, x, A.Y);         # fe_mul(x, x, one_minus_y);         $x = self::fe_mul(
            self::fe_add(self::fe_1()$A->Y),
            $one_minux_y
        );

        # fe_tobytes(curve25519_pk, x);         return self::fe_tobytes($x);
    }

    /** * @internal You should not use this directly from another application * * @param string $sk * @return string * @throws SodiumException * @throws TypeError */
$v3
            ),
            $u
        ); /* x = uv^3(uv^7)^((q-5)/8) */

        $vxx = self::fe_mul(
            self::fe_sq($x),
            $v
        ); /* vx^2 */

        $m_root_check = self::fe_sub($vxx$u); /* vx^2-u */
        $p_root_check = self::fe_add($vxx$u); /* vx^2+u */
        $f_root_check = self::fe_mul($u$sqrtm1); /* u*sqrt(-1) */
        $f_root_check = self::fe_add($vxx$f_root_check); /* vx^2+u*sqrt(-1) */

        $has_m_root = self::fe_iszero($m_root_check);
        $has_p_root = self::fe_iszero($p_root_check);
        $has_f_root = self::fe_iszero($f_root_check);

        $x_sqrtm1 = self::fe_mul($x$sqrtm1); /* x*sqrt(-1) */

        $x = self::fe_abs(
            self::fe_cmov($x$x_sqrtm1$has_p_root | $has_f_root)
        );
Home | Imprint | This part of the site doesn't use cookies.