Code:
/ DotNET / DotNET / 8.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
- SerializerDescriptor.cs
- CodeNamespaceImportCollection.cs
- FixedDocument.cs
- SpecialNameAttribute.cs
- ColumnCollection.cs
- DesignTimeParseData.cs
- MatrixAnimationBase.cs
- SqlGenericUtil.cs
- ParallelQuery.cs
- RootNamespaceAttribute.cs
- ZipIOLocalFileHeader.cs
- CollectionBuilder.cs
- NonVisualControlAttribute.cs
- WindowsRebar.cs
- ServerValidateEventArgs.cs
- EllipseGeometry.cs
- TPLETWProvider.cs
- RegionData.cs
- XmlFormatExtensionAttribute.cs
- ViewStateException.cs
- StandardOleMarshalObject.cs
- UriSection.cs
- ExtentKey.cs
- VisualCollection.cs
- PostBackOptions.cs
- ExpressionDumper.cs
- InputChannelBinder.cs
- ValueUnavailableException.cs
- SafeNativeMethods.cs
- Boolean.cs
- BamlRecords.cs
- SQLBytesStorage.cs
- LogExtentCollection.cs
- StreamInfo.cs
- PermissionToken.cs
- XmlNullResolver.cs
- ConnectionOrientedTransportChannelListener.cs
- StylusShape.cs
- HtmlInputImage.cs
- GridViewDeletedEventArgs.cs
- updateconfighost.cs
- WebPartTransformerCollection.cs
- RenderData.cs
- ResourcesBuildProvider.cs
- SQLSingle.cs
- CounterCreationDataCollection.cs
- CompressedStack.cs
- XamlSerializer.cs
- CategoryNameCollection.cs
- PackagePart.cs
- SharedConnectionListener.cs
- UserPreferenceChangedEventArgs.cs
- NumberSubstitution.cs
- AssemblyNameProxy.cs
- NamespaceList.cs
- SpeakInfo.cs
- Root.cs
- CreateUserWizard.cs
- PaperSize.cs
- DynamicDocumentPaginator.cs
- _DomainName.cs
- ImageAnimator.cs
- PathFigure.cs
- DataGridViewColumnCollectionEditor.cs
- DataGridViewRowPostPaintEventArgs.cs
- DynamicObject.cs
- LinqDataSourceDeleteEventArgs.cs
- SingleObjectCollection.cs
- CommandField.cs
- BitmapEffect.cs
- WeakEventTable.cs
- LineServicesCallbacks.cs
- SmiRequestExecutor.cs
- MatrixCamera.cs
- ComponentChangingEvent.cs
- Button.cs
- TypeForwardedToAttribute.cs
- StyleSheetDesigner.cs
- TraceSwitch.cs
- UnregisterInfo.cs
- AxDesigner.cs
- ExpressionBuilder.cs
- DragEventArgs.cs
- GetPageNumberCompletedEventArgs.cs
- XsdBuildProvider.cs
- XmlUTF8TextWriter.cs
- DragCompletedEventArgs.cs
- StreamInfo.cs
- RemotingException.cs
- OrderPreservingPipeliningSpoolingTask.cs
- FixedElement.cs
- BitmapSource.cs
- WorkflowNamespace.cs
- StylusTip.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- FileRecordSequenceCompletedAsyncResult.cs
- RichTextBox.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- SecurityBindingElementImporter.cs
- objectresult_tresulttype.cs