9 if (!
TryFind(pemData, out var fields))
18 if (pemData.
Length <
"-----BEGIN ".Length +
"-----".Length * 2 +
"-----END ".Length)
26 while ((num2 = pemData.IndexOfByOffset(
"-----BEGIN ", num)) >= 0)
28 int num3 = num2 +
"-----BEGIN ".Length;
34 int num4 = pemData.IndexOfByOffset(
"-----", num3);
40 Range range = num3..num4;
45 int num5 = num4 +
"-----".Length;
46 int num6 =
"-----END ".Length + readOnlySpan2.Length +
"-----".Length;
49 int num7 = pemData.IndexOfByOffset(
value, num5);
52 int num8 = num7 + num6;
55 Range range2 = num5..num7;
56 readOnlySpan = pemData;
57 if (
TryCountBase64(readOnlySpan[range2], out var base64Start, out var base64End, out var base64DecodedSize))
59 Range location = num2..num8;
60 Range base64data = (num5 + base64Start)..(num5 + base64End);
61 fields =
new PemFields(range, base64data, location, base64DecodedSize);
78 int length =
"-----END ".
Length + label.Length +
"-----".Length;
88 int num =
str.Slice(startPosition).IndexOf(
value);
91 return num + startPosition;
103 for (
int i = 0; i < data.
Length; i++)
111 if ((c2 !=
' ' && c2 !=
'-') || !flag)
118 static bool IsLabelChar(
char c)
120 if ((uint)(c - 33) <= 93u)
131 base64End =
str.Length;
134 base64DecodedSize = 0;
139 for (
int i = 0; i <
str.Length; i++)
154 base64End =
str.Length;
165 base64DecodedSize = 0;
168 int num3 = num2 + num;
169 if (num2 > 2 || ((uint)num3 & 3u) != 0)
171 base64DecodedSize = 0;
174 base64DecodedSize = (num3 >> 2) * 3 - num2;
181 if (
ch !=
'+' &&
ch !=
'/' && (uint)(
ch - 48) >= 10u && (uint)(
ch - 65) >= 26u)
183 return (uint)(
ch - 97) < 26u;
191 if (
ch !=
' ' &&
ch !=
'\t' &&
ch !=
'\n')
208 if (labelLength > 1073741808)
212 if (dataLength > 1585834053)
216 int num =
"-----BEGIN ".Length + labelLength +
"-----".Length;
217 int num2 =
"-----END ".Length + labelLength +
"-----".Length;
218 int num3 = num + num2 + 1;
219 int num4 = (dataLength + 2) / 3 << 2;
226 int num6 = num4 + num5;
227 if (
int.MaxValue - num6 < num3)
252 while (bytes2.
Length >= 48)
254 charsWritten += WriteBase64(bytes2.
Slice(0, 48),
destination, charsWritten);
256 bytes2 = bytes2.
Slice(48);
260 charsWritten += WriteBase64(bytes2,
destination, charsWritten);
279 return charsWritten2;
290 char[]
array =
new char[encodedSize];
static unsafe bool TryToBase64Chars(ReadOnlySpan< byte > bytes, Span< char > chars, out int charsWritten, Base64FormattingOptions options=Base64FormattingOptions.None)
static int DivRem(int a, int b, out int result)
static string Argument_PemEncoding_InvalidLabel
static string Argument_PemEncoding_EncodedSizeTooLarge
static string Argument_PemEncoding_NoPemFound
static string ArgumentOutOfRange_NeedPositiveNumber
static bool IsBase64Character(char ch)
static bool IsValidLabel(ReadOnlySpan< char > data)
static PemFields Find(ReadOnlySpan< char > pemData)
static bool TryCountBase64(ReadOnlySpan< char > str, out int base64Start, out int base64End, out int base64DecodedSize)
static bool TryFind(ReadOnlySpan< char > pemData, out PemFields fields)
static int IndexOfByOffset(this ReadOnlySpan< char > str, ReadOnlySpan< char > value, int startPosition)
static char[] Write(ReadOnlySpan< char > label, ReadOnlySpan< byte > data)
static bool IsWhiteSpaceCharacter(char ch)
static bool TryWrite(ReadOnlySpan< char > label, ReadOnlySpan< byte > data, Span< char > destination, out int charsWritten)
static int GetEncodedSize(int labelLength, int dataLength)
void CopyTo(Span< T > destination)
ReadOnlySpan< T > Slice(int start)
Span< T > Slice(int start)