internal static int InitializeSecurityContext(ref SecurityHandle credential, ref SecurityHandle context, string targetName, int requirements, Endianness datarep, SecurityBufferClass inputBuffer, ref SecurityHandle newContext, SecurityBufferClass outputBuffer, ref int attributes, ref long timestamp) { SecurityBufferClass[] inputBuffers = null; SecurityBufferClass[] array = null; if (inputBuffer != null) { inputBuffers = new SecurityBufferClass[] { inputBuffer }; } if (outputBuffer != null) { array = new SecurityBufferClass[] { outputBuffer }; } int result = SSPIWrapper.InitializeSecurityContext(ref credential, ref context, targetName, requirements, datarep, inputBuffers, ref newContext, array, ref attributes, ref timestamp); outputBuffer.type = array[0].type; outputBuffer.size = array[0].size; outputBuffer.token = array[0].token; return(result); }
public static int DecryptMessage(ref SecurityHandle context, SecurityBufferClass[] input, int sequenceNumber) { int num = 0; GCHandle[] gcHandles = SSPIWrapper.PinBuffers(input); int result; try { SecurityBufferDescriptor securityBufferDescriptor = new SecurityBufferDescriptor(input); try { int num2 = UnsafeNclNativeMethods.NativeNTSSPI.DecryptMessage(ref context, ref securityBufferDescriptor, sequenceNumber, ref num); if (num2 == 0) { SecurityBufferClass[] array = securityBufferDescriptor.marshall(); for (int i = 0; i < input.Length; i++) { input[i] = array[i]; } } result = num2; } finally { securityBufferDescriptor.FreeAllBuffers(0); } } finally { SSPIWrapper.FreeGCHandles(gcHandles); } return(result); }
public static int VerifySignature(ref SecurityHandle context, int QOP, SecurityBufferClass[] input, int sequenceNumber) { GCHandle[] gcHandles = SSPIWrapper.PinBuffers(input); int result; try { SecurityBufferDescriptor securityBufferDescriptor = new SecurityBufferDescriptor(input); try { int num = UnsafeNclNativeMethods.NativeNTSSPI.VerifySignature(ref context, ref securityBufferDescriptor, sequenceNumber, QOP); SecurityBufferClass[] array = securityBufferDescriptor.marshall(); for (int i = 0; i < input.Length; i++) { input[i] = array[i]; } result = num; } finally { securityBufferDescriptor.FreeAllBuffers(0); } } finally { SSPIWrapper.FreeGCHandles(gcHandles); } return(result); }
private static int InitializeSecurityContext(ref SecurityHandle credential, ref SecurityHandle context, string targetName, int requirements, Endianness datarep, SecurityBufferClass[] inputBuffers, ref SecurityHandle newContext, SecurityBufferClass[] outputBuffers, ref int attributes, ref long timestamp) { GCHandle[] array = null; GCHandle[] array2 = null; int num = 0; try { if (outputBuffers != null) { array = SSPIWrapper.PinBuffers(outputBuffers); } SecurityBufferDescriptor securityBufferDescriptor = new SecurityBufferDescriptor(outputBuffers); try { if (inputBuffers == null) { num = UnsafeNclNativeMethods.NativeNTSSPI.InitializeSecurityContextW(ref credential, IntPtr.Zero, targetName, requirements, 0, (int)datarep, IntPtr.Zero, 0, ref newContext, ref securityBufferDescriptor, ref attributes, ref timestamp); } else { array2 = SSPIWrapper.PinBuffers(inputBuffers); SecurityBufferDescriptor securityBufferDescriptor2 = new SecurityBufferDescriptor(inputBuffers); try { num = UnsafeNclNativeMethods.NativeNTSSPI.InitializeSecurityContextW(ref credential, ref context, targetName, requirements, 0, (int)datarep, ref securityBufferDescriptor2, 0, ref newContext, ref securityBufferDescriptor, ref attributes, ref timestamp); } finally { securityBufferDescriptor2.FreeAllBuffers(0); } } if (num == 0 || num == 590610) { SecurityBufferClass[] array3 = securityBufferDescriptor.marshall(); for (int i = 0; i < outputBuffers.Length; i++) { outputBuffers[i] = array3[i]; } } } finally { securityBufferDescriptor.FreeAllBuffers(requirements); } } finally { if (array != null) { SSPIWrapper.FreeGCHandles(array); } if (array2 != null) { SSPIWrapper.FreeGCHandles(array2); } } return(num); }
internal static extern int QueryContextAttributes([In] ref SecurityHandle phContext, [In] int attribute, [In] IntPtr buffer);
internal static extern int VerifySignature([In] ref SecurityHandle contextHandle, [In][Out] ref SecurityBufferDescriptor input, [In] int sequenceNumber, [In] int qualityOfProtection);
internal static extern int DecryptMessage([In] ref SecurityHandle contextHandle, [In][Out] ref SecurityBufferDescriptor input, [In] int sequenceNumber, [In][Out] ref int qualityOfProtection);
internal static extern int DeleteSecurityContext([In] ref SecurityHandle handle);
internal static extern int InitializeSecurityContextW([In][Out] ref SecurityHandle credentialHandle, [In][Out] ref SecurityHandle contextHandle, [In] string targetName, [In] int requirements, [In] int reservedI, [In] int endianness, [In][Out] ref SecurityBufferDescriptor inputBuffer, [In] int reservedII, [In][Out] ref SecurityHandle newContext, [In][Out] ref SecurityBufferDescriptor outputBuffer, [In][Out] ref int attributes, [In][Out] ref long timestamp);
internal static extern int FreeCredentialsHandle([In] ref SecurityHandle credentialsHandle);
internal static extern int AcquireCredentialsHandleW([In] string principal, [In] string moduleName, [In] int usage, [In] IntPtr logonID, [In] IntPtr nullAuthData, [In] IntPtr keyCallback, [In] IntPtr keyArgument, [In][Out] ref SecurityHandle credentialsHandle, [In][Out] ref long expiry);