Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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 } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Mapping.cs
- ProgressBarRenderer.cs
- ErrorStyle.cs
- SmiGettersStream.cs
- _NegotiateClient.cs
- WinCategoryAttribute.cs
- WindowsListView.cs
- BoundField.cs
- HttpRuntime.cs
- DiscoveryServerProtocol.cs
- ComboBoxDesigner.cs
- RootBuilder.cs
- Mutex.cs
- Sorting.cs
- Expressions.cs
- XPathNodePointer.cs
- entityreference_tresulttype.cs
- TemplateControlCodeDomTreeGenerator.cs
- RtfNavigator.cs
- BookmarkManager.cs
- CodeSnippetCompileUnit.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- NumericUpDownAccelerationCollection.cs
- FormViewActionList.cs
- SqlCharStream.cs
- SafeFileMappingHandle.cs
- PropertyValueUIItem.cs
- OledbConnectionStringbuilder.cs
- SpellerInterop.cs
- DynamicPropertyHolder.cs
- CompressionTracing.cs
- SafeSecurityHandles.cs
- ColumnMapCopier.cs
- ComponentEditorPage.cs
- EventPropertyMap.cs
- AsymmetricKeyExchangeDeformatter.cs
- _SingleItemRequestCache.cs
- FontInfo.cs
- DataTablePropertyDescriptor.cs
- MetafileHeaderWmf.cs
- TypeBrowser.xaml.cs
- FileInfo.cs
- Publisher.cs
- RawStylusInput.cs
- ArcSegment.cs
- EmptyControlCollection.cs
- SqlStatistics.cs
- XmlQueryRuntime.cs
- UnknownBitmapDecoder.cs
- RegexRunnerFactory.cs
- Table.cs
- TextTreeDeleteContentUndoUnit.cs
- RepeaterItem.cs
- ReferencedAssembly.cs
- AssemblyFilter.cs
- ComboBox.cs
- PropertyRecord.cs
- InstanceLockTracking.cs
- DTCTransactionManager.cs
- HandledMouseEvent.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- TextEffectResolver.cs
- MediaTimeline.cs
- DbModificationClause.cs
- DataSourceCache.cs
- PngBitmapEncoder.cs
- BitStream.cs
- ContainerFilterService.cs
- GridItem.cs
- FontClient.cs
- EUCJPEncoding.cs
- WebServicesInteroperability.cs
- LinkedResource.cs
- CompleteWizardStep.cs
- CircleEase.cs
- DependencyProperty.cs
- StateBag.cs
- SignedXml.cs
- DecodeHelper.cs
- DataGridAddNewRow.cs
- JpegBitmapEncoder.cs
- WebPartConnection.cs
- LinkConverter.cs
- assemblycache.cs
- SQLDoubleStorage.cs
- XhtmlBasicLiteralTextAdapter.cs
- XmlSchemaGroup.cs
- InvalidProgramException.cs
- EntityDataSourceValidationException.cs
- SymLanguageType.cs
- Debugger.cs
- ParserOptions.cs
- IfElseDesigner.xaml.cs
- CompModHelpers.cs
- GradientPanel.cs
- GridViewCellAutomationPeer.cs
- EventSinkHelperWriter.cs
- SemanticBasicElement.cs
- Constraint.cs
- StorageConditionPropertyMapping.cs