Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Security / Cryptography / CngProperty.cs / 1305376 / CngProperty.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== using System; using System.Collections.ObjectModel; using System.Diagnostics.Contracts; namespace System.Security.Cryptography { ////// Wrapper represeting an arbitrary property of a CNG key or provider /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public struct CngProperty : IEquatable{ private string m_name; private CngPropertyOptions m_propertyOptions; private byte[] m_value; private int? m_hashCode; public CngProperty(string name, byte[] value, CngPropertyOptions options) { if (name == null) throw new ArgumentNullException("name"); // @ m_name = name; m_propertyOptions = options; m_hashCode = null; if (value != null) { m_value = value.Clone() as byte[]; } else { m_value = null; } } /// /// Name of the property /// public string Name { get { Contract.Ensures(Contract.Result() != null); return m_name; } } /// /// Options used to set / get the property /// public CngPropertyOptions Options { get { return m_propertyOptions; } } ////// Direct value of the property -- if the value will be returned to user code or modified, use /// GetValue() instead. /// internal byte[] Value { get { return m_value; } } ////// Contents of the property /// ///public byte[] GetValue() { byte[] value = null; if (m_value != null) { value = m_value.Clone() as byte[]; } return value; } public static bool operator ==(CngProperty left, CngProperty right) { return left.Equals(right); } public static bool operator !=(CngProperty left, CngProperty right) { return !left.Equals(right); } public override bool Equals(object obj) { if (obj == null || !(obj is CngProperty)) { return false; } return Equals((CngProperty)obj); } public bool Equals(CngProperty other) { // // We will consider CNG properties equal only if the name, options and value are all also equal // if (!String.Equals(Name, other.Name, StringComparison.Ordinal)) { return false; } if (Options != other.Options) { return false; } if (m_value == null) { return other.m_value == null; } if (other.m_value == null) { return false; } if (m_value.Length != other.m_value.Length) { return false; } for (int i = 0; i < m_value.Length; i++) { if (m_value[i] != other.m_value[i]) { return false; } } return true; } public override int GetHashCode() { if (!m_hashCode.HasValue) { int hashCode = Name.GetHashCode() ^ Options.GetHashCode(); // The hash code for a byte is just the value of that byte. Since this will only modify the // lower bits of the hash code, we'll xor each byte into different sections of the hash code if (m_value != null) { for (int i = 0; i < m_value.Length; i++) { // Shift each byte forward by one byte, so that every 4 bytes has to potential to update // each of the calculated hash code's bytes. int shifted = (int)(m_value[i] << ((i % 4) * 8)); hashCode ^= shifted; } } m_hashCode = hashCode; } return m_hashCode.Value; } } /// /// Strongly typed collection of CNG properties /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CngPropertyCollection : Collection{ } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== using System; using System.Collections.ObjectModel; using System.Diagnostics.Contracts; namespace System.Security.Cryptography { /// /// Wrapper represeting an arbitrary property of a CNG key or provider /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public struct CngProperty : IEquatable{ private string m_name; private CngPropertyOptions m_propertyOptions; private byte[] m_value; private int? m_hashCode; public CngProperty(string name, byte[] value, CngPropertyOptions options) { if (name == null) throw new ArgumentNullException("name"); // @ m_name = name; m_propertyOptions = options; m_hashCode = null; if (value != null) { m_value = value.Clone() as byte[]; } else { m_value = null; } } /// /// Name of the property /// public string Name { get { Contract.Ensures(Contract.Result() != null); return m_name; } } /// /// Options used to set / get the property /// public CngPropertyOptions Options { get { return m_propertyOptions; } } ////// Direct value of the property -- if the value will be returned to user code or modified, use /// GetValue() instead. /// internal byte[] Value { get { return m_value; } } ////// Contents of the property /// ///public byte[] GetValue() { byte[] value = null; if (m_value != null) { value = m_value.Clone() as byte[]; } return value; } public static bool operator ==(CngProperty left, CngProperty right) { return left.Equals(right); } public static bool operator !=(CngProperty left, CngProperty right) { return !left.Equals(right); } public override bool Equals(object obj) { if (obj == null || !(obj is CngProperty)) { return false; } return Equals((CngProperty)obj); } public bool Equals(CngProperty other) { // // We will consider CNG properties equal only if the name, options and value are all also equal // if (!String.Equals(Name, other.Name, StringComparison.Ordinal)) { return false; } if (Options != other.Options) { return false; } if (m_value == null) { return other.m_value == null; } if (other.m_value == null) { return false; } if (m_value.Length != other.m_value.Length) { return false; } for (int i = 0; i < m_value.Length; i++) { if (m_value[i] != other.m_value[i]) { return false; } } return true; } public override int GetHashCode() { if (!m_hashCode.HasValue) { int hashCode = Name.GetHashCode() ^ Options.GetHashCode(); // The hash code for a byte is just the value of that byte. Since this will only modify the // lower bits of the hash code, we'll xor each byte into different sections of the hash code if (m_value != null) { for (int i = 0; i < m_value.Length; i++) { // Shift each byte forward by one byte, so that every 4 bytes has to potential to update // each of the calculated hash code's bytes. int shifted = (int)(m_value[i] << ((i % 4) * 8)); hashCode ^= shifted; } } m_hashCode = hashCode; } return m_hashCode.Value; } } /// /// Strongly typed collection of CNG properties /// [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CngPropertyCollection : Collection{ } } // 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
- XmlSchemaAttributeGroup.cs
- ZipIOBlockManager.cs
- XsdValidatingReader.cs
- PictureBoxDesigner.cs
- SQLRoleProvider.cs
- ToolStripPanel.cs
- coordinatorscratchpad.cs
- SwitchElementsCollection.cs
- ReachIDocumentPaginatorSerializer.cs
- Activity.cs
- CaseExpr.cs
- Span.cs
- ToolStripDesigner.cs
- Semaphore.cs
- WorkflowHostingResponseContext.cs
- CanonicalXml.cs
- SafeBuffer.cs
- DataServiceConfiguration.cs
- DbProviderFactoriesConfigurationHandler.cs
- FilterQueryOptionExpression.cs
- Matrix.cs
- ServiceObjectContainer.cs
- RemoveStoryboard.cs
- ArrayTypeMismatchException.cs
- WorkItem.cs
- TrustLevelCollection.cs
- SelectionWordBreaker.cs
- HideDisabledControlAdapter.cs
- ColorEditor.cs
- TextPatternIdentifiers.cs
- RenderCapability.cs
- XPathAncestorQuery.cs
- XmlUtf8RawTextWriter.cs
- Win32.cs
- StorageAssociationTypeMapping.cs
- UInt32Storage.cs
- ListViewItemSelectionChangedEvent.cs
- FunctionDescription.cs
- Timer.cs
- DebugHandleTracker.cs
- UpDownEvent.cs
- CalloutQueueItem.cs
- String.cs
- ToolboxItem.cs
- StringExpressionSet.cs
- BookmarkOptionsHelper.cs
- ApplyHostConfigurationBehavior.cs
- XmlSecureResolver.cs
- MultiPartWriter.cs
- XmlSchemaSimpleContentExtension.cs
- WeakReference.cs
- ASCIIEncoding.cs
- DescendentsWalker.cs
- QueryConverter.cs
- InfoCardTraceRecord.cs
- SQLGuid.cs
- Deflater.cs
- IPGlobalProperties.cs
- CodeCommentStatementCollection.cs
- ControlBindingsConverter.cs
- ToolStripRenderer.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- UserControl.cs
- InstanceOwner.cs
- Condition.cs
- TaskFileService.cs
- xamlnodes.cs
- GCHandleCookieTable.cs
- UdpDiscoveryEndpointElement.cs
- XmlCharCheckingWriter.cs
- MouseEvent.cs
- UseAttributeSetsAction.cs
- EventProviderWriter.cs
- BooleanAnimationUsingKeyFrames.cs
- XamlWriter.cs
- StreamSecurityUpgradeInitiator.cs
- WindowsListViewSubItem.cs
- XmlSchemaAll.cs
- ConstructorNeedsTagAttribute.cs
- Metadata.cs
- InstancePersistenceCommandException.cs
- PanelDesigner.cs
- ExternalDataExchangeService.cs
- securitycriticaldata.cs
- SpnEndpointIdentityExtension.cs
- CaseStatement.cs
- WorkflowQueue.cs
- ScopeElementCollection.cs
- DbInsertCommandTree.cs
- VirtualizingPanel.cs
- XmlSchemaValidationException.cs
- MSAAWinEventWrap.cs
- GridViewCancelEditEventArgs.cs
- XmlSigningNodeWriter.cs
- HtmlInputHidden.cs
- HtmlElement.cs
- XXXOnTypeBuilderInstantiation.cs
- ParallelTimeline.cs
- DateTimeConstantAttribute.cs
- ResourceLoader.cs