CrlIdentifier.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Reflection;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  6. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Math;
  7. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  8. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf
  9. {
  10. /// <remarks>
  11. /// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
  12. /// <code>
  13. /// CrlIdentifier ::= SEQUENCE
  14. /// {
  15. /// crlissuer Name,
  16. /// crlIssuedTime UTCTime,
  17. /// crlNumber INTEGER OPTIONAL
  18. /// }
  19. /// </code>
  20. /// </remarks>
  21. public class CrlIdentifier
  22. : Asn1Encodable
  23. {
  24. private readonly X509Name crlIssuer;
  25. private readonly Asn1UtcTime crlIssuedTime;
  26. private readonly DerInteger crlNumber;
  27. public static CrlIdentifier GetInstance(object obj)
  28. {
  29. if (obj == null)
  30. return null;
  31. if (obj is CrlIdentifier crlIdentifier)
  32. return crlIdentifier;
  33. if (obj is Asn1Sequence asn1Sequence)
  34. return new CrlIdentifier(asn1Sequence);
  35. throw new ArgumentException("Unknown object in 'CrlIdentifier' factory: " + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj),
  36. nameof(obj));
  37. }
  38. private CrlIdentifier(Asn1Sequence seq)
  39. {
  40. if (seq == null)
  41. throw new ArgumentNullException(nameof(seq));
  42. if (seq.Count < 2 || seq.Count > 3)
  43. throw new ArgumentException("Bad sequence size: " + seq.Count, nameof(seq));
  44. this.crlIssuer = X509Name.GetInstance(seq[0]);
  45. this.crlIssuedTime = Asn1UtcTime.GetInstance(seq[1]);
  46. // Validate crlIssuedTime is in the appropriate year range
  47. crlIssuedTime.ToDateTime(2049);
  48. if (seq.Count > 2)
  49. {
  50. this.crlNumber = DerInteger.GetInstance(seq[2]);
  51. }
  52. }
  53. public CrlIdentifier(X509Name crlIssuer, DateTime crlIssuedTime)
  54. : this(crlIssuer, crlIssuedTime, null)
  55. {
  56. }
  57. public CrlIdentifier(X509Name crlIssuer, DateTime crlIssuedTime, BigInteger crlNumber)
  58. : this(crlIssuer, new Asn1UtcTime(crlIssuedTime, 2049), crlNumber)
  59. {
  60. }
  61. public CrlIdentifier(X509Name crlIssuer, Asn1UtcTime crlIssuedTime)
  62. : this(crlIssuer, crlIssuedTime, null)
  63. {
  64. }
  65. public CrlIdentifier(X509Name crlIssuer, Asn1UtcTime crlIssuedTime, BigInteger crlNumber)
  66. {
  67. if (crlIssuer == null)
  68. throw new ArgumentNullException(nameof(crlIssuer));
  69. if (crlIssuedTime == null)
  70. throw new ArgumentNullException(nameof(crlIssuedTime));
  71. // Validate crlIssuedTime is in the appropriate year range
  72. crlIssuedTime.ToDateTime(2049);
  73. this.crlIssuer = crlIssuer;
  74. this.crlIssuedTime = crlIssuedTime;
  75. if (null != crlNumber)
  76. {
  77. this.crlNumber = new DerInteger(crlNumber);
  78. }
  79. }
  80. public X509Name CrlIssuer
  81. {
  82. get { return crlIssuer; }
  83. }
  84. public DateTime CrlIssuedTime
  85. {
  86. get { return crlIssuedTime.ToDateTime(2049); }
  87. }
  88. public BigInteger CrlNumber
  89. {
  90. get { return crlNumber == null ? null : crlNumber.Value; }
  91. }
  92. public override Asn1Object ToAsn1Object()
  93. {
  94. Asn1EncodableVector v = new Asn1EncodableVector(crlIssuer.ToAsn1Object(), crlIssuedTime);
  95. v.AddOptional(crlNumber);
  96. return new DerSequence(v);
  97. }
  98. }
  99. }
  100. #pragma warning restore
  101. #endif