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
- WebPartExportVerb.cs
- Graphics.cs
- ResolvedKeyFrameEntry.cs
- CursorInteropHelper.cs
- Quaternion.cs
- CodeGroup.cs
- PropertyInformation.cs
- FirstMatchCodeGroup.cs
- Psha1DerivedKeyGenerator.cs
- ClientTarget.cs
- WindowsFormsSectionHandler.cs
- DetailsViewActionList.cs
- TraceInternal.cs
- EntityTemplateFactory.cs
- MgmtConfigurationRecord.cs
- XmlSerializationGeneratedCode.cs
- SQLRoleProvider.cs
- ADConnectionHelper.cs
- XmlSchemaObject.cs
- TextTreeTextElementNode.cs
- __FastResourceComparer.cs
- ItemAutomationPeer.cs
- FrameworkTemplate.cs
- XmlDictionaryReader.cs
- XmlSerializerAssemblyAttribute.cs
- StreamResourceInfo.cs
- PathHelper.cs
- LinkTarget.cs
- EastAsianLunisolarCalendar.cs
- WebSysDefaultValueAttribute.cs
- CacheAxisQuery.cs
- BindingListCollectionView.cs
- ImportedNamespaceContextItem.cs
- EventRoute.cs
- TimelineGroup.cs
- SoapIgnoreAttribute.cs
- VisualBasicValue.cs
- Soap12ProtocolImporter.cs
- NameSpaceExtractor.cs
- DataGridViewLinkColumn.cs
- AppDomainAttributes.cs
- VectorAnimation.cs
- SqlInfoMessageEvent.cs
- DropDownButton.cs
- ValueTable.cs
- TimeSpanStorage.cs
- ClusterRegistryConfigurationProvider.cs
- MultiSelectRootGridEntry.cs
- XmlSubtreeReader.cs
- FullTrustAssembly.cs
- WebPartCloseVerb.cs
- X509SecurityTokenAuthenticator.cs
- PluralizationServiceUtil.cs
- SerialPort.cs
- MethodToken.cs
- MarginCollapsingState.cs
- ServicesUtilities.cs
- Exceptions.cs
- RightNameExpirationInfoPair.cs
- WindowsListViewScroll.cs
- AttributeEmitter.cs
- FullTextLine.cs
- BackoffTimeoutHelper.cs
- TripleDESCryptoServiceProvider.cs
- TextTreeRootNode.cs
- UnicastIPAddressInformationCollection.cs
- SystemResourceHost.cs
- FastEncoderWindow.cs
- LinkAreaEditor.cs
- StringBuilder.cs
- DigitShape.cs
- ShaderEffect.cs
- StylusCollection.cs
- MemoryStream.cs
- DiscoveryDocumentLinksPattern.cs
- DBCommandBuilder.cs
- UniqueConstraint.cs
- MiniCustomAttributeInfo.cs
- XsdBuildProvider.cs
- AffineTransform3D.cs
- Point.cs
- PlatformCulture.cs
- DataGridViewCellStyleEditor.cs
- XLinq.cs
- CharStorage.cs
- ResourcePart.cs
- DynamicILGenerator.cs
- WindowsFormsDesignerOptionService.cs
- Identifier.cs
- IIS7WorkerRequest.cs
- SimpleWebHandlerParser.cs
- WindowsAuthenticationEventArgs.cs
- SimpleType.cs
- DBSchemaTable.cs
- ViewManager.cs
- AsyncCallback.cs
- EmptyQuery.cs
- BamlRecordHelper.cs
- TextElement.cs
- CodeArrayCreateExpression.cs