1  using System;
2  using System.Diagnostics;
3  using System.Globalization;
4  using System.IO;
5  using MS.StrongName.Native;
6  
7  namespace MS.StrongName
8  {
9      /// <summary>
10      ///     Class that exposes the managed StrongName API for dealing with signatures
11      /// </summary>
12      public static class Signatures
13      {
14          /// <summary>
15          ///     Verify an assembly's strong name
16          /// </summary>
17          /// <exception cref="ArgumentNullException">
18          ///     If <paramref name="signedAssembly"/> is null
19          /// </exception>
20          /// <exception cref="ArgumentException">
21          ///     If <paramref name="signedAssembly"/> is empty
22          /// </exception>
23          /// <exception cref="InvalidOperationException">
24          ///     If verification could not complete
25          /// </exception>
26          /// <param name="signedAssembly">assembly to verify</param>
27          /// <param name="forceVerification">true to ignore the skip verify registry </param>
28          /// <returns>result of the strong name verification</returns>
29          public static VerificationResult VerifyAssembly(string signedAssembly, bool forceVerification)
30          {
31              if(signedAssembly == null)
32                  throw new ArgumentNullException("signedAssembly");
33              if(String.IsNullOrEmpty(signedAssembly))
34                  throw new ArgumentException(Resources.InvalidAssemblyName, String.Empty);
35  
36              // make sure the assembly is there
37              if(!File.Exists(signedAssembly))
38                  throw new InvalidOperationException(String.Format(
39                              CultureInfo.CurrentCulture,
40                              Resources.NoAssembly,
41                              signedAssembly));
42  
43              // do the verification
44              bool notForced = false;
45              bool passedVerification = NativeMethods.StrongNameSignatureVerificationEx(
46                      signedAssembly,
47                      forceVerification,
48                      ref notForced);
49  
50              if(passedVerification && notForced)
51                  return VerificationResult.Verified;
52              else if(passedVerification && !notForced)
53                  return VerificationResult.DelaySigned;
54              else
55                  return VerificationResult.NotVerified;
56          }
57      }
58  }