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 byte[] GetOutgoingBlob(byte[] incomingBlob, out bool handshakeComplete) { handshakeComplete = true; if (this.m_SecurityContext.Handle.Initialized && incomingBlob == null) { return(null); } SecurityBufferClass inputBuffer = null; if (incomingBlob != null) { inputBuffer = new SecurityBufferClass(incomingBlob, BufferType.Token); } SecurityBufferClass securityBufferClass = new SecurityBufferClass(this.m_TokenSize, BufferType.Token); int num = SSPIWrapper.InitializeSecurityContext(ref this.m_CredentialsHandle.Handle, ref this.m_SecurityContext.Handle, this.m_RemotePeerId, (int)this.m_RequestedFlags, this.m_Endianness, inputBuffer, ref this.m_SecurityContext.Handle, securityBufferClass, ref this.m_ContextFlags, ref this.m_SecurityContext.TimeStamp); int num2 = num & -2147483648; if (num2 != 0) { throw new Win32Exception(num); } if (num != 0 && this.m_SecurityContext.Handle.Initialized) { handshakeComplete = false; } else { switch (this.m_SecurityContext.SecurityContextMode) { case SecurityContextMode.stream: this.CheckIfFlagWasObtainedIfRequested(ContextFlags.Stream); break; } this.CheckIfFlagWasObtainedIfRequested(ContextFlags.MutualAuth); this.CheckIfFlagWasObtainedIfRequested(ContextFlags.ReplayDetect); this.CheckIfFlagWasObtainedIfRequested(ContextFlags.SequenceDetect); this.CheckIfFlagWasObtainedIfRequested(ContextFlags.Confidentiality); } return(securityBufferClass.token); }