GetCryptoTransformRequest.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / GetCryptoTransformRequest.cs / 1 / GetCryptoTransformRequest.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace Microsoft.InfoCards
{ 
    using System;
    using System.Collections; 
    using System.Diagnostics; 
    using System.Security.Principal;
    using System.Threading; //ManualResetEvent 
    using System.ComponentModel; //Win32Exception
    using System.IO; //Stream
    using System.Security.Cryptography;
    using System.Text; 
    using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace;
 
    // 
    // Summary:
    // Wraps a request to get a remoted ICryptoTransform interface based on a SymmetricCryptoSession. 
    //

    class GetCryptoTransformRequest : ClientRequest
    { 
        //
        // The cryptosession id we are attaching to. 
        // 
        int m_cryptoSession;
 
        //
        // The cipher mode being requested.
        //
        CipherMode    m_mode; 

        // 
        // The padding mode being requested. 
        //
        PaddingMode    m_padding; 

        //
        // The feedback size being requested
        // 
        int    m_feedbackSize;
 
        // 
        // Is Encryption or Decryption being requested.
        // 
        SymmetricCryptoSession.Direction    m_direction;

        //
        // The intialization vector. 
        //
        byte[] m_iv; 
 
        //
        // The returned transform session. 
        //
        TransformCryptoSession m_transformSession;

        // 
        // Sumamry:
        // Construct a GetCryptoTransformRequest object 
        // 
        // Arguments:
        //  callingProcess          - The process in which the caller originated. 
        //  callingIdentity         - The WindowsIdentity of the caller
        //  rpcHandle               - The handle of the native RPC request
        //  inArgs                  - The stream to read input data from
        //  outArgs                 - The stream to write output data to 
        //
        public GetCryptoTransformRequest( Process callingProcess, WindowsIdentity callingIdentity, IntPtr rpcHandle, Stream inArgs, Stream outArgs ) 
            : base( callingProcess, callingIdentity, rpcHandle, inArgs, outArgs ) 
        {
            IDT.TraceDebug( "Intiating a GetCryptoTransform request" ); 
        }


 
        protected override void OnMarshalInArgs()
        { 
            IDT.DebugAssert( null != InArgs, "null inargs" ); 
            BinaryReader reader = new InfoCardBinaryReader( InArgs, Encoding.Unicode );
 
            m_cryptoSession     = reader.ReadInt32();

            m_mode              = (CipherMode)reader.ReadInt32();
            m_padding           = (PaddingMode)reader.ReadInt32(); 
            m_feedbackSize      = reader.ReadInt32();
            m_direction         = (SymmetricCryptoSession.Direction)reader.ReadInt32(); 
            m_iv                = reader.ReadBytes( reader.ReadInt32() ); 

            IDT.ThrowInvalidArgumentConditional( 0 == m_feedbackSize, "feedbackSize" ); 
        }

        //
        // Summary: 
        // Attach to the appropriate cryptosession and get a CryptoTransform
        // 
        protected override void OnProcess() 
        {
            SymmetricCryptoSession session = 
                ( SymmetricCryptoSession )CryptoSession.Find( m_cryptoSession, CallerPid, RequestorIdentity.User );

            m_transformSession = session.GetCryptoTransform( m_mode, m_padding, m_feedbackSize, m_direction, m_iv );
        } 

 
        // 
        // Summary:
        // Return the TransformCryptoSession 
        //
        protected override void OnMarshalOutArgs()
        {
            IDT.DebugAssert( null != OutArgs, "Null out args" ); 
            BinaryWriter writer = new BinaryWriter( OutArgs, Encoding.Unicode );
 
            IDT.DebugAssert( null != m_transformSession, "unexpected null outgoing transfromSession" ); 
            m_transformSession.Write( writer );
            writer.Flush(); 
        }

    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK