--- /dev/null
+//
+// 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 ();
+ }
+}
+
+}
--- /dev/null
+//
+// 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 ();
+ }
+}
+
+}