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
- SystemIPGlobalStatistics.cs
- DateTime.cs
- DrawingGroupDrawingContext.cs
- CodeDOMUtility.cs
- ContractBase.cs
- BindableAttribute.cs
- WebPartTracker.cs
- EnumConverter.cs
- Authorization.cs
- TraceContextEventArgs.cs
- FileReader.cs
- XmlSchemaAll.cs
- QuestionEventArgs.cs
- XmlSchemaSimpleTypeList.cs
- WrappedIUnknown.cs
- UriExt.cs
- XmlUTF8TextWriter.cs
- Wildcard.cs
- Italic.cs
- SHA256Managed.cs
- FrameworkElement.cs
- Model3DGroup.cs
- FolderLevelBuildProvider.cs
- ImageIndexEditor.cs
- ScriptingJsonSerializationSection.cs
- prompt.cs
- FormParameter.cs
- AssemblyName.cs
- DbProviderManifest.cs
- PointConverter.cs
- VectorValueSerializer.cs
- DbProviderSpecificTypePropertyAttribute.cs
- Ray3DHitTestResult.cs
- _NegoState.cs
- PermissionListSet.cs
- CompositeTypefaceMetrics.cs
- CancelEventArgs.cs
- NotImplementedException.cs
- StdValidatorsAndConverters.cs
- PreProcessInputEventArgs.cs
- X509RawDataKeyIdentifierClause.cs
- ExtentKey.cs
- ImageFormatConverter.cs
- CalendarButtonAutomationPeer.cs
- LayoutInformation.cs
- UrlPath.cs
- SettingsContext.cs
- BitmapDownload.cs
- ApplicationFileParser.cs
- TrustLevelCollection.cs
- UIElement3D.cs
- PrintPreviewDialog.cs
- GPRECTF.cs
- MessageQueuePermissionEntry.cs
- ExpressionNormalizer.cs
- IconBitmapDecoder.cs
- SqlResolver.cs
- ActivationArguments.cs
- EnlistmentState.cs
- dtdvalidator.cs
- StringCollectionEditor.cs
- RelationshipManager.cs
- StringOutput.cs
- SaveFileDialog.cs
- TypeUtils.cs
- FaultReasonText.cs
- TPLETWProvider.cs
- ClientOptions.cs
- FixedPage.cs
- ThreadExceptionDialog.cs
- Point4DConverter.cs
- ToolboxItemFilterAttribute.cs
- XmlSchemaExporter.cs
- RangeEnumerable.cs
- __Filters.cs
- PrtTicket_Public.cs
- ScriptModule.cs
- ScriptMethodAttribute.cs
- ListViewInsertionMark.cs
- StrongNameMembershipCondition.cs
- SqlClientMetaDataCollectionNames.cs
- CreateUserErrorEventArgs.cs
- BigInt.cs
- GenericPrincipal.cs
- PrinterUnitConvert.cs
- _DomainName.cs
- StateManagedCollection.cs
- PasswordBoxAutomationPeer.cs
- ColorAnimation.cs
- StrongNameMembershipCondition.cs
- XPathNavigatorKeyComparer.cs
- RestClientProxyHandler.cs
- HttpWriter.cs
- PriorityBinding.cs
- CompositeActivityValidator.cs
- StatusStrip.cs
- DependentList.cs
- AstNode.cs
- SqlTransaction.cs
- SynchronizedInputProviderWrapper.cs