AttributeCertificateInfo.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  5. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  6. {
  7. public class AttributeCertificateInfo
  8. : Asn1Encodable
  9. {
  10. internal readonly DerInteger version;
  11. internal readonly Holder holder;
  12. internal readonly AttCertIssuer issuer;
  13. internal readonly AlgorithmIdentifier signature;
  14. internal readonly DerInteger serialNumber;
  15. internal readonly AttCertValidityPeriod attrCertValidityPeriod;
  16. internal readonly Asn1Sequence attributes;
  17. internal readonly DerBitString issuerUniqueID;
  18. internal readonly X509Extensions extensions;
  19. public static AttributeCertificateInfo GetInstance(
  20. Asn1TaggedObject obj,
  21. bool isExplicit)
  22. {
  23. return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
  24. }
  25. public static AttributeCertificateInfo GetInstance(
  26. object obj)
  27. {
  28. if (obj is AttributeCertificateInfo)
  29. {
  30. return (AttributeCertificateInfo) obj;
  31. }
  32. if (obj is Asn1Sequence)
  33. {
  34. return new AttributeCertificateInfo((Asn1Sequence) obj);
  35. }
  36. throw new ArgumentException("unknown object in factory: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj");
  37. }
  38. private AttributeCertificateInfo(
  39. Asn1Sequence seq)
  40. {
  41. if (seq.Count < 6 || seq.Count > 9)
  42. {
  43. throw new ArgumentException("Bad sequence size: " + seq.Count);
  44. }
  45. int start;
  46. if (seq[0] is DerInteger) // in version 1 certs version is DEFAULT v1(0)
  47. {
  48. this.version = DerInteger.GetInstance(seq[0]);
  49. start = 1;
  50. }
  51. else
  52. {
  53. this.version = new DerInteger(0);
  54. start = 0;
  55. }
  56. this.holder = Holder.GetInstance(seq[start]);
  57. this.issuer = AttCertIssuer.GetInstance(seq[start + 1]);
  58. this.signature = AlgorithmIdentifier.GetInstance(seq[start + 2]);
  59. this.serialNumber = DerInteger.GetInstance(seq[start + 3]);
  60. this.attrCertValidityPeriod = AttCertValidityPeriod.GetInstance(seq[start + 4]);
  61. this.attributes = Asn1Sequence.GetInstance(seq[start + 5]);
  62. for (int i = start + 6; i < seq.Count; i++)
  63. {
  64. Asn1Encodable obj = (Asn1Encodable) seq[i];
  65. if (obj is DerBitString)
  66. {
  67. this.issuerUniqueID = DerBitString.GetInstance(seq[i]);
  68. }
  69. else if (obj is Asn1Sequence || obj is X509Extensions)
  70. {
  71. this.extensions = X509Extensions.GetInstance(seq[i]);
  72. }
  73. }
  74. }
  75. public DerInteger Version
  76. {
  77. get { return version; }
  78. }
  79. public Holder Holder
  80. {
  81. get { return holder; }
  82. }
  83. public AttCertIssuer Issuer
  84. {
  85. get { return issuer; }
  86. }
  87. public AlgorithmIdentifier Signature
  88. {
  89. get { return signature; }
  90. }
  91. public DerInteger SerialNumber
  92. {
  93. get { return serialNumber; }
  94. }
  95. public AttCertValidityPeriod AttrCertValidityPeriod
  96. {
  97. get { return attrCertValidityPeriod; }
  98. }
  99. public Asn1Sequence Attributes
  100. {
  101. get { return attributes; }
  102. }
  103. public DerBitString IssuerUniqueID
  104. {
  105. get { return issuerUniqueID; }
  106. }
  107. public X509Extensions Extensions
  108. {
  109. get { return extensions; }
  110. }
  111. /**
  112. * Produce an object suitable for an Asn1OutputStream.
  113. * <pre>
  114. * AttributeCertificateInfo ::= Sequence {
  115. * version AttCertVersion -- version is v2,
  116. * holder Holder,
  117. * issuer AttCertIssuer,
  118. * signature AlgorithmIdentifier,
  119. * serialNumber CertificateSerialNumber,
  120. * attrCertValidityPeriod AttCertValidityPeriod,
  121. * attributes Sequence OF Attr,
  122. * issuerUniqueID UniqueIdentifier OPTIONAL,
  123. * extensions Extensions OPTIONAL
  124. * }
  125. *
  126. * AttCertVersion ::= Integer { v2(1) }
  127. * </pre>
  128. */
  129. public override Asn1Object ToAsn1Object()
  130. {
  131. Asn1EncodableVector v = new Asn1EncodableVector(9);
  132. if (!version.HasValue(0))
  133. {
  134. v.Add(version);
  135. }
  136. v.Add(holder, issuer, signature, serialNumber, attrCertValidityPeriod, attributes);
  137. v.AddOptional(issuerUniqueID, extensions);
  138. return new DerSequence(v);
  139. }
  140. }
  141. }
  142. #pragma warning restore
  143. #endif