Exemplo n.º 1
0
		public ECPoint (ECGroup group, Number x, Number y, Number z)
		{
			_group = group;
			_field = group.FiniteField;
			_x = x;
			_y = y;
			_z = z;
		}
Exemplo n.º 2
0
		public ECGroup (Number a, Number b, Number mod, IFiniteField field)
		{
			_a = a;
			_b = b;
			_mod = mod;
			_field = field;
			_a_is_minus3 = (mod.CompareTo (a + Number.Three) == 0);
		}
Exemplo n.º 3
0
		public ECDomainParameters (ECGroup group, ECPoint G, Number order, uint h, uint bits, IFiniteField fieldN, Uri uri)
		{
			_group = group;
			_G = G;
			_order = order;
			_h = h;
			_bits = bits;
			_fieldN = fieldN;
			_uri = uri;
		}
Exemplo n.º 4
0
		public void SqrtTest ()
		{
			IFiniteField[] ffList = new IFiniteField[2];
			ffList[0] = new SECP192r1 ();
			ffList[1] = new Montgomery (ffList[0].Modulus);
			int repeats = 10;
			foreach (IFiniteField ff in ffList) {
				for (int i = 0; i < repeats; i++) {
					Number x = ff.ToElement (Number.CreateRandomElement (ff.Modulus));
					Number xx = ff.Multiply (x, x);
					Number sqrt = ff.Sqrt (xx);
					Assert.IsTrue (ff.Multiply (sqrt, sqrt).CompareTo (xx) == 0);
				}
			}
		}
Exemplo n.º 5
0
		public void PowTest ()
		{
			IFiniteField[] ffList = new IFiniteField[2];
			ffList[0] = new SECP192r1 ();
			ffList[1] = new Montgomery (ffList[0].Modulus);
			foreach (IFiniteField ff in ffList) {
				Number x = ff.ToElement (Number.CreateRandomElement (ff.Modulus));
				Number pow2 = ff.Multiply (x, x);
				Number pow3 = ff.Multiply (pow2, x);
				Number pow4 = ff.Multiply (pow3, x);
				Assert.IsTrue (ff.Pow (x, Number.Zero).CompareTo (ff.ToElement (Number.One)) == 0);
				Assert.IsTrue (ff.Pow (x, Number.One).CompareTo (x) == 0);
				Assert.IsTrue (ff.Pow (x, Number.Two).CompareTo (pow2) == 0);
				Assert.IsTrue (ff.Pow (x, Number.Three).CompareTo (pow3) == 0);
				Assert.IsTrue (ff.Pow (x, Number.Four).CompareTo (pow4) == 0);
			}
		}
Exemplo n.º 6
0
		/// <summary>バイト配列より点を作成する (SEC1, 2.3.4)</summary>
		public ECPoint (ECGroup group, byte[] data)
		{
			_group = group;
			_field = group.FiniteField;
			switch (data[0]) {
				case 0: { // 無限遠点
					ECPoint tmp = _field.GetInfinityPoint (_group);
					_x = tmp._x;
					_y = tmp._y;
					_z = tmp._z;
					return;
				}
				case 2:
				case 3: { // 点圧縮済みデータ
					int keyBits = group.P.BitCount ();
					int keyBytes = (keyBits >> 3) + ((keyBits & 7) == 0 ? 0 : 1);
					if (data.Length != keyBytes + 1)
						throw new ArgumentException ();
					Number x = _field.ToElement (new Number (data, 1, keyBytes, false));
					Number y2 = _field.Add (_field.Multiply (_field.Add (_field.Multiply (x, x), _group.A), x), _group.B); // (x^2 + a)*x + b
					Number y = _field.Sqrt (y2);
					if (_field.ToNormal (y).GetBit (0) != data[0] - 2)
						y = _field.Modulus - y;
					_x = x;
					_y = y;
					_z = _field.ToElement (Number.One);
					return;
				}
				case 4: { // 非圧縮データ
					int keyBits = group.P.BitCount ();
					int keyBytes = (keyBits >> 3) + ((keyBits & 7) == 0 ? 0 : 1);
					_x = _field.ToElement (new Number (data, 1, keyBytes, false));
					_y = _field.ToElement (new Number (data, 1 + keyBytes, keyBytes, false));
					_z = _field.ToElement (Number.One);
					return;
				}
				default:
					throw new ArgumentException ();
			}
		}
 protected ECCurve(IFiniteField field)
 {
     this.m_field = field;
 }
 internal GenericPolynomialExtensionField(IFiniteField subfield, IPolynomial polynomial)
 {
     this.subfield = subfield;
     this.minimalPolynomial = polynomial;
 }
Exemplo n.º 9
0
		public ECDomainParameters (ECGroup group, ECPoint G, Number order, uint h, uint bits, IFiniteField fieldN)
			: this (group, G, order, h, bits, fieldN, null)
		{
		}
Exemplo n.º 10
0
		public static bool IsFpField(IFiniteField field)
		{
			return field.Dimension == 1;
		}
Exemplo n.º 11
0
		public static bool IsF2mField(IFiniteField field)
		{
			return field.Dimension > 1 && field.Characteristic.Equals(BigInteger.Two)
				&& field is IPolynomialExtensionField;
		}
Exemplo n.º 12
0
 internal GenericPolynomialExtensionField(IFiniteField subfield, IPolynomial polynomial)
 {
     this.subfield     = subfield;
     minimalPolynomial = polynomial;
 }
Exemplo n.º 13
0
 protected ECCurve(IFiniteField field)
 {
     this.m_field = field;
 }