2 // Mono.ILASM.DeclSecurity
5 // Ankit Jain <JAnkit@novell.com>
7 // (C) 2005 Ankit Jain, All rights reserved
12 using System.Collections;
13 using System.Security;
14 using System.Security.Permissions;
16 namespace Mono.ILASM {
18 public interface IDeclSecurityTarget {
19 void AddPermission (PEAPI.SecurityAction sec_action, IPermission iper);
20 void AddPermissionSet (PEAPI.SecurityAction sec_action, PermissionSet perm_set);
23 public class DeclSecurity {
25 private Hashtable permissionset_table;
27 public DeclSecurity ()
29 permissionset_table = new Hashtable ();
32 public void AddPermission (PEAPI.SecurityAction sec_action, IPermission perm)
34 PermissionSet ps = (PermissionSet) permissionset_table [sec_action];
36 ps = new PermissionSet (PermissionState.None);
37 permissionset_table [sec_action] = ps;
40 ps.AddPermission (perm);
43 public void AddPermissionSet (PEAPI.SecurityAction sec_action, PermissionSet perm_set)
45 PermissionSet ps = (PermissionSet) permissionset_table [sec_action];
47 permissionset_table [sec_action] = perm_set;
51 foreach (IPermission iper in perm_set)
52 ps.AddPermission (iper);
55 public void AddTo (CodeGen code_gen, PEAPI.MetaDataElement elem)
57 System.Text.UnicodeEncoding ue = new System.Text.UnicodeEncoding ();
58 foreach (PEAPI.SecurityAction sec_action in permissionset_table.Keys)
59 code_gen.PEFile.AddDeclSecurity (sec_action,
60 ue.GetBytes (((PermissionSet) permissionset_table [sec_action]).ToXml ().ToString ()),