fe_sub example


    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;
    }

    

    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;
    }

    
# fe_cswap(x2,x3,swap);             self::fe_cswap($x2$x3$swap);

            # fe_cswap(z2,z3,swap);             self::fe_cswap($z2$z3$swap);

            # 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);
# b &= 1;             $b &= 1;
            # swap ^= b;             $swap ^= $b;
            # fe_cswap(x2,x3,swap);             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);

            
self::fe_pow22523($x), /* x = (uv^7)^((q-5)/8) */
                $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(
            

        $A = self::ge_frombytes_negate_vartime(self::substr($pk, 0, 32));
        $p1 = self::ge_mul_l($A);
        if (!self::fe_isnonzero($p1->X)) {
            throw new SodiumException('Unexpected zero result');
        }

        # fe_1(one_minus_y);         # fe_sub(one_minus_y, one_minus_y, A.Y);         # fe_invert(one_minus_y, one_minus_y);         $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
        );

        $A = self::ge_frombytes_negate_vartime($pk);
        $p1 = self::ge_mul_l($A);
        if (!self::fe_isnonzero($p1->X)) {
            throw new SodiumException('Unexpected zero result');
        }

        # fe_1(one_minus_y);         # fe_sub(one_minus_y, one_minus_y, A.Y);         # fe_invert(one_minus_y, one_minus_y);         $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),
            
Home | Imprint | This part of the site doesn't use cookies.