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 EncryptedMessage EncryptMessage(
            SecHandle context,
            SecurityQualityOfProtectionFlags flags,
            byte[] message,
            int sequence_no)
        {
            if (message is null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            SecurityBuffer buffer    = new SecurityBufferInOut(SecurityBufferType.Data, message);
            var            signature = EncryptMessage(context, flags, new[] { buffer }, sequence_no);

            return(new EncryptedMessage(buffer.ToArray(), signature));
        }
        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());
        }
        internal static void EncryptMessageNoSignature(
            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));
            }

            using (var list = new DisposableList())
            {
                var buffers = messages.ToBufferList(list);
                var desc    = buffers.ToDesc(list);
                SecurityNativeMethods.EncryptMessage(context, flags, desc, sequence_no).CheckResult();
                messages.UpdateBuffers(desc);
            }
        }
Exemple #5
0
 internal static extern SecStatusCode DecryptMessage(
     [In] SecHandle phContext,
     SecBufferDesc pMessage,
     int MessageSeqNo,
     out SecurityQualityOfProtectionFlags pfQOP
     );
Exemple #6
0
 /// <summary>
 /// Encrypt a message for this context with no specific signature.
 /// </summary>
 /// <param name="messages">The messages to encrypt.</param>
 /// <param name="quality_of_protection">Quality of protection flags.</param>
 /// <param name="sequence_no">The sequence number.</param>
 /// <remarks>The messages are encrypted in place. You can add buffers with the ReadOnly flag to prevent them being encrypted.
 /// If you need to return a signature then it must be specified in a buffer.</remarks>
 public void EncryptMessageNoSignature(IEnumerable <SecurityBuffer> messages, SecurityQualityOfProtectionFlags quality_of_protection, int sequence_no)
 {
     SecurityContextUtils.EncryptMessage(Context, quality_of_protection, messages, sequence_no);
 }
Exemple #7
0
 /// <summary>
 /// Encrypt a message for this context.
 /// </summary>
 /// <param name="messages">The messages to encrypt.</param>
 /// <param name="quality_of_protection">Quality of protection flags.</param>
 /// <returns>The signature for the messages.</returns>
 /// <remarks>The messages are encrypted in place. You can add buffers with the ReadOnly flag to prevent them being encrypted.</remarks>
 /// <param name="sequence_no">The sequence number.</param>
 public byte[] EncryptMessage(IEnumerable <SecurityBuffer> messages, SecurityQualityOfProtectionFlags quality_of_protection, int sequence_no)
 {
     return(SecurityContextUtils.EncryptMessage(Context, quality_of_protection, messages, sequence_no));
 }
Exemple #8
0
 /// <summary>
 /// Encrypt a message for this context.
 /// </summary>
 /// <param name="message">The message to encrypt.</param>
 /// <param name="quality_of_protection">Quality of protection flags.</param>
 /// <returns>The encrypted message.</returns>
 /// <param name="sequence_no">The sequence number.</param>
 public EncryptedMessage EncryptMessage(byte[] message, SecurityQualityOfProtectionFlags quality_of_protection, int sequence_no)
 {
     return(SecurityContextUtils.EncryptMessage(Context, quality_of_protection, message, sequence_no));
 }