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()); }