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

◆ ImportPem()

static void Internal.Cryptography.PemKeyImportHelpers.ImportPem ( ReadOnlySpan< char > input,
FindImportActionFunc callback )
inlinestatic

Definition at line 68 of file PemKeyImportHelpers.cs.

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 }
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)
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_EncryptedPem, 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(), Internal.Cryptography.PemKeyImportHelpers.ImportKeyAction(), 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().

Referenced by System.Security.Cryptography.DSA.ImportFromPem(), System.Security.Cryptography.ECDiffieHellman.ImportFromPem(), System.Security.Cryptography.ECDsa.ImportFromPem(), and System.Security.Cryptography.RSA.ImportFromPem().