LIB_MCS_FLAGS = -nowarn:618 -d:CONFIGURATION_2_0 -unsafe $(RESOURCE_FILES:%=-resource:%)
TEST_MCS_FLAGS += -r:System.Configuration
PROFILE_ANY_MOBILE := $(filter monotouch monotouch_runtime monodroid xammac, $(PROFILE))
-NOT_SL := $(filter net_2_0 net_4_0 net_4_5 monotouch_runtime monodroid mobile xammac, $(PROFILE))
+NOT_SL := $(filter net_2_0 net_4_0 net_4_5 monotouch_runtime mobile xammac, $(PROFILE))
endif
ifeq (2.1, $(FRAMEWORK_VERSION))
LIB_MCS_FLAGS += -d:INSIDE_SYSTEM
ifeq (monotouch, $(subst _runtime,,$(PROFILE)))
LIB_MCS_FLAGS += -d:SECURITY_DEP
endif
+ifeq (monodroid, $(PROFILE))
+LIB_MCS_FLAGS += -d:SECURITY_DEP
+endif
EXTRA_DISTFILES = \
System.Text.RegularExpressions/notes.txt \
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Ntlm;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using System.Security.Cryptography.X509Certificates;
#else
extern alias PrebuiltSystem;
#if SECURITY_DEP
-#if MONOTOUCH
-#else
+#if !MONOTOUCH && !MONODROID
extern alias PrebuiltSystem;
using X509CertificateCollection = PrebuiltSystem::System.Security.Cryptography.X509Certificates.X509CertificateCollection;
#endif
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Tls;
using CipherAlgorithmType = System.Security.Authentication.CipherAlgorithmType;
return null;
};
- if (validation_callback != null) {
-#if MONOTOUCH
- var helper = new ServicePointManager.ChainValidationHelper (this, targetHost);
- helper.ServerCertificateValidationCallback = validation_callback;
- s.ServerCertValidation2 += new CertificateValidationCallback2 (helper.ValidateChain);
+#if MONOTOUCH || MONODROID
+ // Even if validation_callback is null this allows us to verify requests where the user
+ // does not provide a verification callback but attempts to authenticate with the website
+ // as a client (see https://bugzilla.xamarin.com/show_bug.cgi?id=18962 for an example)
+ var helper = new ServicePointManager.ChainValidationHelper (this, targetHost);
+ helper.ServerCertificateValidationCallback = validation_callback;
+ s.ServerCertValidation2 += new CertificateValidationCallback2 (helper.ValidateChain);
#else
+ if (validation_callback != null) {
s.ServerCertValidationDelegate = delegate (X509Certificate cert, int [] certErrors) {
X509Chain chain = new X509Chain ();
X509Certificate2 x2 = (cert as X509Certificate2);
return validation_callback (this, cert, chain, errors);
};
-#endif
}
+#endif
if (selection_callback != null)
s.ClientCertSelectionDelegate = OnCertificateSelection;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Authenticode;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Tls;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Tls;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Tls;
using MSX = Mono.Security.X509;
using Mono.Security.X509.Extensions;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security.Protocol.Tls;
#else
extern alias MonoSecurity;
Exception connect_exception;
static object classLock = new object ();
static Type sslStream;
-#if !MONOTOUCH
+#if !MONOTOUCH && !MONODROID
static PropertyInfo piClient;
static PropertyInfo piServer;
static PropertyInfo piTrustFailure;
throw new NotSupportedException (msg);
}
#endif
-#if !MONOTOUCH
+#if !MONOTOUCH && !MONODROID
piClient = sslStream.GetProperty ("SelectedClientCertificate");
piServer = sslStream.GetProperty ("ServerCertificate");
piTrustFailure = sslStream.GetProperty ("TrustFailure");
return false;
}
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
nstream = new HttpsClientStream (serverStream, request.ClientCertificates, request, buffer);
#else
object[] args = new object [4] { serverStream,
internal void GetCertificates (Stream stream)
{
// here the SSL negotiation have been done
-#if SECURITY_DEP && MONOTOUCH
+#if SECURITY_DEP && (MONOTOUCH || MONODROID)
HttpsClientStream s = (stream as HttpsClientStream);
X509Certificate client = s.SelectedClientCertificate;
X509Certificate server = s.ServerCertificate;
// if SSL is in use then check for TrustFailure
if (ssl) {
-#if SECURITY_DEP && MONOTOUCH
+#if SECURITY_DEP && (MONOTOUCH || MONODROID)
HttpsClientStream https = (s as HttpsClientStream);
if (https.TrustFailure) {
#else
//
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using MSX = Mono.Security.X509;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using Mono.Security.Cryptography;
using MSX = Mono.Security.X509;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using MX = Mono.Security.X509;
#else
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using Mono.Security.Cryptography;
using MX = Mono.Security.X509;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using MX = Mono.Security.X509;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using MX = Mono.Security.X509;
#else
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using MX = Mono.Security.X509;
#else
extern alias MonoSecurity;
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using Mono.Security.Cryptography;
#else
#if SECURITY_DEP
-#if MONOTOUCH
+#if MONOTOUCH || MONODROID
using Mono.Security;
using Mono.Security.Cryptography;
#else
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if SECURITY_DEP
-extern alias MonoSecurity;
-#endif
-
#if MONODROID
using System;
+using System.Collections.Generic;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
#if SECURITY_DEP
-using MSX = MonoSecurity::Mono.Security.X509;
+using MSX = Mono.Security.X509;
#endif
namespace System {
internal static class AndroidPlatform {
#if SECURITY_DEP
- static readonly Converter<MSX.X509CertificateCollection, bool> trustEvaluateSsl;
- static readonly Func<MSX.X509CertificateCollection, object, X509Certificate2, X509Chain, SslPolicyErrors, bool> trustEvaluateSsl2;
+ static readonly Converter<List <byte[]>, bool> trustEvaluateSsl;
#endif // SECURITY_DEP
static readonly Func<IWebProxy> getDefaultProxy;
{
var t = Type.GetType ("Android.Runtime.AndroidEnvironment, Mono.Android", throwOnError:true);
#if SECURITY_DEP
- trustEvaluateSsl2 = (Func<MSX.X509CertificateCollection, object, X509Certificate2, X509Chain, SslPolicyErrors, bool>)
- Delegate.CreateDelegate (
- typeof (Func<MSX.X509CertificateCollection, object, X509Certificate2, X509Chain, SslPolicyErrors, bool>),
- t,
- "TrustEvaluateSsl2",
- ignoreCase:false,
- throwOnBindFailure:false);
- if (trustEvaluateSsl2 == null)
- trustEvaluateSsl = (Converter<MSX.X509CertificateCollection, bool>)
- Delegate.CreateDelegate (typeof (Converter<MSX.X509CertificateCollection, bool>),
+ trustEvaluateSsl = (Converter<List<byte[]>, bool>)
+ Delegate.CreateDelegate (typeof (Converter<List<byte[]>, bool>),
t,
"TrustEvaluateSsl",
ignoreCase:false,
#if SECURITY_DEP
internal static bool TrustEvaluateSsl (MSX.X509CertificateCollection collection, object sender, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors errors)
{
- if (trustEvaluateSsl2 != null)
- return trustEvaluateSsl2 (collection, sender, certificate, chain, errors);
- return trustEvaluateSsl (collection);
+ var certsRawData = new List <byte[]> (collection.Count);
+ foreach (MSX.X509Certificate cert in collection)
+ certsRawData.Add (cert.RawData);
+ return trustEvaluateSsl (certsRawData);
}
#endif // SECURITY_DEP
#include mobile_System.dll.sources
System/AndroidPlatform.cs
+
+../Mono.Security/Mono.Security.Authenticode/PrivateKey.cs
+../Mono.Security/Mono.Security.Cryptography/MD5SHA1.cs
+../Mono.Security/Mono.Security.Cryptography/TlsHMAC.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/ChallengeResponse.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/ChallengeResponse2.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/MessageBase.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/NtlmAuthLevel.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/NtlmFlags.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/NtlmSettings.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/Type1Message.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/Type2Message.cs
+../Mono.Security/Mono.Security.Protocol.Ntlm/Type3Message.cs
+../Mono.Security/Mono.Security.Protocol.Tls/Alert.cs
+../Mono.Security/Mono.Security.Protocol.Tls/CipherAlgorithmType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/CipherSuite.cs
+../Mono.Security/Mono.Security.Protocol.Tls/CipherSuiteCollection.cs
+../Mono.Security/Mono.Security.Protocol.Tls/CipherSuiteFactory.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ClientContext.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ClientRecordProtocol.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ClientSessionCache.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ContentType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/Context.cs
+../Mono.Security/Mono.Security.Protocol.Tls/DebugHelper.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ExchangeAlgorithmType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/HandshakeState.cs
+../Mono.Security/Mono.Security.Protocol.Tls/HashAlgorithmType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/HttpsClientStream.cs
+../Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs
+../Mono.Security/Mono.Security.Protocol.Tls/RSASslSignatureDeformatter.cs
+../Mono.Security/Mono.Security.Protocol.Tls/RSASslSignatureFormatter.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SecurityCompressionType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SecurityParameters.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SecurityProtocolType.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ServerContext.cs
+../Mono.Security/Mono.Security.Protocol.Tls/ServerRecordProtocol.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SslCipherSuite.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SslHandshakeHash.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SslServerStream.cs
+../Mono.Security/Mono.Security.Protocol.Tls/SslStreamBase.cs
+../Mono.Security/Mono.Security.Protocol.Tls/TlsCipherSuite.cs
+../Mono.Security/Mono.Security.Protocol.Tls/TlsClientSettings.cs
+../Mono.Security/Mono.Security.Protocol.Tls/TlsException.cs
+../Mono.Security/Mono.Security.Protocol.Tls/TlsServerSettings.cs
+../Mono.Security/Mono.Security.Protocol.Tls/TlsStream.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake/ClientCertificateType.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake/HandshakeMessage.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake/HandshakeType.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientCertificate.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientCertificateVerify.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientFinished.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientHello.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientKeyExchange.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerCertificate.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerCertificateRequest.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerFinished.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerHello.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerHelloDone.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsServerKeyExchange.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientCertificate.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientCertificateVerify.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientFinished.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientHello.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsClientKeyExchange.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerCertificate.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerCertificateRequest.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerFinished.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerHello.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerHelloDone.cs
+../Mono.Security/Mono.Security.Protocol.Tls.Handshake.Server/TlsServerKeyExchange.cs
+../Mono.Security/Mono.Security.X509.Extensions/AuthorityKeyIdentifierExtension.cs
+../Mono.Security/Mono.Security.X509.Extensions/ExtendedKeyUsageExtension.cs
+../Mono.Security/Mono.Security.X509.Extensions/GeneralNames.cs
+../Mono.Security/Mono.Security.X509.Extensions/NetscapeCertTypeExtension.cs
+../Mono.Security/Mono.Security.X509.Extensions/SubjectAltNameExtension.cs
+
+