2009-12-02 Jb Evain <jbevain@novell.com>
[mono.git] / mcs / class / corlib / System.Security.Policy / StrongName.cs
1 //
2 // StrongName.cs: Strong Name
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 using System.Security.Permissions;
31 using System.Runtime.InteropServices;
32
33 namespace System.Security.Policy {
34
35 [Serializable]
36 [ComVisible (true)]
37 public sealed class StrongName : IIdentityPermissionFactory, IBuiltInEvidence {
38
39         private StrongNamePublicKeyBlob publickey;
40         private string name;
41         private Version version;
42
43         public StrongName (StrongNamePublicKeyBlob blob, string name, Version version) 
44         {
45                 if (blob == null)
46                         throw new ArgumentNullException ("blob");
47                 if (name == null)
48                         throw new ArgumentNullException ("name");
49                 if (version == null)
50                         throw new ArgumentNullException ("version");
51                 if (name.Length == 0)
52                         throw new ArgumentException (Locale.GetText ("Empty"), "name");
53                 publickey = blob;
54                 this.name = name;
55                 this.version = version;
56         }
57
58         public string Name { 
59                 get { return name; }
60         }
61
62         public StrongNamePublicKeyBlob PublicKey { 
63                 get { return publickey; }
64         }
65
66         public Version Version { 
67                 get { return version; }
68         }
69
70         public object Copy () 
71         {
72                 return (object) new StrongName (publickey, name, version);
73         }
74
75         public IPermission CreateIdentityPermission (Evidence evidence) 
76         {
77                 return new StrongNameIdentityPermission (publickey, name, version);
78         }
79
80         public override bool Equals (object o) 
81         {
82                 StrongName sn = (o as StrongName);
83                 if (sn == null)
84                         return false;
85                 if (name != sn.Name)
86                         return false;
87                 if (!Version.Equals (sn.Version))
88                         return false;
89                 return PublicKey.Equals (sn.PublicKey);
90         }
91
92         public override int GetHashCode () 
93         {
94                 return publickey.GetHashCode ();
95         }
96
97         public override string ToString () 
98         {
99                 SecurityElement element = new SecurityElement (typeof (System.Security.Policy.StrongName).Name);
100                 element.AddAttribute ("version", "1");
101                 element.AddAttribute ("Key", publickey.ToString ());
102                 element.AddAttribute ("Name", name);
103                 element.AddAttribute ("Version", version.ToString ());
104                 return element.ToString ();
105         }
106
107         // interface IBuiltInEvidence
108
109         int IBuiltInEvidence.GetRequiredSize (bool verbose) 
110         {
111                 return (verbose ? 5 : 1) + name.Length;
112         }
113
114         [MonoTODO ("IBuiltInEvidence")]
115         int IBuiltInEvidence.InitFromBuffer (char [] buffer, int position) 
116         {
117                 return 0;
118         }
119
120         [MonoTODO ("IBuiltInEvidence")]
121         int IBuiltInEvidence.OutputToBuffer (char [] buffer, int position, bool verbose) 
122         {
123                 return 0;
124         }
125 }
126
127 }