Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Policy / Publisher.cs / 1305376 / Publisher.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// [....]
//
//
// Publisher.cs
//
// Publisher is an IIdentity representing internet sites.
//
namespace System.Security.Policy {
using System.Runtime.Remoting;
using System;
using System.IO;
using System.Security.Util;
using System.Collections;
using PublisherIdentityPermission = System.Security.Permissions.PublisherIdentityPermission;
using System.Security.Cryptography.X509Certificates;
using System.Diagnostics.Contracts;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class Publisher : EvidenceBase, IIdentityPermissionFactory
{
private X509Certificate m_cert;
public Publisher(X509Certificate cert)
{
if (cert == null)
throw new ArgumentNullException("cert");
Contract.EndContractBlock();
m_cert = cert;
}
public IPermission CreateIdentityPermission( Evidence evidence )
{
return new PublisherIdentityPermission( m_cert );
}
// Two Publisher objects are equal if the public keys contained within their certificates
// are equal. The certs themselves may be different...
public override bool Equals(Object o)
{
Publisher that = (o as Publisher);
return (that != null && PublicKeyEquals( this.m_cert, that.m_cert ));
}
// Checks if two certificates have the same public key, keyalg, and keyparam.
internal static bool PublicKeyEquals( X509Certificate cert1, X509Certificate cert2 )
{
if (cert1 == null)
{
return (cert2 == null);
}
else if (cert2 == null)
{
return false;
}
byte[] publicKey1 = cert1.GetPublicKey();
String keyAlg1 = cert1.GetKeyAlgorithm();
byte[] keyAlgParam1 = cert1.GetKeyAlgorithmParameters();
byte[] publicKey2 = cert2.GetPublicKey();
String keyAlg2 = cert2.GetKeyAlgorithm();
byte[] keyAlgParam2 = cert2.GetKeyAlgorithmParameters();
// Keys are most likely to be different of the three components,
// so check them first
int len = publicKey1.Length;
if (len != publicKey2.Length) return(false);
for (int i = 0; i < len; i++) {
if (publicKey1[i] != publicKey2[i]) return(false);
}
if (!(keyAlg1.Equals(keyAlg2))) return(false);
len = keyAlgParam1.Length;
if (keyAlgParam2.Length != len) return(false);
for (int i = 0; i < len; i++) {
if (keyAlgParam1[i] != keyAlgParam2[i]) return(false);
}
return true;
}
public override int GetHashCode()
{
return m_cert.GetHashCode();
}
public X509Certificate Certificate
{
get { return new X509Certificate(m_cert); }
}
public override EvidenceBase Clone()
{
return new Publisher(m_cert);
}
public object Copy()
{
return Clone();
}
internal SecurityElement ToXml()
{
SecurityElement elem = new SecurityElement( "System.Security.Policy.Publisher" );
// If you hit this assert then most likely you are trying to change the name of this class.
// This is ok as long as you change the hard coded string above and change the assert below.
Contract.Assert( this.GetType().FullName.Equals( "System.Security.Policy.Publisher" ), "Class name changed!" );
elem.AddAttribute( "version", "1" );
elem.AddChild( new SecurityElement( "X509v3Certificate", m_cert != null ? m_cert.GetRawCertDataString() : "" ) );
return elem;
}
public override String ToString()
{
return ToXml().ToString();
}
// INormalizeForIsolatedStorage is not implemented for startup perf
// equivalent to INormalizeForIsolatedStorage.Normalize()
internal Object Normalize()
{
MemoryStream ms = new MemoryStream(m_cert.GetRawCertData());
ms.Position = 0;
return ms;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// [....]
//
//
// Publisher.cs
//
// Publisher is an IIdentity representing internet sites.
//
namespace System.Security.Policy {
using System.Runtime.Remoting;
using System;
using System.IO;
using System.Security.Util;
using System.Collections;
using PublisherIdentityPermission = System.Security.Permissions.PublisherIdentityPermission;
using System.Security.Cryptography.X509Certificates;
using System.Diagnostics.Contracts;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class Publisher : EvidenceBase, IIdentityPermissionFactory
{
private X509Certificate m_cert;
public Publisher(X509Certificate cert)
{
if (cert == null)
throw new ArgumentNullException("cert");
Contract.EndContractBlock();
m_cert = cert;
}
public IPermission CreateIdentityPermission( Evidence evidence )
{
return new PublisherIdentityPermission( m_cert );
}
// Two Publisher objects are equal if the public keys contained within their certificates
// are equal. The certs themselves may be different...
public override bool Equals(Object o)
{
Publisher that = (o as Publisher);
return (that != null && PublicKeyEquals( this.m_cert, that.m_cert ));
}
// Checks if two certificates have the same public key, keyalg, and keyparam.
internal static bool PublicKeyEquals( X509Certificate cert1, X509Certificate cert2 )
{
if (cert1 == null)
{
return (cert2 == null);
}
else if (cert2 == null)
{
return false;
}
byte[] publicKey1 = cert1.GetPublicKey();
String keyAlg1 = cert1.GetKeyAlgorithm();
byte[] keyAlgParam1 = cert1.GetKeyAlgorithmParameters();
byte[] publicKey2 = cert2.GetPublicKey();
String keyAlg2 = cert2.GetKeyAlgorithm();
byte[] keyAlgParam2 = cert2.GetKeyAlgorithmParameters();
// Keys are most likely to be different of the three components,
// so check them first
int len = publicKey1.Length;
if (len != publicKey2.Length) return(false);
for (int i = 0; i < len; i++) {
if (publicKey1[i] != publicKey2[i]) return(false);
}
if (!(keyAlg1.Equals(keyAlg2))) return(false);
len = keyAlgParam1.Length;
if (keyAlgParam2.Length != len) return(false);
for (int i = 0; i < len; i++) {
if (keyAlgParam1[i] != keyAlgParam2[i]) return(false);
}
return true;
}
public override int GetHashCode()
{
return m_cert.GetHashCode();
}
public X509Certificate Certificate
{
get { return new X509Certificate(m_cert); }
}
public override EvidenceBase Clone()
{
return new Publisher(m_cert);
}
public object Copy()
{
return Clone();
}
internal SecurityElement ToXml()
{
SecurityElement elem = new SecurityElement( "System.Security.Policy.Publisher" );
// If you hit this assert then most likely you are trying to change the name of this class.
// This is ok as long as you change the hard coded string above and change the assert below.
Contract.Assert( this.GetType().FullName.Equals( "System.Security.Policy.Publisher" ), "Class name changed!" );
elem.AddAttribute( "version", "1" );
elem.AddChild( new SecurityElement( "X509v3Certificate", m_cert != null ? m_cert.GetRawCertDataString() : "" ) );
return elem;
}
public override String ToString()
{
return ToXml().ToString();
}
// INormalizeForIsolatedStorage is not implemented for startup perf
// equivalent to INormalizeForIsolatedStorage.Normalize()
internal Object Normalize()
{
MemoryStream ms = new MemoryStream(m_cert.GetRawCertData());
ms.Position = 0;
return ms;
}
}
}
// 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
- AsymmetricSignatureDeformatter.cs
- ToolStripComboBox.cs
- GridViewRowPresenterBase.cs
- EmptyEnumerable.cs
- StrokeFIndices.cs
- MailHeaderInfo.cs
- ValuePatternIdentifiers.cs
- StatusBarPanelClickEvent.cs
- Win32.cs
- DropSource.cs
- LinqDataSourceInsertEventArgs.cs
- InstanceDataCollection.cs
- Model3D.cs
- DataPagerFieldCommandEventArgs.cs
- PaginationProgressEventArgs.cs
- SqlUtils.cs
- HtmlTableCell.cs
- TextBoxView.cs
- XPathPatternParser.cs
- CompilationLock.cs
- _SingleItemRequestCache.cs
- SpanIndex.cs
- PolyLineSegment.cs
- ZoneMembershipCondition.cs
- ApplicationException.cs
- XmlSchemaExternal.cs
- DataSourceComponent.cs
- DataColumnChangeEvent.cs
- UrlAuthFailedErrorFormatter.cs
- EntityProxyFactory.cs
- TimeSpanStorage.cs
- TdsParser.cs
- EncodingDataItem.cs
- Profiler.cs
- DoubleKeyFrameCollection.cs
- PartialCachingAttribute.cs
- PathParser.cs
- ReachFixedPageSerializerAsync.cs
- EditingCommands.cs
- Win32KeyboardDevice.cs
- DesignSurface.cs
- FontFamilyConverter.cs
- DataBoundControlDesigner.cs
- GlobalizationSection.cs
- PointLight.cs
- StrongNameKeyPair.cs
- RouteParameter.cs
- TreeNodeStyleCollection.cs
- ResourceDescriptionAttribute.cs
- HttpPostLocalhostServerProtocol.cs
- SqlInternalConnection.cs
- XslNumber.cs
- PathTooLongException.cs
- TextTreeObjectNode.cs
- WebCategoryAttribute.cs
- SerialReceived.cs
- mactripleDES.cs
- TreeNode.cs
- Pool.cs
- RoutingConfiguration.cs
- TextAnchor.cs
- InvokeProviderWrapper.cs
- HandlerFactoryWrapper.cs
- _Semaphore.cs
- AnonymousIdentificationModule.cs
- SharedUtils.cs
- ObjectIDGenerator.cs
- InteropBitmapSource.cs
- UriSection.cs
- IPAddress.cs
- HMACSHA384.cs
- ThumbAutomationPeer.cs
- DbInsertCommandTree.cs
- Transform.cs
- TextControlDesigner.cs
- SharedPerformanceCounter.cs
- VarRemapper.cs
- AsyncResult.cs
- ReadContentAsBinaryHelper.cs
- HyperLinkStyle.cs
- XPathNodeInfoAtom.cs
- DbParameterHelper.cs
- ComboBoxRenderer.cs
- XmlSchemaSequence.cs
- SerializationInfoEnumerator.cs
- ToolStripItemTextRenderEventArgs.cs
- PartialCachingAttribute.cs
- NavigationEventArgs.cs
- SmtpMail.cs
- UpdateProgress.cs
- TreeNodeCollection.cs
- CompModSwitches.cs
- PropertyOverridesDialog.cs
- StoragePropertyMapping.cs
- BitmapEffectInputData.cs
- TypeSystemProvider.cs
- DataGridItemAttachedStorage.cs
- AccessDataSourceView.cs
- HighlightComponent.cs
- ConnectionPoolManager.cs