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
- PrinterUnitConvert.cs
- HttpRequest.cs
- StylusPointProperties.cs
- GroupBox.cs
- ManualWorkflowSchedulerService.cs
- UnsafeNativeMethods.cs
- XmlJsonReader.cs
- KeyInfo.cs
- TextEditorLists.cs
- ChtmlMobileTextWriter.cs
- _HeaderInfo.cs
- RowUpdatedEventArgs.cs
- CodeDirectionExpression.cs
- InputScope.cs
- DataColumnCollection.cs
- ToolStripDropTargetManager.cs
- UIAgentCrashedException.cs
- WebServicesInteroperability.cs
- precedingquery.cs
- altserialization.cs
- PresentationTraceSources.cs
- TagMapInfo.cs
- EncodingTable.cs
- DataSourceSelectArguments.cs
- CategoryEditor.cs
- TextPointer.cs
- FormsAuthenticationTicket.cs
- Cursors.cs
- DataGridViewCheckBoxCell.cs
- MSAAWinEventWrap.cs
- XmlExtensionFunction.cs
- Fonts.cs
- WebServiceErrorEvent.cs
- HttpCachePolicyElement.cs
- OptimalTextSource.cs
- UnsafeNativeMethods.cs
- EncodingInfo.cs
- StrongNameUtility.cs
- SelfSignedCertificate.cs
- PasswordValidationException.cs
- HtmlShimManager.cs
- RoleManagerModule.cs
- UnknownBitmapEncoder.cs
- RadioButton.cs
- backend.cs
- LinkTarget.cs
- DbLambda.cs
- ConnectionStringEditor.cs
- StorageFunctionMapping.cs
- xdrvalidator.cs
- MediaScriptCommandRoutedEventArgs.cs
- PersonalizationDictionary.cs
- LinearKeyFrames.cs
- ToolBarOverflowPanel.cs
- Tokenizer.cs
- FixedDSBuilder.cs
- TableLayoutStyle.cs
- DoubleAverageAggregationOperator.cs
- PropertyInfoSet.cs
- UnconditionalPolicy.cs
- StringSorter.cs
- TypeConverterAttribute.cs
- PrePrepareMethodAttribute.cs
- XmlSchemaNotation.cs
- ReachDocumentSequenceSerializer.cs
- UInt32.cs
- DateTimePicker.cs
- SynchronizedInputProviderWrapper.cs
- GradientStop.cs
- WebPartUserCapability.cs
- ScalarOps.cs
- EndOfStreamException.cs
- RootProjectionNode.cs
- TableLayoutSettings.cs
- SecurityKeyEntropyMode.cs
- XmlRawWriter.cs
- ContentTextAutomationPeer.cs
- ArglessEventHandlerProxy.cs
- UTF32Encoding.cs
- OutputChannelBinder.cs
- SqlRemoveConstantOrderBy.cs
- CapiSymmetricAlgorithm.cs
- DayRenderEvent.cs
- CodePrimitiveExpression.cs
- BinaryMessageEncoder.cs
- UnionExpr.cs
- SecurityUniqueId.cs
- TypeDescriptor.cs
- UIntPtr.cs
- ExpressionBuilderCollection.cs
- MarkedHighlightComponent.cs
- EventlogProvider.cs
- MembershipSection.cs
- UpDownBase.cs
- EntityViewGenerationConstants.cs
- EventRoute.cs
- __Error.cs
- XmlDomTextWriter.cs
- FreeFormDragDropManager.cs
- ProtocolsSection.cs