public byte[] Sign(byte[] pdf, SignInformation signInfo) { PdfReader document = new PdfReader(pdf); MemoryStream stream = new MemoryStream(); PdfStamper pdfStamper = PdfStamper.CreateSignature(document, stream, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; signatureAppearance.Reason = signInfo.reason; //Reason signatureAppearance.Location = signInfo.location; //Location signatureAppearance.CertificationLevel = signInfo.certifyLevel; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Rendering mode IExternalSignature signature = new RSAProviderPrivateKey(signInfo.cert, signInfo.hashAlgorithm); try { //Do signing MakeSignature.SignDetached(signatureAppearance, signature, signInfo.chain, null, null, null, 0, signInfo.sigType); } catch (Exception e) { throw new Exception("Cannot sign the PDF file.", e); } return(stream.ToArray()); }
public byte[] SignWithLTVEnable(byte[] pdf, SignInformation signInfo) { PdfReader document = new PdfReader(pdf); MemoryStream stream = new MemoryStream(); //PdfStamper pdfStamper = new PdfStamper(document, stream, '0'); PdfStamper pdfStamper = PdfStamper.CreateSignature(document, stream, '\0'); PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; signatureAppearance.Reason = signInfo.reason; //Reason signatureAppearance.Location = signInfo.location; //Location signatureAppearance.CertificationLevel = signInfo.certifyLevel; signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Rendering mode IExternalSignature signature = new RSAProviderPrivateKey(signInfo.cert, signInfo.hashAlgorithm); bool isTsaConnected = false; for (int retry = 0; retry < 5; retry++) { try { //int hash = tsaClient.GetHashCode(); string testString = "test"; byte[] digest; using (System.Security.Cryptography.SHA256Managed sha256 = new System.Security.Cryptography.SHA256Managed()) { digest = sha256.ComputeHash(Encoding.UTF8.GetBytes(testString)); } signInfo.tsaClient.GetTimeStampToken(digest); isTsaConnected = true; break; } catch (Exception e) { Console.WriteLine(e.StackTrace); } Console.WriteLine("retry " + (retry + 1)); } if (signInfo.tsaClient != null && signInfo.crlList != null && isTsaConnected) { try { //Do signing MakeSignature.SignDetached(signatureAppearance, signature, signInfo.chain, signInfo.crlList, null, signInfo.tsaClient, 0, signInfo.sigType); } catch (Exception e) { throw new Exception("Cannot sign the PDF file.", e); } } return(stream.ToArray()); }