Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilip Navara <filip.navara@gmail.com>2018-06-18 22:18:59 +0300
committerLudovic Henry <luhenry@microsoft.com>2018-06-18 22:18:59 +0300
commit736bf9d3a3510208777d56c4f0dbc9578a7f360b (patch)
tree375c6718cb77143f3b025be0ba60ec1977b810ff /mcs/class/Mono.Security
parent4d3822188b3715cfc0c7d289c6b9b315174ab563 (diff)
Detect the private key type from the supplied OID instead of guessing from the content. (#9168)
* Detect the private key type from the supplied OID instead of guessing from the content. * Use oid constants from X509Certificate.
Diffstat (limited to 'mcs/class/Mono.Security')
-rw-r--r--mcs/class/Mono.Security/Mono.Security.X509/PKCS12.cs18
-rw-r--r--mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs7
2 files changed, 15 insertions, 10 deletions
diff --git a/mcs/class/Mono.Security/Mono.Security.X509/PKCS12.cs b/mcs/class/Mono.Security/Mono.Security.X509/PKCS12.cs
index d5b5c809634..c37e52c2dda 100644
--- a/mcs/class/Mono.Security/Mono.Security.X509/PKCS12.cs
+++ b/mcs/class/Mono.Security/Mono.Security.X509/PKCS12.cs
@@ -741,22 +741,26 @@ namespace Mono.Security.X509 {
private void AddPrivateKey (PKCS8.PrivateKeyInfo pki)
{
byte[] privateKey = pki.PrivateKey;
- switch (privateKey [0]) {
- case 0x02:
+ try {
+ switch (pki.Algorithm) {
+ case X509Certificate.OID_RSA:
+ _keyBags.Add (PKCS8.PrivateKeyInfo.DecodeRSA (privateKey));
+ break;
+ case X509Certificate.OID_DSA:
bool found;
DSAParameters p = GetExistingParameters (out found);
if (found) {
_keyBags.Add (PKCS8.PrivateKeyInfo.DecodeDSA (privateKey, p));
}
break;
- case 0x30:
- _keyBags.Add (PKCS8.PrivateKeyInfo.DecodeRSA (privateKey));
- break;
+ case X509Certificate.OID_ECC: // TODO
default:
- Array.Clear (privateKey, 0, privateKey.Length);
throw new CryptographicException ("Unknown private key format");
+ }
+ }
+ finally {
+ Array.Clear (privateKey, 0, privateKey.Length);
}
- Array.Clear (privateKey, 0, privateKey.Length);
}
private void ReadSafeBag (ASN1 safeBag)
diff --git a/mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs b/mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs
index 2851c1716cc..99791bb4b3f 100644
--- a/mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs
+++ b/mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs
@@ -70,9 +70,10 @@ namespace Mono.Security.X509 {
private DSA _dsa;
// from http://msdn.microsoft.com/en-gb/library/ff635835.aspx
- private const string OID_DSA = "1.2.840.10040.4.1";
- private const string OID_RSA = "1.2.840.113549.1.1.1";
-
+ internal const string OID_DSA = "1.2.840.10040.4.1";
+ internal const string OID_RSA = "1.2.840.113549.1.1.1";
+ internal const string OID_ECC = "1.2.840.10045.2.1";
+
// from http://www.ietf.org/rfc/rfc2459.txt
//
//Certificate ::= SEQUENCE {