using CipherAlgorithmType = System.Security.Authentication.CipherAlgorithmType;
using HashAlgorithmType = System.Security.Authentication.HashAlgorithmType;
using ExchangeAlgorithmType = System.Security.Authentication.ExchangeAlgorithmType;
+#endif
-using System;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Permissions;
using System.Security.Principal;
using System.Security.Cryptography;
-
using System.Threading.Tasks;
using MNS = Mono.Net.Security;
X509Certificate remoteCertificate,
string[] acceptableIssuers);
- public class SslStream : AuthenticatedStream, MNS.IMonoSslStream
+ public class SslStream : AuthenticatedStream
{
+#if SECURITY_DEP
MonoTlsProvider provider;
IMonoSslStream impl;
static MonoTlsProvider GetProvider ()
{
-#pragma warning disable 612
- return MonoTlsProviderFactory.GetDefaultProvider ();
-#pragma warning restore 612
+ return MonoTlsProviderFactory.GetProvider ();
}
public SslStream (Stream innerStream)
: base (innerStream, leaveInnerStreamOpen)
{
provider = GetProvider ();
- impl = provider.CreateSslStream (innerStream, leaveInnerStreamOpen);
+ impl = provider.CreateSslStreamInternal (this, innerStream, leaveInnerStreamOpen, null);
}
public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback)
{
}
- internal SslStream (Stream innerStream, bool leaveInnerStreamOpen, IMonoSslStream impl)
+ internal SslStream (Stream innerStream, bool leaveInnerStreamOpen, MonoTlsProvider provider, MonoTlsSettings settings)
: base (innerStream, leaveInnerStreamOpen)
{
- this.impl = impl;
+ this.provider = provider;
+ impl = provider.CreateSslStreamInternal (this, innerStream, leaveInnerStreamOpen, settings);
+ }
+
+ internal static IMonoSslStream CreateMonoSslStream (Stream innerStream, bool leaveInnerStreamOpen, MonoTlsProvider provider, MonoTlsSettings settings)
+ {
+ var sslStream = new SslStream (innerStream, leaveInnerStreamOpen, provider, settings);
+ return sslStream.Impl;
}
public virtual void AuthenticateAsClient (string targetHost)
return Impl.AuthenticateAsServerAsync (serverCertificate, clientCertificateRequired, enabledSslProtocols, checkCertificateRevocation);
}
+ public virtual Task ShutdownAsync ()
+ {
+ return Impl.ShutdownAsync ();
+ }
+
public override bool IsAuthenticated {
get { return Impl.IsAuthenticated; }
}
get { return Impl.CheckCertRevocationStatus; }
}
- X509Certificate MNS.IMonoSslStream.InternalLocalCertificate {
- get { return Impl.InternalLocalCertificate; }
- }
-
public virtual X509Certificate LocalCertificate {
get { return Impl.LocalCertificate; }
}
}
public override bool CanRead {
- get { return Impl.CanRead; }
+ get { return impl != null && impl.CanRead; }
}
public override bool CanTimeout {
- get { return Impl.CanTimeout; }
+ get { return InnerStream.CanTimeout; }
}
public override bool CanWrite {
- get { return Impl.CanWrite; }
+ get { return impl != null && impl.CanWrite; }
}
public override int ReadTimeout {
public override void Flush ()
{
- Impl.Flush ();
+ InnerStream.Flush ();
}
void CheckDisposed ()
{
Impl.EndWrite (asyncResult);
}
+#else // !SECURITY_DEP
+ const string EXCEPTION_MESSAGE = "System.Net.Security.SslStream is not supported on the current platform.";
- AuthenticatedStream MNS.IMonoSslStream.AuthenticatedStream {
- get { return this; }
+ public SslStream (Stream innerStream)
+ : this (innerStream, false)
+ {
}
- MonoTlsProvider MNS.IMonoSslStream.Provider {
- get { return provider; }
+ public SslStream (Stream innerStream, bool leaveInnerStreamOpen)
+ : base (innerStream, leaveInnerStreamOpen)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
}
- MonoTlsConnectionInfo MNS.IMonoSslStream.GetConnectionInfo ()
+ public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback)
+ : this (innerStream, leaveInnerStreamOpen)
{
- return Impl.GetConnectionInfo ();
}
+
+ public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback)
+ : this (innerStream, leaveInnerStreamOpen)
+ {
+ }
+
+ public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback, EncryptionPolicy encryptionPolicy)
+ : this (innerStream, leaveInnerStreamOpen)
+ {
+ }
+
+ public virtual void AuthenticateAsClient (string targetHost)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual void AuthenticateAsClient (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual IAsyncResult BeginAuthenticateAsClient (string targetHost, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual IAsyncResult BeginAuthenticateAsClient (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual void EndAuthenticateAsClient (IAsyncResult asyncResult)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual void AuthenticateAsServer (X509Certificate serverCertificate)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual void AuthenticateAsServer (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual IAsyncResult BeginAuthenticateAsServer (X509Certificate serverCertificate, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual IAsyncResult BeginAuthenticateAsServer (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual void EndAuthenticateAsServer (IAsyncResult asyncResult)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public TransportContext TransportContext {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual Task AuthenticateAsClientAsync (string targetHost)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual Task AuthenticateAsClientAsync (string targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual Task AuthenticateAsServerAsync (X509Certificate serverCertificate)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public virtual Task AuthenticateAsServerAsync (X509Certificate serverCertificate, bool clientCertificateRequired, SslProtocols enabledSslProtocols, bool checkCertificateRevocation)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override bool IsAuthenticated {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool IsMutuallyAuthenticated {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool IsEncrypted {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool IsSigned {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool IsServer {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual SslProtocols SslProtocol {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual bool CheckCertRevocationStatus {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual X509Certificate LocalCertificate {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual X509Certificate RemoteCertificate {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual CipherAlgorithmType CipherAlgorithm {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual int CipherStrength {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual HashAlgorithmType HashAlgorithm {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual int HashStrength {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual ExchangeAlgorithmType KeyExchangeAlgorithm {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public virtual int KeyExchangeStrength {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool CanSeek {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool CanRead {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool CanTimeout {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override bool CanWrite {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override int ReadTimeout {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override int WriteTimeout {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override long Length {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override long Position {
+ get { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ set { throw new PlatformNotSupportedException (EXCEPTION_MESSAGE); }
+ }
+
+ public override void SetLength (long value)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override long Seek (long offset, SeekOrigin origin)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override void Flush ()
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ protected override void Dispose (bool disposing)
+ {
+ }
+
+ public override int Read (byte[] buffer, int offset, int count)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public void Write (byte[] buffer)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override void Write (byte[] buffer, int offset, int count)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override int EndRead (IAsyncResult asyncResult)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override IAsyncResult BeginWrite (byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+
+ public override void EndWrite (IAsyncResult asyncResult)
+ {
+ throw new PlatformNotSupportedException (EXCEPTION_MESSAGE);
+ }
+#endif
}
}
-#else // !SECURITY_DEP
-namespace System.Net.Security
-{
- public class SslStream
- {
- }
-}
-#endif