You've already forked linux-packaging-mono
Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
parent
e49d6f06c0
commit
536cd135cc
@ -1 +1 @@
|
||||
3911fb6480ccc104c10e55bfe26b0960c1ad45cd
|
||||
227968329eab9a80a42874eac3d17deab05c1cee
|
@ -1 +1 @@
|
||||
3ee5369d33f59d5420686993f1624a6b160f07b5
|
||||
0fbf94a87c6f3b563250f16a1e72fbb44ba6398c
|
@ -14,7 +14,8 @@ namespace System.IdentityModel.Tokens
|
||||
X509Certificate2 certificate;
|
||||
AsymmetricAlgorithm privateKey;
|
||||
bool privateKeyAvailabilityDetermined;
|
||||
PublicKey publicKey;
|
||||
AsymmetricAlgorithm publicKey;
|
||||
bool publicKeyAvailabilityDetermined;
|
||||
|
||||
object thisLock = new Object();
|
||||
|
||||
@ -28,7 +29,7 @@ namespace System.IdentityModel.Tokens
|
||||
|
||||
public override int KeySize
|
||||
{
|
||||
get { return this.PublicKey.Key.KeySize; }
|
||||
get { return this.PublicKey.KeySize; }
|
||||
}
|
||||
|
||||
AsymmetricAlgorithm PrivateKey
|
||||
@ -39,28 +40,67 @@ namespace System.IdentityModel.Tokens
|
||||
{
|
||||
lock (ThisLock)
|
||||
{
|
||||
if (!this.privateKeyAvailabilityDetermined)
|
||||
if (LocalAppContextSwitches.DisableCngCertificates)
|
||||
{
|
||||
this.privateKey = this.certificate.PrivateKey;
|
||||
this.privateKeyAvailabilityDetermined = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.privateKey = CngLightup.GetRSAPrivateKey(this.certificate);
|
||||
if (this.privateKey != null)
|
||||
{
|
||||
RSACryptoServiceProvider rsaCsp = this.privateKey as RSACryptoServiceProvider;
|
||||
// ProviderType == 1 is PROV_RSA_FULL provider type that only supports SHA1. Change it to PROV_RSA_AES=24 that supports SHA2 also.
|
||||
if (rsaCsp != null && rsaCsp.CspKeyContainerInfo.ProviderType == 1)
|
||||
{
|
||||
CspParameters csp = new CspParameters();
|
||||
csp.ProviderType = 24;
|
||||
csp.KeyContainerName = rsaCsp.CspKeyContainerInfo.KeyContainerName;
|
||||
csp.KeyNumber = (int)rsaCsp.CspKeyContainerInfo.KeyNumber;
|
||||
if (rsaCsp.CspKeyContainerInfo.MachineKeyStore)
|
||||
csp.Flags = CspProviderFlags.UseMachineKeyStore;
|
||||
|
||||
csp.Flags |= CspProviderFlags.UseExistingKey;
|
||||
this.privateKey = new RSACryptoServiceProvider(csp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.privateKey = CngLightup.GetDSAPrivateKey(this.certificate);
|
||||
}
|
||||
if (certificate.HasPrivateKey && this.privateKey == null)
|
||||
DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.PrivateKeyNotSupported)));
|
||||
}
|
||||
this.privateKeyAvailabilityDetermined = true;
|
||||
}
|
||||
}
|
||||
return this.privateKey;
|
||||
}
|
||||
}
|
||||
|
||||
PublicKey PublicKey
|
||||
AsymmetricAlgorithm PublicKey
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.publicKey == null)
|
||||
if (!this.publicKeyAvailabilityDetermined)
|
||||
{
|
||||
lock (ThisLock)
|
||||
{
|
||||
if (this.publicKey == null)
|
||||
if (!this.publicKeyAvailabilityDetermined)
|
||||
{
|
||||
this.publicKey = this.certificate.PublicKey;
|
||||
if (LocalAppContextSwitches.DisableCngCertificates)
|
||||
{
|
||||
this.publicKey = this.certificate.PublicKey.Key;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.publicKey = CngLightup.GetRSAPublicKey(this.certificate);
|
||||
if (this.publicKey == null)
|
||||
this.publicKey = CngLightup.GetDSAPublicKey(this.certificate);
|
||||
if (this.publicKey == null)
|
||||
DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.PublicKeyNotSupported)));
|
||||
}
|
||||
this.publicKeyAvailabilityDetermined = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -115,7 +155,7 @@ namespace System.IdentityModel.Tokens
|
||||
public override byte[] EncryptKey(string algorithm, byte[] keyData)
|
||||
{
|
||||
// Ensure that we have an RSA algorithm object
|
||||
RSA rsa = this.PublicKey.Key as RSA;
|
||||
RSA rsa = this.PublicKey as RSA;
|
||||
if (rsa == null)
|
||||
{
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.PublicKeyNotRSA)));
|
||||
@ -181,18 +221,18 @@ namespace System.IdentityModel.Tokens
|
||||
switch (algorithm)
|
||||
{
|
||||
case SignedXml.XmlDsigDSAUrl:
|
||||
if ((this.PublicKey.Key as DSA) != null)
|
||||
if ((this.PublicKey as DSA) != null)
|
||||
{
|
||||
return (this.PublicKey.Key as DSA);
|
||||
return (this.PublicKey as DSA);
|
||||
}
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.AlgorithmAndPublicKeyMisMatch)));
|
||||
case SignedXml.XmlDsigRSASHA1Url:
|
||||
case SecurityAlgorithms.RsaSha256Signature:
|
||||
case EncryptedXml.XmlEncRSA15Url:
|
||||
case EncryptedXml.XmlEncRSAOAEPUrl:
|
||||
if ((this.PublicKey.Key as RSA) != null)
|
||||
if ((this.PublicKey as RSA) != null)
|
||||
{
|
||||
return (this.PublicKey.Key as RSA);
|
||||
return (this.PublicKey as RSA);
|
||||
}
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.AlgorithmAndPublicKeyMisMatch)));
|
||||
default:
|
||||
@ -254,14 +294,14 @@ namespace System.IdentityModel.Tokens
|
||||
{
|
||||
SignatureDescription description = algorithmObject as SignatureDescription;
|
||||
if (description != null)
|
||||
return description.CreateDeformatter(this.PublicKey.Key);
|
||||
return description.CreateDeformatter(this.PublicKey);
|
||||
|
||||
try
|
||||
{
|
||||
AsymmetricSignatureDeformatter asymmetricSignatureDeformatter = algorithmObject as AsymmetricSignatureDeformatter;
|
||||
if (asymmetricSignatureDeformatter != null)
|
||||
{
|
||||
asymmetricSignatureDeformatter.SetKey(this.PublicKey.Key);
|
||||
asymmetricSignatureDeformatter.SetKey(this.PublicKey);
|
||||
return asymmetricSignatureDeformatter;
|
||||
}
|
||||
}
|
||||
@ -279,7 +319,7 @@ namespace System.IdentityModel.Tokens
|
||||
case SignedXml.XmlDsigDSAUrl:
|
||||
|
||||
// Ensure that we have a DSA algorithm object.
|
||||
DSA dsa = (this.PublicKey.Key as DSA);
|
||||
DSA dsa = (this.PublicKey as DSA);
|
||||
if (dsa == null)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.PublicKeyNotDSA)));
|
||||
return new DSASignatureDeformatter(dsa);
|
||||
@ -287,7 +327,7 @@ namespace System.IdentityModel.Tokens
|
||||
case SignedXml.XmlDsigRSASHA1Url:
|
||||
case SecurityAlgorithms.RsaSha256Signature:
|
||||
// Ensure that we have an RSA algorithm object.
|
||||
RSA rsa = (this.PublicKey.Key as RSA);
|
||||
RSA rsa = (this.PublicKey as RSA);
|
||||
if (rsa == null)
|
||||
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.GetString(SR.PublicKeyNotRSA)));
|
||||
return new RSAPKCS1SignatureDeformatter(rsa);
|
||||
@ -456,13 +496,13 @@ namespace System.IdentityModel.Tokens
|
||||
switch (algorithm)
|
||||
{
|
||||
case SignedXml.XmlDsigDSAUrl:
|
||||
return (this.PublicKey.Key is DSA);
|
||||
return (this.PublicKey is DSA);
|
||||
|
||||
case SignedXml.XmlDsigRSASHA1Url:
|
||||
case SecurityAlgorithms.RsaSha256Signature:
|
||||
case EncryptedXml.XmlEncRSA15Url:
|
||||
case EncryptedXml.XmlEncRSAOAEPUrl:
|
||||
return (this.PublicKey.Key is RSA);
|
||||
return (this.PublicKey is RSA);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user