Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Psha1DerivedKeyGenerator.cs / 1 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewImageCell.cs
- AliasedExpr.cs
- AutomationPattern.cs
- DataSpaceManager.cs
- ScriptHandlerFactory.cs
- WCFServiceClientProxyGenerator.cs
- AssemblyNameProxy.cs
- HttpProfileGroupBase.cs
- XmlNamespaceMappingCollection.cs
- SchemaImporterExtension.cs
- bindurihelper.cs
- AppDomainUnloadedException.cs
- DataBoundControlHelper.cs
- CodeTypeMemberCollection.cs
- ComboBoxRenderer.cs
- SuppressedPackageProperties.cs
- QilReplaceVisitor.cs
- UTF8Encoding.cs
- XmlSchemaObjectTable.cs
- EnumCodeDomSerializer.cs
- ASCIIEncoding.cs
- ReadOnlyNameValueCollection.cs
- MarshalDirectiveException.cs
- WindowsFormsHostAutomationPeer.cs
- WindowsFormsSynchronizationContext.cs
- QuotedPrintableStream.cs
- HandledEventArgs.cs
- CustomExpression.cs
- ReadContentAsBinaryHelper.cs
- OdbcUtils.cs
- codemethodreferenceexpression.cs
- AttachedAnnotation.cs
- ComNativeDescriptor.cs
- DbProviderFactoriesConfigurationHandler.cs
- ConfigurationManagerInternalFactory.cs
- AdornedElementPlaceholder.cs
- CorruptStoreException.cs
- SqlErrorCollection.cs
- MasterPageBuildProvider.cs
- XmlIgnoreAttribute.cs
- TypeSystem.cs
- Parallel.cs
- ToolStripSettings.cs
- ConfigXmlCDataSection.cs
- WorkflowMessageEventArgs.cs
- DummyDataSource.cs
- DispatchWrapper.cs
- UserNameSecurityToken.cs
- FormatterConverter.cs
- PassportPrincipal.cs
- EditorOptionAttribute.cs
- CodeCommentStatement.cs
- ToolStripPanelRow.cs
- WebBrowserUriTypeConverter.cs
- TextDocumentView.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- PropertyItem.cs
- MD5CryptoServiceProvider.cs
- _FtpDataStream.cs
- FormClosedEvent.cs
- FacetChecker.cs
- XPathNavigatorReader.cs
- ellipse.cs
- _WinHttpWebProxyDataBuilder.cs
- WebHostUnsafeNativeMethods.cs
- QilTypeChecker.cs
- BuildManagerHost.cs
- PageOutputQuality.cs
- MessageEventSubscriptionService.cs
- QuestionEventArgs.cs
- PrintSystemException.cs
- XmlHierarchyData.cs
- CodeSnippetStatement.cs
- SelectionChangedEventArgs.cs
- Base64Decoder.cs
- TextDecorationCollection.cs
- GridViewCommandEventArgs.cs
- HtmlShim.cs
- OleDbParameterCollection.cs
- XmlILAnnotation.cs
- ExtractCollection.cs
- PrintingPermissionAttribute.cs
- WCFServiceClientProxyGenerator.cs
- HandleCollector.cs
- DialogResultConverter.cs
- DragDeltaEventArgs.cs
- WindowsComboBox.cs
- WebPartMenuStyle.cs
- MultitargetUtil.cs
- ServicePoint.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- ReaderWriterLock.cs
- SolidColorBrush.cs
- ScrollEventArgs.cs
- EncoderFallback.cs
- PtsCache.cs
- RijndaelManaged.cs
- ErrorsHelper.cs
- BinaryReader.cs
- TypeElement.cs