CertificateConfirmationContentBuilder.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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;
  6. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.Cmp;
  7. using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1.X509;
  8. using BestHTTP.SecureProtocol.Org.BouncyCastle.Cms;
  9. using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.IO;
  10. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
  11. using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
  12. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  13. using BestHTTP.SecureProtocol.Org.BouncyCastle.X509;
  14. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Cmp
  15. {
  16. public class CertificateConfirmationContentBuilder
  17. {
  18. private static readonly DefaultSignatureAlgorithmIdentifierFinder sigAlgFinder = new DefaultSignatureAlgorithmIdentifierFinder();
  19. private readonly DefaultDigestAlgorithmIdentifierFinder digestAlgFinder;
  20. private readonly IList acceptedCerts = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList();
  21. private readonly IList acceptedReqIds = BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities.Platform.CreateArrayList();
  22. public CertificateConfirmationContentBuilder()
  23. : this(new DefaultDigestAlgorithmIdentifierFinder())
  24. {
  25. }
  26. public CertificateConfirmationContentBuilder(DefaultDigestAlgorithmIdentifierFinder digestAlgFinder)
  27. {
  28. this.digestAlgFinder = digestAlgFinder;
  29. }
  30. public CertificateConfirmationContentBuilder AddAcceptedCertificate(X509Certificate certHolder,
  31. BigInteger certReqId)
  32. {
  33. acceptedCerts.Add(certHolder);
  34. acceptedReqIds.Add(certReqId);
  35. return this;
  36. }
  37. public CertificateConfirmationContent Build()
  38. {
  39. Asn1EncodableVector v = new Asn1EncodableVector();
  40. for (int i = 0; i != acceptedCerts.Count; i++)
  41. {
  42. X509Certificate cert = (X509Certificate)acceptedCerts[i];
  43. BigInteger reqId = (BigInteger)acceptedReqIds[i];
  44. AlgorithmIdentifier algorithmIdentifier = sigAlgFinder.Find(cert.SigAlgName);
  45. AlgorithmIdentifier digAlg = digestAlgFinder.find(algorithmIdentifier);
  46. if (null == digAlg)
  47. throw new CmpException("cannot find algorithm for digest from signature");
  48. byte[] digest = DigestUtilities.CalculateDigest(digAlg.Algorithm, cert.GetEncoded());
  49. v.Add(new CertStatus(digest, reqId));
  50. }
  51. return new CertificateConfirmationContent(CertConfirmContent.GetInstance(new DerSequence(v)),
  52. digestAlgFinder);
  53. }
  54. }
  55. }
  56. #pragma warning restore
  57. #endif