Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ObjectListComponentEditor.cs
- RankException.cs
- DriveNotFoundException.cs
- SqlInternalConnectionSmi.cs
- RoleServiceManager.cs
- ColumnPropertiesGroup.cs
- IconBitmapDecoder.cs
- FocusWithinProperty.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- IdleTimeoutMonitor.cs
- TaskResultSetter.cs
- SafeProcessHandle.cs
- ComPlusServiceHost.cs
- SchemaSetCompiler.cs
- Assert.cs
- ResolvedKeyFrameEntry.cs
- ProcessInputEventArgs.cs
- WebDescriptionAttribute.cs
- WebFormsRootDesigner.cs
- _CacheStreams.cs
- Image.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- SQLUtility.cs
- ReturnEventArgs.cs
- VoiceObjectToken.cs
- Serialization.cs
- ProgramPublisher.cs
- URLMembershipCondition.cs
- PointConverter.cs
- DBSchemaRow.cs
- ExpressionUtilities.cs
- SplineKeyFrames.cs
- Win32.cs
- NGCSerializer.cs
- BinaryCommonClasses.cs
- cookiecontainer.cs
- Viewport2DVisual3D.cs
- EditorBrowsableAttribute.cs
- GuidelineSet.cs
- XmlStreamStore.cs
- ServiceDesigner.cs
- _FixedSizeReader.cs
- SmtpException.cs
- ApplicationServiceHelper.cs
- DataGridViewTextBoxEditingControl.cs
- SoapElementAttribute.cs
- GifBitmapEncoder.cs
- XmlValueConverter.cs
- ViewPort3D.cs
- ManagedIStream.cs
- Rect3DValueSerializer.cs
- TextDocumentView.cs
- TransformerInfo.cs
- ContractListAdapter.cs
- PathParser.cs
- MappingException.cs
- GotoExpression.cs
- AutomationIdentifierGuids.cs
- PeerApplicationLaunchInfo.cs
- CompilerTypeWithParams.cs
- PropertyItemInternal.cs
- EllipticalNodeOperations.cs
- DbConnectionStringCommon.cs
- SafeCryptoHandles.cs
- OdbcParameterCollection.cs
- FontFamily.cs
- BufferedWebEventProvider.cs
- LinqDataSourceDisposeEventArgs.cs
- BookmarkUndoUnit.cs
- ValidatingCollection.cs
- SystemIPInterfaceStatistics.cs
- SafeCryptContextHandle.cs
- ListManagerBindingsCollection.cs
- MessageFormatterConverter.cs
- Zone.cs
- MessageDecoder.cs
- DynamicPropertyReader.cs
- WebServiceEndpoint.cs
- Native.cs
- XmlElement.cs
- TreeViewItem.cs
- DbSetClause.cs
- coordinatorfactory.cs
- TransactionFormatter.cs
- TextSerializer.cs
- QueryResultOp.cs
- VSWCFServiceContractGenerator.cs
- StringUtil.cs
- ZeroOpNode.cs
- CollectionChangeEventArgs.cs
- ConsumerConnectionPoint.cs
- InlineCollection.cs
- NoneExcludedImageIndexConverter.cs
- ExtendedProtectionPolicyElement.cs
- DesignerExtenders.cs
- IdleTimeoutMonitor.cs
- SpanIndex.cs
- EasingFunctionBase.cs
- WebBrowser.cs
- WebExceptionStatus.cs