コード例 #1
0
        Point IntegerEncoding(BigInteger m_value, BigInteger k_value)
        {
            var m = new FiniteFieldElement(m_value, _curve.Prime);
            var k = new FiniteFieldElement(k_value, _curve.Prime);
            var a = new FiniteFieldElement(_curve.A, _curve.Prime);
            var b = new FiniteFieldElement(_curve.B, _curve.Prime);

            //cache m*k
            var m_times_k = m * k;

            FiniteFieldElement x;
            FiniteFieldElement y;
            for (BigInteger j_value = BigInteger.Zero; j_value < k_value; j_value++)
            {
                var j = new FiniteFieldElement(j_value, _curve.Prime);
                x = (m_times_k + j);

                //z = x^3+ax+b
                var z = (x^3) + (a*x) + b;

                //sqrt mod p
                if (z.TrySqrt(out y))
                {
                    return new WeierstrassCurvePoint(x.Value, y.Value, _curve);
                }
            }

            throw new ArgumentException("Could not encode m as point on curve. Probablistic mapping failed.", "m_value");
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: AriREfLuD/FiniteFieldTools
 FiniteFieldElement NonLinearCombiner(FiniteFieldElement X1, FiniteFieldElement X2, FiniteFieldElement X3, FiniteFieldElement X4)
 {
     return((X1 * X3) + (X2 * X4));
 }