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); } }
internal static extern SecStatusCode DecryptMessage( [In] SecHandle phContext, SecBufferDesc pMessage, int MessageSeqNo, out SecurityQualityOfProtectionFlags pfQOP );
/// <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); }
/// <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)); }
/// <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)); }