AuthorityInformationAccess.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Text;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509
  7. {
  8. /**
  9. * The AuthorityInformationAccess object.
  10. * <pre>
  11. * id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
  12. *
  13. * AuthorityInfoAccessSyntax ::=
  14. * Sequence SIZE (1..MAX) OF AccessDescription
  15. * AccessDescription ::= Sequence {
  16. * accessMethod OBJECT IDENTIFIER,
  17. * accessLocation GeneralName }
  18. *
  19. * id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
  20. * id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
  21. * id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
  22. * </pre>
  23. */
  24. public class AuthorityInformationAccess
  25. : Asn1Encodable
  26. {
  27. private static AccessDescription[] Copy(AccessDescription[] descriptions)
  28. {
  29. return (AccessDescription[])descriptions.Clone();
  30. }
  31. public static AuthorityInformationAccess GetInstance(object obj)
  32. {
  33. if (obj is AuthorityInformationAccess)
  34. return (AuthorityInformationAccess)obj;
  35. if (obj == null)
  36. return null;
  37. return new AuthorityInformationAccess(Asn1Sequence.GetInstance(obj));
  38. }
  39. public static AuthorityInformationAccess FromExtensions(X509Extensions extensions)
  40. {
  41. return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.AuthorityInfoAccess));
  42. }
  43. private readonly AccessDescription[] descriptions;
  44. private AuthorityInformationAccess(
  45. Asn1Sequence seq)
  46. {
  47. if (seq.Count < 1)
  48. throw new ArgumentException("sequence may not be empty");
  49. this.descriptions = new AccessDescription[seq.Count];
  50. for (int i = 0; i < seq.Count; ++i)
  51. {
  52. descriptions[i] = AccessDescription.GetInstance(seq[i]);
  53. }
  54. }
  55. public AuthorityInformationAccess(
  56. AccessDescription description)
  57. {
  58. this.descriptions = new AccessDescription[]{ description };
  59. }
  60. public AuthorityInformationAccess(
  61. AccessDescription[] descriptions)
  62. {
  63. this.descriptions = Copy(descriptions);
  64. }
  65. /**
  66. * create an AuthorityInformationAccess with the oid and location provided.
  67. */
  68. public AuthorityInformationAccess(DerObjectIdentifier oid, GeneralName location)
  69. : this(new AccessDescription(oid, location))
  70. {
  71. }
  72. public AccessDescription[] GetAccessDescriptions()
  73. {
  74. return Copy(descriptions);
  75. }
  76. public override Asn1Object ToAsn1Object()
  77. {
  78. return new DerSequence(descriptions);
  79. }
  80. public override string ToString()
  81. {
  82. //return "AuthorityInformationAccess: Oid(" + this.descriptions[0].AccessMethod.Id + ")";
  83. StringBuilder buf = new StringBuilder();
  84. buf.AppendLine("AuthorityInformationAccess:");
  85. foreach (AccessDescription description in descriptions)
  86. {
  87. buf.Append(" ")
  88. .Append(description)
  89. .AppendLine();
  90. }
  91. return buf.ToString();
  92. }
  93. }
  94. }
  95. #pragma warning restore
  96. #endif