SignerInfo.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.Collections;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  7. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cms
  8. {
  9. public class SignerInfo
  10. : Asn1Encodable
  11. {
  12. private DerInteger version;
  13. private SignerIdentifier sid;
  14. private AlgorithmIdentifier digAlgorithm;
  15. private Asn1Set authenticatedAttributes;
  16. private AlgorithmIdentifier digEncryptionAlgorithm;
  17. private Asn1OctetString encryptedDigest;
  18. private Asn1Set unauthenticatedAttributes;
  19. public static SignerInfo GetInstance(
  20. object obj)
  21. {
  22. if (obj == null || obj is SignerInfo)
  23. return (SignerInfo) obj;
  24. if (obj is Asn1Sequence)
  25. return new SignerInfo((Asn1Sequence) obj);
  26. throw new ArgumentException("Unknown object in factory: " + BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.GetTypeName(obj), "obj");
  27. }
  28. public SignerInfo(
  29. SignerIdentifier sid,
  30. AlgorithmIdentifier digAlgorithm,
  31. Asn1Set authenticatedAttributes,
  32. AlgorithmIdentifier digEncryptionAlgorithm,
  33. Asn1OctetString encryptedDigest,
  34. Asn1Set unauthenticatedAttributes)
  35. {
  36. this.version = new DerInteger(sid.IsTagged ? 3 : 1);
  37. this.sid = sid;
  38. this.digAlgorithm = digAlgorithm;
  39. this.authenticatedAttributes = authenticatedAttributes;
  40. this.digEncryptionAlgorithm = digEncryptionAlgorithm;
  41. this.encryptedDigest = encryptedDigest;
  42. this.unauthenticatedAttributes = unauthenticatedAttributes;
  43. }
  44. public SignerInfo(
  45. SignerIdentifier sid,
  46. AlgorithmIdentifier digAlgorithm,
  47. Attributes authenticatedAttributes,
  48. AlgorithmIdentifier digEncryptionAlgorithm,
  49. Asn1OctetString encryptedDigest,
  50. Attributes unauthenticatedAttributes)
  51. {
  52. this.version = new DerInteger(sid.IsTagged ? 3 : 1);
  53. this.sid = sid;
  54. this.digAlgorithm = digAlgorithm;
  55. this.authenticatedAttributes = Asn1Set.GetInstance(authenticatedAttributes);
  56. this.digEncryptionAlgorithm = digEncryptionAlgorithm;
  57. this.encryptedDigest = encryptedDigest;
  58. this.unauthenticatedAttributes = Asn1Set.GetInstance(unauthenticatedAttributes);
  59. }
  60. [Obsolete("Use 'GetInstance' instead")]
  61. public SignerInfo(
  62. Asn1Sequence seq)
  63. {
  64. IEnumerator e = seq.GetEnumerator();
  65. e.MoveNext();
  66. version = (DerInteger) e.Current;
  67. e.MoveNext();
  68. sid = SignerIdentifier.GetInstance(e.Current);
  69. e.MoveNext();
  70. digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
  71. e.MoveNext();
  72. object obj = e.Current;
  73. if (obj is Asn1TaggedObject)
  74. {
  75. authenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) obj, false);
  76. e.MoveNext();
  77. digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
  78. }
  79. else
  80. {
  81. authenticatedAttributes = null;
  82. digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj);
  83. }
  84. e.MoveNext();
  85. encryptedDigest = DerOctetString.GetInstance(e.Current);
  86. if (e.MoveNext())
  87. {
  88. unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) e.Current, false);
  89. }
  90. else
  91. {
  92. unauthenticatedAttributes = null;
  93. }
  94. }
  95. public DerInteger Version
  96. {
  97. get { return version; }
  98. }
  99. public SignerIdentifier SignerID
  100. {
  101. get { return sid; }
  102. }
  103. public Asn1Set AuthenticatedAttributes
  104. {
  105. get { return authenticatedAttributes; }
  106. }
  107. public AlgorithmIdentifier DigestAlgorithm
  108. {
  109. get { return digAlgorithm; }
  110. }
  111. public Asn1OctetString EncryptedDigest
  112. {
  113. get { return encryptedDigest; }
  114. }
  115. public AlgorithmIdentifier DigestEncryptionAlgorithm
  116. {
  117. get { return digEncryptionAlgorithm; }
  118. }
  119. public Asn1Set UnauthenticatedAttributes
  120. {
  121. get { return unauthenticatedAttributes; }
  122. }
  123. /**
  124. * Produce an object suitable for an Asn1OutputStream.
  125. * <pre>
  126. * SignerInfo ::= Sequence {
  127. * version Version,
  128. * SignerIdentifier sid,
  129. * digestAlgorithm DigestAlgorithmIdentifier,
  130. * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
  131. * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
  132. * encryptedDigest EncryptedDigest,
  133. * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
  134. * }
  135. *
  136. * EncryptedDigest ::= OCTET STRING
  137. *
  138. * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
  139. *
  140. * DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
  141. * </pre>
  142. */
  143. public override Asn1Object ToAsn1Object()
  144. {
  145. Asn1EncodableVector v = new Asn1EncodableVector(
  146. version, sid, digAlgorithm);
  147. if (authenticatedAttributes != null)
  148. {
  149. v.Add(new DerTaggedObject(false, 0, authenticatedAttributes));
  150. }
  151. v.Add(digEncryptionAlgorithm, encryptedDigest);
  152. if (unauthenticatedAttributes != null)
  153. {
  154. v.Add(new DerTaggedObject(false, 1, unauthenticatedAttributes));
  155. }
  156. return new DerSequence(v);
  157. }
  158. }
  159. }
  160. #pragma warning restore
  161. #endif