Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- HtmlSelectionListAdapter.cs
- ResourceAttributes.cs
- WebBrowsableAttribute.cs
- ConditionalAttribute.cs
- DesignerDataSchemaClass.cs
- DeferredReference.cs
- HttpWebRequestElement.cs
- Int32KeyFrameCollection.cs
- OrthographicCamera.cs
- TiffBitmapEncoder.cs
- WmlLinkAdapter.cs
- ModuleBuilder.cs
- CodeTypeOfExpression.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- LinkButton.cs
- GlyphCollection.cs
- OleDbMetaDataFactory.cs
- ListViewContainer.cs
- COM2IPerPropertyBrowsingHandler.cs
- CompositeCollectionView.cs
- SecurityContextKeyIdentifierClause.cs
- EventProxy.cs
- SignalGate.cs
- RolePrincipal.cs
- DataGridViewColumnHeaderCell.cs
- XmlSchemaValidationException.cs
- EpmTargetPathSegment.cs
- Int32Rect.cs
- WindowsListViewItemStartMenu.cs
- ObjectDataSourceMethodEventArgs.cs
- PropertyGridCommands.cs
- ConsoleKeyInfo.cs
- StylusButtonCollection.cs
- MenuItemAutomationPeer.cs
- XNodeNavigator.cs
- SecurityState.cs
- CommandEventArgs.cs
- PresentationSource.cs
- TPLETWProvider.cs
- BoolExpression.cs
- DataKeyCollection.cs
- RSAPKCS1SignatureDeformatter.cs
- XmlTextEncoder.cs
- SqlInternalConnection.cs
- ControlTemplate.cs
- BindingMemberInfo.cs
- TCEAdapterGenerator.cs
- TemplateNameScope.cs
- VariableDesigner.xaml.cs
- XmlWellformedWriter.cs
- ProtocolsConfigurationEntry.cs
- SoapSchemaMember.cs
- SecurityValidationBehavior.cs
- HostingPreferredMapPath.cs
- SystemDiagnosticsSection.cs
- RoleBoolean.cs
- WebPartVerb.cs
- QueryRelOp.cs
- SystemDiagnosticsSection.cs
- HtmlElementErrorEventArgs.cs
- CacheSection.cs
- ExpandoObject.cs
- ValidatedControlConverter.cs
- ObjectListGeneralPage.cs
- WorkflowRuntimeBehavior.cs
- ToolStripStatusLabel.cs
- Table.cs
- MemberDescriptor.cs
- FormsAuthenticationCredentials.cs
- WebServiceAttribute.cs
- DataColumnMapping.cs
- StateMachineHelpers.cs
- DynamicMetaObject.cs
- X509ClientCertificateAuthentication.cs
- NamespaceCollection.cs
- BooleanStorage.cs
- FontNamesConverter.cs
- EmptyEnumerable.cs
- EventMappingSettings.cs
- EdmType.cs
- HotSpotCollection.cs
- ExpressionNode.cs
- NativeMethods.cs
- CodeExpressionCollection.cs
- Dump.cs
- ScrollItemProviderWrapper.cs
- Renderer.cs
- QuerySafeNavigator.cs
- NativeMethods.cs
- MultiDataTrigger.cs
- XmlDomTextWriter.cs
- ManagementObjectCollection.cs
- JsonDataContract.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- TextAnchor.cs
- PropertySourceInfo.cs
- PopupEventArgs.cs
- AccessedThroughPropertyAttribute.cs
- ActivationArguments.cs
- SqlGatherConsumedAliases.cs