SignaturePolicyId.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections.Generic;
  5. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Esf
  7. {
  8. /// <remarks>
  9. /// <code>
  10. /// SignaturePolicyId ::= SEQUENCE {
  11. /// sigPolicyIdentifier SigPolicyId,
  12. /// sigPolicyHash SigPolicyHash,
  13. /// sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL
  14. /// }
  15. ///
  16. /// SigPolicyId ::= OBJECT IDENTIFIER
  17. ///
  18. /// SigPolicyHash ::= OtherHashAlgAndValue
  19. /// </code>
  20. /// </remarks>
  21. public class SignaturePolicyId
  22. : Asn1Encodable
  23. {
  24. private readonly DerObjectIdentifier sigPolicyIdentifier;
  25. private readonly OtherHashAlgAndValue sigPolicyHash;
  26. private readonly Asn1Sequence sigPolicyQualifiers;
  27. public static SignaturePolicyId GetInstance(
  28. object obj)
  29. {
  30. if (obj == null || obj is SignaturePolicyId)
  31. return (SignaturePolicyId) obj;
  32. if (obj is Asn1Sequence)
  33. return new SignaturePolicyId((Asn1Sequence) obj);
  34. throw new ArgumentException(
  35. "Unknown object in 'SignaturePolicyId' factory: "
  36. + Org.BouncyCastle.Utilities.Platform.GetTypeName(obj),
  37. "obj");
  38. }
  39. private SignaturePolicyId(
  40. Asn1Sequence seq)
  41. {
  42. if (seq == null)
  43. throw new ArgumentNullException("seq");
  44. if (seq.Count < 2 || seq.Count > 3)
  45. throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
  46. this.sigPolicyIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object();
  47. this.sigPolicyHash = OtherHashAlgAndValue.GetInstance(seq[1].ToAsn1Object());
  48. if (seq.Count > 2)
  49. {
  50. this.sigPolicyQualifiers = (Asn1Sequence) seq[2].ToAsn1Object();
  51. }
  52. }
  53. public SignaturePolicyId(
  54. DerObjectIdentifier sigPolicyIdentifier,
  55. OtherHashAlgAndValue sigPolicyHash)
  56. : this(sigPolicyIdentifier, sigPolicyHash, null)
  57. {
  58. }
  59. public SignaturePolicyId(
  60. DerObjectIdentifier sigPolicyIdentifier,
  61. OtherHashAlgAndValue sigPolicyHash,
  62. params SigPolicyQualifierInfo[] sigPolicyQualifiers)
  63. {
  64. if (sigPolicyIdentifier == null)
  65. throw new ArgumentNullException("sigPolicyIdentifier");
  66. if (sigPolicyHash == null)
  67. throw new ArgumentNullException("sigPolicyHash");
  68. this.sigPolicyIdentifier = sigPolicyIdentifier;
  69. this.sigPolicyHash = sigPolicyHash;
  70. if (sigPolicyQualifiers != null)
  71. {
  72. this.sigPolicyQualifiers = new DerSequence(sigPolicyQualifiers);
  73. }
  74. }
  75. public SignaturePolicyId(
  76. DerObjectIdentifier sigPolicyIdentifier,
  77. OtherHashAlgAndValue sigPolicyHash,
  78. IEnumerable<SigPolicyQualifierInfo> sigPolicyQualifiers)
  79. {
  80. if (sigPolicyIdentifier == null)
  81. throw new ArgumentNullException("sigPolicyIdentifier");
  82. if (sigPolicyHash == null)
  83. throw new ArgumentNullException("sigPolicyHash");
  84. this.sigPolicyIdentifier = sigPolicyIdentifier;
  85. this.sigPolicyHash = sigPolicyHash;
  86. if (sigPolicyQualifiers != null)
  87. {
  88. this.sigPolicyQualifiers = new DerSequence(
  89. Asn1EncodableVector.FromEnumerable(sigPolicyQualifiers));
  90. }
  91. }
  92. public DerObjectIdentifier SigPolicyIdentifier
  93. {
  94. get { return sigPolicyIdentifier; }
  95. }
  96. public OtherHashAlgAndValue SigPolicyHash
  97. {
  98. get { return sigPolicyHash; }
  99. }
  100. public SigPolicyQualifierInfo[] GetSigPolicyQualifiers()
  101. {
  102. if (sigPolicyQualifiers == null)
  103. return null;
  104. SigPolicyQualifierInfo[] infos = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count];
  105. for (int i = 0; i < sigPolicyQualifiers.Count; ++i)
  106. {
  107. infos[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]);
  108. }
  109. return infos;
  110. }
  111. public override Asn1Object ToAsn1Object()
  112. {
  113. Asn1EncodableVector v = new Asn1EncodableVector(
  114. sigPolicyIdentifier, sigPolicyHash.ToAsn1Object());
  115. if (sigPolicyQualifiers != null)
  116. {
  117. v.Add(sigPolicyQualifiers.ToAsn1Object());
  118. }
  119. return new DerSequence(v);
  120. }
  121. }
  122. }
  123. #pragma warning restore
  124. #endif