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)