Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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 } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OperatorExpressions.cs
- DecimalConstantAttribute.cs
- DataFieldConverter.cs
- SystemColors.cs
- XmlLanguage.cs
- MDIControlStrip.cs
- UpdatePanelTriggerCollection.cs
- CallbackValidator.cs
- _UriSyntax.cs
- CorrelationTokenTypeConvertor.cs
- login.cs
- DataPointer.cs
- ListViewAutomationPeer.cs
- AssemblyInfo.cs
- ParameterToken.cs
- XamlPathDataSerializer.cs
- WebRequestModuleElement.cs
- UrlMappingsSection.cs
- HttpRawResponse.cs
- PointKeyFrameCollection.cs
- ApplicationCommands.cs
- ContentPlaceHolder.cs
- UndoUnit.cs
- FormattedText.cs
- XmlToDatasetMap.cs
- RectangleGeometry.cs
- ZipIOExtraFieldPaddingElement.cs
- DataGridColumnCollection.cs
- GcHandle.cs
- DataBindEngine.cs
- Vertex.cs
- RowBinding.cs
- FacetEnabledSchemaElement.cs
- SqlParameter.cs
- XmlFormatWriterGenerator.cs
- HtmlValidationSummaryAdapter.cs
- DeferredSelectedIndexReference.cs
- MenuItemBinding.cs
- arc.cs
- XmlSchemaComplexType.cs
- PrePostDescendentsWalker.cs
- PkcsUtils.cs
- X509Utils.cs
- ScrollBarAutomationPeer.cs
- JavaScriptObjectDeserializer.cs
- OperatingSystem.cs
- OdbcConnectionPoolProviderInfo.cs
- ScriptManagerProxy.cs
- CacheDependency.cs
- PrimitiveList.cs
- ButtonChrome.cs
- ServiceHttpHandlerFactory.cs
- GPRECTF.cs
- ModelUIElement3D.cs
- JavaScriptSerializer.cs
- TextRange.cs
- KeyboardDevice.cs
- ValueTypeFixupInfo.cs
- RootBrowserWindowProxy.cs
- BulletedListEventArgs.cs
- ExpressionsCollectionEditor.cs
- Button.cs
- MsmqQueue.cs
- ToolStripTextBox.cs
- SqlDataSourceWizardForm.cs
- SqlFlattener.cs
- DataControlLinkButton.cs
- DelegatingConfigHost.cs
- ColumnCollectionEditor.cs
- CategoryAttribute.cs
- TableLayoutPanelCellPosition.cs
- PerformanceCounterPermission.cs
- ProtocolsConfigurationEntry.cs
- XmlRawWriterWrapper.cs
- formatstringdialog.cs
- OleDbRowUpdatedEvent.cs
- LazyTextWriterCreator.cs
- AsymmetricAlgorithm.cs
- DbConnectionPoolGroup.cs
- PerCallInstanceContextProvider.cs
- EntityDataSourceConfigureObjectContext.cs
- RemotingHelper.cs
- TransformerInfoCollection.cs
- StringFunctions.cs
- XsltConvert.cs
- LookupBindingPropertiesAttribute.cs
- HttpTransportSecurityElement.cs
- Type.cs
- SqlDependencyListener.cs
- ContainerUIElement3D.cs
- NextPreviousPagerField.cs
- DataGridViewCellEventArgs.cs
- WebBaseEventKeyComparer.cs
- MethodToken.cs
- ResizeGrip.cs
- NamedPermissionSet.cs
- RangeValuePattern.cs
- Soap12ProtocolImporter.cs
- FixedStringLookup.cs
- UriTemplatePathSegment.cs