Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- IPGlobalProperties.cs
- RowUpdatedEventArgs.cs
- XmlSchemaObjectTable.cs
- UndoManager.cs
- TemplateField.cs
- ByteAnimationBase.cs
- XmlIgnoreAttribute.cs
- Stack.cs
- WebMessageBodyStyleHelper.cs
- OperationResponse.cs
- CreationContext.cs
- ProxyWebPartManager.cs
- MessageDecoder.cs
- ProgressBar.cs
- securestring.cs
- InvalidCastException.cs
- TypeSystemProvider.cs
- PersonalizationProviderCollection.cs
- ContainerAction.cs
- XmlSchemaSimpleContentExtension.cs
- DebugHandleTracker.cs
- Lasso.cs
- NumericExpr.cs
- SemanticValue.cs
- TemplateControl.cs
- XmlILStorageConverter.cs
- DataFormats.cs
- EndEvent.cs
- XmlSchemaGroupRef.cs
- PersonalizablePropertyEntry.cs
- BinaryWriter.cs
- IBuiltInEvidence.cs
- Bidi.cs
- XmlIlTypeHelper.cs
- AmbiguousMatchException.cs
- KeyEvent.cs
- ResourceSetExpression.cs
- ModifiableIteratorCollection.cs
- RoutedUICommand.cs
- IconBitmapDecoder.cs
- NonSerializedAttribute.cs
- QueryCacheKey.cs
- ObjectNavigationPropertyMapping.cs
- MimeTypeAttribute.cs
- CompressionTracing.cs
- EntityClientCacheKey.cs
- TextBoxBase.cs
- TextTreeFixupNode.cs
- HtmlEmptyTagControlBuilder.cs
- ButtonFieldBase.cs
- XsltLibrary.cs
- TransformerConfigurationWizardBase.cs
- RemotingException.cs
- __Filters.cs
- MasterPageBuildProvider.cs
- TimeStampChecker.cs
- CapacityStreamGeometryContext.cs
- DataMember.cs
- KeysConverter.cs
- TemplateKeyConverter.cs
- ListViewItemMouseHoverEvent.cs
- LocationUpdates.cs
- TextHintingModeValidation.cs
- BaseInfoTable.cs
- SqlError.cs
- Point4DConverter.cs
- DeclaredTypeValidator.cs
- PackageProperties.cs
- PackageDigitalSignatureManager.cs
- DockingAttribute.cs
- ToolStripGrip.cs
- ProfileModule.cs
- DetailsViewDeleteEventArgs.cs
- InstallerTypeAttribute.cs
- WebPartManagerDesigner.cs
- StateMachineWorkflow.cs
- BindingGroup.cs
- DuplicateDetector.cs
- ObjectDataSourceDisposingEventArgs.cs
- DataGridBoolColumn.cs
- ToolBarOverflowPanel.cs
- SelectorItemAutomationPeer.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- TreeViewTemplateSelector.cs
- FixedSchema.cs
- TargetInvocationException.cs
- UnsafeCollabNativeMethods.cs
- DurationConverter.cs
- ControlCollection.cs
- MessageSecurityOverTcpElement.cs
- XsdDateTime.cs
- PolyBezierSegmentFigureLogic.cs
- BooleanKeyFrameCollection.cs
- Line.cs
- LogicalCallContext.cs
- EventManager.cs
- ThemeDictionaryExtension.cs
- BufferedGraphicsContext.cs
- ArrayElementGridEntry.cs
- DSACryptoServiceProvider.cs