Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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.
//
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ValueTypePropertyReference.cs
- FakeModelItemImpl.cs
- TcpProcessProtocolHandler.cs
- WebPartDisplayModeCollection.cs
- SimpleParser.cs
- ExpressionNode.cs
- DataGridTable.cs
- FlowDocumentView.cs
- BitmapEffectState.cs
- PassportPrincipal.cs
- TransformValueSerializer.cs
- AuthenticationConfig.cs
- DBProviderConfigurationHandler.cs
- XamlTreeBuilder.cs
- ReferenceService.cs
- MembershipPasswordException.cs
- CodeBlockBuilder.cs
- BrowserCapabilitiesFactory.cs
- HttpBindingExtension.cs
- DateTimeFormatInfoScanner.cs
- ReferentialConstraint.cs
- DataGridHeaderBorder.cs
- MatchNoneMessageFilter.cs
- ParallelQuery.cs
- ObjectSet.cs
- FrameworkElementAutomationPeer.cs
- ArrayTypeMismatchException.cs
- IntAverageAggregationOperator.cs
- XPathDocument.cs
- COM2EnumConverter.cs
- SafeFileMappingHandle.cs
- UnionExpr.cs
- DummyDataSource.cs
- SoapMessage.cs
- PtsHost.cs
- CodeTypeDeclarationCollection.cs
- control.ime.cs
- BufferModesCollection.cs
- ValidationPropertyAttribute.cs
- CompositeFontFamily.cs
- WinEventTracker.cs
- WebGetAttribute.cs
- XmlNamespaceMapping.cs
- SatelliteContractVersionAttribute.cs
- SharedUtils.cs
- MsmqMessage.cs
- InvalidOleVariantTypeException.cs
- SchemaHelper.cs
- FromRequest.cs
- SQLConvert.cs
- StatusBarPanelClickEvent.cs
- AccessViolationException.cs
- IndexOutOfRangeException.cs
- CmsInterop.cs
- Queue.cs
- SafeJobHandle.cs
- TextPointer.cs
- TextWriterTraceListener.cs
- DesigntimeLicenseContextSerializer.cs
- SupportsEventValidationAttribute.cs
- Parser.cs
- WindowsComboBox.cs
- ImageIndexConverter.cs
- SerializerProvider.cs
- InternalRelationshipCollection.cs
- HwndHostAutomationPeer.cs
- DataRowView.cs
- InputChannelBinder.cs
- FontSizeConverter.cs
- DateTimeUtil.cs
- infer.cs
- VisualTarget.cs
- SystemIPInterfaceProperties.cs
- SafeSerializationManager.cs
- TagMapCollection.cs
- CqlLexerHelpers.cs
- DbConnectionInternal.cs
- RewritingSimplifier.cs
- FrameworkObject.cs
- TabControl.cs
- VariableQuery.cs
- XamlPointCollectionSerializer.cs
- ActivitySurrogate.cs
- EditingCoordinator.cs
- CodeTypeReference.cs
- WebReferenceCollection.cs
- VolatileResourceManager.cs
- HwndTarget.cs
- CommandHelpers.cs
- RealizationDrawingContextWalker.cs
- ExtractorMetadata.cs
- LinearKeyFrames.cs
- HttpCookiesSection.cs
- ProvidePropertyAttribute.cs
- WebPartsSection.cs
- DataTableExtensions.cs
- TimeSpanConverter.cs
- ProfilePropertySettingsCollection.cs
- UserControl.cs
- BevelBitmapEffect.cs