CertifiedKeyPair.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Crmf;
  5. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp
  6. {
  7. public class CertifiedKeyPair
  8. : Asn1Encodable
  9. {
  10. public static CertifiedKeyPair GetInstance(object obj)
  11. {
  12. if (obj is CertifiedKeyPair certifiedKeyPair)
  13. return certifiedKeyPair;
  14. if (obj != null)
  15. return new CertifiedKeyPair(Asn1Sequence.GetInstance(obj));
  16. return null;
  17. }
  18. private readonly CertOrEncCert m_certOrEncCert;
  19. private readonly EncryptedKey m_privateKey;
  20. private readonly PkiPublicationInfo m_publicationInfo;
  21. private CertifiedKeyPair(Asn1Sequence seq)
  22. {
  23. m_certOrEncCert = CertOrEncCert.GetInstance(seq[0]);
  24. if (seq.Count >= 2)
  25. {
  26. if (seq.Count == 2)
  27. {
  28. Asn1TaggedObject tagged = Asn1TaggedObject.GetInstance(seq[1]);
  29. if (tagged.TagNo == 0)
  30. {
  31. m_privateKey = EncryptedKey.GetInstance(tagged.GetObject());
  32. }
  33. else
  34. {
  35. m_publicationInfo = PkiPublicationInfo.GetInstance(tagged.GetObject());
  36. }
  37. }
  38. else
  39. {
  40. m_privateKey = EncryptedKey.GetInstance(Asn1TaggedObject.GetInstance(seq[1]).GetObject());
  41. m_publicationInfo = PkiPublicationInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[2]).GetObject());
  42. }
  43. }
  44. }
  45. public CertifiedKeyPair(CertOrEncCert certOrEncCert)
  46. : this(certOrEncCert, (EncryptedKey)null, null)
  47. {
  48. }
  49. public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedValue privateKey,
  50. PkiPublicationInfo publicationInfo)
  51. : this(certOrEncCert, privateKey == null ? null : new EncryptedKey(privateKey), publicationInfo)
  52. {
  53. }
  54. public CertifiedKeyPair(CertOrEncCert certOrEncCert, EncryptedKey privateKey,
  55. PkiPublicationInfo publicationInfo)
  56. {
  57. if (certOrEncCert == null)
  58. throw new ArgumentNullException(nameof(certOrEncCert));
  59. m_certOrEncCert = certOrEncCert;
  60. m_privateKey = privateKey;
  61. m_publicationInfo = publicationInfo;
  62. }
  63. public virtual CertOrEncCert CertOrEncCert => m_certOrEncCert;
  64. public virtual EncryptedKey PrivateKey => m_privateKey;
  65. public virtual PkiPublicationInfo PublicationInfo => m_publicationInfo;
  66. /**
  67. * <pre>
  68. * CertifiedKeyPair ::= SEQUENCE {
  69. * certOrEncCert CertOrEncCert,
  70. * privateKey [0] EncryptedValue OPTIONAL,
  71. * -- see [CRMF] for comment on encoding
  72. * publicationInfo [1] PKIPublicationInfo OPTIONAL
  73. * }
  74. * </pre>
  75. * @return a basic ASN.1 object representation.
  76. */
  77. public override Asn1Object ToAsn1Object()
  78. {
  79. Asn1EncodableVector v = new Asn1EncodableVector(m_certOrEncCert);
  80. v.AddOptionalTagged(true, 0, m_privateKey);
  81. v.AddOptionalTagged(true, 1, m_publicationInfo);
  82. return new DerSequence(v);
  83. }
  84. }
  85. }
  86. #pragma warning restore
  87. #endif