SignerInfo.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. public SignerInfo(
  61. Asn1Sequence seq)
  62. {
  63. IEnumerator e = seq.GetEnumerator();
  64. e.MoveNext();
  65. version = (DerInteger) e.Current;
  66. e.MoveNext();
  67. sid = SignerIdentifier.GetInstance(e.Current);
  68. e.MoveNext();
  69. digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
  70. e.MoveNext();
  71. object obj = e.Current;
  72. if (obj is Asn1TaggedObject)
  73. {
  74. authenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) obj, false);
  75. e.MoveNext();
  76. digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
  77. }
  78. else
  79. {
  80. authenticatedAttributes = null;
  81. digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj);
  82. }
  83. e.MoveNext();
  84. encryptedDigest = DerOctetString.GetInstance(e.Current);
  85. if (e.MoveNext())
  86. {
  87. unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) e.Current, false);
  88. }
  89. else
  90. {
  91. unauthenticatedAttributes = null;
  92. }
  93. }
  94. public DerInteger Version
  95. {
  96. get { return version; }
  97. }
  98. public SignerIdentifier SignerID
  99. {
  100. get { return sid; }
  101. }
  102. public Asn1Set AuthenticatedAttributes
  103. {
  104. get { return authenticatedAttributes; }
  105. }
  106. public AlgorithmIdentifier DigestAlgorithm
  107. {
  108. get { return digAlgorithm; }
  109. }
  110. public Asn1OctetString EncryptedDigest
  111. {
  112. get { return encryptedDigest; }
  113. }
  114. public AlgorithmIdentifier DigestEncryptionAlgorithm
  115. {
  116. get { return digEncryptionAlgorithm; }
  117. }
  118. public Asn1Set UnauthenticatedAttributes
  119. {
  120. get { return unauthenticatedAttributes; }
  121. }
  122. /**
  123. * Produce an object suitable for an Asn1OutputStream.
  124. * <pre>
  125. * SignerInfo ::= Sequence {
  126. * version Version,
  127. * SignerIdentifier sid,
  128. * digestAlgorithm DigestAlgorithmIdentifier,
  129. * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
  130. * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
  131. * encryptedDigest EncryptedDigest,
  132. * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
  133. * }
  134. *
  135. * EncryptedDigest ::= OCTET STRING
  136. *
  137. * DigestAlgorithmIdentifier ::= AlgorithmIdentifier
  138. *
  139. * DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
  140. * </pre>
  141. */
  142. public override Asn1Object ToAsn1Object()
  143. {
  144. Asn1EncodableVector v = new Asn1EncodableVector(version, sid, digAlgorithm);
  145. v.AddOptionalTagged(false, 0, authenticatedAttributes);
  146. v.Add(digEncryptionAlgorithm, encryptedDigest);
  147. v.AddOptionalTagged(false, 1, unauthenticatedAttributes);
  148. return new DerSequence(v);
  149. }
  150. }
  151. }
  152. #pragma warning restore
  153. #endif