CertifiedKeyPair.cs 2.9 KB

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