2 // System.Security.Policy.StrongNameMembershipCondition.cs
5 // Duncan Mak (duncan@ximian.com)
7 // (C) 2003 Duncan Mak, Ximian Inc.
11 using System.Globalization;
12 using System.Security.Permissions;
14 namespace System.Security.Policy {
16 public sealed class StrongNameMembershipCondition
17 : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable, IConstantMembershipCondition
19 StrongNamePublicKeyBlob blob;
23 public StrongNameMembershipCondition (StrongNamePublicKeyBlob blob, string name, Version version)
26 throw new ArgumentNullException ("blob");
30 this.version = version;
33 // for PolicyLevel (to avoid validation duplication)
34 internal StrongNameMembershipCondition (SecurityElement e)
48 public Version Version {
50 get { return version; }
52 set { version = value; }
55 public StrongNamePublicKeyBlob PublicKey {
61 throw new ArgumentNullException (
62 Locale.GetText ("The argument is null."));
68 public bool Check (Evidence evidence)
73 foreach (object o in evidence) {
74 if (o is StrongName) {
75 StrongName sn = (o as StrongName);
76 if (sn.PublicKey.Equals (blob) && (sn.Name == name) && (sn.Version.Equals (version)))
83 public IMembershipCondition Copy ()
85 return new StrongNameMembershipCondition (blob, name, version);
88 public override bool Equals (object o)
90 if (o is StrongNameMembershipCondition == false)
93 StrongNameMembershipCondition snmc = (StrongNameMembershipCondition) o;
94 return (snmc.Name == Name && snmc.Version == Version && snmc.PublicKey == PublicKey);
98 public override int GetHashCode ()
100 return blob.GetHashCode ();
103 public void FromXml (SecurityElement e)
108 public void FromXml (SecurityElement e, PolicyLevel level)
111 throw new ArgumentNullException ("e");
113 if (e.Attribute ("class").IndexOf (GetType ().Name) < 0)
114 throw new ArgumentException (Locale.GetText ("Invalid class"));
116 if (e.Attribute ("version") != "1")
117 throw new ArgumentException (Locale.GetText ("Invalid version"));
119 blob = StrongNamePublicKeyBlob.FromString (e.Attribute ("PublicKeyBlob"));
120 name = e.Attribute ("Name");
121 string v = (string) e.Attribute ("AssemblyVersion");
123 version = new Version ();
125 version = new Version (v);
128 public override string ToString ()
130 return String.Format ( "Strong Name - {0} name = {1} version {2}",
131 blob, name, version);
134 public SecurityElement ToXml ()
139 public SecurityElement ToXml (PolicyLevel level)
141 SecurityElement element = new SecurityElement ("IMembershipCondition");
142 element.AddAttribute ("class", this.GetType ().AssemblyQualifiedName);
143 element.AddAttribute ("version", "1");
145 element.AddAttribute ("PublicKeyBlob", blob.ToString ());
146 element.AddAttribute ("Name", name);
147 string v = version.ToString ();
149 element.AddAttribute ("AssemblyVersion", version.ToString ());