44 lines
829 B
C#
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);
|
|
}
|
|
|
|
}
|
|
} |