ln.crypto.ec/ln.crypto.ec/Field.cs

44 lines
829 B
C#

using System;
using System.Numerics;
namespace ln.crypto.ec
{
public class Field
{
public static Field Default { get; set; } = null; // new IntField(UBigInteger.ZERO.Resize(256) - 1);
public static Field INFINITY { get; private set; } = new Field();
public BigInteger FieldModulo { get; private set; }
public Field(BigInteger p){
this.FieldModulo = p;
}
private Field(){
this.FieldModulo = 0;
}
public BigInteger Fit(BigInteger value)
{
if (FieldModulo.IsZero){
return value;
}
value %= FieldModulo;
if (value.Sign < 0)
{
value += FieldModulo;
}
return value;
}
public BigInteger AdditiveInverse(BigInteger value){
return FieldModulo - value;
}
public override string ToString(){
return String.Format("[IntField p={0}]",this.FieldModulo);
}
}
}