MS.StrongNameNativeNativeMethods.cs

    1  using System;
   2  using System.Runtime.InteropServices;
   3  
   4  namespace MS.StrongName.Native
   5  {
   6       /// <summary>
   7       ///      P/Invoke declarations for strong name APIs
   8       /// </summary>
   9      internal static class NativeMethods
  10      {
  11           /// <summary>
  12           ///      Return the last error
  13           /// </summary>
  14           /// <returns>error information for the last strong name call</returns>
  15          [DllImport("mscoree.dll")]
  16          public extern static int StrongNameErrorInfo();
  17  
  18           /// <summary>
  19           ///      Free the buffer allocated by strong name functions
  20           /// </summary>
  21           /// <param name="pbMemory">address of memory to free</param>
  22          [DllImport("mscoree.dll")]
  23          public extern static void StrongNameFreeBuffer(IntPtr pbMemory);
  24  
  25           /// <summary>
  26           ///      Retrieve the public portion of a key pair. 
  27           /// </summary>
  28           /// <param name="wszKeyContainer">key container to extract from, null to create a temporary container</param>
  29           /// <param name="pbKeyBlob">key blob to extract from, null to extract from a container</param>
  30           /// <param name="cbKeyBlob">size in bytes of <paramref name="pbKeyBlob"/></param>
  31           /// <param name="ppbPublicKeyBlob"> [out]public key blob</param>
  32           /// <param name="pcbPublicKeyBlob"> [out]size of <paramref name="pcbPublicKeyBlob"/></param>
  33           /// <returns>true on success, false on error</returns>
  34          [DllImport("mscoree.dll")]
  35          public extern static bool StrongNameGetPublicKey(
  36                  [MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
  37                  [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)]byte[] pbKeyBlob,
  38                  [MarshalAs(UnmanagedType.U4)]int cbKeyBlob,
  39                  [Out]out IntPtr ppbPublicKeyBlob,
  40                  [Out, MarshalAs(UnmanagedType.U4)]out int pcbPublicKeyBlob);
  41  
  42           /// <summary>
  43           ///      Delete a key pair from a key container
  44           /// </summary>
  45           /// <param name="wszKeyContainer">key container name</param>
  46           /// <returns>true on success, false on failure</returns>
  47          [DllImport("mscoree.dll")]
  48          public extern static bool StrongNameKeyDelete(
  49                  [MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer);
  50  
  51           /// <summary>
  52           ///      Generate a new key pair with the specified key size for strong name use
  53           /// </summary>
  54           /// <param name="wszKeyContainer">desired key container name</param>
  55           /// <param name="dwFlags">flags</param>
  56           /// <param name="dwKeySize">desired key size</param>
  57           /// <param name="ppbKeyBlob"> [out] generated public / private key blob</param>
  58           /// <param name="pcbKeyBlob"> [out] size of the generated blob</param>
  59           /// <returns>true if the key was generated, false if there was an error</returns>
  60          [DllImport("mscoree.dll")]
  61          public extern static bool StrongNameKeyGenEx(
  62                  [MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
  63                  StrongNameKeyGenFlags dwFlags,
  64                  int dwKeySize,
  65                  [Out]out IntPtr ppbKeyBlob,
  66                  [Out]out long pcbKeyBlob);
  67  
  68           /// <summary>
  69           ///      Import a key pair into a key container
  70           /// </summary>
  71           /// <param name="wszKeyContainer">desired key container name</param>
  72           /// <param name="pbKeyBlob">public/private key blob</param>
  73           /// <param name="cbKeyBlob">number of bytes in <paramref name="pbKeyBlob"/></param>
  74           /// <returns>true on success, false on error</returns>
  75          [DllImport("mscoree.dll")]
  76          public extern static bool StrongNameKeyInstall(
  77                  [MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
  78                  [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)]byte[]pbKeyBlob,
  79                  int cbKeyBlob);
  80  
  81           /// <summary>
  82           ///      Verify a strong name/manifest against a public key blob
  83           /// </summary>
  84           /// <param name="wszFilePath">valid path to the PE file for the assembly</param>
  85           /// <param name="fForceVerification">verify even if the settings in the registry disable it</param>
  86           /// <param name="pfWasVerified"> [out] set to false if verify succeeded due to registry settings</param>
  87           /// <returns>true if the assembly verified, false otherwise</returns>
  88          [DllImport("mscoree.dll")]
  89          public static extern bool StrongNameSignatureVerificationEx(
  90                  [MarshalAs(UnmanagedType.LPWStr)]string wszFilePath,
  91                  bool fForceVerification, 
  92                  ref bool pfWasVerified);
  93  
  94           /// <summary>
  95           ///      Create a strong name token from an assembly file, and addtionally
  96           ///      return the full public key blob
  97           /// </summary>
  98           /// <param name="wszFilePath">path to the PE file for the assembly</param>
  99           /// <param name="ppbStrongNameToken"> [out]strong name token</param>
 100           /// <param name="pcbStrongNameToken"> [out]length of <paramref name="ppbStrongNameToken"/></param>
 101           /// <param name="ppbPublicKeyBlob"> [out]public key blob</param>
 102           /// <param name="pcbPublicKeyBlob"> [out]length of <paramref name="ppbPublicKeyBlob"/></param>
 103           /// <returns>true on success, false on error</returns>
 104          [DllImport("mscoree.dll")]
 105          public extern static bool StrongNameTokenFromAssemblyEx(
 106                  [MarshalAs(UnmanagedType.LPWStr)]string wszFilePath,
 107                  [Out]out IntPtr ppbStrongNameToken,
 108                  [Out, MarshalAs(UnmanagedType.U4)]out int pcbStrongNameToken,
 109                  [Out]out IntPtr ppbPublicKeyBlob,
 110                  [Out, MarshalAs(UnmanagedType.U4)]out int pcbPublicKeyBlob);
 111  
 112           /// <summary>
 113           ///      Create a strong name token from a public key blob
 114           /// </summary>
 115           /// <param name="pbPublicKeyBlob">key blob to generate the token for</param>
 116           /// <param name="cbPublicKeyBlob">number of bytes in <paramref name="pbPublicKeyBlob"/></param>
 117           /// <param name="ppbStrongNameToken"> [out]public key token</param>
 118           /// <param name="pcbStrongNameToken"> [out]number of bytes in the token</param>
 119           /// <returns>true on success, false on error</returns>
 120          [DllImport("mscoree.dll")]
 121          public extern static bool StrongNameTokenFromPublicKey(
 122                  [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]byte[] pbPublicKeyBlob,
 123                  int cbPublicKeyBlob,
 124                  [Out]out IntPtr ppbStrongNameToken,
 125                  [Out, MarshalAs(UnmanagedType.U4)]out int pcbStrongNameToken);
 126      }
 127  }