Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- Bind.cs
- QueryContinueDragEvent.cs
- DocobjHost.cs
- InputQueue.cs
- ComponentGlyph.cs
- OrderedDictionaryStateHelper.cs
- smtpconnection.cs
- GroupBoxAutomationPeer.cs
- PtsCache.cs
- HttpPostProtocolReflector.cs
- StickyNoteHelper.cs
- CompressionTracing.cs
- TextFragmentEngine.cs
- TransactionChannel.cs
- RootBrowserWindowAutomationPeer.cs
- AuthenticationSection.cs
- LongCountAggregationOperator.cs
- Literal.cs
- RichTextBox.cs
- InfiniteIntConverter.cs
- UDPClient.cs
- XmlSecureResolver.cs
- DebugView.cs
- ParserStreamGeometryContext.cs
- UrlPropertyAttribute.cs
- ConnectionManagementSection.cs
- PrtCap_Public_Simple.cs
- ScrollItemProviderWrapper.cs
- X509ChainPolicy.cs
- HttpHandlersSection.cs
- Button.cs
- CodeSnippetExpression.cs
- ScrollProperties.cs
- XomlCompilerParameters.cs
- LinqDataSourceUpdateEventArgs.cs
- MetadataImporterQuotas.cs
- ServiceCredentialsElement.cs
- SourceInterpreter.cs
- Compiler.cs
- ContentValidator.cs
- EventSchemaTraceListener.cs
- ArglessEventHandlerProxy.cs
- IncomingWebRequestContext.cs
- OleDbMetaDataFactory.cs
- IntegerValidator.cs
- DataListItemEventArgs.cs
- ServiceOperationParameter.cs
- ItemContainerGenerator.cs
- EndpointBehaviorElement.cs
- StreamGeometryContext.cs
- Expr.cs
- HtmlInputPassword.cs
- TemplateXamlTreeBuilder.cs
- X509UI.cs
- SortQuery.cs
- DefaultAsyncDataDispatcher.cs
- CompositeCollection.cs
- OdbcInfoMessageEvent.cs
- CodeTryCatchFinallyStatement.cs
- SplayTreeNode.cs
- DataGridColumnDropSeparator.cs
- XmlUtilWriter.cs
- ItemsChangedEventArgs.cs
- MILUtilities.cs
- MailWebEventProvider.cs
- RawStylusActions.cs
- XPathAncestorQuery.cs
- XPathNodePointer.cs
- DataGridViewSelectedRowCollection.cs
- CuspData.cs
- RegexMatchCollection.cs
- HtmlLink.cs
- EventMetadata.cs
- TransactionInterop.cs
- SqlDataSourceCommandEventArgs.cs
- XmlDataSourceNodeDescriptor.cs
- SafeProcessHandle.cs
- SerialErrors.cs
- CustomAttribute.cs
- SQLInt32Storage.cs
- SqlCacheDependency.cs
- Panel.cs
- ProtocolsConfigurationHandler.cs
- Module.cs
- WinInetCache.cs
- _Events.cs
- ListChangedEventArgs.cs
- CompensationHandlingFilter.cs
- ProxyWebPart.cs
- AstTree.cs
- BatchStream.cs
- CurrentTimeZone.cs
- TrustSection.cs
- FusionWrap.cs
- MD5CryptoServiceProvider.cs
- HighContrastHelper.cs
- PersianCalendar.cs
- PeerNodeAddress.cs
- ReflectionTypeLoadException.cs
- CacheChildrenQuery.cs