Code:
/ DotNET / DotNET / 8.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
- XPathPatternBuilder.cs
- TextBoxBase.cs
- DataGridHyperlinkColumn.cs
- BamlReader.cs
- SectionInformation.cs
- NativeDirectoryServicesQueryAPIs.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- PointValueSerializer.cs
- MainMenu.cs
- ApplicationCommands.cs
- SettingsProviderCollection.cs
- SspiNegotiationTokenAuthenticatorState.cs
- FontStyle.cs
- HwndHost.cs
- SoapCodeExporter.cs
- DataGrid.cs
- TemplatePartAttribute.cs
- BasicExpressionVisitor.cs
- RelatedPropertyManager.cs
- ImageClickEventArgs.cs
- QueueProcessor.cs
- StylusLogic.cs
- SHA384.cs
- CustomGrammar.cs
- Normalization.cs
- ResourcePermissionBase.cs
- InternalEnumValidatorAttribute.cs
- ResizeGrip.cs
- InfoCardMetadataExchangeClient.cs
- VirtualPathUtility.cs
- MessageQuerySet.cs
- PageCodeDomTreeGenerator.cs
- EndpointNotFoundException.cs
- RoutedUICommand.cs
- QueryStoreStatusRequest.cs
- Viewport3DAutomationPeer.cs
- EntityParameter.cs
- WebPartEditorApplyVerb.cs
- TaskFileService.cs
- HijriCalendar.cs
- ProfileSection.cs
- HandleCollector.cs
- ProfileSettings.cs
- BCLDebug.cs
- HttpGetProtocolReflector.cs
- HandleExceptionArgs.cs
- Predicate.cs
- DataServiceRequestException.cs
- CqlGenerator.cs
- ColumnReorderedEventArgs.cs
- TextEditorDragDrop.cs
- UserMapPath.cs
- SessionParameter.cs
- Int32CollectionValueSerializer.cs
- BinaryCommonClasses.cs
- NullRuntimeConfig.cs
- ConditionCollection.cs
- BaseTemplateParser.cs
- SqlVisitor.cs
- TextSpanModifier.cs
- NopReturnReader.cs
- DeviceContext.cs
- TableItemStyle.cs
- _ShellExpression.cs
- UnaryNode.cs
- XsltLibrary.cs
- SamlConstants.cs
- SatelliteContractVersionAttribute.cs
- DataGridLengthConverter.cs
- GatewayDefinition.cs
- ObjectMaterializedEventArgs.cs
- WebPartMenu.cs
- xsdvalidator.cs
- MonthChangedEventArgs.cs
- ViewValidator.cs
- NumberFunctions.cs
- BufferAllocator.cs
- UIAgentMonitorHandle.cs
- RuntimeConfigLKG.cs
- WizardSideBarListControlItem.cs
- TemplateApplicationHelper.cs
- RequestQueryParser.cs
- Command.cs
- HandledEventArgs.cs
- GlyphShapingProperties.cs
- CommonRemoteMemoryBlock.cs
- WebContext.cs
- PtsHost.cs
- RecordsAffectedEventArgs.cs
- StyleXamlParser.cs
- DiscoveryServerProtocol.cs
- StylusButton.cs
- VBCodeProvider.cs
- TracePayload.cs
- ExpressionList.cs
- XmlKeywords.cs
- DbConnectionOptions.cs
- BinaryReader.cs
- XsdCachingReader.cs
- XmlSchemaProviderAttribute.cs