Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Xml / System / Xml / Core / SecureStringHasher.cs / 1 / SecureStringHasher.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace System.Xml {
// SecureStringHasher is a hash code provider for strings. The hash codes calculation starts with a seed (hasCodeRandomizer) which is usually
// different for each instance of SecureStringHasher. Since the hash code depend on the seed, the chance of hashtable DoS attack in case when
// someone passes in lots of strings that hash to the same hash code is greatly reduced.
// The SecureStringHasher implements IEqualityComparer for strings and therefore can be used in generic IDictionary.
internal class SecureStringHasher : IEqualityComparer {
int hashCodeRandomizer;
public SecureStringHasher() {
this.hashCodeRandomizer = Environment.TickCount;
}
public SecureStringHasher( int hashCodeRandomizer ) {
this.hashCodeRandomizer = hashCodeRandomizer;
}
public int Compare( String x, String y ) {
return String.Compare(x, y, StringComparison.Ordinal);
}
public bool Equals( String x, String y ) {
return String.Equals( x, y, StringComparison.Ordinal );
}
public int GetHashCode( String key ) {
int hashCode = hashCodeRandomizer;
// use key.Length to eliminate the rangecheck
for ( int i = 0; i < key.Length; i++ ) {
hashCode += ( hashCode << 7 ) ^ key[i];
}
// mix it a bit more
hashCode -= hashCode >> 17;
hashCode -= hashCode >> 11;
hashCode -= hashCode >> 5;
return hashCode;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
namespace System.Xml {
// SecureStringHasher is a hash code provider for strings. The hash codes calculation starts with a seed (hasCodeRandomizer) which is usually
// different for each instance of SecureStringHasher. Since the hash code depend on the seed, the chance of hashtable DoS attack in case when
// someone passes in lots of strings that hash to the same hash code is greatly reduced.
// The SecureStringHasher implements IEqualityComparer for strings and therefore can be used in generic IDictionary.
internal class SecureStringHasher : IEqualityComparer {
int hashCodeRandomizer;
public SecureStringHasher() {
this.hashCodeRandomizer = Environment.TickCount;
}
public SecureStringHasher( int hashCodeRandomizer ) {
this.hashCodeRandomizer = hashCodeRandomizer;
}
public int Compare( String x, String y ) {
return String.Compare(x, y, StringComparison.Ordinal);
}
public bool Equals( String x, String y ) {
return String.Equals( x, y, StringComparison.Ordinal );
}
public int GetHashCode( String key ) {
int hashCode = hashCodeRandomizer;
// use key.Length to eliminate the rangecheck
for ( int i = 0; i < key.Length; i++ ) {
hashCode += ( hashCode << 7 ) ^ key[i];
}
// mix it a bit more
hashCode -= hashCode >> 17;
hashCode -= hashCode >> 11;
hashCode -= hashCode >> 5;
return hashCode;
}
}
}
// 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
- HyperLink.cs
- SourceFilter.cs
- precedingquery.cs
- BindingExpressionUncommonField.cs
- StatusBarPanel.cs
- RichTextBoxConstants.cs
- FileNotFoundException.cs
- SafeUserTokenHandle.cs
- ResXResourceSet.cs
- ByteStack.cs
- DataGridTablesFactory.cs
- AccessibilityHelperForVista.cs
- SiteMapNodeItemEventArgs.cs
- ProgressBarAutomationPeer.cs
- TextCompositionManager.cs
- ResourceBinder.cs
- AutomationElement.cs
- XmlWriterTraceListener.cs
- EntityStoreSchemaFilterEntry.cs
- PublisherMembershipCondition.cs
- CodeTypeDelegate.cs
- AuthenticationSection.cs
- WebHttpEndpointElement.cs
- ClientTargetCollection.cs
- XslCompiledTransform.cs
- ExtensionDataReader.cs
- OleDbCommandBuilder.cs
- EntityWithKeyStrategy.cs
- WebPartCatalogCloseVerb.cs
- infer.cs
- SecurityCriticalDataForSet.cs
- NameSpaceExtractor.cs
- StackSpiller.Generated.cs
- Range.cs
- DetailsView.cs
- DependencyPropertyAttribute.cs
- Argument.cs
- ProxyRpc.cs
- TextCompositionManager.cs
- ApplyImportsAction.cs
- ReadOnlyDictionary.cs
- Validator.cs
- RawStylusInputCustomData.cs
- DynamicDocumentPaginator.cs
- typedescriptorpermission.cs
- TypedMessageConverter.cs
- BaseParser.cs
- Bezier.cs
- NetworkAddressChange.cs
- DrawingCollection.cs
- Model3DCollection.cs
- AssemblyAssociatedContentFileAttribute.cs
- FontStyleConverter.cs
- ObjectViewListener.cs
- MemoryRecordBuffer.cs
- Pair.cs
- AttributeUsageAttribute.cs
- Quaternion.cs
- XmlSchemaRedefine.cs
- AutomationEvent.cs
- Message.cs
- ImageDrawing.cs
- ObservableCollection.cs
- WebServicesSection.cs
- WebServiceReceiveDesigner.cs
- WinFormsUtils.cs
- PageStatePersister.cs
- SynchronizingStream.cs
- OdbcConnectionHandle.cs
- SchemaNamespaceManager.cs
- HtmlShimManager.cs
- StringSource.cs
- UserControlDocumentDesigner.cs
- ResourceSet.cs
- SelectedDatesCollection.cs
- AuthenticationSection.cs
- DBPropSet.cs
- SubstitutionList.cs
- Win32.cs
- PanelDesigner.cs
- Oid.cs
- Buffer.cs
- MenuScrollingVisibilityConverter.cs
- WebPartAuthorizationEventArgs.cs
- SerializationInfoEnumerator.cs
- EmptyElement.cs
- ListViewDeletedEventArgs.cs
- WebPartEditVerb.cs
- XD.cs
- CodeDelegateInvokeExpression.cs
- CustomValidator.cs
- CLRBindingWorker.cs
- MailAddressCollection.cs
- BamlTreeUpdater.cs
- SystemSounds.cs
- DeploymentSection.cs
- CertificateElement.cs
- PasswordRecoveryAutoFormat.cs
- WindowsFormsDesignerOptionService.cs
- GACIdentityPermission.cs