diff options
author | Filip Navara <filip.navara@gmail.com> | 2018-06-18 22:18:59 +0300 |
---|---|---|
committer | Ludovic Henry <luhenry@microsoft.com> | 2018-06-18 22:18:59 +0300 |
commit | 736bf9d3a3510208777d56c4f0dbc9578a7f360b (patch) | |
tree | 375c6718cb77143f3b025be0ba60ec1977b810ff /mcs/class/Mono.Security | |
parent | 4d3822188b3715cfc0c7d289c6b9b315174ab563 (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.cs | 18 | ||||
-rw-r--r-- | mcs/class/Mono.Security/Mono.Security.X509/X509Certificate.cs | 7 |
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 { |