19        if (
key.PublicKey.HasValue)
 
   30            if (span.
Length != 2 * 
key.PrivateKey.Length + 1)
 
   34            x = span.
Slice(1, 
key.PrivateKey.Length).ToArray();
 
   35            y = span.
Slice(1 + 
key.PrivateKey.Length).ToArray();
 
   46            D = 
key.PrivateKey.ToArray()
 
 
   53        if (!keyParameters.HasValue && !algId.Parameters.HasValue)
 
   57        if (keyParameters.HasValue && algId.Parameters.HasValue)
 
   61            keyParameters.Value.Encode(asnWriter);
 
 
   71        if (domainParameters.Specified.HasValue)
 
   75        if (domainParameters.Named == 
null)
 
   81            "1.2.840.10045.3.1.7" => System.Security.Cryptography.Oids.secp256r1Oid, 
 
   82            "1.3.132.0.34" => System.Security.Cryptography.Oids.secp384r1Oid, 
 
   83            "1.3.132.0.35" => System.Security.Cryptography.Oids.secp521r1Oid, 
 
   84            _ => new Oid(domainParameters.Named, null), 
 
 
  102        if (specifiedParameters.Version < 1 || specifiedParameters.Version > 3)
 
  106        if (specifiedParameters.Version > 1 && !specifiedParameters.Curve.Seed.HasValue)
 
  110        string fieldType = specifiedParameters.FieldID.FieldType;
 
  113        if (!(fieldType == 
"1.2.840.10045.1.1"))
 
  115            if (!(fieldType == 
"1.2.840.10045.1.2"))
 
  131            if (!(
text == 
"1.2.840.10045.1.2.3.2"))
 
  133                if (!(
text == 
"1.2.840.10045.1.2.3.3"))
 
  168            if (readOnlySpan[0] == 0)
 
  170                readOnlySpan = readOnlySpan.
Slice(1);
 
  172            if (readOnlySpan.
Length > 82)
 
  183            eCCurve.Prime = 
array;
 
  190            eCCurve.Polynomial = 
array;
 
  193        result.A = specifiedParameters.Curve.
A.ToUnsignedIntegerBytes(
array.Length);
 
  194        result.B = specifiedParameters.Curve.B.ToUnsignedIntegerBytes(
array.Length);
 
  195        result.Order = specifiedParameters.Order.ToUnsignedIntegerBytes(
array.Length);
 
  197        if (span[0] != 4 || span.
Length != 2 * 
array.Length + 1)
 
  201        result.G.X = span.
Slice(1, 
array.Length).ToArray();
 
  202        result.G.Y = span.
Slice(1 + 
array.Length).ToArray();
 
  203        if (specifiedParameters.Cofactor.HasValue)
 
  205            result.Cofactor = specifiedParameters.Cofactor.Value.ToUnsignedIntegerBytes();
 
 
  220        writer.WriteObjectIdentifier(
"1.2.840.10045.2.1");
 
 
  228        if (ecParameters.
D == 
null)
 
 
  238    [
return: NotNullIfNotNull(
"attributes")]
 
  241        if (attributes == 
null)
 
  248        for (
int i = 0; i < attributes.Length; i++)
 
  250            attributes[i].Encode(asnWriter);
 
 
  261            if (
string.IsNullOrEmpty(oid.
Value))
 
 
  282        int m = (k3 = (k2 = (k = -1)));
 
  292            writer.WriteObjectIdentifier(
"1.2.840.10045.1.1");
 
  297            writer.WriteObjectIdentifier(
"1.2.840.10045.1.2");
 
  302                writer.WriteObjectIdentifier(
"1.2.840.10045.1.2.3.3");
 
  311                writer.WriteObjectIdentifier(
"1.2.840.10045.1.2.3.2");
 
 
  329        byte[] polynomial = ecParameters.Curve.Polynomial;
 
  330        int num = polynomial.Length - 1;
 
  331        if (polynomial[0] == 0 || (polynomial[num] & 1) != 1)
 
  335        for (
int num2 = 7; num2 >= 0; num2--)
 
  337            int num3 = 1 << num2;
 
  338            if ((polynomial[0] & num3) == num3)
 
  340                m = checked(8 * num + num2);
 
  343        for (
int i = 0; i < polynomial.Length; i++)
 
  346            byte b = polynomial[num4];
 
  347            for (
int j = 0; j < 8; j++)
 
  350                if ((b & num5) != num5)
 
  354                int num6 = 8 * i + j;
 
 
  399        if (curve.Seed != 
null)
 
  401            writer.WriteBitString(curve.Seed);
 
 
  409        for (i = 0; i < fieldElement.Length - 1 && fieldElement[i] == 0; i++)
 
  412        writer.WriteOctetString(fieldElement.AsSpan(i));
 
 
  417        int num = ecParameters.Curve.G.X.Length * 2 + 1;
 
  420        ecParameters.Curve.G.X.CopyTo(
array.AsSpan(1));
 
  421        ecParameters.Curve.G.Y.CopyTo(
array.AsSpan(1 + ecParameters.Curve.G.X.Length));
 
 
  428        int num = ecParameters.Q.X.Length * 2 + 1;
 
  431        ecParameters.Q.X.AsSpan().CopyTo(
array.AsSpan(1));
 
  432        ecParameters.Q.Y.AsSpan().CopyTo(
array.AsSpan(1 + ecParameters.Q.X.Length));
 
 
  442        if (includeDomainParameters)
 
  449        if (ecParameters.Q.X != 
null)
 
 
static void Reverse(Array array)
 
void Set(int index, bool value)
 
unsafe void CopyTo(Array array, int index)
 
static string Cryptography_Der_Invalid_Encoding
 
static string Cryptography_CurveNotSupported
 
static string Cryptography_ECC_NamedCurvesOnly
 
static string Format(string resourceFormat, object p1)
 
static string Cryptography_NotValidPublicOrPrivateKey
 
static string Cryptography_CSP_NoPrivateKey
 
static string Cryptography_InvalidECCharacteristic2Curve
 
static void Return(byte[] array, int clearSize=-1)
 
static byte[] Rent(int minimumLength)
 
static Oid FromFriendlyName(string friendlyName, OidGroup group)
 
unsafe ReadOnlySpan< T > Span
 
ReadOnlySpan< T > Slice(int start)
 
static ECDomainParameters Decode(ReadOnlyMemory< byte > encoded, AsnEncodingRules ruleSet)
 
static ECCurve CreateFromOid(Oid curveOid)