/// <summary> /// Decrypts message /// </summary> public byte[] DecryptMessage(SecurityContext context, byte[] encBuffer) { // parameters validation if (context == null) { throw new ArgumentNullException("context"); } if (encBuffer == null) { throw new ArgumentNullException("encMessage"); } // parse encrypted buffer byte[] encrypted; byte[] trailer; ParseEncryptedBuffer(encBuffer, out encrypted, out trailer); // prepare buffers SecurityBuffers inputBuffers = new SecurityBuffers(2); inputBuffers.SetBuffer(0, (int)SSPINative.SECBUFFER_DATA, encrypted); inputBuffers.SetBuffer(1, (int)SSPINative.SECBUFFER_TOKEN, trailer); // encrypt message Int64 contextHandle = context.Handle; int error = SSPINative.DecryptMessage( ref contextHandle, inputBuffers, 0, 0); if (error < 0) { throw new SSPIException(error, "Could not decrypt message"); } // get decrypted message byte[] message = inputBuffers.GetBuffer(0); inputBuffers.Dispose(); return(message); }