Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringUtil.cs
- IQueryable.cs
- NamespaceQuery.cs
- TemplateBamlRecordReader.cs
- ExpressionEditorAttribute.cs
- TimelineClockCollection.cs
- COM2TypeInfoProcessor.cs
- ButtonBaseAdapter.cs
- VisualBasicImportReference.cs
- SmtpSection.cs
- InternalSendMessage.cs
- NoResizeSelectionBorderGlyph.cs
- ExtensibleClassFactory.cs
- AliasGenerator.cs
- ConfigurationException.cs
- RawStylusInput.cs
- GroupByExpressionRewriter.cs
- HttpCacheVary.cs
- DataGridViewCheckBoxCell.cs
- odbcmetadatafactory.cs
- CodePropertyReferenceExpression.cs
- CompiledIdentityConstraint.cs
- Rectangle.cs
- ArgumentException.cs
- MessageContractExporter.cs
- UnsafeNativeMethods.cs
- DbgUtil.cs
- TemplateBaseAction.cs
- FixedHyperLink.cs
- X509SecurityTokenParameters.cs
- ClientBuildManagerCallback.cs
- EmptyQuery.cs
- CounterCreationDataCollection.cs
- ResetableIterator.cs
- TypeCacheManager.cs
- DataReaderContainer.cs
- XmlDocumentFragment.cs
- LogReserveAndAppendState.cs
- Lookup.cs
- AsymmetricSignatureDeformatter.cs
- TextStore.cs
- TabPageDesigner.cs
- WsatAdminException.cs
- IsolatedStorageFilePermission.cs
- ObjectDataSourceDisposingEventArgs.cs
- AccessedThroughPropertyAttribute.cs
- WebBrowserPermission.cs
- BindToObject.cs
- DoubleStorage.cs
- HMACSHA256.cs
- ProfilePropertyMetadata.cs
- TimeSpanValidator.cs
- XmlSchemaAttributeGroup.cs
- Triangle.cs
- CodeTypeDeclaration.cs
- X509CertificateCollection.cs
- XmlCountingReader.cs
- RootAction.cs
- PointAnimationUsingPath.cs
- XmlSchemaCompilationSettings.cs
- TdsParserHelperClasses.cs
- TagMapCollection.cs
- StorageSetMapping.cs
- BitmapDecoder.cs
- StrongNameUtility.cs
- basenumberconverter.cs
- ResXFileRef.cs
- ObjectNavigationPropertyMapping.cs
- CachedPathData.cs
- OdbcConnectionStringbuilder.cs
- FrameworkPropertyMetadata.cs
- OneOf.cs
- DropShadowEffect.cs
- BulletChrome.cs
- TableCellsCollectionEditor.cs
- RequestQueue.cs
- WindowsRichEditRange.cs
- CustomTokenProvider.cs
- DictionaryEntry.cs
- BitmapEffectCollection.cs
- CommonObjectSecurity.cs
- PostBackOptions.cs
- RowType.cs
- ToolboxSnapDragDropEventArgs.cs
- OAVariantLib.cs
- UserControl.cs
- TdsParserSafeHandles.cs
- HttpRuntimeSection.cs
- TreeNodeCollectionEditorDialog.cs
- PointAnimationClockResource.cs
- DesignerCategoryAttribute.cs
- TableCell.cs
- BitmapSourceSafeMILHandle.cs
- MsmqHostedTransportManager.cs
- XPathScanner.cs
- Point3DCollectionValueSerializer.cs
- CollectionViewGroupInternal.cs
- GridViewDeletedEventArgs.cs
- _NegotiateClient.cs
- LinqDataSourceHelper.cs