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
- TabletDeviceInfo.cs
- Win32Native.cs
- HierarchicalDataBoundControl.cs
- mongolianshape.cs
- VisualStyleInformation.cs
- MarshalDirectiveException.cs
- TabControlAutomationPeer.cs
- WorkflowViewElement.cs
- DataStreams.cs
- AddInServer.cs
- SoapIncludeAttribute.cs
- ExceptionRoutedEventArgs.cs
- GridViewColumnCollection.cs
- Expressions.cs
- UnsafeNativeMethods.cs
- TypeConverterHelper.cs
- MethodBody.cs
- Configuration.cs
- UniqueID.cs
- MeasureData.cs
- QilTargetType.cs
- RuleSettings.cs
- PackWebRequest.cs
- NativeDirectoryServicesQueryAPIs.cs
- LifetimeMonitor.cs
- GACMembershipCondition.cs
- ReadOnlyCollectionBuilder.cs
- ClientType.cs
- listviewsubitemcollectioneditor.cs
- Row.cs
- TemplateField.cs
- WinInet.cs
- VisualBrush.cs
- DrawingCollection.cs
- RadioButton.cs
- GenericTextProperties.cs
- XmlHierarchyData.cs
- ResizeGrip.cs
- AdvancedBindingPropertyDescriptor.cs
- DebugViewWriter.cs
- ListBox.cs
- SmtpFailedRecipientException.cs
- ConfigurationValidatorAttribute.cs
- NativeMethods.cs
- ClientBuildManager.cs
- PageHandlerFactory.cs
- EditingCoordinator.cs
- ZeroOpNode.cs
- VirtualPathUtility.cs
- RegexCharClass.cs
- ConsoleEntryPoint.cs
- ConstraintManager.cs
- BindingContext.cs
- Sql8ExpressionRewriter.cs
- MulticastIPAddressInformationCollection.cs
- ChildDocumentBlock.cs
- ChtmlSelectionListAdapter.cs
- DataGridDetailsPresenterAutomationPeer.cs
- DependencyPropertyKind.cs
- BackgroundFormatInfo.cs
- BuildProvider.cs
- DBSchemaRow.cs
- PipelineDeploymentState.cs
- ExtenderControl.cs
- FirstMatchCodeGroup.cs
- ReadOnlyDictionary.cs
- BrowserCapabilitiesCodeGenerator.cs
- HttpRequestMessageProperty.cs
- PropertyValueChangedEvent.cs
- UTF32Encoding.cs
- Int32Converter.cs
- QueryExpression.cs
- StylusPointProperties.cs
- MultiViewDesigner.cs
- MobileControlsSectionHandler.cs
- MSAAWinEventWrap.cs
- CodeExporter.cs
- TextEmbeddedObject.cs
- BitmapEncoder.cs
- SafeNativeMethodsOther.cs
- ToolboxItemCollection.cs
- ComponentManagerBroker.cs
- GridViewAutomationPeer.cs
- TextDecorationCollection.cs
- XmlSerializableServices.cs
- XmlWrappingReader.cs
- RenderDataDrawingContext.cs
- XmlDataSourceView.cs
- PrintDialog.cs
- DataGridViewCellStyleConverter.cs
- RuntimeHandles.cs
- AuthenticationManager.cs
- RawStylusInputCustomData.cs
- StandardMenuStripVerb.cs
- CodeAttributeArgumentCollection.cs
- ProfileService.cs
- CacheMode.cs
- ProfileSection.cs
- ModuleConfigurationInfo.cs
- FixedBufferAttribute.cs