Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ ImportEncryptedPem< TPass >()

static void Internal.Cryptography.PemKeyImportHelpers.ImportEncryptedPem< TPass > ( ReadOnlySpan< char > input,
ReadOnlySpan< TPass > password,
ImportEncryptedKeyAction< TPass > importAction )
inlinestatic

Definition at line 14 of file PemKeyImportHelpers.cs.

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 }
static bool TryFromBase64Chars(ReadOnlySpan< char > chars, Span< byte > bytes, out int bytesWritten)
Definition Convert.cs:2925
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)
static Index End
Definition Index.cs:12
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)

References System.SR.Argument_PemImport_AmbiguousPem, System.SR.Argument_PemImport_NoPemFound, System.array, System.Security.Cryptography.PemFields.Base64Data, System.chars, System.Security.Cryptography.PemFields.DecodedDataLength, System.Range.End, System.Index.GetOffset(), System.input, System.Security.Cryptography.PemFields.Label, System.length, System.ReadOnlySpan< T >.Length, System.Security.Cryptography.PemFields.Location, System.offset, System.Security.Cryptography.CryptoPool.Rent(), System.Security.Cryptography.CryptoPool.Return(), System.ReadOnlySpan< T >.Slice(), System.Range.Start, System.Security.Cryptography.PemEncoding.TryFind(), and System.Convert.TryFromBase64Chars().