Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetSpecifiedECCurveCore() [1/2]

static ECCurve System.Security.Cryptography.EccKeyFormatHelper.GetSpecifiedECCurveCore ( SpecifiedECDomain specifiedParameters)
inlinestaticprivate

Definition at line 161 of file EccKeyFormatHelper.cs.

162 {
163 if (specifiedParameters.Version < 1 || specifiedParameters.Version > 3)
164 {
165 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
166 }
167 if (specifiedParameters.Version > 1 && !specifiedParameters.Curve.Seed.HasValue)
168 {
169 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
170 }
171 string fieldType = specifiedParameters.FieldID.FieldType;
172 bool flag;
173 byte[] array;
174 if (!(fieldType == "1.2.840.10045.1.1"))
175 {
176 if (!(fieldType == "1.2.840.10045.1.2"))
177 {
178 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
179 }
180 flag = false;
181 AsnReader asnReader = new AsnReader(specifiedParameters.FieldID.Parameters, AsnEncodingRules.BER);
182 AsnReader asnReader2 = asnReader.ReadSequence();
183 asnReader.ThrowIfNotEmpty();
184 if (!asnReader2.TryReadInt32(out var value) || value > 661 || value < 0)
185 {
186 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
187 }
188 int value2 = -1;
189 int value3 = -1;
190 string text = asnReader2.ReadObjectIdentifier();
191 int value4;
192 if (!(text == "1.2.840.10045.1.2.3.2"))
193 {
194 if (!(text == "1.2.840.10045.1.2.3.3"))
195 {
196 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
197 }
198 AsnReader asnReader3 = asnReader2.ReadSequence();
199 if (!asnReader3.TryReadInt32(out value4) || !asnReader3.TryReadInt32(out value2) || !asnReader3.TryReadInt32(out value3) || value4 < 1 || value2 <= value4 || value3 <= value2 || value3 >= value)
200 {
201 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
202 }
203 asnReader3.ThrowIfNotEmpty();
204 }
205 else if (!asnReader2.TryReadInt32(out value4) || value4 >= value || value4 < 1)
206 {
207 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
208 }
209 asnReader2.ThrowIfNotEmpty();
210 BitArray bitArray = new BitArray(value + 1);
211 bitArray.Set(value, value: true);
212 bitArray.Set(value4, value: true);
213 bitArray.Set(0, value: true);
214 if (value2 > 0)
215 {
216 bitArray.Set(value2, value: true);
217 bitArray.Set(value3, value: true);
218 }
219 array = new byte[(value + 7) / 8];
220 bitArray.CopyTo(array, 0);
221 Array.Reverse(array);
222 }
223 else
224 {
225 flag = true;
226 AsnReader asnReader4 = new AsnReader(specifiedParameters.FieldID.Parameters, AsnEncodingRules.BER);
227 ReadOnlySpan<byte> readOnlySpan = asnReader4.ReadIntegerBytes().Span;
228 asnReader4.ThrowIfNotEmpty();
229 if (readOnlySpan[0] == 0)
230 {
231 readOnlySpan = readOnlySpan.Slice(1);
232 }
233 if (readOnlySpan.Length > 82)
234 {
235 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
236 }
237 array = readOnlySpan.ToArray();
238 }
239 ECCurve result;
240 if (flag)
241 {
242 ECCurve eCCurve = default(ECCurve);
243 eCCurve.CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass;
244 eCCurve.Prime = array;
245 result = eCCurve;
246 }
247 else
248 {
249 ECCurve eCCurve = default(ECCurve);
250 eCCurve.CurveType = ECCurve.ECCurveType.Characteristic2;
251 eCCurve.Polynomial = array;
252 result = eCCurve;
253 }
254 result.A = specifiedParameters.Curve.A.ToUnsignedIntegerBytes(array.Length);
255 result.B = specifiedParameters.Curve.B.ToUnsignedIntegerBytes(array.Length);
256 result.Order = specifiedParameters.Order.ToUnsignedIntegerBytes(array.Length);
257 ReadOnlySpan<byte> span = specifiedParameters.Base.Span;
258 if (span[0] != 4 || span.Length != 2 * array.Length + 1)
259 {
260 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
261 }
262 result.G.X = span.Slice(1, array.Length).ToArray();
263 result.G.Y = span.Slice(1 + array.Length).ToArray();
264 if (specifiedParameters.Cofactor.HasValue)
265 {
266 result.Cofactor = specifiedParameters.Cofactor.Value.ToUnsignedIntegerBytes();
267 }
268 return result;
269 }
void Set(int index, bool value)
Definition BitArray.cs:326
unsafe void CopyTo(Array array, int index)
Definition BitArray.cs:820
string ReadObjectIdentifier(Asn1Tag? expectedTag=null)
Definition AsnReader.cs:256
AsnReader ReadSequence(Asn1Tag? expectedTag=null)
Definition AsnReader.cs:264
ReadOnlyMemory< byte > ReadIntegerBytes(Asn1Tag? expectedTag=null)
Definition AsnReader.cs:139
bool TryReadInt32(out int value, Asn1Tag? expectedTag=null)
Definition AsnReader.cs:156
static string Cryptography_Der_Invalid_Encoding
Definition SR.cs:50
Definition SR.cs:7
unsafe ReadOnlySpan< T > Span
ReadOnlyMemory< byte > Parameters
Definition FieldID.cs:9

References System.Security.Cryptography.Asn1.CurveAsn.A, System.array, System.Security.Cryptography.Asn1.CurveAsn.B, System.Security.Cryptography.Asn1.SpecifiedECDomain.Base, System.Security.Cryptography.Asn1.SpecifiedECDomain.Cofactor, System.Collections.BitArray.CopyTo(), System.SR.Cryptography_Der_Invalid_Encoding, System.Security.Cryptography.Asn1.SpecifiedECDomain.Curve, System.Security.Cryptography.Asn1.SpecifiedECDomain.FieldID, System.Security.Cryptography.Asn1.FieldID.FieldType, System.ReadOnlySpan< T >.Length, System.Security.Cryptography.Asn1.SpecifiedECDomain.Order, System.Security.Cryptography.Asn1.FieldID.Parameters, System.Formats.Asn1.AsnReader.ReadIntegerBytes(), System.Formats.Asn1.AsnReader.ReadObjectIdentifier(), System.Formats.Asn1.AsnReader.ReadSequence(), System.Array.Reverse(), System.Security.Cryptography.Asn1.CurveAsn.Seed, System.Collections.BitArray.Set(), System.ReadOnlySpan< T >.Slice(), System.ReadOnlyMemory< T >.Span, System.text, System.Formats.Asn1.AsnReader.ThrowIfNotEmpty(), System.ReadOnlySpan< T >.ToArray(), System.Formats.Asn1.AsnReader.TryReadInt32(), System.value, and System.Security.Cryptography.Asn1.SpecifiedECDomain.Version.

Referenced by System.Security.Cryptography.EccKeyFormatHelper.GetSpecifiedECCurve(), and System.Security.Cryptography.EccKeyFormatHelper.GetSpecifiedECCurve().