Asn1DigestFactory.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.IO;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  7. using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO;
  8. using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
  9. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Operators
  10. {
  11. public class Asn1DigestFactory : IDigestFactory
  12. {
  13. public static Asn1DigestFactory Get(DerObjectIdentifier oid)
  14. {
  15. return new Asn1DigestFactory(DigestUtilities.GetDigest(oid), oid);
  16. }
  17. public static Asn1DigestFactory Get(String mechanism)
  18. {
  19. DerObjectIdentifier oid = DigestUtilities.GetObjectIdentifier(mechanism);
  20. return new Asn1DigestFactory(DigestUtilities.GetDigest(oid), oid);
  21. }
  22. private readonly IDigest mDigest;
  23. private readonly DerObjectIdentifier mOid;
  24. public Asn1DigestFactory(IDigest digest, DerObjectIdentifier oid)
  25. {
  26. this.mDigest = digest;
  27. this.mOid = oid;
  28. }
  29. public virtual object AlgorithmDetails
  30. {
  31. get { return new AlgorithmIdentifier(mOid); }
  32. }
  33. public virtual int DigestLength
  34. {
  35. get { return mDigest.GetDigestSize(); }
  36. }
  37. public virtual IStreamCalculator CreateCalculator()
  38. {
  39. return new DfDigestStream(mDigest);
  40. }
  41. }
  42. internal class DfDigestStream : IStreamCalculator
  43. {
  44. private readonly DigestSink mStream;
  45. public DfDigestStream(IDigest digest)
  46. {
  47. this.mStream = new DigestSink(digest);
  48. }
  49. public Stream Stream
  50. {
  51. get { return mStream; }
  52. }
  53. public object GetResult()
  54. {
  55. byte[] result = new byte[mStream.Digest.GetDigestSize()];
  56. mStream.Digest.DoFinal(result, 0);
  57. return new SimpleBlockResult(result);
  58. }
  59. }
  60. }
  61. #pragma warning restore
  62. #endif