PKIPublicationInfo.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Math;
  4. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf
  5. {
  6. /**
  7. * <pre>
  8. * PKIPublicationInfo ::= SEQUENCE {
  9. * action INTEGER {
  10. * dontPublish (0),
  11. * pleasePublish (1) },
  12. * pubInfos SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
  13. * -- pubInfos MUST NOT be present if action is "dontPublish"
  14. * -- (if action is "pleasePublish" and pubInfos is omitted,
  15. * -- "dontCare" is assumed)
  16. * </pre>
  17. */
  18. public class PkiPublicationInfo
  19. : Asn1Encodable
  20. {
  21. public static readonly DerInteger DontPublish = new DerInteger(0);
  22. public static readonly DerInteger PleasePublish = new DerInteger(1);
  23. public static PkiPublicationInfo GetInstance(object obj)
  24. {
  25. if (obj is PkiPublicationInfo pkiPublicationInfo)
  26. return pkiPublicationInfo;
  27. if (obj != null)
  28. return new PkiPublicationInfo(Asn1Sequence.GetInstance(obj));
  29. return null;
  30. }
  31. private readonly DerInteger m_action;
  32. private readonly Asn1Sequence m_pubInfos;
  33. private PkiPublicationInfo(Asn1Sequence seq)
  34. {
  35. m_action = DerInteger.GetInstance(seq[0]);
  36. if (seq.Count > 1)
  37. {
  38. m_pubInfos = Asn1Sequence.GetInstance(seq[1]);
  39. }
  40. }
  41. public PkiPublicationInfo(BigInteger action)
  42. : this(new DerInteger(action))
  43. {
  44. }
  45. public PkiPublicationInfo(DerInteger action)
  46. {
  47. m_action = action;
  48. }
  49. /**
  50. * Constructor with a single pubInfo, assumes pleasePublish as the action.
  51. *
  52. * @param pubInfo the pubInfo to be published (can be null if don't care is required).
  53. */
  54. public PkiPublicationInfo(SinglePubInfo pubInfo)
  55. : this(pubInfo != null ? new SinglePubInfo[1]{ pubInfo } : null)
  56. {
  57. }
  58. /**
  59. * Constructor with multiple pubInfo, assumes pleasePublish as the action.
  60. *
  61. * @param pubInfos the pubInfos to be published (can be null if don't care is required).
  62. */
  63. public PkiPublicationInfo(SinglePubInfo[] pubInfos)
  64. {
  65. m_action = PleasePublish;
  66. if (pubInfos != null)
  67. {
  68. m_pubInfos = new DerSequence(pubInfos);
  69. }
  70. }
  71. public virtual DerInteger Action => m_action;
  72. public virtual SinglePubInfo[] GetPubInfos()
  73. {
  74. if (m_pubInfos == null)
  75. return null;
  76. return m_pubInfos.MapElements(SinglePubInfo.GetInstance);
  77. }
  78. /**
  79. * <pre>
  80. * PkiPublicationInfo ::= SEQUENCE {
  81. * action INTEGER {
  82. * dontPublish (0),
  83. * pleasePublish (1) },
  84. * pubInfos SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
  85. * -- pubInfos MUST NOT be present if action is "dontPublish"
  86. * -- (if action is "pleasePublish" and pubInfos is omitted,
  87. * -- "dontCare" is assumed)
  88. * </pre>
  89. * @return a basic ASN.1 object representation.
  90. */
  91. public override Asn1Object ToAsn1Object()
  92. {
  93. if (m_pubInfos == null)
  94. return new DerSequence(m_action);
  95. return new DerSequence(m_action, m_pubInfos);
  96. }
  97. }
  98. }
  99. #pragma warning restore
  100. #endif