2 // SecUtil.cs: secutil clone tool
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
8 // (C) 2004 Novell (http://www.novell.com)
13 using System.Reflection;
14 using System.Security.Cryptography.X509Certificates;
16 [assembly: AssemblyTitle("Mono SecUtil")]
17 [assembly: AssemblyDescription("Extract strongname and X509 certificates from assemblies.")]
19 namespace Mono.Tools {
23 static private bool hexDisplay;
24 static private bool vbMode;
25 static private string error;
27 static private void WriteArray (byte[] array)
29 StringBuilder sb = new StringBuilder ();
32 for (int i=0; i < array.Length; i++)
33 sb.Append (array [i].ToString ("X2"));
36 sb.Append ((vbMode ? "( " : "{ "));
37 for (int i=0; i < array.Length; i++) {
38 sb.Append (array [i]);
39 if (i != array.Length-1)
42 sb.Append ((vbMode ? " )" : " }"));
44 Console.WriteLine (sb.ToString ());
47 static private void StrongName (string fileName)
49 AssemblyName an = AssemblyName.GetAssemblyName (fileName);
50 Console.WriteLine ("PublicKey =");
51 WriteArray (an.GetPublicKey ());
52 Console.WriteLine ("Name =");
53 Console.WriteLine (an.Name);
54 Console.WriteLine ("Version =");
55 Console.WriteLine (an.Version.ToString ());
58 static private void Certificate (string fileName)
60 X509Certificate x509 = X509Certificate.CreateFromSignedFile (fileName);
62 error = "Error: Specified file isn't signed";
64 Console.WriteLine ("X.509 Certificate =");
65 WriteArray (x509.GetRawCertData ());
69 static private void Header ()
71 Console.WriteLine (new AssemblyInfo ().ToString ());
74 static private void Help ()
76 Console.WriteLine ("Usage: secutil [options] [filename]{0}", Environment.NewLine);
77 Console.WriteLine ("secutil -s assembly");
78 Console.WriteLine ("secutil -strongname assembly");
79 Console.WriteLine ("\tShow strongname informations about the assembly{0}", Environment.NewLine);
80 Console.WriteLine ("secutil -x assembly");
81 Console.WriteLine ("secutil -x509certificate assembly");
82 Console.WriteLine ("\tShow the X509 Authenticode certificate for the assembly{0}", Environment.NewLine);
83 Console.WriteLine ("secutil -hex");
84 Console.WriteLine ("\tShow data in hexadecimal{0}", Environment.NewLine);
85 Console.WriteLine ("secutil -a");
86 Console.WriteLine ("secutil -array");
87 Console.WriteLine ("\tShow data in a decimal array (default){0}", Environment.NewLine);
88 Console.WriteLine ("secutil -v");
89 Console.WriteLine ("secutil -vbmode");
90 Console.WriteLine ("\tShow data in a VisualBasic friendly format{0}", Environment.NewLine);
91 Console.WriteLine ("secutil -c");
92 Console.WriteLine ("secutil -cmode");
93 Console.WriteLine ("\tShow data in a C/C++/C# friendly format (default){0}", Environment.NewLine);
94 Console.WriteLine ("secutil -h");
95 Console.WriteLine ("secutil -help");
96 Console.WriteLine ("secutil -?");
97 Console.WriteLine ("secutil /?");
98 Console.WriteLine ("\tShow help about this tool{0}", Environment.NewLine);
102 static void Main (string[] args)
107 string fileName = null;
112 for (int i=0; i < args.Length; i++) {
117 fileName = args[i+1];
120 case "-x509certificate":
122 fileName = args[i+1];
151 StrongName (fileName);
153 Certificate (fileName);
157 Console.WriteLine ((error == null) ? "Success" : error);
159 catch (Exception e) {
160 Console.WriteLine ("Error: " + e.ToString ());