Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- MenuItemStyle.cs
- TickBar.cs
- PartitionResolver.cs
- AvTraceFormat.cs
- HitTestWithPointDrawingContextWalker.cs
- QueryContinueDragEvent.cs
- Base64Encoder.cs
- LinqDataSourceDeleteEventArgs.cs
- XmlEventCache.cs
- ParseChildrenAsPropertiesAttribute.cs
- RowsCopiedEventArgs.cs
- DbProviderFactoriesConfigurationHandler.cs
- TaiwanCalendar.cs
- invalidudtexception.cs
- Effect.cs
- Vector3DCollection.cs
- InitiatorServiceModelSecurityTokenRequirement.cs
- CodeConditionStatement.cs
- StackOverflowException.cs
- Point3DAnimationUsingKeyFrames.cs
- SimpleHandlerFactory.cs
- WizardPanel.cs
- BoolExpression.cs
- HttpCacheVary.cs
- TextPointer.cs
- CommandLineParser.cs
- RectAnimation.cs
- OdbcDataAdapter.cs
- IsolatedStorageFileStream.cs
- BinaryObjectWriter.cs
- DateTimePicker.cs
- GeneralTransform3DTo2DTo3D.cs
- DataGridItemCollection.cs
- SerializationFieldInfo.cs
- SQLDateTimeStorage.cs
- PieceNameHelper.cs
- TemporaryBitmapFile.cs
- UriTemplateClientFormatter.cs
- DateTimeOffset.cs
- ValidationErrorEventArgs.cs
- HtmlContainerControl.cs
- TextTreeText.cs
- BuildResultCache.cs
- DataGridViewCellStyle.cs
- OpenFileDialog.cs
- Brushes.cs
- SiteMap.cs
- SqlException.cs
- WorkflowServiceBehavior.cs
- GlyphRunDrawing.cs
- ExtensionFile.cs
- ConnectionManager.cs
- ThicknessKeyFrameCollection.cs
- PassportAuthenticationEventArgs.cs
- NameObjectCollectionBase.cs
- MessageBox.cs
- ApplicationSecurityInfo.cs
- WebPartDisplayModeCancelEventArgs.cs
- Cursor.cs
- HostingEnvironmentSection.cs
- SemanticAnalyzer.cs
- HttpsHostedTransportConfiguration.cs
- StateInitializationDesigner.cs
- Substitution.cs
- SamlAuthenticationClaimResource.cs
- ItemContainerGenerator.cs
- ProfilePropertySettings.cs
- DataIdProcessor.cs
- EntityContainer.cs
- MessageBuffer.cs
- CodeDomConfigurationHandler.cs
- altserialization.cs
- DrawingContextWalker.cs
- NumericPagerField.cs
- PLINQETWProvider.cs
- Span.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- DataGridViewCellPaintingEventArgs.cs
- BooleanSwitch.cs
- Substitution.cs
- CodeConditionStatement.cs
- CapabilitiesSection.cs
- PersianCalendar.cs
- RunClient.cs
- URIFormatException.cs
- ListView.cs
- ErrorTolerantObjectWriter.cs
- DataList.cs
- DataGridRow.cs
- TimeBoundedCache.cs
- NullPackagingPolicy.cs
- XmlSubtreeReader.cs
- IconHelper.cs
- HeaderCollection.cs
- ParserExtension.cs
- FilterElement.cs
- ByteFacetDescriptionElement.cs
- _ListenerResponseStream.cs
- MenuEventArgs.cs
- SymDocumentType.cs