Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Security / CookieProtection.cs / 1 / 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 || bMac.Length != 20)
return null;
if (buf.Length >= count + 20)
{
Buffer.BlockCopy (bMac, 0, buf, count, 20);
}
else
{
byte[] bTemp = buf;
buf = new byte[count + 20];
Buffer.BlockCopy (bTemp, 0, buf, 0, count);
Buffer.BlockCopy (bMac, 0, buf, count, 20);
}
count += 20;
}
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)
{
//////////////////////////////////////////////////////////////////////
// Step 2: Get the MAC: Last 20 bytes
if (buf.Length <= 20)
return null;
byte[] buf2 = new byte[buf.Length - 20];
Buffer.BlockCopy (buf, 0, buf2, 0, buf2.Length);
byte[] bMac = MachineKeySection.HashData (buf2, null, 0, buf2.Length);
//////////////////////////////////////////////////////////////////////
// Step 3: Make sure the MAC is correct
if (bMac == null || bMac.Length != 20)
return null;
for (int iter = 0; iter < 20; iter++)
if (bMac[iter] != buf[buf2.Length + iter])
return null;
buf = buf2;
}
return buf;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
// 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 || bMac.Length != 20)
return null;
if (buf.Length >= count + 20)
{
Buffer.BlockCopy (bMac, 0, buf, count, 20);
}
else
{
byte[] bTemp = buf;
buf = new byte[count + 20];
Buffer.BlockCopy (bTemp, 0, buf, 0, count);
Buffer.BlockCopy (bMac, 0, buf, count, 20);
}
count += 20;
}
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)
{
//////////////////////////////////////////////////////////////////////
// Step 2: Get the MAC: Last 20 bytes
if (buf.Length <= 20)
return null;
byte[] buf2 = new byte[buf.Length - 20];
Buffer.BlockCopy (buf, 0, buf2, 0, buf2.Length);
byte[] bMac = MachineKeySection.HashData (buf2, null, 0, buf2.Length);
//////////////////////////////////////////////////////////////////////
// Step 3: Make sure the MAC is correct
if (bMac == null || bMac.Length != 20)
return null;
for (int iter = 0; iter < 20; iter++)
if (bMac[iter] != buf[buf2.Length + iter])
return null;
buf = buf2;
}
return buf;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Activity.cs
- SecurityPermission.cs
- AutomationPatternInfo.cs
- MsmqBindingMonitor.cs
- ItemDragEvent.cs
- Type.cs
- SqlUserDefinedTypeAttribute.cs
- IPipelineRuntime.cs
- XsltLoader.cs
- Crypto.cs
- SearchExpression.cs
- TransformCollection.cs
- BoundPropertyEntry.cs
- EntityDataSourceWrapperCollection.cs
- oledbconnectionstring.cs
- WpfXamlMember.cs
- DPCustomTypeDescriptor.cs
- MenuAdapter.cs
- MexBindingBindingCollectionElement.cs
- HttpFileCollection.cs
- URLString.cs
- SpeechRecognizer.cs
- LowerCaseStringConverter.cs
- RedBlackList.cs
- DbConnectionStringCommon.cs
- XmlAttributeOverrides.cs
- WebReferenceOptions.cs
- Track.cs
- XmlDocumentType.cs
- SystemInfo.cs
- XmlSchemaComplexContent.cs
- BoundColumn.cs
- CompositionTarget.cs
- RegexRunner.cs
- ThreadExceptionDialog.cs
- HtmlControlDesigner.cs
- SafeIUnknown.cs
- COM2ExtendedTypeConverter.cs
- DescendentsWalkerBase.cs
- SerializationInfoEnumerator.cs
- HtmlTableCell.cs
- PermissionSetTriple.cs
- CapabilitiesSection.cs
- ViewCellRelation.cs
- TriggerCollection.cs
- AppDomain.cs
- odbcmetadatafactory.cs
- BoundColumn.cs
- RequestNavigateEventArgs.cs
- DefaultObjectMappingItemCollection.cs
- MembershipPasswordException.cs
- DoubleCollection.cs
- Thread.cs
- TraceLog.cs
- CmsInterop.cs
- AppSettingsReader.cs
- WinEventTracker.cs
- FamilyCollection.cs
- NativeCppClassAttribute.cs
- Win32.cs
- CompilerInfo.cs
- ComNativeDescriptor.cs
- XmlIncludeAttribute.cs
- CodeAccessSecurityEngine.cs
- RelatedPropertyManager.cs
- MaskedTextBox.cs
- TextEditorTyping.cs
- DtdParser.cs
- _OSSOCK.cs
- Msec.cs
- RouteCollection.cs
- XmlnsCompatibleWithAttribute.cs
- XmlSchemaSimpleContentRestriction.cs
- ConfigurationElement.cs
- GridViewRowEventArgs.cs
- QilBinary.cs
- ProcessInfo.cs
- AttachedPropertyMethodSelector.cs
- SystemResourceKey.cs
- SystemTcpConnection.cs
- IISUnsafeMethods.cs
- WebExceptionStatus.cs
- CheckBoxField.cs
- MemoryFailPoint.cs
- Track.cs
- OleDbFactory.cs
- WebProxyScriptElement.cs
- WebConfigurationHost.cs
- ApplyImportsAction.cs
- SoapSchemaExporter.cs
- ValidatorUtils.cs
- HttpCachePolicy.cs
- PolicyManager.cs
- FormViewInsertedEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- ClientSideQueueItem.cs
- ConnectionManagementSection.cs
- SecurityManager.cs
- ShaderEffect.cs
- EmptyStringExpandableObjectConverter.cs