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
- QueryCacheEntry.cs
- DirectionalLight.cs
- FlowDocumentReaderAutomationPeer.cs
- ValidatingCollection.cs
- OdbcException.cs
- xml.cs
- ChannelBinding.cs
- SpAudioStreamWrapper.cs
- ObjectDataSourceMethodEditor.cs
- DuplicateWaitObjectException.cs
- RemotingSurrogateSelector.cs
- HtmlInputButton.cs
- ViewStateModeByIdAttribute.cs
- ScriptManagerProxy.cs
- XPathMultyIterator.cs
- ScriptReference.cs
- ConfigurationElementProperty.cs
- HttpHandler.cs
- OpenTypeCommon.cs
- XmlSerializationWriter.cs
- smtpconnection.cs
- FieldToken.cs
- OverflowException.cs
- CookieParameter.cs
- DocComment.cs
- XmlSchemaParticle.cs
- SHA256.cs
- RedistVersionInfo.cs
- DocumentGridPage.cs
- NotFiniteNumberException.cs
- DataTableReaderListener.cs
- WCFServiceClientProxyGenerator.cs
- TreeNodeCollection.cs
- SSmlParser.cs
- SQLCharsStorage.cs
- HotSpot.cs
- ToolStripContentPanelRenderEventArgs.cs
- ResourceIDHelper.cs
- RectIndependentAnimationStorage.cs
- ImportContext.cs
- SatelliteContractVersionAttribute.cs
- ProfileManager.cs
- DataGridViewTopLeftHeaderCell.cs
- WebServicesDescriptionAttribute.cs
- Calendar.cs
- ILGenerator.cs
- ReadWriteSpinLock.cs
- ProcessHostMapPath.cs
- QueryTask.cs
- DataGridLinkButton.cs
- Pen.cs
- NavigateEvent.cs
- ErrorHandler.cs
- LoginUtil.cs
- EntityDataSourceContainerNameItem.cs
- PropertyToken.cs
- BitmapEffectInput.cs
- HTMLTextWriter.cs
- SortedList.cs
- CreatingCookieEventArgs.cs
- ThaiBuddhistCalendar.cs
- PagePropertiesChangingEventArgs.cs
- SQLByte.cs
- x509utils.cs
- WebBrowserNavigatedEventHandler.cs
- Statements.cs
- RotateTransform.cs
- HttpPostServerProtocol.cs
- TextTreeUndo.cs
- FormViewPageEventArgs.cs
- DesignerDataParameter.cs
- DbCommandTree.cs
- Model3DGroup.cs
- ClassDataContract.cs
- RangeBase.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- SqlReorderer.cs
- ProcessRequestArgs.cs
- SmtpSection.cs
- Odbc32.cs
- SchemaImporterExtensionElement.cs
- SessionStateUtil.cs
- KnownTypesHelper.cs
- PackageDigitalSignatureManager.cs
- DLinqDataModelProvider.cs
- RadioButtonRenderer.cs
- BinHexEncoder.cs
- DataKey.cs
- ADConnectionHelper.cs
- XmlIlVisitor.cs
- MultiAsyncResult.cs
- PathSegmentCollection.cs
- EtwTrace.cs
- WebConfigurationManager.cs
- Help.cs
- SelectionEditor.cs
- ExpressionConverter.cs
- ProcessHostConfigUtils.cs
- ScrollChrome.cs
- MobileDeviceCapabilitiesSectionHandler.cs