You've already forked linux-packaging-mono
Imported Upstream version 4.8.0.309
Former-commit-id: 5f9c6ae75f295e057a7d2971f3a6df4656fa8850
This commit is contained in:
parent
ee1447783b
commit
94b2861243
@@ -22,10 +22,9 @@
|
||||
//
|
||||
#if SECURITY_DEP
|
||||
|
||||
using XX509CertificateCollection = System.Security.Cryptography.X509Certificates.X509CertificateCollection;
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace System.Security.Cryptography.X509Certificates {
|
||||
|
||||
@@ -107,7 +106,7 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
return handle;
|
||||
}
|
||||
|
||||
public static SecTrustResult TrustEvaluateSsl (XX509CertificateCollection certificates, XX509CertificateCollection anchors, string host)
|
||||
public static SecTrustResult TrustEvaluateSsl (X509CertificateCollection certificates, X509CertificateCollection anchors, string host)
|
||||
{
|
||||
if (certificates == null)
|
||||
return SecTrustResult.Deny;
|
||||
@@ -119,7 +118,7 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
}
|
||||
}
|
||||
|
||||
static SecTrustResult _TrustEvaluateSsl (XX509CertificateCollection certificates, XX509CertificateCollection anchors, string hostName)
|
||||
static SecTrustResult _TrustEvaluateSsl (X509CertificateCollection certificates, X509CertificateCollection anchors, string hostName)
|
||||
{
|
||||
int certCount = certificates.Count;
|
||||
int anchorCount = anchors != null ? anchors.Count : 0;
|
||||
@@ -147,7 +146,7 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
|
||||
certArray = FromIntPtrs (secCerts);
|
||||
|
||||
if (!string.IsNullOrEmpty (hostName))
|
||||
if (hostName != null)
|
||||
host = CFStringCreateWithCharacters (IntPtr.Zero, hostName, (IntPtr) hostName.Length);
|
||||
sslsecpolicy = SecPolicyCreateSSL (true, host);
|
||||
|
||||
|
||||
@@ -124,7 +124,6 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
}
|
||||
|
||||
internal X500DistinguishedName (byte[] encoded, byte[] canonEncoding, string name)
|
||||
: this (encoded)
|
||||
{
|
||||
this.canonEncoding = canonEncoding;
|
||||
this.name = name;
|
||||
@@ -234,7 +233,7 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
if (name1.canonEncoding.Length != name2.canonEncoding.Length)
|
||||
return false;
|
||||
for (int i = 0; i < name1.canonEncoding.Length; i++) {
|
||||
if (name1.canonEncoding[i] != name2.canonEncoding[2])
|
||||
if (name1.canonEncoding[i] != name2.canonEncoding[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -45,6 +45,7 @@ using MX = Mono.Security.X509;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace System.Security.Cryptography.X509Certificates {
|
||||
|
||||
@@ -134,6 +135,10 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
{
|
||||
}
|
||||
|
||||
protected X509Certificate2 (SerializationInfo info, StreamingContext context) : base (info, context)
|
||||
{
|
||||
}
|
||||
|
||||
internal X509Certificate2 (X509Certificate2Impl impl)
|
||||
: base (impl)
|
||||
{
|
||||
@@ -394,13 +399,10 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
// internal stuff because X509Certificate2 isn't complete enough
|
||||
// (maybe X509Certificate3 will be better?)
|
||||
|
||||
[Obsolete ("KILL")]
|
||||
[MonoTODO ("See comment in X509Helper2.GetMonoCertificate().")]
|
||||
internal MX.X509Certificate MonoCertificate {
|
||||
get {
|
||||
var monoImpl = Impl as X509Certificate2ImplMono;
|
||||
if (monoImpl == null)
|
||||
throw new NotSupportedException ();
|
||||
return monoImpl.MonoCertificate;
|
||||
return X509Helper2.GetMonoCertificate (this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,10 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
get;
|
||||
}
|
||||
|
||||
internal abstract X509Certificate2Impl FallbackImpl {
|
||||
get;
|
||||
}
|
||||
|
||||
public abstract string GetNameInfo (X509NameType nameType, bool forIssuer);
|
||||
|
||||
public abstract void Import (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags);
|
||||
|
||||
@@ -483,6 +483,7 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
[MonoTODO ("missing KeyStorageFlags support")]
|
||||
public override void Import (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags)
|
||||
{
|
||||
Reset ();
|
||||
MX.X509Certificate cert = null;
|
||||
if (password == null) {
|
||||
try {
|
||||
@@ -718,6 +719,10 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
internal MX.X509Certificate MonoCertificate {
|
||||
get { return _cert; }
|
||||
}
|
||||
|
||||
internal override X509Certificate2Impl FallbackImpl {
|
||||
get { return this; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -91,6 +91,9 @@ namespace System.Security.Cryptography.X509Certificates {
|
||||
}
|
||||
return store2;
|
||||
}
|
||||
internal set {
|
||||
store2 = value;
|
||||
}
|
||||
}
|
||||
|
||||
public X509RevocationFlag RevocationFlag {
|
||||
|
||||
@@ -33,14 +33,57 @@ extern alias MonoSecurity;
|
||||
|
||||
#if MONO_SECURITY_ALIAS
|
||||
using MonoSecurity::Mono.Security.Interface;
|
||||
using MX = MonoSecurity::Mono.Security.X509;
|
||||
#else
|
||||
#if MONO_FEATURE_BTLS
|
||||
using Mono.Security.Interface;
|
||||
#endif
|
||||
using MX = Mono.Security.X509;
|
||||
#endif
|
||||
|
||||
#if MONO_FEATURE_BTLS
|
||||
using Mono.Btls;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace System.Security.Cryptography.X509Certificates
|
||||
{
|
||||
internal static class X509Helper2
|
||||
{
|
||||
internal static long GetSubjectNameHash (X509Certificate certificate)
|
||||
{
|
||||
return GetSubjectNameHash (certificate.Impl);
|
||||
}
|
||||
|
||||
internal static long GetSubjectNameHash (X509CertificateImpl impl)
|
||||
{
|
||||
#if SECURITY_DEP
|
||||
using (var x509 = GetNativeInstance (impl))
|
||||
return GetSubjectNameHash (x509);
|
||||
#else
|
||||
throw new NotSupportedException ();
|
||||
#endif
|
||||
}
|
||||
|
||||
internal static void ExportAsPEM (X509Certificate certificate, Stream stream, bool includeHumanReadableForm)
|
||||
{
|
||||
ExportAsPEM (certificate.Impl, stream, includeHumanReadableForm);
|
||||
}
|
||||
|
||||
internal static void ExportAsPEM (X509CertificateImpl impl, Stream stream, bool includeHumanReadableForm)
|
||||
{
|
||||
#if SECURITY_DEP
|
||||
using (var x509 = GetNativeInstance (impl))
|
||||
ExportAsPEM (x509, stream, includeHumanReadableForm);
|
||||
#else
|
||||
throw new NotSupportedException ();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if SECURITY_DEP
|
||||
internal static void Initialize ()
|
||||
{
|
||||
X509Helper.InstallNativeHelper (new MyNativeHelper ());
|
||||
@@ -51,32 +94,90 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
X509Helper.ThrowIfContextInvalid (impl);
|
||||
}
|
||||
|
||||
internal static X509Certificate2Impl Import (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags)
|
||||
#if !MONO_FEATURE_BTLS
|
||||
static X509Certificate GetNativeInstance (X509CertificateImpl impl)
|
||||
{
|
||||
var provider = MonoTlsProviderFactory.GetProvider ();
|
||||
if (provider.HasNativeCertificates) {
|
||||
var impl = provider.GetNativeCertificate (rawData, password, keyStorageFlags);
|
||||
return impl;
|
||||
} else {
|
||||
var impl = new X509Certificate2ImplMono ();
|
||||
impl.Import (rawData, password, keyStorageFlags);
|
||||
return impl;
|
||||
}
|
||||
throw new PlatformNotSupportedException ();
|
||||
}
|
||||
#else
|
||||
static MonoBtlsX509 GetNativeInstance (X509CertificateImpl impl)
|
||||
{
|
||||
ThrowIfContextInvalid (impl);
|
||||
var btlsImpl = impl as X509CertificateImplBtls;
|
||||
if (btlsImpl != null)
|
||||
return btlsImpl.X509.Copy ();
|
||||
else
|
||||
return MonoBtlsX509.LoadFromData (impl.GetRawCertData (), MonoBtlsX509Format.DER);
|
||||
}
|
||||
|
||||
internal static X509Certificate2Impl Import (X509Certificate cert)
|
||||
internal static long GetSubjectNameHash (MonoBtlsX509 x509)
|
||||
{
|
||||
var provider = MonoTlsProviderFactory.GetProvider ();
|
||||
if (provider.HasNativeCertificates) {
|
||||
var impl = provider.GetNativeCertificate (cert);
|
||||
return impl;
|
||||
using (var subject = x509.GetSubjectName ())
|
||||
return subject.GetHash ();
|
||||
}
|
||||
|
||||
internal static void ExportAsPEM (MonoBtlsX509 x509, Stream stream, bool includeHumanReadableForm)
|
||||
{
|
||||
using (var bio = MonoBtlsBio.CreateMonoStream (stream)) {
|
||||
x509.ExportAsPEM (bio, includeHumanReadableForm);
|
||||
}
|
||||
}
|
||||
#endif // !MONO_FEATURE_BTLS
|
||||
|
||||
internal static X509Certificate2Impl Import (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags, bool disableProvider = false)
|
||||
{
|
||||
#if MONO_FEATURE_BTLS
|
||||
if (!disableProvider) {
|
||||
var provider = MonoTlsProviderFactory.GetProvider ();
|
||||
if (provider.HasNativeCertificates) {
|
||||
var impl = provider.GetNativeCertificate (rawData, password, keyStorageFlags);
|
||||
return impl;
|
||||
}
|
||||
}
|
||||
#endif // MONO_FEATURE_BTLS
|
||||
var impl2 = new X509Certificate2ImplMono ();
|
||||
impl2.Import (rawData, password, keyStorageFlags);
|
||||
return impl2;
|
||||
}
|
||||
|
||||
internal static X509Certificate2Impl Import (X509Certificate cert, bool disableProvider = false)
|
||||
{
|
||||
#if MONO_FEATURE_BTLS
|
||||
if (!disableProvider) {
|
||||
var provider = MonoTlsProviderFactory.GetProvider ();
|
||||
if (provider.HasNativeCertificates) {
|
||||
var impl = provider.GetNativeCertificate (cert);
|
||||
return impl;
|
||||
}
|
||||
}
|
||||
#endif // MONO_FEATURE_BTLS
|
||||
var impl2 = cert.Impl as X509Certificate2Impl;
|
||||
if (impl2 != null)
|
||||
return (X509Certificate2Impl)impl2.Clone ();
|
||||
return Import (cert.GetRawCertData (), null, X509KeyStorageFlags.DefaultKeySet);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is used by X509ChainImplMono
|
||||
*
|
||||
* Some of the missing APIs such as X509v3 extensions can be added to the native
|
||||
* BTLS implementation.
|
||||
*
|
||||
* We should also consider replacing X509ChainImplMono with a new X509ChainImplBtls
|
||||
* at some point.
|
||||
*/
|
||||
[MonoTODO ("Investigate replacement; see comments in source.")]
|
||||
internal static MX.X509Certificate GetMonoCertificate (X509Certificate2 certificate)
|
||||
{
|
||||
var impl2 = certificate.Impl as X509Certificate2Impl;
|
||||
if (impl2 == null)
|
||||
impl2 = Import (certificate, true);
|
||||
var fallbackImpl = impl2.FallbackImpl as X509Certificate2ImplMono;
|
||||
if (fallbackImpl == null)
|
||||
throw new NotSupportedException ();
|
||||
return fallbackImpl.MonoCertificate;
|
||||
}
|
||||
|
||||
internal static X509ChainImpl CreateChainImpl (bool useMachineContext)
|
||||
{
|
||||
return new X509ChainImplMono (useMachineContext);
|
||||
@@ -111,6 +212,6 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
return X509Helper2.Import (cert);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user