CertResponse.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp
  5. {
  6. public class CertResponse
  7. : Asn1Encodable
  8. {
  9. public static CertResponse GetInstance(object obj)
  10. {
  11. if (obj is CertResponse certResponse)
  12. return certResponse;
  13. if (obj != null)
  14. return new CertResponse(Asn1Sequence.GetInstance(obj));
  15. return null;
  16. }
  17. private readonly DerInteger m_certReqId;
  18. private readonly PkiStatusInfo m_status;
  19. private readonly CertifiedKeyPair m_certifiedKeyPair;
  20. private readonly Asn1OctetString m_rspInfo;
  21. private CertResponse(Asn1Sequence seq)
  22. {
  23. m_certReqId = DerInteger.GetInstance(seq[0]);
  24. m_status = PkiStatusInfo.GetInstance(seq[1]);
  25. if (seq.Count >= 3)
  26. {
  27. if (seq.Count == 3)
  28. {
  29. Asn1Encodable o = seq[2];
  30. if (o is Asn1OctetString)
  31. {
  32. m_rspInfo = Asn1OctetString.GetInstance(o);
  33. }
  34. else
  35. {
  36. m_certifiedKeyPair = CertifiedKeyPair.GetInstance(o);
  37. }
  38. }
  39. else
  40. {
  41. m_certifiedKeyPair = CertifiedKeyPair.GetInstance(seq[2]);
  42. m_rspInfo = Asn1OctetString.GetInstance(seq[3]);
  43. }
  44. }
  45. }
  46. public CertResponse(DerInteger certReqId, PkiStatusInfo status)
  47. : this(certReqId, status, null, null)
  48. {
  49. }
  50. public CertResponse(DerInteger certReqId, PkiStatusInfo status, CertifiedKeyPair certifiedKeyPair,
  51. Asn1OctetString rspInfo)
  52. {
  53. if (certReqId == null)
  54. throw new ArgumentNullException(nameof(certReqId));
  55. if (status == null)
  56. throw new ArgumentNullException(nameof(status));
  57. m_certReqId = certReqId;
  58. m_status = status;
  59. m_certifiedKeyPair = certifiedKeyPair;
  60. m_rspInfo = rspInfo;
  61. }
  62. public virtual DerInteger CertReqID => m_certReqId;
  63. public virtual PkiStatusInfo Status => m_status;
  64. public virtual CertifiedKeyPair CertifiedKeyPair => m_certifiedKeyPair;
  65. /**
  66. * <pre>
  67. * CertResponse ::= SEQUENCE {
  68. * certReqId INTEGER,
  69. * -- to match this response with corresponding request (a value
  70. * -- of -1 is to be used if certReqId is not specified in the
  71. * -- corresponding request)
  72. * status PKIStatusInfo,
  73. * certifiedKeyPair CertifiedKeyPair OPTIONAL,
  74. * rspInfo OCTET STRING OPTIONAL
  75. * -- analogous to the id-regInfo-utf8Pairs string defined
  76. * -- for regInfo in CertReqMsg [CRMF]
  77. * }
  78. * </pre>
  79. * @return a basic ASN.1 object representation.
  80. */
  81. public override Asn1Object ToAsn1Object()
  82. {
  83. Asn1EncodableVector v = new Asn1EncodableVector(m_certReqId, m_status);
  84. v.AddOptional(m_certifiedKeyPair, m_rspInfo);
  85. return new DerSequence(v);
  86. }
  87. }
  88. }
  89. #pragma warning restore
  90. #endif