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
- EditorZone.cs
- InterleavedZipPartStream.cs
- IndicShape.cs
- safelink.cs
- CatalogZoneAutoFormat.cs
- SizeLimitedCache.cs
- Cursor.cs
- CharUnicodeInfo.cs
- ProfileManager.cs
- DataGridColumnCollectionEditor.cs
- ToolStripButton.cs
- FocusManager.cs
- DataGridViewColumnEventArgs.cs
- ServerValidateEventArgs.cs
- Missing.cs
- FilteredDataSetHelper.cs
- IndividualDeviceConfig.cs
- IsolatedStorageFilePermission.cs
- ProcessModelInfo.cs
- GlyphingCache.cs
- QueryAccessibilityHelpEvent.cs
- TripleDESCryptoServiceProvider.cs
- LookupTables.cs
- MessagePropertyAttribute.cs
- _SingleItemRequestCache.cs
- WebReferencesBuildProvider.cs
- XmlBinaryReader.cs
- RowVisual.cs
- ActivitiesCollection.cs
- RoleManagerSection.cs
- CmsUtils.cs
- DataGridViewCellStyleEditor.cs
- LinqDataSourceSelectEventArgs.cs
- HtmlGenericControl.cs
- ComponentResourceKeyConverter.cs
- Point3DKeyFrameCollection.cs
- EpmTargetTree.cs
- HttpCookiesSection.cs
- DependencyPropertyHelper.cs
- MultiPropertyDescriptorGridEntry.cs
- EventListener.cs
- Rules.cs
- Util.cs
- ClientFormsAuthenticationCredentials.cs
- StrokeNodeData.cs
- ServicePointManager.cs
- Italic.cs
- PermissionToken.cs
- ComponentResourceKey.cs
- SqlOuterApplyReducer.cs
- DbConnectionOptions.cs
- ProgressiveCrcCalculatingStream.cs
- PrincipalPermission.cs
- VerticalAlignConverter.cs
- _SecureChannel.cs
- MetabaseServerConfig.cs
- SaveFileDialog.cs
- SrgsItemList.cs
- SafeHandles.cs
- AutomationIdentifier.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TimerEventSubscriptionCollection.cs
- RpcCryptoContext.cs
- ErrorsHelper.cs
- DocumentGridPage.cs
- NativeMethods.cs
- EdmTypeAttribute.cs
- SchemaElementDecl.cs
- ProvidePropertyAttribute.cs
- PartialClassGenerationTask.cs
- OAVariantLib.cs
- AsnEncodedData.cs
- ReflectionServiceProvider.cs
- GuidTagList.cs
- SpecularMaterial.cs
- SocketStream.cs
- PathNode.cs
- RightNameExpirationInfoPair.cs
- XpsS0ValidatingLoader.cs
- TableLayoutStyle.cs
- Module.cs
- HtmlInputHidden.cs
- DocumentSchemaValidator.cs
- VersionUtil.cs
- StateBag.cs
- smtppermission.cs
- TextCollapsingProperties.cs
- WebBrowserProgressChangedEventHandler.cs
- ReaderWriterLock.cs
- WindowsToolbar.cs
- HostedBindingBehavior.cs
- ToolStripControlHost.cs
- SplitContainer.cs
- DataSourceControlBuilder.cs
- HtmlElement.cs
- EntityTransaction.cs
- IList.cs
- XamlDebuggerXmlReader.cs
- OleDbError.cs
- KerberosSecurityTokenAuthenticator.cs