2002-12-16 Sebastien Pouliot <spouliot@videotron.ca>
authorSebastien Pouliot <sebastien@ximian.com>
Tue, 17 Dec 2002 03:58:11 +0000 (03:58 -0000)
committerSebastien Pouliot <sebastien@ximian.com>
Tue, 17 Dec 2002 03:58:11 +0000 (03:58 -0000)
* StrongNamePublicKeyBlob.cs: New. Implemented.
* StrongNameIdentityPermission.cs. New. Stubbed (required
for StrongName class).

svn path=/trunk/mcs/; revision=9707

mcs/class/corlib/System.Security.Permissions/ChangeLog
mcs/class/corlib/System.Security.Permissions/StrongNameIdentityPermission.cs [new file with mode: 0644]
mcs/class/corlib/System.Security.Permissions/StrongNamePublicKeyBlob.cs [new file with mode: 0644]

index 7ed0cab74523f02eefad37abb10f04edc44a8519..25e3e1e319864df3e08e5e64c1ffdb983f7b7081 100644 (file)
@@ -1,3 +1,9 @@
+2002-12-16  Sebastien Pouliot  <spouliot@videotron.ca>
+
+       * StrongNamePublicKeyBlob.cs: New. Implemented.
+       * StrongNameIdentityPermission.cs. New. Stubbed (required
+       for StrongName class).
+
 2002-12-15  Sebastien Pouliot  <spouliot@videotron.ca>
 
        * PublisherIdentityPermission.cs. New. Stubbed (required
diff --git a/mcs/class/corlib/System.Security.Permissions/StrongNameIdentityPermission.cs b/mcs/class/corlib/System.Security.Permissions/StrongNameIdentityPermission.cs
new file mode 100644 (file)
index 0000000..9df8842
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// StrongNameIdentityPermission.cs: Strong Name Identity Permission
+//
+// Author:
+//     Sebastien Pouliot (spouliot@motus.com)
+//
+// (C) 2002 Motus Technologies Inc. (http://www.motus.com)
+//
+
+using System;
+
+namespace System.Security.Permissions {
+
+public sealed class StrongNameIdentityPermission : CodeAccessPermission {
+
+       private StrongNamePublicKeyBlob publickey;
+       private string name;
+       private Version version;
+
+       public StrongNameIdentityPermission (PermissionState state) 
+       {
+               if (state == PermissionState.Unrestricted)
+                       throw new ArgumentException ("state");
+       }
+
+       public StrongNameIdentityPermission (StrongNamePublicKeyBlob blob, string name, Version version) 
+       {
+               if (blob == null)
+                       throw new ArgumentNullException ("blob");
+               if (name == null)
+                       throw new ArgumentNullException ("name");
+               if (version == null)
+                       throw new ArgumentNullException ("version");
+
+               publickey = blob;
+               this.name = name;
+               this.version = version;
+       }
+
+       ~StrongNameIdentityPermission () 
+       {
+       }
+
+       public string Name { 
+               get { return name; }
+               set { name = value; }
+       }
+
+       public StrongNamePublicKeyBlob PublicKey { 
+               get { return publickey; }
+               set {
+                       if (value == null)
+                               throw new ArgumentNullException ("value");
+                       publickey = value;
+               }
+       }
+
+       public Version Version { 
+               get { return version; }
+               set { version = value; }
+       }
+
+       public override IPermission Copy () 
+       {
+               return new StrongNameIdentityPermission (publickey, name, version);
+       }
+
+       [MonoTODO]
+       public override void FromXml (SecurityElement e) 
+       {
+               if (e == null)
+                       throw new ArgumentNullException ("e");
+               throw new NotImplementedException ();
+       }
+
+       [MonoTODO]
+       public override IPermission Intersect (IPermission target) 
+       {
+               throw new NotImplementedException ();
+       }
+
+       [MonoTODO]
+       public override bool IsSubsetOf (IPermission target) 
+       {
+               throw new NotImplementedException ();
+       }
+
+       [MonoTODO]
+       public override SecurityElement ToXml () 
+       {
+               throw new NotImplementedException ();
+       }
+
+       [MonoTODO]
+       public override IPermission Union (IPermission target) 
+       {
+               throw new NotImplementedException ();
+       }
+} 
+
+}
diff --git a/mcs/class/corlib/System.Security.Permissions/StrongNamePublicKeyBlob.cs b/mcs/class/corlib/System.Security.Permissions/StrongNamePublicKeyBlob.cs
new file mode 100644 (file)
index 0000000..5378208
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// StrongNamePublicKeyBlob.cs: Strong Name Public Key Blob
+//
+// Author:
+//     Sebastien Pouliot (spouliot@motus.com)
+//
+// (C) 2002 Motus Technologies Inc. (http://www.motus.com)
+//
+
+using System;
+using System.Text;
+
+namespace System.Security.Permissions {
+
+[Serializable]
+public sealed class StrongNamePublicKeyBlob {
+
+       internal byte[] pubkey;
+
+       public StrongNamePublicKeyBlob (byte[] publicKey) 
+       {
+               if (publicKey == null)
+                       throw new ArgumentNullException ("publicKey");
+               // Note: No sanity check ?
+               pubkey = publicKey;
+       }
+
+       public override bool Equals (object obj) 
+       {
+               bool result = (obj is StrongNamePublicKeyBlob);
+               if (result) {
+                       StrongNamePublicKeyBlob snpkb = (obj as StrongNamePublicKeyBlob);
+                       result = (pubkey.Length == snpkb.pubkey.Length);
+                       if (result) {
+                               for (int i = 0; i < pubkey.Length; i++) {
+                                       if (pubkey[i] != snpkb.pubkey[i])
+                                               return false;
+                               }
+                       }
+               }
+               return result;
+       }
+
+       // LAMESPEC: non standard get hash code - (a) Why ??? (b) How ???
+       // It seems to be the first four bytes of the public key data
+       // which seems like non sense as all valid public key will have the same header ?
+       public override int GetHashCode () 
+       {
+               int hash = 0;
+               int i = 0;
+               // a BAD public key can be less than 4 bytes
+               int n = Math.Min (pubkey.Length, 4);
+               while (i < n)
+                       hash = (hash << 8) + pubkey [i++];
+               return hash;
+       }
+
+       public override string ToString () 
+       {
+               StringBuilder sb = new StringBuilder ();
+               for (int i=0; i < pubkey.Length; i++)
+                       sb.Append (pubkey[i].ToString ("X2"));
+               return sb.ToString ();
+       }
+}
+
+}