Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Math/EC/AbstractF2mFieldElement.cs
2025-10-09 09:57:24 +09:00

45 lines
1.0 KiB
C#

using System;
namespace Org.BouncyCastle.Math.EC;
public abstract class AbstractF2mFieldElement : ECFieldElement
{
public virtual ECFieldElement HalfTrace()
{
int fieldSize = FieldSize;
if ((fieldSize & 1) == 0)
{
throw new InvalidOperationException("Half-trace only defined for odd m");
}
ECFieldElement eCFieldElement = this;
ECFieldElement eCFieldElement2 = eCFieldElement;
for (int i = 2; i < fieldSize; i += 2)
{
eCFieldElement = eCFieldElement.SquarePow(2);
eCFieldElement2 = eCFieldElement2.Add(eCFieldElement);
}
return eCFieldElement2;
}
public virtual int Trace()
{
int fieldSize = FieldSize;
ECFieldElement eCFieldElement = this;
ECFieldElement eCFieldElement2 = eCFieldElement;
for (int i = 1; i < fieldSize; i++)
{
eCFieldElement = eCFieldElement.Square();
eCFieldElement2 = eCFieldElement2.Add(eCFieldElement);
}
if (eCFieldElement2.IsZero)
{
return 0;
}
if (eCFieldElement2.IsOne)
{
return 1;
}
throw new InvalidOperationException("Internal error in trace calculation");
}
}