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
- ViewValidator.cs
- HijriCalendar.cs
- CultureSpecificCharacterBufferRange.cs
- Scheduling.cs
- _DynamicWinsockMethods.cs
- objectresult_tresulttype.cs
- LogLogRecord.cs
- SpellerInterop.cs
- UserControl.cs
- _NestedMultipleAsyncResult.cs
- DbConnectionClosed.cs
- FontNamesConverter.cs
- ItemChangedEventArgs.cs
- IRCollection.cs
- EngineSite.cs
- SignedPkcs7.cs
- CreateParams.cs
- RightsController.cs
- Operand.cs
- AppDomain.cs
- StringToken.cs
- OleDbConnection.cs
- IsolatedStorage.cs
- XmlTextEncoder.cs
- PlainXmlDeserializer.cs
- ResourceReferenceExpressionConverter.cs
- TemplatePartAttribute.cs
- RowCache.cs
- Italic.cs
- TypeElement.cs
- ReliableSession.cs
- SplitterCancelEvent.cs
- StorageSetMapping.cs
- _FtpControlStream.cs
- BitmapImage.cs
- MappedMetaModel.cs
- TimeSpanStorage.cs
- OrderByLifter.cs
- PerformanceCounterPermissionAttribute.cs
- QueryOutputWriter.cs
- prompt.cs
- PrivilegedConfigurationManager.cs
- IndexedGlyphRun.cs
- XmlILIndex.cs
- ContextStaticAttribute.cs
- SqlCharStream.cs
- WindowShowOrOpenTracker.cs
- PriorityRange.cs
- RuleInfoComparer.cs
- DomainConstraint.cs
- WSTrustDec2005.cs
- WebConfigurationHostFileChange.cs
- Delegate.cs
- ParamArrayAttribute.cs
- ChtmlTextWriter.cs
- StatusBarItem.cs
- PeerCollaborationPermission.cs
- Bezier.cs
- versioninfo.cs
- CheckBoxAutomationPeer.cs
- HashRepartitionEnumerator.cs
- WebContext.cs
- TextSpanModifier.cs
- RbTree.cs
- PreviewPageInfo.cs
- PathParser.cs
- Vector3DCollectionConverter.cs
- Variable.cs
- Enlistment.cs
- AnonymousIdentificationSection.cs
- HttpClientCertificate.cs
- SizeLimitedCache.cs
- SwitchElementsCollection.cs
- Win32Exception.cs
- ClickablePoint.cs
- BitmapEffectCollection.cs
- GuidelineCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- TextElementEnumerator.cs
- MutexSecurity.cs
- TableLayoutRowStyleCollection.cs
- XPathScanner.cs
- Listbox.cs
- IdentitySection.cs
- MessageVersion.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SystemTcpConnection.cs
- DbProviderServices.cs
- GetIndexBinder.cs
- _NetRes.cs
- ErrorWebPart.cs
- GeometryModel3D.cs
- AssemblyName.cs
- Header.cs
- EncryptedPackage.cs
- PeerMessageDispatcher.cs
- FlowDocumentFormatter.cs
- Function.cs
- DataGridColumnCollection.cs
- SynchronousSendBindingElement.cs