254 {
255 if (rsaParameters.Modulus == null)
256 {
258 }
259 if (rsaParameters.Exponent == null || rsaParameters.Exponent.Length > 4)
260 {
262 }
263 int num = rsaParameters.Modulus.Length;
264 int num2 = (num + 1) / 2;
265 if (rsaParameters.P != null)
266 {
267 if (rsaParameters.P.Length != num2)
268 {
270 }
271 if (rsaParameters.Q == null || rsaParameters.Q.Length != num2)
272 {
274 }
275 if (rsaParameters.DP == null || rsaParameters.DP.Length != num2)
276 {
278 }
279 if (rsaParameters.DQ == null || rsaParameters.DQ.Length != num2)
280 {
282 }
283 if (rsaParameters.InverseQ == null || rsaParameters.InverseQ.Length != num2)
284 {
286 }
287 if (rsaParameters.D == null || rsaParameters.D.Length != num)
288 {
290 }
291 }
292 bool flag = rsaParameters.P != null && rsaParameters.P.Length != 0;
295 binaryWriter.
Write((
byte)(flag ? 7u : 6u));
296 binaryWriter.
Write((
byte)2);
297 binaryWriter.
Write((ushort)0);
298 binaryWriter.
Write(41984u);
299 binaryWriter.
Write(flag ? 843141970 : 826364754);
300 binaryWriter.
Write((uint)(num * 8));
301 uint num3 = 0u;
302 for (
int i = 0;
i < rsaParameters.Exponent.Length;
i++)
303 {
304 num3 <<= 8;
305 num3 |= rsaParameters.Exponent[
i];
306 }
307 binaryWriter.
Write(num3);
308 binaryWriter.WriteReversed(rsaParameters.Modulus);
309 if (flag)
310 {
311 binaryWriter.WriteReversed(rsaParameters.P);
312 binaryWriter.WriteReversed(rsaParameters.Q);
313 binaryWriter.WriteReversed(rsaParameters.DP);
314 binaryWriter.WriteReversed(rsaParameters.DQ);
315 binaryWriter.WriteReversed(rsaParameters.InverseQ);
316 binaryWriter.WriteReversed(rsaParameters.D);
317 }
318 binaryWriter.
Flush();
320 }
static CryptographicException GetBadDataException()
virtual void Write(bool value)