2 // Cert2Spc.cs: cert2spc 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
;
15 using Mono
.Security
.Authenticode
;
16 using Mono
.Security
.X509
;
18 [assembly
: AssemblyTitle("Mono Cert2Spc")]
19 [assembly
: AssemblyDescription("Transform a set of X.509 certificates and CRLs into an Authenticode(TM) \"Software Publisher Certificate\"")]
21 namespace Mono
.Tools
{
25 static private string error
;
27 static private void Header ()
29 Console
.WriteLine (new AssemblyInfo ().ToString ());
32 static private void Help ()
34 Console
.WriteLine ("Usage: cert2spc certificate|crl [certificate|crl] [...] outputfile.spc{0}", Environment
.NewLine
);
37 // until we have real CRL support
38 static byte[] GetFile (string filename
)
41 using (FileStream fs
= File
.Open (filename
, FileMode
.Open
, FileAccess
.Read
, FileShare
.Read
)) {
42 data
= new byte [fs
.Length
];
43 fs
.Read (data
, 0, data
.Length
);
49 static int Process (string[] args
)
51 int nargs
= args
.Length
- 1;
53 error
= "At least one input and output files must be specified";
57 string output
= args
[nargs
];
58 SoftwarePublisherCertificate spc
= new SoftwarePublisherCertificate ();
60 for (int i
=0; i
< args
.Length
- 1; i
++) {
61 switch (Path
.GetExtension (args
[i
]).ToLower ()) {
64 spc
.Certificates
.Add (new X509Certificate (GetFile (args
[i
])));
67 spc
.Crls
.Add (GetFile (args
[i
]));
70 error
= "Unknown file extension : " + args
[i
];
75 using (FileStream fs
= File
.Open (output
, FileMode
.Create
, FileAccess
.Write
)) {
76 byte[] data
= spc
.GetBytes ();
77 fs
.Write (data
, 0, data
.Length
);
84 static int Main (string[] args
)
89 result
= Process (args
);
92 Console
.WriteLine ("Success");
94 Console
.WriteLine ("Error: {0}{1}", error
, Environment
.NewLine
);
99 Console
.WriteLine ("Error: " + e
.ToString ());