Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ECDsaCertificateExtensions.cs
Go to the documentation of this file.
3
5
6public static class ECDsaCertificateExtensions
7{
8 public static ECDsa? GetECDsaPublicKey(this X509Certificate2 certificate)
9 {
10 return certificate.GetPublicKey<ECDsa>((X509Certificate2 cert) => HasECDsaKeyUsage(cert));
11 }
12
13 public static ECDsa? GetECDsaPrivateKey(this X509Certificate2 certificate)
14 {
15 return certificate.GetPrivateKey<ECDsa>((X509Certificate2 cert) => HasECDsaKeyUsage(cert));
16 }
17
18 public static X509Certificate2 CopyWithPrivateKey(this X509Certificate2 certificate, ECDsa privateKey)
19 {
20 if (certificate == null)
21 {
22 throw new ArgumentNullException("certificate");
23 }
24 if (privateKey == null)
25 {
26 throw new ArgumentNullException("privateKey");
27 }
28 if (certificate.HasPrivateKey)
29 {
31 }
32 using (ECDsa eCDsa = certificate.GetECDsaPublicKey())
33 {
34 if (eCDsa == null)
35 {
37 }
38 if (!Internal.Cryptography.Helpers.AreSamePublicECParameters(eCDsa.ExportParameters(includePrivateParameters: false), privateKey.ExportParameters(includePrivateParameters: false)))
39 {
41 }
42 }
43 ICertificatePal pal = certificate.Pal.CopyWithPrivateKey(privateKey);
44 return new X509Certificate2(pal);
45 }
46
47 private static bool HasECDsaKeyUsage(X509Certificate2 certificate)
48 {
49 foreach (X509Extension extension in certificate.Extensions)
50 {
51 if (extension.Oid.Value == "2.5.29.15")
52 {
53 X509KeyUsageExtension x509KeyUsageExtension = (X509KeyUsageExtension)extension;
54 if ((x509KeyUsageExtension.KeyUsages & X509KeyUsageFlags.KeyAgreement) == 0)
55 {
56 return true;
57 }
58 return (x509KeyUsageExtension.KeyUsages & (X509KeyUsageFlags.CrlSign | X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.NonRepudiation | X509KeyUsageFlags.DigitalSignature)) != 0;
59 }
60 }
61 return true;
62 }
63}
static bool AreSamePublicECParameters(ECParameters aParameters, ECParameters bParameters)
Definition Helpers.cs:194
static string Cryptography_Cert_AlreadyHasPrivateKey
Definition SR.cs:40
static string Cryptography_PrivateKey_WrongAlgorithm
Definition SR.cs:86
static string Cryptography_PrivateKey_DoesNotMatch
Definition SR.cs:84
Definition SR.cs:7
virtual ECParameters ExportParameters(bool includePrivateParameters)
Definition ECDsa.cs:29
static X509Certificate2 CopyWithPrivateKey(this X509Certificate2 certificate, ECDsa privateKey)
ICertificatePal CopyWithPrivateKey(DSA privateKey)