123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using System.Collections;
- using System.IO;
- using Org.BouncyCastle.Asn1;
- using Org.BouncyCastle.Asn1.Ocsp;
- using Org.BouncyCastle.Asn1.X509;
- using Org.BouncyCastle.Utilities;
- namespace Org.BouncyCastle.Crypto.Tls
- {
- /**
- * RFC 3546 3.6
- */
- public class OcspStatusRequest
- {
- protected readonly IList mResponderIDList;
- protected readonly X509Extensions mRequestExtensions;
- /**
- * @param responderIDList
- * an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP
- * responders. An empty list has the special meaning that the responders are
- * implicitly known to the server - e.g., by prior arrangement.
- * @param requestExtensions
- * OCSP request extensions. A null value means that there are no extensions.
- */
- public OcspStatusRequest(IList responderIDList, X509Extensions requestExtensions)
- {
- this.mResponderIDList = responderIDList;
- this.mRequestExtensions = requestExtensions;
- }
- /**
- * @return an {@link IList} of {@link ResponderID}
- */
- public virtual IList ResponderIDList
- {
- get { return mResponderIDList; }
- }
- /**
- * @return OCSP request extensions
- */
- public virtual X509Extensions RequestExtensions
- {
- get { return mRequestExtensions; }
- }
- /**
- * Encode this {@link OcspStatusRequest} to a {@link Stream}.
- *
- * @param output
- * the {@link Stream} to encode to.
- * @throws IOException
- */
- public virtual void Encode(Stream output)
- {
- if (mResponderIDList == null || mResponderIDList.Count < 1)
- {
- TlsUtilities.WriteUint16(0, output);
- }
- else
- {
- MemoryStream buf = new MemoryStream();
- for (int i = 0; i < mResponderIDList.Count; ++i)
- {
- ResponderID responderID = (ResponderID)mResponderIDList[i];
- byte[] derEncoding = responderID.GetEncoded(Asn1Encodable.Der);
- TlsUtilities.WriteOpaque16(derEncoding, buf);
- }
- TlsUtilities.CheckUint16(buf.Length);
- TlsUtilities.WriteUint16((int)buf.Length, output);
- buf.WriteTo(output);
- }
- if (mRequestExtensions == null)
- {
- TlsUtilities.WriteUint16(0, output);
- }
- else
- {
- byte[] derEncoding = mRequestExtensions.GetEncoded(Asn1Encodable.Der);
- TlsUtilities.CheckUint16(derEncoding.Length);
- TlsUtilities.WriteUint16(derEncoding.Length, output);
- output.Write(derEncoding, 0, derEncoding.Length);
- }
- }
- /**
- * Parse a {@link OcspStatusRequest} from a {@link Stream}.
- *
- * @param input
- * the {@link Stream} to parse from.
- * @return an {@link OcspStatusRequest} object.
- * @throws IOException
- */
- public static OcspStatusRequest Parse(Stream input)
- {
- IList responderIDList = Org.BouncyCastle.Utilities.Platform.CreateArrayList();
- {
- int length = TlsUtilities.ReadUint16(input);
- if (length > 0)
- {
- byte[] data = TlsUtilities.ReadFully(length, input);
- MemoryStream buf = new MemoryStream(data, false);
- do
- {
- byte[] derEncoding = TlsUtilities.ReadOpaque16(buf);
- ResponderID responderID = ResponderID.GetInstance(TlsUtilities.ReadDerObject(derEncoding));
- responderIDList.Add(responderID);
- }
- while (buf.Position < buf.Length);
- }
- }
- X509Extensions requestExtensions = null;
- {
- int length = TlsUtilities.ReadUint16(input);
- if (length > 0)
- {
- byte[] derEncoding = TlsUtilities.ReadFully(length, input);
- requestExtensions = X509Extensions.GetInstance(TlsUtilities.ReadDerObject(derEncoding));
- }
- }
- return new OcspStatusRequest(responderIDList, requestExtensions);
- }
- }
- }
- #endif
|