培训考核三期,新版培训,网页版培训登录器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.3 KiB

#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
#pragma warning disable
using System;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X9
{
/**
* ASN.1 def for Elliptic-Curve Field ID structure. See
* X9.62, for further details.
*/
public class X9FieldID
: Asn1Encodable
{
private readonly DerObjectIdentifier id;
private readonly Asn1Object parameters;
/**
* Constructor for elliptic curves over prime fields
* <code>F<sub>2</sub></code>.
* @param primeP The prime <code>p</code> defining the prime field.
*/
public X9FieldID(
BigInteger primeP)
{
this.id = X9ObjectIdentifiers.PrimeField;
this.parameters = new DerInteger(primeP);
}
/**
* Constructor for elliptic curves over binary fields
* <code>F<sub>2<sup>m</sup></sub></code>.
* @param m The exponent <code>m</code> of
* <code>F<sub>2<sup>m</sup></sub></code>.
* @param k1 The integer <code>k1</code> where <code>x<sup>m</sup> +
* x<sup>k1</sup> + 1</code>
* represents the reduction polynomial <code>f(z)</code>.
*/
public X9FieldID(int m, int k1)
: this(m, k1, 0, 0)
{
}
/**
* Constructor for elliptic curves over binary fields
* <code>F<sub>2<sup>m</sup></sub></code>.
* @param m The exponent <code>m</code> of
* <code>F<sub>2<sup>m</sup></sub></code>.
* @param k1 The integer <code>k1</code> where <code>x<sup>m</sup> +
* x<sup>k3</sup> + x<sup>k2</sup> + x<sup>k1</sup> + 1</code>
* represents the reduction polynomial <code>f(z)</code>.
* @param k2 The integer <code>k2</code> where <code>x<sup>m</sup> +
* x<sup>k3</sup> + x<sup>k2</sup> + x<sup>k1</sup> + 1</code>
* represents the reduction polynomial <code>f(z)</code>.
* @param k3 The integer <code>k3</code> where <code>x<sup>m</sup> +
* x<sup>k3</sup> + x<sup>k2</sup> + x<sup>k1</sup> + 1</code>
* represents the reduction polynomial <code>f(z)</code>..
*/
public X9FieldID(
int m,
int k1,
int k2,
int k3)
{
this.id = X9ObjectIdentifiers.CharacteristicTwoField;
Asn1EncodableVector fieldIdParams = new Asn1EncodableVector(new DerInteger(m));
if (k2 == 0)
{
if (k3 != 0)
throw new ArgumentException("inconsistent k values");
fieldIdParams.Add(
X9ObjectIdentifiers.TPBasis,
new DerInteger(k1));
}
else
{
if (k2 <= k1 || k3 <= k2)
throw new ArgumentException("inconsistent k values");
fieldIdParams.Add(
X9ObjectIdentifiers.PPBasis,
new DerSequence(
new DerInteger(k1),
new DerInteger(k2),
new DerInteger(k3)));
}
this.parameters = new DerSequence(fieldIdParams);
}
private X9FieldID(Asn1Sequence seq)
{
this.id = DerObjectIdentifier.GetInstance(seq[0]);
this.parameters = seq[1].ToAsn1Object();
}
public static X9FieldID GetInstance(object obj)
{
if (obj is X9FieldID)
return (X9FieldID)obj;
if (obj == null)
return null;
return new X9FieldID(Asn1Sequence.GetInstance(obj));
}
public DerObjectIdentifier Identifier
{
get { return id; }
}
public Asn1Object Parameters
{
get { return parameters; }
}
/**
* Produce a Der encoding of the following structure.
* <pre>
* FieldID ::= Sequence {
* fieldType FIELD-ID.&amp;id({IOSet}),
* parameters FIELD-ID.&amp;Type({IOSet}{&#64;fieldType})
* }
* </pre>
*/
public override Asn1Object ToAsn1Object()
{
return new DerSequence(id, parameters);
}
}
}
#pragma warning restore
#endif