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
- DeleteIndexBinder.cs
- SqlErrorCollection.cs
- TdsParserSafeHandles.cs
- SymmetricKey.cs
- BamlBinaryReader.cs
- CachingHintValidation.cs
- BasicBrowserDialog.cs
- Label.cs
- OperationInvokerTrace.cs
- ReturnType.cs
- LineMetrics.cs
- MemoryStream.cs
- SafeBitVector32.cs
- XmlWrappingReader.cs
- ToolStripProgressBar.cs
- EntryWrittenEventArgs.cs
- AdCreatedEventArgs.cs
- RenderData.cs
- SqlCacheDependencyDatabaseCollection.cs
- RuleRef.cs
- MsmqBindingBase.cs
- OleDbParameter.cs
- SortQuery.cs
- CodeCompileUnit.cs
- Socket.cs
- TraceFilter.cs
- LabelDesigner.cs
- DocumentXPathNavigator.cs
- EqualityComparer.cs
- OleDbInfoMessageEvent.cs
- MultiplexingDispatchMessageFormatter.cs
- SearchForVirtualItemEventArgs.cs
- VirtualizingStackPanel.cs
- DesignerActionKeyboardBehavior.cs
- PropertyEntry.cs
- AppDomainUnloadedException.cs
- PeerToPeerException.cs
- CollectionChangedEventManager.cs
- LoginStatusDesigner.cs
- _DisconnectOverlappedAsyncResult.cs
- UnsafeNativeMethodsPenimc.cs
- PieceDirectory.cs
- StorageEndPropertyMapping.cs
- UInt64.cs
- DurableEnlistmentState.cs
- XmlSchemaAny.cs
- FormViewPageEventArgs.cs
- MemberBinding.cs
- AssemblyResourceLoader.cs
- ProfileBuildProvider.cs
- TextWriterTraceListener.cs
- ContentFilePart.cs
- LayoutTable.cs
- TypeReference.cs
- SymLanguageVendor.cs
- DynamicValueConverter.cs
- cache.cs
- Single.cs
- TableMethodGenerator.cs
- Timer.cs
- Visitor.cs
- FtpWebResponse.cs
- DefaultPrintController.cs
- autovalidator.cs
- PeerName.cs
- TextureBrush.cs
- SqlMethodTransformer.cs
- DBAsyncResult.cs
- UnauthorizedAccessException.cs
- Ipv6Element.cs
- MenuEventArgs.cs
- XmlDataProvider.cs
- NopReturnReader.cs
- OdbcHandle.cs
- ProxySimple.cs
- MultipartContentParser.cs
- SrgsGrammarCompiler.cs
- XmlDictionary.cs
- DeclarationUpdate.cs
- HtmlImage.cs
- SimpleMailWebEventProvider.cs
- ServiceHostingEnvironment.cs
- TextSimpleMarkerProperties.cs
- precedingsibling.cs
- HandleDictionary.cs
- PolyBezierSegment.cs
- GB18030Encoding.cs
- CompositeControl.cs
- XappLauncher.cs
- GenerateScriptTypeAttribute.cs
- HMACMD5.cs
- ValidateNames.cs
- ParameterInfo.cs
- Opcode.cs
- WebPartRestoreVerb.cs
- ObjectConverter.cs
- AsymmetricKeyExchangeFormatter.cs
- Label.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SizeAnimationClockResource.cs