Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
PemKeyImportHelpers.cs
Go to the documentation of this file.
1using System;
3
5
6internal static class PemKeyImportHelpers
7{
8 public delegate void ImportKeyAction(ReadOnlySpan<byte> source, out int bytesRead);
9
11
12 public delegate void ImportEncryptedKeyAction<TPass>(ReadOnlySpan<TPass> password, ReadOnlySpan<byte> source, out int bytesRead);
13
15 {
16 bool flag = false;
17 PemFields pemFields = default(PemFields);
18 ReadOnlySpan<char> readOnlySpan = default(ReadOnlySpan<char>);
19 ReadOnlySpan<char> readOnlySpan2 = input;
20 PemFields fields;
21 ReadOnlySpan<char> readOnlySpan3;
22 while (PemEncoding.TryFind(readOnlySpan2, out fields))
23 {
24 readOnlySpan3 = readOnlySpan2;
25 ReadOnlySpan<char> span = readOnlySpan3[fields.Label];
26 if (span.SequenceEqual("ENCRYPTED PRIVATE KEY"))
27 {
28 if (flag)
29 {
31 }
32 flag = true;
33 pemFields = fields;
34 readOnlySpan = readOnlySpan2;
35 }
36 Index end = fields.Location.End;
37 readOnlySpan3 = readOnlySpan2;
38 readOnlySpan2 = readOnlySpan3[end..];
39 }
40 if (!flag)
41 {
43 }
44 readOnlySpan3 = readOnlySpan;
45 int length = readOnlySpan3.Length;
46 Range base64Data = pemFields.Base64Data;
47 int offset = base64Data.Start.GetOffset(length);
48 int bytesRead = base64Data.End.GetOffset(length) - offset;
49 ReadOnlySpan<char> chars = readOnlySpan3.Slice(offset, bytesRead);
50 int decodedDataLength = pemFields.DecodedDataLength;
51 byte[] array = System.Security.Cryptography.CryptoPool.Rent(decodedDataLength);
52 int bytesWritten = 0;
53 try
54 {
55 if (!Convert.TryFromBase64Chars(chars, array, out bytesWritten))
56 {
57 throw new ArgumentException();
58 }
59 Span<byte> span2 = array.AsSpan(0, bytesWritten);
60 importAction(password, span2, out bytesRead);
61 }
62 finally
63 {
65 }
66 }
67
69 {
70 ImportKeyAction importKeyAction = null;
71 PemFields pemFields = default(PemFields);
72 ReadOnlySpan<char> readOnlySpan = default(ReadOnlySpan<char>);
73 bool flag = false;
74 ReadOnlySpan<char> readOnlySpan2 = input;
75 PemFields fields;
76 ReadOnlySpan<char> readOnlySpan3;
77 while (PemEncoding.TryFind(readOnlySpan2, out fields))
78 {
79 readOnlySpan3 = readOnlySpan2;
80 ReadOnlySpan<char> readOnlySpan4 = readOnlySpan3[fields.Label];
81 ImportKeyAction importKeyAction2 = callback(readOnlySpan4);
82 if (importKeyAction2 != null)
83 {
84 if (importKeyAction != null || flag)
85 {
87 }
88 importKeyAction = importKeyAction2;
89 pemFields = fields;
90 readOnlySpan = readOnlySpan2;
91 }
92 else if (readOnlySpan4.SequenceEqual("ENCRYPTED PRIVATE KEY"))
93 {
94 if (importKeyAction != null || flag)
95 {
97 }
98 flag = true;
99 }
100 Index end = fields.Location.End;
101 readOnlySpan3 = readOnlySpan2;
102 readOnlySpan2 = readOnlySpan3[end..];
103 }
104 if (flag)
105 {
107 }
108 if (importKeyAction == null)
109 {
111 }
112 readOnlySpan3 = readOnlySpan;
113 int length = readOnlySpan3.Length;
114 Range base64Data = pemFields.Base64Data;
115 int offset = base64Data.Start.GetOffset(length);
116 int bytesRead = base64Data.End.GetOffset(length) - offset;
117 ReadOnlySpan<char> chars = readOnlySpan3.Slice(offset, bytesRead);
118 int decodedDataLength = pemFields.DecodedDataLength;
119 byte[] array = System.Security.Cryptography.CryptoPool.Rent(decodedDataLength);
120 int bytesWritten = 0;
121 try
122 {
123 if (!Convert.TryFromBase64Chars(chars, array, out bytesWritten))
124 {
125 throw new ArgumentException();
126 }
127 Span<byte> span = array.AsSpan(0, bytesWritten);
128 importKeyAction(span, out bytesRead);
129 }
130 finally
131 {
133 }
134 }
135}
static void ImportEncryptedPem< TPass >(ReadOnlySpan< char > input, ReadOnlySpan< TPass > password, ImportEncryptedKeyAction< TPass > importAction)
static void ImportPem(ReadOnlySpan< char > input, FindImportActionFunc callback)
delegate ImportKeyAction FindImportActionFunc(ReadOnlySpan< char > label)
delegate void ImportEncryptedKeyAction< TPass >(ReadOnlySpan< TPass > password, ReadOnlySpan< byte > source, out int bytesRead)
delegate void ImportKeyAction(ReadOnlySpan< byte > source, out int bytesRead)
static bool TryFromBase64Chars(ReadOnlySpan< char > chars, Span< byte > bytes, out int bytesWritten)
Definition Convert.cs:2925
static string Argument_PemImport_EncryptedPem
Definition SR.cs:32
static string Argument_PemImport_NoPemFound
Definition SR.cs:28
static string Argument_PemImport_AmbiguousPem
Definition SR.cs:30
Definition SR.cs:7
static void Return(byte[] array, int clearSize=-1)
Definition CryptoPool.cs:12
static byte[] Rent(int minimumLength)
Definition CryptoPool.cs:7
static bool TryFind(ReadOnlySpan< char > pemData, out PemFields fields)
int GetOffset(int length)
Definition Index.cs:71
Index End
Definition Range.cs:10
Index Start
Definition Range.cs:8
ReadOnlySpan< T > Slice(int start)