2 // SecUtil.cs: secutil clone tool
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
12 using System.Reflection;
13 using System.Security.Cryptography.X509Certificates;
15 [assembly: AssemblyTitle("Mono SecUtil")]
16 [assembly: AssemblyDescription("Extract strongname and X509 certificates from assemblies.")]
17 [assembly: AssemblyCompany("Sébastien Pouliot, Motus Technologies")]
18 [assembly: AssemblyProduct("Open Source Tools for .NET")]
19 [assembly: AssemblyCopyright("Copyright 2002 Motus Technologies. Released under BSD license.")]
20 [assembly: AssemblyVersion("0.17.99.0")]
22 namespace Mono.Tools {
26 static private bool hexDisplay;
27 static private bool vbMode;
28 static private string error;
30 static private void WriteArray (byte[] array)
32 StringBuilder sb = new StringBuilder ();
35 for (int i=0; i < array.Length; i++)
36 sb.Append (array [i].ToString ("X2"));
39 sb.Append ((vbMode ? "( " : "{ "));
40 for (int i=0; i < array.Length; i++) {
41 sb.Append (array [i]);
42 if (i != array.Length-1)
45 sb.Append ((vbMode ? " )" : " }"));
47 Console.WriteLine (sb.ToString ());
50 static private void StrongName (string fileName)
52 AssemblyName an = AssemblyName.GetAssemblyName (fileName);
53 Console.WriteLine ("PublicKey =");
54 WriteArray (an.GetPublicKey ());
55 Console.WriteLine ("Name =");
56 Console.WriteLine (an.Name);
57 Console.WriteLine ("Version =");
58 Console.WriteLine (an.Version.ToString ());
61 static private void Certificate (string fileName)
63 X509Certificate x509 = X509Certificate.CreateFromSignedFile (fileName);
65 error = "Error: Specified file isn't signed";
67 Console.WriteLine ("X.509 Certificate =");
68 WriteArray (x509.GetRawCertData ());
72 static private void Header ()
74 Assembly a = Assembly.GetExecutingAssembly ();
75 AssemblyName an = a.GetName ();
77 object [] att = a.GetCustomAttributes (typeof (AssemblyTitleAttribute), false);
78 string title = ((att.Length > 0) ? ((AssemblyTitleAttribute) att [0]).Title : "Mono SecUtil");
80 att = a.GetCustomAttributes (typeof (AssemblyCopyrightAttribute), false);
81 string copyright = ((att.Length > 0) ? ((AssemblyCopyrightAttribute) att [0]).Copyright : "");
83 Console.WriteLine ("{0} {1}", title, an.Version.ToString ());
84 Console.WriteLine ("{0}{1}", copyright, Environment.NewLine);
87 static private void Help ()
89 Console.WriteLine ("Usage: secutil [options] [filename]{0}", Environment.NewLine);
90 Console.WriteLine ("secutil -s assembly");
91 Console.WriteLine ("secutil -strongname assembly");
92 Console.WriteLine ("\tShow strongname informations about the assembly{0}", Environment.NewLine);
93 Console.WriteLine ("secutil -x assembly");
94 Console.WriteLine ("secutil -x509certificate assembly");
95 Console.WriteLine ("\tShow the X509 Authenticode certificate for the assembly{0}", Environment.NewLine);
96 Console.WriteLine ("secutil -hex");
97 Console.WriteLine ("\tShow data in hexadecimal{0}", Environment.NewLine);
98 Console.WriteLine ("secutil -a");
99 Console.WriteLine ("secutil -array");
100 Console.WriteLine ("\tShow data in a decimal array (default){0}", Environment.NewLine);
101 Console.WriteLine ("secutil -v");
102 Console.WriteLine ("secutil -vbcode");
103 Console.WriteLine ("\tShow data in a VisualBasic friendly format{0}", Environment.NewLine);
104 Console.WriteLine ("secutil -c");
105 Console.WriteLine ("secutil -cmode");
106 Console.WriteLine ("\tShow data in a C/C++/C# friendly format (default){0}", Environment.NewLine);
107 Console.WriteLine ("secutil -h");
108 Console.WriteLine ("secutil -help");
109 Console.WriteLine ("secutil -?");
110 Console.WriteLine ("secutil /?");
111 Console.WriteLine ("\tShow help about this tool{0}", Environment.NewLine);
115 static void Main (string[] args)
120 string fileName = null;
125 for (int i=0; i < args.Length; i++) {
130 fileName = args[i+1];
133 case "-x509certificate":
135 fileName = args[i+1];
164 StrongName (fileName);
166 Certificate (fileName);
170 Console.WriteLine ((error == null) ? "Success" : error);
172 catch (Exception e) {
173 Console.WriteLine ("Error: " + e.ToString ());