/// <summary> /// Verifies the signature of a message /// </summary> public void VerifySignature(SecurityContext context, byte[] message, byte[] signature) { // parameters validation if (context == null) { throw new ArgumentNullException("context"); } if (message == null) { throw new ArgumentNullException("message"); } if (signature == null) { throw new ArgumentNullException("signature"); } // prepare buffers SecurityBuffers inputBuffers = new SecurityBuffers(2); inputBuffers.SetBuffer(0, (int)SSPINative.SECBUFFER_DATA, message); inputBuffers.SetBuffer(1, (int)SSPINative.SECBUFFER_TOKEN, signature); // verify signature Int64 contextHandle = context.Handle; int error = SSPINative.VerifySignature( ref contextHandle, inputBuffers, 0, 0); if (error < 0) { switch (error) { case SSPINative.SEC_E_MESSAGE_ALTERED: throw new SSPIException(error, "The message or signature supplied for verification has been altered"); case SSPINative.SEC_E_OUT_OF_SEQUENCE: throw new SSPIException(error, "The message supplied for verification is out of sequence"); default: throw new SSPIException(error, "Could not verify message signature"); } ; } }