Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
// ==--==
//
// 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MethodBuilder.cs
- LogicalExpr.cs
- DateTimeFormat.cs
- Clause.cs
- AcceleratedTokenAuthenticator.cs
- GridViewRow.cs
- QueryParameter.cs
- ListViewHitTestInfo.cs
- IncrementalReadDecoders.cs
- XhtmlCssHandler.cs
- XmlFormatWriterGenerator.cs
- ReachSerializer.cs
- counter.cs
- MultiAsyncResult.cs
- TemplateAction.cs
- EntityContainerEmitter.cs
- SchemaExporter.cs
- SmiGettersStream.cs
- EntityWrapperFactory.cs
- WebPartTransformer.cs
- FlowDocument.cs
- DockProviderWrapper.cs
- Menu.cs
- ModifierKeysValueSerializer.cs
- XamlReaderHelper.cs
- WindowsToolbarItemAsMenuItem.cs
- StringKeyFrameCollection.cs
- DocumentViewerConstants.cs
- GridViewColumnCollectionChangedEventArgs.cs
- DataGridViewImageCell.cs
- BindableAttribute.cs
- BrowserInteropHelper.cs
- SchemaCollectionPreprocessor.cs
- sqlinternaltransaction.cs
- RSAProtectedConfigurationProvider.cs
- ToolStripPanelDesigner.cs
- control.ime.cs
- PropertyGroupDescription.cs
- GroupStyle.cs
- OdbcError.cs
- DataColumnCollection.cs
- ViewManagerAttribute.cs
- Int32KeyFrameCollection.cs
- BuildProviderAppliesToAttribute.cs
- Collection.cs
- SessionStateItemCollection.cs
- AmbiguousMatchException.cs
- ReachDocumentPageSerializer.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- DependencyPropertyKind.cs
- FixedSOMElement.cs
- RequestQueue.cs
- PeerValidationBehavior.cs
- EncryptedData.cs
- ListBoxAutomationPeer.cs
- DocumentCollection.cs
- XhtmlConformanceSection.cs
- ProtocolsConfigurationHandler.cs
- MessageDecoder.cs
- StorageTypeMapping.cs
- TypeSystemProvider.cs
- CompositeKey.cs
- RuntimeResourceSet.cs
- RemoteX509Token.cs
- Image.cs
- PassportIdentity.cs
- DataSvcMapFile.cs
- DataGridViewTextBoxEditingControl.cs
- _NtlmClient.cs
- MissingMethodException.cs
- DiagnosticsConfigurationHandler.cs
- CalendarKeyboardHelper.cs
- Merger.cs
- PageTextBox.cs
- ElementUtil.cs
- WebControl.cs
- DiscardableAttribute.cs
- QilTargetType.cs
- WebZone.cs
- RolePrincipal.cs
- rsa.cs
- SoapCodeExporter.cs
- UnsafeNativeMethodsMilCoreApi.cs
- SupportingTokenProviderSpecification.cs
- WindowsIPAddress.cs
- MSG.cs
- KeyboardDevice.cs
- SegmentInfo.cs
- TextEditorTables.cs
- DateTimeFormatInfo.cs
- TreeViewHitTestInfo.cs
- CacheMemory.cs
- AsyncResult.cs
- EmbeddedMailObjectsCollection.cs
- EmptyQuery.cs
- StaticFileHandler.cs
- ColumnMapTranslator.cs
- TaskFileService.cs
- DataSourceProvider.cs
- DataGridViewRowEventArgs.cs