You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.142
Former-commit-id: 7467d4b717762eeaf652d77f1486dd11ffb1ff1f
This commit is contained in:
parent
e52655b4dc
commit
0abdbe5a7d
@@ -4,23 +4,13 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Private;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Internal.Cryptography
|
||||
{
|
||||
internal static class Helpers
|
||||
internal static partial class Helpers
|
||||
{
|
||||
public static byte[] CloneByteArray(this byte[] src)
|
||||
{
|
||||
if (src == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return (byte[])(src.Clone());
|
||||
}
|
||||
|
||||
// Encode a byte array as an array of upper-case hex characters.
|
||||
public static char[] ToHexArrayUpper(this byte[] bytes)
|
||||
{
|
||||
|
||||
@@ -471,6 +471,9 @@ namespace Internal.Cryptography.Pal
|
||||
case DerSequenceReader.DerTag.UTF8String:
|
||||
value = tavReader.ReadUtf8String();
|
||||
break;
|
||||
case DerSequenceReader.DerTag.T61String:
|
||||
value = tavReader.ReadT61String();
|
||||
break;
|
||||
|
||||
// Ignore anything we don't know how to read.
|
||||
}
|
||||
|
||||
@@ -238,9 +238,7 @@ namespace Internal.Cryptography.Pal
|
||||
get
|
||||
{
|
||||
EnsureCertData();
|
||||
byte[] serial = _certData.SerialNumber;
|
||||
Array.Reverse(serial);
|
||||
return serial;
|
||||
return _certData.SerialNumber;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,8 @@ namespace Internal.Cryptography.Pal
|
||||
|
||||
AppleCertificatePal applePal = (AppleCertificatePal)cert;
|
||||
|
||||
Interop.AppleCrypto.X509StoreRemoveCertificate(applePal.CertificateHandle, _keychainHandle);
|
||||
var handle = (SafeKeychainItemHandle)applePal.IdentityHandle ?? applePal.CertificateHandle;
|
||||
Interop.AppleCrypto.X509StoreRemoveCertificate(handle, _keychainHandle);
|
||||
}
|
||||
|
||||
public SafeHandle SafeHandle => _keychainHandle;
|
||||
|
||||
@@ -102,12 +102,7 @@ namespace Internal.Cryptography.Pal
|
||||
{
|
||||
using (SafeSharedAsn1IntegerHandle serialNumber = Interop.Crypto.X509GetSerialNumber(_cert))
|
||||
{
|
||||
byte[] serial = Interop.Crypto.GetAsn1IntegerBytes(serialNumber);
|
||||
|
||||
// Windows returns this in BigInteger Little-Endian,
|
||||
// OpenSSL returns this in BigInteger Big-Endian.
|
||||
Array.Reverse(serial);
|
||||
return serial;
|
||||
return Interop.Crypto.GetAsn1IntegerBytes(serialNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,6 +199,7 @@ namespace Internal.Cryptography.Pal
|
||||
{
|
||||
CERT_CONTEXT* pCertContext = _certContext.CertContext;
|
||||
byte[] serialNumber = pCertContext->pCertInfo->SerialNumber.ToByteArray();
|
||||
Array.Reverse(serialNumber);
|
||||
GC.KeepAlive(this);
|
||||
return serialNumber;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
<Compile Include="$(CommonPath)\System\Security\Cryptography\DerSequenceReader.cs">
|
||||
<Link>Common\System\Security\Cryptography\DerSequenceReader.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="$(CommonPath)\Internal\Cryptography\Helpers.cs">
|
||||
<Link>Internal\Cryptography\Helpers.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Internal\Cryptography\CertificateExtensionsCommon.cs" />
|
||||
<Compile Include="Internal\Cryptography\EncodingHelpers.cs" />
|
||||
<Compile Include="Internal\Cryptography\ErrorCode.cs" />
|
||||
|
||||
@@ -443,14 +443,16 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
public virtual byte[] GetSerialNumber()
|
||||
{
|
||||
ThrowIfInvalid();
|
||||
|
||||
return GetRawSerialNumber().CloneByteArray();
|
||||
byte[] serialNumber = GetRawSerialNumber().CloneByteArray();
|
||||
// PAL always returns big-endian, GetSerialNumber returns little-endian
|
||||
Array.Reverse(serialNumber);
|
||||
return serialNumber;
|
||||
}
|
||||
|
||||
public virtual string GetSerialNumberString()
|
||||
{
|
||||
ThrowIfInvalid();
|
||||
|
||||
// PAL always returns big-endian, GetSerialNumberString returns big-endian too
|
||||
return GetRawSerialNumber().ToHexStringUpper();
|
||||
}
|
||||
|
||||
@@ -599,6 +601,9 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
|
||||
if (!culture.DateTimeFormat.Calendar.IsValidDay(date.Year, date.Month, date.Day, 0))
|
||||
{
|
||||
|
||||
// This is unnecessary dependency we cannot easily remove by linker
|
||||
#if !MOBILE
|
||||
// The most common case of culture failing to work is in the Um-AlQuara calendar. In this case,
|
||||
// we can fall back to the Hijri calendar, otherwise fall back to the invariant culture.
|
||||
if (culture.DateTimeFormat.Calendar is UmAlQuraCalendar)
|
||||
@@ -607,6 +612,7 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
culture.DateTimeFormat.Calendar = new HijriCalendar();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
culture = CultureInfo.InvariantCulture;
|
||||
}
|
||||
|
||||
@@ -289,9 +289,7 @@ namespace System.Security.Cryptography.X509Certificates
|
||||
{
|
||||
get
|
||||
{
|
||||
byte[] serialNumber = GetSerialNumber();
|
||||
Array.Reverse(serialNumber);
|
||||
return serialNumber.ToHexStringUpper();
|
||||
return GetSerialNumberString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using Test.Cryptography;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
@@ -358,6 +359,26 @@ namespace System.Security.Cryptography.X509Certificates.Tests
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public static void X509Certificate2WithT61String()
|
||||
{
|
||||
string certSubject = @"E=mabaul@microsoft.com, OU=Engineering, O=Xamarin, S=Massachusetts, C=US, CN=test-server.local";
|
||||
|
||||
using (var cert = new X509Certificate2(TestData.T61StringCertificate))
|
||||
{
|
||||
Assert.Equal(certSubject, cert.Subject);
|
||||
Assert.Equal(certSubject, cert.Issuer);
|
||||
|
||||
Assert.Equal("9E7A5CCC9F951A8700", cert.GetSerialNumber().ByteArrayToHex());
|
||||
Assert.Equal("1.2.840.113549.1.1.1", cert.GetKeyAlgorithm());
|
||||
|
||||
Assert.Equal(74, cert.GetPublicKey().Length);
|
||||
|
||||
Assert.Equal("test-server.local", cert.GetNameInfo(X509NameType.SimpleName, false));
|
||||
Assert.Equal("mabaul@microsoft.com", cert.GetNameInfo(X509NameType.EmailName, false));
|
||||
}
|
||||
}
|
||||
|
||||
public static IEnumerable<object> StorageFlags => CollectionImportTests.StorageFlags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,11 +37,10 @@ namespace System.Security.Cryptography.X509Certificates.Tests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[ActiveIssue(30543, TargetFrameworkMonikers.NetFramework)]
|
||||
public static void TestSerial()
|
||||
{
|
||||
string expectedSerialHex = "B00000000100DD9F3BD08B0AAF11B000000033";
|
||||
byte[] expectedSerial = expectedSerialHex.HexToByteArray();
|
||||
string expectedSerialHex = "33000000B011AF0A8BD03B9FDD0001000000B0";
|
||||
byte[] expectedSerial = "B00000000100DD9F3BD08B0AAF11B000000033".HexToByteArray();
|
||||
|
||||
using (X509Certificate2 c = LoadCertificateFromFile())
|
||||
{
|
||||
@@ -49,6 +48,8 @@ namespace System.Security.Cryptography.X509Certificates.Tests
|
||||
Assert.Equal(expectedSerial, serial);
|
||||
string serialHex = c.GetSerialNumberString();
|
||||
Assert.Equal(expectedSerialHex, serialHex);
|
||||
serialHex = c.SerialNumber;
|
||||
Assert.Equal(expectedSerialHex, serialHex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
ff8c1614be5a4956ca251667eacd7957b38eff3e
|
||||
f27924e0354b11871f2c524d60242f130819ac36
|
||||
Reference in New Issue
Block a user