Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- MembershipPasswordException.cs
- LazyTextWriterCreator.cs
- RuntimeUtils.cs
- DocComment.cs
- XmlBinaryReaderSession.cs
- Update.cs
- Zone.cs
- UnsafeNativeMethods.cs
- DesignTableCollection.cs
- VisualStyleInformation.cs
- SafeCryptoKeyHandle.cs
- ComplexType.cs
- DefaultClaimSet.cs
- SplitContainer.cs
- CodeExpressionCollection.cs
- VSDExceptions.cs
- MetadataCache.cs
- TypeUsageBuilder.cs
- PriorityRange.cs
- OdbcConnectionHandle.cs
- PublisherIdentityPermission.cs
- PersonalizablePropertyEntry.cs
- PersistenceTypeAttribute.cs
- QilBinary.cs
- TableCell.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- CfgParser.cs
- TreeView.cs
- SurrogateSelector.cs
- ComboBoxRenderer.cs
- MessageOperationFormatter.cs
- XPathQilFactory.cs
- GridSplitterAutomationPeer.cs
- ConditionCollection.cs
- NumericExpr.cs
- Int32KeyFrameCollection.cs
- SpotLight.cs
- RawStylusInputCustomDataList.cs
- Collection.cs
- TargetControlTypeAttribute.cs
- validationstate.cs
- SecurityTraceRecordHelper.cs
- Menu.cs
- ReceiveActivityDesigner.cs
- Selector.cs
- SecurityProtocol.cs
- FileRecordSequenceHelper.cs
- GroupBoxAutomationPeer.cs
- ClassGenerator.cs
- ReadOnlyKeyedCollection.cs
- ToggleProviderWrapper.cs
- DbConnectionStringCommon.cs
- _Win32.cs
- DeflateEmulationStream.cs
- Identity.cs
- SmtpLoginAuthenticationModule.cs
- ControlSerializer.cs
- LabelEditEvent.cs
- FileSystemInfo.cs
- ExpressionUtilities.cs
- ConvertersCollection.cs
- DataProtection.cs
- DictionaryChange.cs
- MULTI_QI.cs
- ConnectionStringsSection.cs
- listitem.cs
- SettingsSavedEventArgs.cs
- PeerToPeerException.cs
- RowParagraph.cs
- ExtendedProperty.cs
- Stopwatch.cs
- BinaryConverter.cs
- ImageListImage.cs
- PreservationFileReader.cs
- OleStrCAMarshaler.cs
- ComboBox.cs
- HostingPreferredMapPath.cs
- Knowncolors.cs
- RegexWorker.cs
- DateTimeValueSerializerContext.cs
- XmlEventCache.cs
- TdsParserStaticMethods.cs
- ProjectionPruner.cs
- GestureRecognizer.cs
- PopOutPanel.cs
- HtmlTitle.cs
- CallbackHandler.cs
- DrawingCollection.cs
- MsmqIntegrationProcessProtocolHandler.cs
- ConfigurationHelpers.cs
- SerTrace.cs
- FormsIdentity.cs
- LicenseException.cs
- RelationshipWrapper.cs
- SyndicationContent.cs
- DataTableTypeConverter.cs
- MachineKeySection.cs
- Message.cs
- CodeTypeMember.cs
- SupportsEventValidationAttribute.cs