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

◆ EncryptDecryptHelper() [2/2]

static unsafe int System.Net.SSPIWrapper.EncryptDecryptHelper ( OP op,
System::Net::ISSPIInterface secModule,
System::Net::Security::SafeDeleteContext context,
Span< System::Net::Security::SecurityBuffer > input,
uint sequenceNumber )
inlinestaticprivate

Definition at line 179 of file SSPIWrapper.cs.

180 {
181 global::Interop.SspiCli.SecBufferDesc inputOutput = new global::Interop.SspiCli.SecBufferDesc(input.Length);
182 Span<global::Interop.SspiCli.SecBuffer> span = stackalloc global::Interop.SspiCli.SecBuffer[input.Length];
183 span.Clear();
184 fixed (global::Interop.SspiCli.SecBuffer* pBuffers = span)
185 {
186 fixed (byte* ptr4 = ((input.Length > 0) ? input[0].token : null))
187 {
188 fixed (byte* ptr3 = ((input.Length > 1) ? input[1].token : null))
189 {
190 fixed (byte* ptr2 = ((input.Length > 2) ? input[2].token : null))
191 {
192 inputOutput.pBuffers = pBuffers;
193 ThreeByteArrays threeByteArrays = default(ThreeByteArrays);
194 Span<byte[]> span2 = MemoryMarshal.CreateSpan(ref threeByteArrays._item0, 3).Slice(0, input.Length);
195 for (int i = 0; i < input.Length; i++)
196 {
197 ref System.Net.Security.SecurityBuffer reference = ref input[i];
198 span[i].cbBuffer = reference.size;
199 span[i].BufferType = reference.type;
200 if (reference.token == null || reference.token.Length == 0)
201 {
202 span[i].pvBuffer = IntPtr.Zero;
203 continue;
204 }
205 span[i].pvBuffer = Marshal.UnsafeAddrOfPinnedArrayElement(reference.token, reference.offset);
206 span2[i] = reference.token;
207 }
208 int num = op switch
209 {
210 OP.Encrypt => secModule.EncryptMessage(context, ref inputOutput, sequenceNumber),
211 OP.Decrypt => secModule.DecryptMessage(context, ref inputOutput, sequenceNumber),
212 OP.MakeSignature => secModule.MakeSignature(context, ref inputOutput, sequenceNumber),
213 _ => secModule.VerifySignature(context, ref inputOutput, sequenceNumber),
214 };
215 for (int j = 0; j < input.Length; j++)
216 {
217 ref System.Net.Security.SecurityBuffer reference2 = ref input[j];
218 reference2.size = span[j].cbBuffer;
219 reference2.type = span[j].BufferType;
220 if (reference2.size == 0)
221 {
222 reference2.offset = 0;
223 reference2.token = null;
224 continue;
225 }
226 int k;
227 for (k = 0; k < input.Length; k++)
228 {
229 if (span2[k] != null)
230 {
231 byte* ptr = (byte*)(void*)Marshal.UnsafeAddrOfPinnedArrayElement(span2[k], 0);
232 checked
233 {
234 if ((void*)span[j].pvBuffer >= ptr && unchecked((nuint)(void*)span[j].pvBuffer) + unchecked((nuint)reference2.size) <= unchecked((nuint)ptr) + unchecked((nuint)span2[k].Length))
235 {
236 reference2.offset = (int)(unchecked((byte*)(void*)span[j].pvBuffer) - ptr);
237 reference2.token = span2[k];
238 break;
239 }
240 }
241 }
242 }
243 if (k >= input.Length)
244 {
245 reference2.size = 0;
246 reference2.offset = 0;
247 reference2.token = null;
248 }
249 }
250 if (System.Net.NetEventSource.Log.IsEnabled() && num != 0)
251 {
252 System.Net.NetEventSource.Error(null, (num == 590625) ? System.SR.Format(System.SR.event_OperationReturnedSomething, op, "SEC_I_RENEGOTIATE") : System.SR.Format(System.SR.net_log_operation_failed_with_error, op, $"0x{0:X}"), "EncryptDecryptHelper");
253 }
254 return num;
255 }
256 }
257 }
258 }
259 }
static readonly System.Net.NetEventSource Log
static void Error(object thisOrContextObject, FormattableString formattableString, [CallerMemberName] string memberName=null)
static unsafe IntPtr UnsafeAddrOfPinnedArrayElement(Array arr, int index)
Definition Marshal.cs:775
static string event_OperationReturnedSomething
Definition SR.cs:24
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_log_operation_failed_with_error
Definition SR.cs:154
Definition SR.cs:7
int DecryptMessage(System.Net.Security.SafeDeleteContext context, ref global::Interop.SspiCli.SecBufferDesc inputOutput, uint sequenceNumber)
int MakeSignature(System.Net.Security.SafeDeleteContext context, ref global::Interop.SspiCli.SecBufferDesc inputOutput, uint sequenceNumber)
int EncryptMessage(System.Net.Security.SafeDeleteContext context, ref global::Interop.SspiCli.SecBufferDesc inputOutput, uint sequenceNumber)
int VerifySignature(System.Net.Security.SafeDeleteContext context, ref global::Interop.SspiCli.SecBufferDesc inputOutput, uint sequenceNumber)

References System.Net.SSPIWrapper.ThreeByteArrays._item0, System.Span< T >.Clear(), System.Net.NetEventSource.Error(), System.SR.event_OperationReturnedSomething, System.SR.Format(), System.input, System.Net.NetEventSource.Log, System.SR.net_log_operation_failed_with_error, System.Net.Security.SecurityBuffer.size, System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(), and System.IntPtr.Zero.

Referenced by System.Net.SSPIWrapper.DecryptMessage(), System.Net.SSPIWrapper.EncryptMessage(), System.Net.SSPIWrapper.MakeSignature(), System.Net.SSPIWrapper.MakeSignature(), System.Net.SSPIWrapper.VerifySignature(), and System.Net.SSPIWrapper.VerifySignature().