title: Sign PDF with iTextSharp 5.3.3 and USB token
body: <p>I'm new to iTextSharp (and StackOverFlow). I'm trying to sign a PDF in C# using external USB token. I try using the follow code I've digged from the internet.</p>
  
  <pre><code>Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
  
  //Get Sertifiacte
  X509Certificate2 certClient = null;
  X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser);
  st.Open(OpenFlags.MaxAllowed);
  X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Please choose certificate:", "", X509SelectionFlag.SingleSelection);
  if (collection.Count &gt; 0){
     certClient = collection[0];
  }
  st.Close();
  //Get Cert Chain
  IList&lt;Org.BouncyCastle.X509.X509Certificate&gt; chain = new List&lt;Org.BouncyCastle.X509.X509Certificate&gt;();
  X509Chain x509chain = new X509Chain();
  x509chain.Build(certClient );
  foreach (X509ChainElement x509ChainElement in x509chain.ChainElements){
      chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate));
  }
  
  PdfReader reader = new PdfReader(sourceDocument);
  FileStream resStream = new FileStream(resultDocument, FileMode.Create, FileAccess.ReadWrite);
  
  PdfStamper stamper = PdfStamper.CreateSignature(reader, resStream , '\0', null, true);
  
  PdfSignatureAppearance appearance = stamper.SignatureAppearance;
  appearance.Reason = reason;
  appearance.Location = location;
  appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60), 1, "Signed");
  
  X509Certificate2Signature es = new X509Certificate2Signature(certClient, "SHA-1");
  MakeSignature.SignDetached(appearance, es, chain, null, null, null, 0, CryptoStandard.CMS);
  </code></pre>
  
  <p>The problem is that I receive an exception:</p>
  
  <pre class="lang-none prettyprint-override"><code>System.Security.Cryptography.CryptographicException was unhandled
    Message=Invalid type specified.
  
    Source=mscorlib
    StackTrace:
         at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
         at System.Security.Cryptography.Utils._GetKeyParameter(SafeKeyHandle hKey, UInt32 paramID)
         at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle&amp; safeProvHandle, SafeKeyHandle&amp; safeKeyHandle)
         at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
         at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
         at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
         at iTextSharp.text.pdf.security.X509Certificate2Signature..ctor(X509Certificate2 certificate, String hashAlgorithm)
         at WindowsFormsApplication1.PDFSignerHelper.signPdfFile(String sourceDocument, String resultDocument, X509Certificate2 certClient, String reason, String location)
    InnerException: 
  </code></pre>