public SecurityDeclaration FromByteArray(SecurityAction action, byte [] declaration, bool resolve)
{
SecurityDeclaration dec = new SecurityDeclaration(action);
#if !CF_1_0 && !CF_2_0
dec.PermissionSet = new PermissionSet(SSP.PermissionState.None);
if (declaration == null || declaration.Length == 0)
{
return(dec);
}
if (declaration[0] == 0x2e)
{
// new binary format introduced in 2.0
int pos = 1;
int start;
int numattr = Utilities.ReadCompressedInteger(declaration, pos, out start);
if (numattr == 0)
{
return(dec);
}
BinaryReader br = new BinaryReader(new MemoryStream(declaration));
for (int i = 0; i < numattr; i++)
{
pos = start;
SSP.SecurityAttribute sa = CreateSecurityAttribute(action, br, declaration, pos, out start, resolve);
if (sa == null)
{
dec.Resolved = false;
dec.Blob = declaration;
return(dec);
}
IPermission p = sa.CreatePermission();
dec.PermissionSet.AddPermission(p);
}
}
else
{
Parser.LoadXml(Encoding.Unicode.GetString(declaration));
try {
dec.PermissionSet.FromXml(Parser.ToXml());
dec.PermissionSet.ToXml();
} catch {
dec.Resolved = false;
dec.Blob = declaration;
}
}
#endif
return(dec);
}