示例#1
0
        /// <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);
        }