Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Security / Cryptography / RNGCryptoServiceProvider.cs / 1 / RNGCryptoServiceProvider.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // RNGCryptoServiceProvider.cs // namespace System.Security.Cryptography { using Microsoft.Win32; using System.Runtime.InteropServices; [System.Runtime.InteropServices.ComVisible(true)] public sealed class RNGCryptoServiceProvider : RandomNumberGenerator { #if !FEATURE_PAL SafeProvHandle m_safeProvHandle; #endif // // public constructors // #if !FEATURE_PAL public RNGCryptoServiceProvider() : this((CspParameters) null) {} #else public RNGCryptoServiceProvider() { } #endif #if !FEATURE_PAL public RNGCryptoServiceProvider(string str) : this((CspParameters) null) {} public RNGCryptoServiceProvider(byte[] rgb) : this((CspParameters) null) {} public RNGCryptoServiceProvider(CspParameters cspParams) { if (cspParams != null) m_safeProvHandle = Utils.AcquireProvHandle(cspParams); else m_safeProvHandle = Utils.StaticProvHandle; } #endif // // public methods // public override void GetBytes(byte[] data) { if (data == null) throw new ArgumentNullException("data"); #if !FEATURE_PAL Utils._GetBytes(m_safeProvHandle, data); #else if (!Win32Native.Random(true, data, data.Length)) throw new CryptographicException(Marshal.GetLastWin32Error()); #endif } public override void GetNonZeroBytes(byte[] data) { if (data == null) throw new ArgumentNullException("data"); #if !FEATURE_PAL Utils._GetNonZeroBytes(m_safeProvHandle, data); #else GetBytes(data); int indexOfFirst0Byte = data.Length; for (int i = 0; i < data.Length; i++) { if (data[i] == 0) { indexOfFirst0Byte = i; break; } } for (int i = indexOfFirst0Byte; i < data.Length; i++) { if (data[i] != 0) { data[indexOfFirst0Byte++] = data[i]; } } while (indexOfFirst0Byte < data.Length) { // this should be more than enough to fill the rest in one iteration byte[] tmp = new byte[2 * (data.Length - indexOfFirst0Byte)]; GetBytes(tmp); for (int i = 0; i < tmp.Length; i++) { if (tmp[i] != 0) { data[indexOfFirst0Byte++] = tmp[i]; if (indexOfFirst0Byte >= data.Length) break; } } } #endif } } } // 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
- HyperLinkColumn.cs
- DataTableCollection.cs
- UnauthorizedWebPart.cs
- SecureUICommand.cs
- SecurityToken.cs
- RemotingSurrogateSelector.cs
- PhoneCall.cs
- DataGridViewCheckBoxColumn.cs
- ResourceReferenceExpression.cs
- AuthenticateEventArgs.cs
- DeviceSpecific.cs
- Authorization.cs
- DropDownList.cs
- CodePropertyReferenceExpression.cs
- DesigntimeLicenseContextSerializer.cs
- TextParaLineResult.cs
- ListMarkerSourceInfo.cs
- ProjectionCamera.cs
- ActiveXContainer.cs
- SchemaCollectionCompiler.cs
- StatusStrip.cs
- MarginsConverter.cs
- DiagnosticsConfiguration.cs
- XmlSchema.cs
- ContractReference.cs
- HttpInputStream.cs
- PasswordTextNavigator.cs
- VirtualDirectoryMapping.cs
- Int32KeyFrameCollection.cs
- ConfigurationSchemaErrors.cs
- ListQueryResults.cs
- ListViewTableRow.cs
- DataPagerFieldCommandEventArgs.cs
- ExecutionContext.cs
- QilPatternFactory.cs
- ListenerConfig.cs
- Monitor.cs
- SspiHelper.cs
- Encoder.cs
- HttpResponseInternalWrapper.cs
- HandoffBehavior.cs
- TimeSpanStorage.cs
- SqlInfoMessageEvent.cs
- SqlDataReaderSmi.cs
- WebEventCodes.cs
- PrintPreviewDialog.cs
- SqlExpressionNullability.cs
- ExtractorMetadata.cs
- DiscoveryInnerClientAdhoc11.cs
- DbSetClause.cs
- DataTemplateKey.cs
- HtmlElementErrorEventArgs.cs
- DataRowView.cs
- CaseStatementProjectedSlot.cs
- BindingContext.cs
- Activator.cs
- ProxyWebPartConnectionCollection.cs
- PeerTransportSecuritySettings.cs
- WorkflowMarkupElementEventArgs.cs
- TextChangedEventArgs.cs
- SignatureHelper.cs
- ContainerUtilities.cs
- SpellerHighlightLayer.cs
- TabControl.cs
- ScriptDescriptor.cs
- Container.cs
- TagMapCollection.cs
- PropVariant.cs
- DictionarySectionHandler.cs
- PopupRootAutomationPeer.cs
- ProcessHostServerConfig.cs
- HttpConfigurationSystem.cs
- LinqMaximalSubtreeNominator.cs
- AspCompat.cs
- GPPOINTF.cs
- BufferedGenericXmlSecurityToken.cs
- XmlReflectionMember.cs
- ContainerParagraph.cs
- PageParser.cs
- MatrixKeyFrameCollection.cs
- XmlDictionaryReaderQuotas.cs
- ObjectViewListener.cs
- MembershipPasswordException.cs
- PrePostDescendentsWalker.cs
- FlowSwitchLink.cs
- Authorization.cs
- StatusBarDrawItemEvent.cs
- ContentPlaceHolder.cs
- ResourceExpressionBuilder.cs
- FixedPosition.cs
- CollectionsUtil.cs
- ScrollContentPresenter.cs
- HttpHeaderCollection.cs
- TextEmbeddedObject.cs
- ButtonFieldBase.cs
- ZipFileInfo.cs
- ImportOptions.cs
- WizardPanelChangingEventArgs.cs
- Evidence.cs
- TextEditorParagraphs.cs