Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AsymmetricAlgorithm.cs
Go to the documentation of this file.
2
4
5public abstract class AsymmetricAlgorithm : IDisposable
6{
7 private delegate bool TryExportPbe<T>(ReadOnlySpan<T> password, PbeParameters pbeParameters, Span<byte> destination, out int bytesWritten);
8
9 private delegate bool TryExport(Span<byte> destination, out int bytesWritten);
10
11 protected int KeySizeValue;
12
13 [MaybeNull]
15
16 public virtual int KeySize
17 {
18 get
19 {
20 return KeySizeValue;
21 }
22 set
23 {
24 if (!value.IsLegalSize(LegalKeySizes))
25 {
27 }
29 }
30 }
31
32 public virtual KeySizes[] LegalKeySizes => (KeySizes[])LegalKeySizesValue.Clone();
33
34 public virtual string? SignatureAlgorithm
35 {
36 get
37 {
38 throw new NotImplementedException();
39 }
40 }
41
42 public virtual string? KeyExchangeAlgorithm
43 {
44 get
45 {
46 throw new NotImplementedException();
47 }
48 }
49
50 [Obsolete("The default implementation of this cryptography algorithm is not supported.", DiagnosticId = "SYSLIB0007", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")]
55
56 [RequiresUnreferencedCode("The default algorithm implementations might be removed, use strong type references like 'RSA.Create()' instead.")]
57 public static AsymmetricAlgorithm? Create(string algName)
58 {
60 }
61
62 public virtual void FromXmlString(string xmlString)
63 {
64 throw new NotImplementedException();
65 }
66
67 public virtual string ToXmlString(bool includePrivateParameters)
68 {
69 throw new NotImplementedException();
70 }
71
72 public void Clear()
73 {
74 Dispose(disposing: true);
75 GC.SuppressFinalize(this);
76 }
77
78 public void Dispose()
79 {
80 Clear();
81 }
82
83 protected virtual void Dispose(bool disposing)
84 {
85 }
86
91
96
97 public virtual void ImportPkcs8PrivateKey(ReadOnlySpan<byte> source, out int bytesRead)
98 {
100 }
101
102 public virtual void ImportSubjectPublicKeyInfo(ReadOnlySpan<byte> source, out int bytesRead)
103 {
105 }
106
107 public virtual byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<byte> passwordBytes, PbeParameters pbeParameters)
108 {
109 return ExportArray(passwordBytes, pbeParameters, delegate(ReadOnlySpan<byte> span, PbeParameters parameters, Span<byte> destination, out int i)
110 {
111 return TryExportEncryptedPkcs8PrivateKey(span, parameters, destination, out i);
112 });
113 }
114
115 public virtual byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<char> password, PbeParameters pbeParameters)
116 {
117 return ExportArray(password, pbeParameters, delegate(ReadOnlySpan<char> span, PbeParameters parameters, Span<byte> destination, out int i)
118 {
119 return TryExportEncryptedPkcs8PrivateKey(span, parameters, destination, out i);
120 });
121 }
122
123 public virtual byte[] ExportPkcs8PrivateKey()
124 {
125 return ExportArray(delegate(Span<byte> destination, out int i)
126 {
128 });
129 }
130
131 public virtual byte[] ExportSubjectPublicKeyInfo()
132 {
133 return ExportArray(delegate(Span<byte> destination, out int i)
134 {
136 });
137 }
138
139 public virtual bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<byte> passwordBytes, PbeParameters pbeParameters, Span<byte> destination, out int bytesWritten)
140 {
142 }
143
144 public virtual bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<char> password, PbeParameters pbeParameters, Span<byte> destination, out int bytesWritten)
145 {
147 }
148
149 public virtual bool TryExportPkcs8PrivateKey(Span<byte> destination, out int bytesWritten)
150 {
152 }
153
154 public virtual bool TryExportSubjectPublicKeyInfo(Span<byte> destination, out int bytesWritten)
155 {
157 }
158
163
168
173
174 private unsafe static byte[] ExportArray<T>(ReadOnlySpan<T> password, PbeParameters pbeParameters, TryExportPbe<T> exporter)
175 {
176 int minimumLength = 4096;
177 while (true)
178 {
179 byte[] array = CryptoPool.Rent(minimumLength);
180 int bytesWritten = 0;
181 minimumLength = array.Length;
182 fixed (byte* ptr = array)
183 {
184 try
185 {
186 if (exporter(password, pbeParameters, array, out bytesWritten))
187 {
188 return new Span<byte>(array, 0, bytesWritten).ToArray();
189 }
190 }
191 finally
192 {
193 CryptoPool.Return(array, bytesWritten);
194 }
195 minimumLength = checked(minimumLength * 2);
196 }
197 }
198 }
199
200 private unsafe static byte[] ExportArray(TryExport exporter)
201 {
202 int minimumLength = 4096;
203 while (true)
204 {
205 byte[] array = CryptoPool.Rent(minimumLength);
206 int bytesWritten = 0;
207 minimumLength = array.Length;
208 fixed (byte* ptr = array)
209 {
210 try
211 {
212 if (exporter(array, out bytesWritten))
213 {
214 return new Span<byte>(array, 0, bytesWritten).ToArray();
215 }
216 }
217 finally
218 {
219 CryptoPool.Return(array, bytesWritten);
220 }
221 minimumLength = checked(minimumLength * 2);
222 }
223 }
224 }
225}
static void SuppressFinalize(object obj)
Definition GC.cs:202
Definition GC.cs:8
static string Cryptography_DefaultAlgorithm_NotSupported
Definition SR.cs:34
static string Cryptography_InvalidKeySize
Definition SR.cs:92
static string NotSupported_SubclassOverride
Definition SR.cs:1714
Definition SR.cs:7
virtual bool TryExportPkcs8PrivateKey(Span< byte > destination, out int bytesWritten)
virtual void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< char > password)
virtual bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
virtual void ImportSubjectPublicKeyInfo(ReadOnlySpan< byte > source, out int bytesRead)
virtual void ImportPkcs8PrivateKey(ReadOnlySpan< byte > source, out int bytesRead)
static unsafe byte[] ExportArray(TryExport exporter)
virtual void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, ReadOnlySpan< byte > source, out int bytesRead)
static unsafe byte[] ExportArray< T >(ReadOnlySpan< T > password, PbeParameters pbeParameters, TryExportPbe< T > exporter)
virtual bool TryExportSubjectPublicKeyInfo(Span< byte > destination, out int bytesWritten)
virtual byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, PbeParameters pbeParameters)
virtual void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< byte > passwordBytes)
virtual bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
virtual void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, ReadOnlySpan< byte > source, out int bytesRead)
virtual string ToXmlString(bool includePrivateParameters)
delegate bool TryExport(Span< byte > destination, out int bytesWritten)
virtual byte[] ExportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, PbeParameters pbeParameters)
delegate bool TryExportPbe< T >(ReadOnlySpan< T > password, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
static ? AsymmetricAlgorithm Create(string algName)
virtual void ImportFromPem(ReadOnlySpan< char > input)
static void Return(byte[] array, int clearSize=-1)
Definition CryptoPool.cs:12
static byte[] Rent(int minimumLength)
Definition CryptoPool.cs:7
T[] ToArray()
Definition Span.cs:291