internal static byte[] EncryptMessage(
            SecHandle context,
            SecurityQualityOfProtectionFlags flags,
            IEnumerable <SecurityBuffer> messages,
            int sequence_no)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (messages is null)
            {
                throw new ArgumentNullException(nameof(messages));
            }

            List <SecurityBuffer> sig_buffers = new List <SecurityBuffer>(messages);
            var sizes          = QueryContextAttribute <SecPkgContext_Sizes>(context, SECPKG_ATTR.SIZES);
            var out_sig_buffer = new SecurityBufferOut(SecurityBufferType.Token, sizes.cbSecurityTrailer);

            sig_buffers.Add(out_sig_buffer);

            using (var list = new DisposableList())
            {
                var buffers = sig_buffers.ToBufferList(list);
                var desc    = buffers.ToDesc(list);
                SecurityNativeMethods.EncryptMessage(context, flags, desc, sequence_no).CheckResult();
                sig_buffers.UpdateBuffers(desc);
                return(out_sig_buffer.ToArray());
            }
        }
        internal static byte[] MakeSignature(
            SecHandle context,
            int flags,
            IEnumerable <SecurityBuffer> messages,
            int sequence_no)
        {
            int max_sig_size = QueryContextAttribute <SecPkgContext_Sizes>(context, SECPKG_ATTR.SIZES).cbMaxSignature;
            List <SecurityBuffer> sig_buffers      = new List <SecurityBuffer>(messages);
            SecurityBufferOut     signature_buffer = new SecurityBufferOut(SecurityBufferType.Token, max_sig_size);

            sig_buffers.Add(signature_buffer);

            using (var list = new DisposableList())
            {
                List <SecBuffer> buffers = sig_buffers.ToBufferList(list);
                SecBufferDesc    desc    = buffers.ToDesc(list);
                SecurityNativeMethods.MakeSignature(context, flags, desc, sequence_no).CheckResult();
                sig_buffers.UpdateBuffers(desc);
                return(signature_buffer.ToArray());
            }
        }
        internal static byte[] EncryptMessage(
            SecHandle context,
            SecurityQualityOfProtectionFlags flags,
            IEnumerable <SecurityBuffer> messages,
            int sequence_no)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (messages is null)
            {
                throw new ArgumentNullException(nameof(messages));
            }

            List <SecurityBuffer> sig_buffers = new List <SecurityBuffer>(messages);
            var out_sig_buffer = new SecurityBufferOut(SecurityBufferType.Token, GetSecurityTrailerSize(context));

            sig_buffers.Add(out_sig_buffer);
            EncryptMessageNoSignature(context, flags, sig_buffers, sequence_no);
            return(out_sig_buffer.ToArray());
        }