Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryWrite()

static bool System.Security.Cryptography.PemEncoding.TryWrite ( ReadOnlySpan< char > label,
ReadOnlySpan< byte > data,
Span< char > destination,
out int charsWritten )
inlinestatic

Definition at line 234 of file PemEncoding.cs.

235 {
236 if (!IsValidLabel(label))
237 {
239 }
240 int encodedSize = GetEncodedSize(label.Length, data.Length);
241 if (destination.Length < encodedSize)
242 {
243 charsWritten = 0;
244 return false;
245 }
246 charsWritten = 0;
247 charsWritten += Write("-----BEGIN ", destination, charsWritten);
248 charsWritten += Write(label, destination, charsWritten);
249 charsWritten += Write("-----", destination, charsWritten);
250 charsWritten += Write("\n", destination, charsWritten);
251 ReadOnlySpan<byte> bytes2 = data;
252 while (bytes2.Length >= 48)
253 {
254 charsWritten += WriteBase64(bytes2.Slice(0, 48), destination, charsWritten);
255 charsWritten += Write("\n", destination, charsWritten);
256 bytes2 = bytes2.Slice(48);
257 }
258 if (bytes2.Length > 0)
259 {
260 charsWritten += WriteBase64(bytes2, destination, charsWritten);
261 charsWritten += Write("\n", destination, charsWritten);
262 bytes2 = default(ReadOnlySpan<byte>);
263 }
264 charsWritten += Write("-----END ", destination, charsWritten);
265 charsWritten += Write(label, destination, charsWritten);
266 charsWritten += Write("-----", destination, charsWritten);
267 return true;
268 static int Write(ReadOnlySpan<char> str, Span<char> dest, int offset)
269 {
270 str.CopyTo(dest.Slice(offset));
271 return str.Length;
272 }
273 static int WriteBase64(ReadOnlySpan<byte> bytes, Span<char> dest, int offset)
274 {
275 if (!Convert.TryToBase64Chars(bytes, dest.Slice(offset), out var charsWritten2))
276 {
277 throw new ArgumentException(null, "destination");
278 }
279 return charsWritten2;
280 }
281 }
static string Argument_PemEncoding_InvalidLabel
Definition SR.cs:32
Definition SR.cs:7
static bool IsValidLabel(ReadOnlySpan< char > data)
static int GetEncodedSize(int labelLength, int dataLength)

References System.SR.Argument_PemEncoding_InvalidLabel, System.bytes, System.destination, System.Security.Cryptography.PemEncoding.GetEncodedSize(), System.Security.Cryptography.PemEncoding.IsValidLabel(), System.ReadOnlySpan< T >.Length, System.offset, System.ReadOnlySpan< T >.Slice(), System.Span< T >.Slice(), System.str, System.Convert.TryToBase64Chars(), and System.Security.Cryptography.Write.

Referenced by System.Security.Cryptography.PemEncoding.Write().