Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Psha1DerivedKeyGenerator.cs / 1305376 / Psha1DerivedKeyGenerator.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel { using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.ServiceModel.Diagnostics; sealed class Psha1DerivedKeyGenerator { byte[] key; public Psha1DerivedKeyGenerator(byte[] key) { if (key == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("key"); } this.key = key; } public byte[] GenerateDerivedKey(byte[] label, byte[] nonce, int derivedKeySize, int position) { if (label == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("label"); } if (nonce == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("nonce"); } ManagedPsha1 dkcp = new ManagedPsha1(key, label, nonce); return dkcp.GetDerivedKey(derivedKeySize, position); } // private class to do the real work // Note: Though named ManagedPsha1, this works for both fips and non-fips compliance sealed class ManagedPsha1 { byte[] aValue; byte[] buffer; byte[] chunk; KeyedHashAlgorithm hmac; int index; int position; byte[] secret; byte[] seed; // assume arguments are already validated public ManagedPsha1(byte[] secret, byte[] label, byte[] seed) { this.secret = secret; this.seed = DiagnosticUtility.Utility.AllocateByteArray(checked(label.Length + seed.Length)); label.CopyTo(this.seed, 0); seed.CopyTo(this.seed, label.Length); this.aValue = this.seed; this.chunk = new byte[0]; this.index = 0; this.position = 0; this.hmac = CryptoHelper.NewHmacSha1KeyedHashAlgorithm(secret); this.buffer = DiagnosticUtility.Utility.AllocateByteArray(checked(this.hmac.HashSize / 8 + this.seed.Length)); } public byte[] GetDerivedKey(int derivedKeySize, int position) { if (derivedKeySize < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("derivedKeySize", SR.GetString(SR.ValueMustBeNonNegative))); } if (this.position > position) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("position", SR.GetString(SR.ValueMustBeInRange, 0, this.position))); } // Seek to the desired position in the pseudo-random stream. while (this.position < position) { GetByte(); } int sizeInBytes = derivedKeySize / 8; byte[] derivedKey = new byte[sizeInBytes]; for (int i = 0; i < sizeInBytes; i++) { derivedKey[i] = GetByte(); } return derivedKey; } byte GetByte() { if (index >= chunk.Length) { // Calculate A(i) = HMAC_SHA1(secret, A(i-1)). hmac.Initialize(); this.aValue = hmac.ComputeHash(this.aValue); // Calculate P_SHA1(secret, seed)[j] = HMAC_SHA1(secret, A(j+1) || seed). this.aValue.CopyTo(buffer, 0); this.seed.CopyTo(buffer, this.aValue.Length); hmac.Initialize(); this.chunk = hmac.ComputeHash(buffer); index = 0; } position++; return chunk[index++]; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel { using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.ServiceModel.Diagnostics; sealed class Psha1DerivedKeyGenerator { byte[] key; public Psha1DerivedKeyGenerator(byte[] key) { if (key == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("key"); } this.key = key; } public byte[] GenerateDerivedKey(byte[] label, byte[] nonce, int derivedKeySize, int position) { if (label == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("label"); } if (nonce == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("nonce"); } ManagedPsha1 dkcp = new ManagedPsha1(key, label, nonce); return dkcp.GetDerivedKey(derivedKeySize, position); } // private class to do the real work // Note: Though named ManagedPsha1, this works for both fips and non-fips compliance sealed class ManagedPsha1 { byte[] aValue; byte[] buffer; byte[] chunk; KeyedHashAlgorithm hmac; int index; int position; byte[] secret; byte[] seed; // assume arguments are already validated public ManagedPsha1(byte[] secret, byte[] label, byte[] seed) { this.secret = secret; this.seed = DiagnosticUtility.Utility.AllocateByteArray(checked(label.Length + seed.Length)); label.CopyTo(this.seed, 0); seed.CopyTo(this.seed, label.Length); this.aValue = this.seed; this.chunk = new byte[0]; this.index = 0; this.position = 0; this.hmac = CryptoHelper.NewHmacSha1KeyedHashAlgorithm(secret); this.buffer = DiagnosticUtility.Utility.AllocateByteArray(checked(this.hmac.HashSize / 8 + this.seed.Length)); } public byte[] GetDerivedKey(int derivedKeySize, int position) { if (derivedKeySize < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("derivedKeySize", SR.GetString(SR.ValueMustBeNonNegative))); } if (this.position > position) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("position", SR.GetString(SR.ValueMustBeInRange, 0, this.position))); } // Seek to the desired position in the pseudo-random stream. while (this.position < position) { GetByte(); } int sizeInBytes = derivedKeySize / 8; byte[] derivedKey = new byte[sizeInBytes]; for (int i = 0; i < sizeInBytes; i++) { derivedKey[i] = GetByte(); } return derivedKey; } byte GetByte() { if (index >= chunk.Length) { // Calculate A(i) = HMAC_SHA1(secret, A(i-1)). hmac.Initialize(); this.aValue = hmac.ComputeHash(this.aValue); // Calculate P_SHA1(secret, seed)[j] = HMAC_SHA1(secret, A(j+1) || seed). this.aValue.CopyTo(buffer, 0); this.seed.CopyTo(buffer, this.aValue.Length); hmac.Initialize(); this.chunk = hmac.ComputeHash(buffer); index = 0; } position++; return chunk[index++]; } } } } // 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
- DefinitionBase.cs
- ServiceModelActivationSectionGroup.cs
- SystemResources.cs
- ApplicationServiceHelper.cs
- ActivityTypeResolver.xaml.cs
- ReferenceEqualityComparer.cs
- CroppedBitmap.cs
- MetaData.cs
- KeyFrames.cs
- TypeExtensionConverter.cs
- ConditionalWeakTable.cs
- EncoderParameters.cs
- WebException.cs
- RoleService.cs
- SqlCachedBuffer.cs
- DATA_BLOB.cs
- JournalEntryStack.cs
- DataGridViewTextBoxEditingControl.cs
- OracleConnectionFactory.cs
- SqlGatherConsumedAliases.cs
- MembershipValidatePasswordEventArgs.cs
- StatusBarItem.cs
- XPathDocumentNavigator.cs
- XmlAtomicValue.cs
- TextContainerChangeEventArgs.cs
- Rect3D.cs
- IgnoreDataMemberAttribute.cs
- TableLayoutStyleCollection.cs
- ToolZoneDesigner.cs
- UpDownEvent.cs
- FontWeightConverter.cs
- KeyEvent.cs
- OutputCacheProfile.cs
- MapPathBasedVirtualPathProvider.cs
- shaperfactoryquerycachekey.cs
- TypographyProperties.cs
- SerializationSectionGroup.cs
- OleDbException.cs
- NamedObject.cs
- PageHandlerFactory.cs
- HtmlControl.cs
- SoapExtensionStream.cs
- FreezableOperations.cs
- CrossContextChannel.cs
- ObjectMemberMapping.cs
- LessThanOrEqual.cs
- XmlRawWriter.cs
- XmlBinaryWriter.cs
- TimeSpanSecondsConverter.cs
- IsolatedStoragePermission.cs
- CommandHelpers.cs
- HostingPreferredMapPath.cs
- TextSyndicationContent.cs
- EntitySqlQueryState.cs
- SqlDuplicator.cs
- EntitySqlQueryBuilder.cs
- ImageConverter.cs
- InstanceValue.cs
- ScriptReference.cs
- KnownTypesHelper.cs
- FilterableAttribute.cs
- StreamHelper.cs
- MarkupObject.cs
- ButtonBaseAutomationPeer.cs
- NonDualMessageSecurityOverHttp.cs
- InternalConfigRoot.cs
- EditorPart.cs
- XmlSchemaSimpleContentRestriction.cs
- ListViewUpdatedEventArgs.cs
- StrokeNode.cs
- SamlSecurityTokenAuthenticator.cs
- CodeActivity.cs
- WindowsScroll.cs
- XmlSchemaSimpleTypeList.cs
- PositiveTimeSpanValidator.cs
- NGCSerializer.cs
- WbmpConverter.cs
- DataGridItem.cs
- ComponentDispatcher.cs
- FontStyle.cs
- AppDomain.cs
- EmptyCollection.cs
- XPathMessageFilterElementCollection.cs
- ICspAsymmetricAlgorithm.cs
- Function.cs
- JavaScriptObjectDeserializer.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- FormatSettings.cs
- XmlSiteMapProvider.cs
- TableItemStyle.cs
- Button.cs
- FunctionDetailsReader.cs
- HostProtectionException.cs
- KeyNotFoundException.cs
- ContentTypeSettingClientMessageFormatter.cs
- HttpRawResponse.cs
- MouseDevice.cs
- ModuleConfigurationInfo.cs
- TextDecorationCollectionConverter.cs
- TextSelection.cs