Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
X509Certificate.cs
Go to the documentation of this file.
4using System.Text;
8
10
12{
13 private volatile byte[] _lazyCertHash;
14
15 private volatile string _lazyIssuer;
16
17 private volatile string _lazySubject;
18
19 private volatile byte[] _lazySerialNumber;
20
21 private volatile string _lazyKeyAlgorithm;
22
23 private volatile byte[] _lazyKeyAlgorithmParameters;
24
25 private volatile byte[] _lazyPublicKey;
26
28
30
32 {
33 get
34 {
35 if (Pal == null)
36 {
37 return IntPtr.Zero;
38 }
39 return Pal.Handle;
40 }
41 }
42
43 public string Issuer
44 {
45 get
46 {
48 string text = _lazyIssuer;
49 if (text == null)
50 {
51 text = (_lazyIssuer = Pal.Issuer);
52 }
53 return text;
54 }
55 }
56
57 public string Subject
58 {
59 get
60 {
62 string text = _lazySubject;
63 if (text == null)
64 {
65 text = (_lazySubject = Pal.Subject);
66 }
67 return text;
68 }
69 }
70
71 internal ICertificatePalCore? Pal { get; private set; }
72
73 public virtual void Reset()
74 {
75 _lazyCertHash = null;
76 _lazyIssuer = null;
77 _lazySubject = null;
78 _lazySerialNumber = null;
79 _lazyKeyAlgorithm = null;
81 _lazyPublicKey = null;
85 if (pal != null)
86 {
87 Pal = null;
88 pal.Dispose();
89 }
90 }
91
92 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
94 {
95 }
96
97 public X509Certificate(byte[] data)
98 : this(new ReadOnlySpan<byte>(data))
99 {
100 }
101
102 private protected X509Certificate(ReadOnlySpan<byte> data)
103 {
104 if (!data.IsEmpty)
105 {
106 using (SafePasswordHandle password = new SafePasswordHandle((string)null))
107 {
108 Pal = CertificatePal.FromBlob(data, password, X509KeyStorageFlags.DefaultKeySet);
109 }
110 }
111 }
112
117
118 [CLSCompliant(false)]
123
134
135 [CLSCompliant(false)]
146
157
162
164 {
165 Pal = pal;
166 }
167
172
177
178 [CLSCompliant(false)]
183
194
205
206 [CLSCompliant(false)]
218
220 {
221 if (cert == null)
222 {
223 throw new ArgumentNullException("cert");
224 }
225 if (cert.Pal != null)
226 {
228 }
229 }
230
232 : this()
233 {
235 }
236
238 {
239 return new X509Certificate(filename);
240 }
241
243 {
244 return new X509Certificate(filename);
245 }
246
251
253 {
255 }
256
257 public void Dispose()
258 {
259 Dispose(disposing: true);
260 }
261
262 protected virtual void Dispose(bool disposing)
263 {
264 if (disposing)
265 {
266 Reset();
267 }
268 }
269
270 public override bool Equals([NotNullWhen(true)] object? obj)
271 {
273 {
274 return false;
275 }
276 return Equals(other);
277 }
278
279 public virtual bool Equals([NotNullWhen(true)] X509Certificate? other)
280 {
281 if (other == null)
282 {
283 return false;
284 }
285 if (Pal == null)
286 {
287 return other.Pal == null;
288 }
289 if (!Issuer.Equals(other.Issuer))
290 {
291 return false;
292 }
294 byte[] rawSerialNumber2 = other.GetRawSerialNumber();
295 if (rawSerialNumber.Length != rawSerialNumber2.Length)
296 {
297 return false;
298 }
299 for (int i = 0; i < rawSerialNumber.Length; i++)
300 {
302 {
303 return false;
304 }
305 }
306 return true;
307 }
308
309 public virtual byte[] Export(X509ContentType contentType)
310 {
311 return Export(contentType, (string?)null);
312 }
313
314 public virtual byte[] Export(X509ContentType contentType, string? password)
315 {
317 if (Pal == null)
318 {
319 throw new CryptographicException(-2147467261);
320 }
322 return Pal.Export(contentType, password2);
323 }
324
325 [CLSCompliant(false)]
327 {
329 if (Pal == null)
330 {
331 throw new CryptographicException(-2147467261);
332 }
334 return Pal.Export(contentType, password2);
335 }
336
337 public virtual string GetRawCertDataString()
338 {
340 return GetRawCertData().ToHexStringUpper();
341 }
342
343 public virtual byte[] GetCertHash()
344 {
346 return GetRawCertHash().CloneByteArray();
347 }
348
349 public virtual byte[] GetCertHash(HashAlgorithmName hashAlgorithm)
350 {
352 return GetCertHash(hashAlgorithm, Pal);
353 }
354
355 private static byte[] GetCertHash(HashAlgorithmName hashAlgorithm, ICertificatePalCore certPal)
356 {
358 incrementalHash.AppendData(certPal.RawData);
359 return incrementalHash.GetHashAndReset();
360 }
361
363 {
366 incrementalHash.AppendData(Pal.RawData);
367 return incrementalHash.TryGetHashAndReset(destination, out bytesWritten);
368 }
369
370 public virtual string GetCertHashString()
371 {
373 return GetRawCertHash().ToHexStringUpper();
374 }
375
376 public virtual string GetCertHashString(HashAlgorithmName hashAlgorithm)
377 {
379 return GetCertHashString(hashAlgorithm, Pal);
380 }
381
382 internal static string GetCertHashString(HashAlgorithmName hashAlgorithm, ICertificatePalCore certPal)
383 {
384 return GetCertHash(hashAlgorithm, certPal).ToHexStringUpper();
385 }
386
387 private byte[] GetRawCertHash()
388 {
389 return _lazyCertHash ?? (_lazyCertHash = Pal.Thumbprint);
390 }
391
392 public virtual string GetEffectiveDateString()
393 {
394 return GetNotBefore().ToString();
395 }
396
397 public virtual string GetExpirationDateString()
398 {
399 return GetNotAfter().ToString();
400 }
401
402 public virtual string GetFormat()
403 {
404 return "X509";
405 }
406
407 public virtual string GetPublicKeyString()
408 {
409 return GetPublicKey().ToHexStringUpper();
410 }
411
412 public virtual byte[] GetRawCertData()
413 {
415 return Pal.RawData.CloneByteArray();
416 }
417
418 public override int GetHashCode()
419 {
420 if (Pal == null)
421 {
422 return 0;
423 }
424 byte[] rawCertHash = GetRawCertHash();
425 int num = 0;
426 for (int i = 0; i < rawCertHash.Length && i < 4; i++)
427 {
428 num = (num << 8) | rawCertHash[i];
429 }
430 return num;
431 }
432
433 public virtual string GetKeyAlgorithm()
434 {
436 string text = _lazyKeyAlgorithm;
437 if (text == null)
438 {
439 text = (_lazyKeyAlgorithm = Pal.KeyAlgorithm);
440 }
441 return text;
442 }
443
444 public virtual byte[] GetKeyAlgorithmParameters()
445 {
448 if (array == null)
449 {
450 array = (_lazyKeyAlgorithmParameters = Pal.KeyAlgorithmParameters);
451 }
452 return array.CloneByteArray();
453 }
454
455 public virtual string GetKeyAlgorithmParametersString()
456 {
459 return keyAlgorithmParameters.ToHexStringUpper();
460 }
461
462 public virtual byte[] GetPublicKey()
463 {
465 byte[] array = _lazyPublicKey;
466 if (array == null)
467 {
468 array = (_lazyPublicKey = Pal.PublicKeyValue);
469 }
470 return array.CloneByteArray();
471 }
472
473 public virtual byte[] GetSerialNumber()
474 {
476 byte[] array = GetRawSerialNumber().CloneByteArray();
478 return array;
479 }
480
481 public virtual string GetSerialNumberString()
482 {
484 return GetRawSerialNumber().ToHexStringUpper();
485 }
486
487 private byte[] GetRawSerialNumber()
488 {
489 return _lazySerialNumber ?? (_lazySerialNumber = Pal.SerialNumber);
490 }
491
492 [Obsolete("X509Certificate.GetName has been deprecated. Use the Subject property instead.")]
493 public virtual string GetName()
494 {
496 return Pal.LegacySubject;
497 }
498
499 [Obsolete("X509Certificate.GetIssuerName has been deprecated. Use the Issuer property instead.")]
500 public virtual string GetIssuerName()
501 {
503 return Pal.LegacyIssuer;
504 }
505
506 public override string ToString()
507 {
508 return ToString(fVerbose: false);
509 }
510
511 public virtual string ToString(bool fVerbose)
512 {
513 if (!fVerbose || Pal == null)
514 {
515 return GetType().ToString();
516 }
518 stringBuilder.AppendLine("[Subject]");
519 stringBuilder.Append(" ");
520 stringBuilder.AppendLine(Subject);
521 stringBuilder.AppendLine();
522 stringBuilder.AppendLine("[Issuer]");
523 stringBuilder.Append(" ");
524 stringBuilder.AppendLine(Issuer);
525 stringBuilder.AppendLine();
526 stringBuilder.AppendLine("[Serial Number]");
527 stringBuilder.Append(" ");
528 byte[] serialNumber = GetSerialNumber();
530 stringBuilder.Append(serialNumber.ToHexArrayUpper());
531 stringBuilder.AppendLine();
532 stringBuilder.AppendLine();
533 stringBuilder.AppendLine("[Not Before]");
534 stringBuilder.Append(" ");
536 stringBuilder.AppendLine();
537 stringBuilder.AppendLine("[Not After]");
538 stringBuilder.Append(" ");
539 stringBuilder.AppendLine(FormatDate(GetNotAfter()));
540 stringBuilder.AppendLine();
541 stringBuilder.AppendLine("[Thumbprint]");
542 stringBuilder.Append(" ");
543 stringBuilder.Append(GetRawCertHash().ToHexArrayUpper());
544 stringBuilder.AppendLine();
545 return stringBuilder.ToString();
546 }
547
548 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
549 public virtual void Import(byte[] rawData)
550 {
552 }
553
554 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
559
560 [CLSCompliant(false)]
561 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
566
567 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
568 public virtual void Import(string fileName)
569 {
571 }
572
573 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
578
579 [CLSCompliant(false)]
580 [Obsolete("X509Certificate and X509Certificate2 are immutable. Use the appropriate constructor to create a new certificate.", DiagnosticId = "SYSLIB0026", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
585
587 {
591 {
592 dateTime = (_lazyNotAfter = Pal.NotAfter);
593 }
594 return dateTime;
595 }
596
598 {
602 {
603 dateTime = (_lazyNotBefore = Pal.NotBefore);
604 }
605 return dateTime;
606 }
607
608 internal void ThrowIfInvalid()
609 {
610 if (Pal == null)
611 {
613 }
614 }
615
616 protected static string FormatDate(DateTime date)
617 {
619 if (!cultureInfo.DateTimeFormat.Calendar.IsValidDay(date.Year, date.Month, date.Day, 0))
620 {
621 if (cultureInfo.DateTimeFormat.Calendar is UmAlQuraCalendar)
622 {
625 }
626 else
627 {
629 }
630 }
631 return date.ToString(cultureInfo);
632 }
633
646
654}
static ICertificatePal FromOtherCert(X509Certificate copyFrom)
static ICertificatePal FromHandle(IntPtr handle)
static ICertificatePal FromBlob(ReadOnlySpan< byte > rawData, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
static ICertificatePal FromFile(string fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
static void Reverse(Array array)
Definition Array.cs:2207
static CultureInfo CurrentCulture
static CultureInfo InvariantCulture
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Argument_InvalidFlag
Definition SR.cs:688
static string NotSupported_ImmutableX509Certificate
Definition SR.cs:116
static string Cryptography_X509_InvalidContentType
Definition SR.cs:94
static string Cryptography_X509_InvalidFlagCombination
Definition SR.cs:100
static string Cryptography_InvalidHandle
Definition SR.cs:72
static string Arg_EmptyOrNullArray
Definition SR.cs:14
Definition SR.cs:7
static IncrementalHash CreateHash(HashAlgorithmName hashAlgorithm)
static X509Certificate CreateFromCertFile(string filename)
virtual bool TryGetCertHash(HashAlgorithmName hashAlgorithm, Span< byte > destination, out int bytesWritten)
X509Certificate(byte[] rawData, string? password, X509KeyStorageFlags keyStorageFlags)
virtual void Import(string fileName, string? password, X509KeyStorageFlags keyStorageFlags)
X509Certificate(string fileName, SecureString? password, X509KeyStorageFlags keyStorageFlags)
X509Certificate(ReadOnlySpan< byte > rawData, ReadOnlySpan< char > password, X509KeyStorageFlags keyStorageFlags)
X509Certificate(SerializationInfo info, StreamingContext context)
static X509Certificate CreateFromSignedFile(string filename)
X509Certificate(string fileName, ReadOnlySpan< char > password, X509KeyStorageFlags keyStorageFlags)
virtual void Import(string fileName, SecureString? password, X509KeyStorageFlags keyStorageFlags)
virtual byte[] Export(X509ContentType contentType)
virtual byte[] Export(X509ContentType contentType, SecureString? password)
X509Certificate(byte[] rawData, SecureString? password)
virtual void Import(byte[] rawData, SecureString? password, X509KeyStorageFlags keyStorageFlags)
virtual byte[] GetCertHash(HashAlgorithmName hashAlgorithm)
virtual byte[] Export(X509ContentType contentType, string? password)
static void ValidateKeyStorageFlags(X509KeyStorageFlags keyStorageFlags)
virtual string GetCertHashString(HashAlgorithmName hashAlgorithm)
virtual bool Equals([NotNullWhen(true)] X509Certificate? other)
virtual void Import(byte[] rawData, string? password, X509KeyStorageFlags keyStorageFlags)
X509Certificate(string fileName, SecureString? password)
X509Certificate(string fileName, string? password, X509KeyStorageFlags keyStorageFlags)
static byte[] GetCertHash(HashAlgorithmName hashAlgorithm, ICertificatePalCore certPal)
static string GetCertHashString(HashAlgorithmName hashAlgorithm, ICertificatePalCore certPal)
X509Certificate(byte[] rawData, SecureString? password, X509KeyStorageFlags keyStorageFlags)
override bool Equals([NotNullWhen(true)] object? obj)
void GetObjectData(SerializationInfo info, StreamingContext context)
static readonly DateTime MinValue
Definition DateTime.cs:35
override string ToString()
Definition DateTime.cs:1109
static readonly IntPtr Zero
Definition IntPtr.cs:18