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

◆ GetSpecifiedECCurveCore() [2/2]

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

Definition at line 100 of file EccKeyFormatHelper.cs.

101 {
102 if (specifiedParameters.Version < 1 || specifiedParameters.Version > 3)
103 {
104 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
105 }
106 if (specifiedParameters.Version > 1 && !specifiedParameters.Curve.Seed.HasValue)
107 {
108 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
109 }
110 string fieldType = specifiedParameters.FieldID.FieldType;
111 bool flag;
112 byte[] array;
113 if (!(fieldType == "1.2.840.10045.1.1"))
114 {
115 if (!(fieldType == "1.2.840.10045.1.2"))
116 {
117 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
118 }
119 flag = false;
120 AsnReader asnReader = new AsnReader(specifiedParameters.FieldID.Parameters, AsnEncodingRules.BER);
121 AsnReader asnReader2 = asnReader.ReadSequence();
122 asnReader.ThrowIfNotEmpty();
123 if (!asnReader2.TryReadInt32(out var value) || value > 661 || value < 0)
124 {
125 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
126 }
127 int value2 = -1;
128 int value3 = -1;
129 string text = asnReader2.ReadObjectIdentifier();
130 int value4;
131 if (!(text == "1.2.840.10045.1.2.3.2"))
132 {
133 if (!(text == "1.2.840.10045.1.2.3.3"))
134 {
135 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
136 }
137 AsnReader asnReader3 = asnReader2.ReadSequence();
138 if (!asnReader3.TryReadInt32(out value4) || !asnReader3.TryReadInt32(out value2) || !asnReader3.TryReadInt32(out value3) || value4 < 1 || value2 <= value4 || value3 <= value2 || value3 >= value)
139 {
140 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
141 }
142 asnReader3.ThrowIfNotEmpty();
143 }
144 else if (!asnReader2.TryReadInt32(out value4) || value4 >= value || value4 < 1)
145 {
146 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
147 }
148 asnReader2.ThrowIfNotEmpty();
149 BitArray bitArray = new BitArray(value + 1);
150 bitArray.Set(value, value: true);
151 bitArray.Set(value4, value: true);
152 bitArray.Set(0, value: true);
153 if (value2 > 0)
154 {
155 bitArray.Set(value2, value: true);
156 bitArray.Set(value3, value: true);
157 }
158 array = new byte[(value + 7) / 8];
159 bitArray.CopyTo(array, 0);
160 Array.Reverse(array);
161 }
162 else
163 {
164 flag = true;
165 AsnReader asnReader4 = new AsnReader(specifiedParameters.FieldID.Parameters, AsnEncodingRules.BER);
166 ReadOnlySpan<byte> readOnlySpan = asnReader4.ReadIntegerBytes().Span;
167 asnReader4.ThrowIfNotEmpty();
168 if (readOnlySpan[0] == 0)
169 {
170 readOnlySpan = readOnlySpan.Slice(1);
171 }
172 if (readOnlySpan.Length > 82)
173 {
174 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
175 }
176 array = readOnlySpan.ToArray();
177 }
178 ECCurve result;
179 if (flag)
180 {
181 ECCurve eCCurve = default(ECCurve);
182 eCCurve.CurveType = ECCurve.ECCurveType.PrimeShortWeierstrass;
183 eCCurve.Prime = array;
184 result = eCCurve;
185 }
186 else
187 {
188 ECCurve eCCurve = default(ECCurve);
189 eCCurve.CurveType = ECCurve.ECCurveType.Characteristic2;
190 eCCurve.Polynomial = array;
191 result = eCCurve;
192 }
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);
196 ReadOnlySpan<byte> span = specifiedParameters.Base.Span;
197 if (span[0] != 4 || span.Length != 2 * array.Length + 1)
198 {
199 throw new CryptographicException(System.SR.Cryptography_Der_Invalid_Encoding);
200 }
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)
204 {
205 result.Cofactor = specifiedParameters.Cofactor.Value.ToUnsignedIntegerBytes();
206 }
207 return result;
208 }
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.ECCurve.A, System.array, System.Collections.BitArray.CopyTo(), System.SR.Cryptography_Der_Invalid_Encoding, System.ReadOnlySpan< T >.Length, System.Formats.Asn1.AsnReader.ReadIntegerBytes(), System.Formats.Asn1.AsnReader.ReadObjectIdentifier(), System.Formats.Asn1.AsnReader.ReadSequence(), System.Array.Reverse(), 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(), and System.value.