CookieProtection.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Security / CookieProtection.cs / 1305376 / CookieProtection.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.Security 
{ 
    using System.Security.Cryptography;
    using System.Web.Configuration; 
    using System.Web.Management;


    public enum CookieProtection 
    {
 
        None, Validation, Encryption, All 
    }
 
    internal class CookieProtectionHelper
    {
        internal static string Encode (CookieProtection cookieProtection, byte [] buf, int count)
        { 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Validation)
            { 
                byte[] bMac = MachineKeySection.HashData (buf, null, 0, count); 

                if (bMac == null) 
                    return null;
                if (buf.Length >= count + bMac.Length)
                {
                    Buffer.BlockCopy (bMac, 0, buf, count, bMac.Length); 
                }
                else 
                { 
                    byte[] bTemp = buf;
                    buf = new byte[count + bMac.Length]; 
                    Buffer.BlockCopy (bTemp, 0, buf, 0, count);
                    Buffer.BlockCopy (bMac, 0, buf, count, bMac.Length);
                }
                count += bMac.Length; 
            }
 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Encryption) 
            {
                buf = MachineKeySection.EncryptOrDecryptData (true, buf, null, 0, count); 
                count = buf.Length;
            }
            if (count < buf.Length)
            { 
                byte[] bTemp = buf;
                buf = new byte[count]; 
                Buffer.BlockCopy (bTemp, 0, buf, 0, count); 
            }
 
            return HttpServerUtility.UrlTokenEncode(buf);
        }

        internal static byte[] Decode (CookieProtection cookieProtection, string data) 
        {
            byte [] buf = HttpServerUtility.UrlTokenDecode(data); 
            if (buf == null || cookieProtection == CookieProtection.None) 
                return buf;
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Encryption) 
            {
                buf = MachineKeySection.EncryptOrDecryptData (false, buf, null, 0, buf.Length);
                if (buf == null)
                    return null; 
            }
 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Validation) 
                return MachineKeySection.GetUnHashedData(buf);
            return buf; 
        }
    }
}

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

namespace System.Web.Security 
{ 
    using System.Security.Cryptography;
    using System.Web.Configuration; 
    using System.Web.Management;


    public enum CookieProtection 
    {
 
        None, Validation, Encryption, All 
    }
 
    internal class CookieProtectionHelper
    {
        internal static string Encode (CookieProtection cookieProtection, byte [] buf, int count)
        { 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Validation)
            { 
                byte[] bMac = MachineKeySection.HashData (buf, null, 0, count); 

                if (bMac == null) 
                    return null;
                if (buf.Length >= count + bMac.Length)
                {
                    Buffer.BlockCopy (bMac, 0, buf, count, bMac.Length); 
                }
                else 
                { 
                    byte[] bTemp = buf;
                    buf = new byte[count + bMac.Length]; 
                    Buffer.BlockCopy (bTemp, 0, buf, 0, count);
                    Buffer.BlockCopy (bMac, 0, buf, count, bMac.Length);
                }
                count += bMac.Length; 
            }
 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Encryption) 
            {
                buf = MachineKeySection.EncryptOrDecryptData (true, buf, null, 0, count); 
                count = buf.Length;
            }
            if (count < buf.Length)
            { 
                byte[] bTemp = buf;
                buf = new byte[count]; 
                Buffer.BlockCopy (bTemp, 0, buf, 0, count); 
            }
 
            return HttpServerUtility.UrlTokenEncode(buf);
        }

        internal static byte[] Decode (CookieProtection cookieProtection, string data) 
        {
            byte [] buf = HttpServerUtility.UrlTokenDecode(data); 
            if (buf == null || cookieProtection == CookieProtection.None) 
                return buf;
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Encryption) 
            {
                buf = MachineKeySection.EncryptOrDecryptData (false, buf, null, 0, buf.Length);
                if (buf == null)
                    return null; 
            }
 
            if (cookieProtection == CookieProtection.All || cookieProtection == CookieProtection.Validation) 
                return MachineKeySection.GetUnHashedData(buf);
            return buf; 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

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