Пример #1
0
 public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz)
 {
     Nat256.MulAddTo(x, y, zz);
     if (Nat.Gte(16, zz, Curve25519Field.PExt))
     {
         Curve25519Field.SubPExtFrom(zz);
     }
 }
Пример #2
0
 public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz)
 {
     Nat256.MulAddTo(x, y, zz);
     if (Nat.Gte(16, zz, PExt))
     {
         SubPExtFrom(zz);
     }
 }
Пример #3
0
        public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz)
        {
            uint c = Nat256.MulAddTo(x, y, zz);

            if (c != 0 || (zz[15] >= PExt15 && Nat.Gte(16, zz, PExt)))
            {
                Nat.SubFrom(16, PExt, zz);
            }
        }
Пример #4
0
        public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz)
        {
            uint c = Nat256.MulAddTo(x, y, zz);

            if (c != 0 || (zz[15] == PExt15 && Nat.Gte(16, zz, PExt)))
            {
                if (Nat.AddTo(PExtInv.Length, PExtInv, zz) != 0)
                {
                    Nat.IncAt(16, zz, PExtInv.Length);
                }
            }
        }
Пример #5
0
        private static byte[] CalculateS(byte[] r, byte[] k, byte[] s)
        {
            uint[] t = new uint[ScalarUints * 2];   DecodeScalar(r, 0, t);
            uint[] u = new uint[ScalarUints];       DecodeScalar(k, 0, u);
            uint[] v = new uint[ScalarUints];       DecodeScalar(s, 0, v);

            Nat256.MulAddTo(u, v, t);

            byte[] result = new byte[ScalarBytes * 2];
            for (int i = 0; i < t.Length; ++i)
            {
                Encode32(t[i], result, i * 4);
            }
            return(ReduceScalar(result));
        }