Esempio n. 1
0
        /* negate this mod Modulus */
        public void Neg()
        {
            FP m = new FP(a);
            FP t = new FP(0);

            m.Add(b);
            m.Neg();
            t.Copy(m);
            t.Add(b);
            b.Copy(m);
            b.Add(a);
            a.Copy(t);
        }
Esempio n. 2
0
        /* sqrt(a+ib) = sqrt(a+sqrt(a*a-n*b*b)/2)+ib/(2*sqrt(a+sqrt(a*a-n*b*b)/2)) */
        /* returns true if this is QR */
        public bool Sqrt()
        {
            if (IsZilch())
            {
                return(true);
            }
            FP w1 = new FP(b);
            FP w2 = new FP(a);

            w1.Sqr();
            w2.Sqr();
            w1.Add(w2);
            if (w1.Jacobi() != 1)
            {
                Zero();
                return(false);
            }
            w1 = w1.Sqrt();
            w2.Copy(a);
            w2.Add(w1);
            w2.Norm();
            w2.Div2();
            if (w2.Jacobi() != 1)
            {
                w2.Copy(a);
                w2.Sub(w1);
                w2.Norm();
                w2.Div2();
                if (w2.Jacobi() != 1)
                {
                    Zero();
                    return(false);
                }
            }
            w2 = w2.Sqrt();
            a.Copy(w2);
            w2.Add(w2);
            w2.Inverse();
            b.Mul(w2);
            return(true);
        }
Esempio n. 3
0
        /* this=1/this */
        public void Inverse()
        {
            Norm();
            FP w1 = new FP(a);
            FP w2 = new FP(b);

            w1.Sqr();
            w2.Sqr();
            w1.Add(w2);
            w1.Inverse();
            a.Mul(w1);
            w1.Neg();
            w1.Norm();
            b.Mul(w1);
        }
Esempio n. 4
0
        /* this*=this */
        public void Sqr()
        {
            FP w1 = new FP(a);
            FP w3 = new FP(a);
            FP mb = new FP(b);

            w1.Add(b);
            mb.Neg();

            w3.Add(a);
            w3.Norm();
            b.Mul(w3);

            a.Add(mb);

            w1.Norm();
            a.Norm();

            a.Mul(w1);
        }
Esempio n. 5
0
 /* this+=a */
 public void Add(FP2 x)
 {
     a.Add(x.a);
     b.Add(x.b);
 }