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

◆ TryFind()

static bool System.Security.Cryptography.PemEncoding.TryFind ( ReadOnlySpan< char > pemData,
out PemFields fields )
inlinestatic

Definition at line 16 of file PemEncoding.cs.

17 {
18 if (pemData.Length < "-----BEGIN ".Length + "-----".Length * 2 + "-----END ".Length)
19 {
20 fields = default(PemFields);
21 return false;
22 }
23 Span<char> span = stackalloc char[256];
24 int num = 0;
25 int num2;
26 while ((num2 = pemData.IndexOfByOffset("-----BEGIN ", num)) >= 0)
27 {
28 int num3 = num2 + "-----BEGIN ".Length;
29 if (num2 > 0 && !IsWhiteSpaceCharacter(pemData[num2 - 1]))
30 {
31 num = num3;
32 continue;
33 }
34 int num4 = pemData.IndexOfByOffset("-----", num3);
35 if (num4 < 0)
36 {
37 fields = default(PemFields);
38 return false;
39 }
40 Range range = num3..num4;
41 ReadOnlySpan<char> readOnlySpan = pemData;
42 ReadOnlySpan<char> readOnlySpan2 = readOnlySpan[range];
43 if (IsValidLabel(readOnlySpan2))
44 {
45 int num5 = num4 + "-----".Length;
46 int num6 = "-----END ".Length + readOnlySpan2.Length + "-----".Length;
47 Span<char> destination2 = ((num6 > 256) ? ((Span<char>)new char[num6]) : span);
48 ReadOnlySpan<char> value = WritePostEB(readOnlySpan2, destination2);
49 int num7 = pemData.IndexOfByOffset(value, num5);
50 if (num7 >= 0)
51 {
52 int num8 = num7 + num6;
53 if (num8 >= pemData.Length - 1 || IsWhiteSpaceCharacter(pemData[num8]))
54 {
55 Range range2 = num5..num7;
56 readOnlySpan = pemData;
57 if (TryCountBase64(readOnlySpan[range2], out var base64Start, out var base64End, out var base64DecodedSize))
58 {
59 Range location = num2..num8;
60 Range base64data = (num5 + base64Start)..(num5 + base64End);
61 fields = new PemFields(range, base64data, location, base64DecodedSize);
62 return true;
63 }
64 }
65 }
66 }
67 if (num4 <= num)
68 {
69 fields = default(PemFields);
70 return false;
71 }
72 num = num4;
73 }
74 fields = default(PemFields);
75 return false;
76 static ReadOnlySpan<char> WritePostEB(ReadOnlySpan<char> label, Span<char> destination)
77 {
78 int length = "-----END ".Length + label.Length + "-----".Length;
79 "-----END ".CopyTo(destination);
80 label.CopyTo(destination.Slice("-----END ".Length));
81 "-----".CopyTo(destination.Slice("-----END ".Length + label.Length));
82 return destination.Slice(0, length);
83 }
84 }
static bool IsValidLabel(ReadOnlySpan< char > data)
static bool TryCountBase64(ReadOnlySpan< char > str, out int base64Start, out int base64End, out int base64DecodedSize)

References System.ReadOnlySpan< T >.CopyTo(), System.destination, System.Security.Cryptography.PemEncoding.IsValidLabel(), System.Security.Cryptography.PemEncoding.IsWhiteSpaceCharacter(), System.length, System.ReadOnlySpan< T >.Length, System.Security.Cryptography.PemEncoding.TryCountBase64(), and System.value.

Referenced by System.Security.Cryptography.PemEncoding.Find(), Internal.Cryptography.PemKeyImportHelpers.ImportEncryptedPem< TPass >(), Internal.Cryptography.PemKeyImportHelpers.ImportPem(), and Internal.Cryptography.PemEnumerator.Enumerator.MoveNext().