@@ -192,6 +192,77 @@ public virtual void SignaturesOnRotatedPages() {
192192 NUnit . Framework . Assert . AreEqual ( "" , assertionResults . ToString ( ) ) ;
193193 }
194194
195+ [ NUnit . Framework . Test ]
196+ public virtual void SignatureFieldNotMergedWithWidgetTest ( ) {
197+ using ( PdfDocument outputDoc = new PdfDocument ( new PdfReader ( sourceFolder + "signatureFieldNotMergedWithWidget.pdf"
198+ ) ) ) {
199+ SignatureUtil sigUtil = new SignatureUtil ( outputDoc ) ;
200+ PdfPKCS7 signatureData = sigUtil . ReadSignatureData ( "Signature1" ) ;
201+ NUnit . Framework . Assert . IsTrue ( signatureData . VerifySignatureIntegrityAndAuthenticity ( ) ) ;
202+ }
203+ }
204+
205+ [ NUnit . Framework . Test ]
206+ public virtual void SignExistingNotMergedFieldNotReusedAPTest ( ) {
207+ // TODO: DEVSIX-5162 (the signature is expected to have auto-generated appearance, but now it's empty)
208+ // Field is not merged with widget and has /P key
209+ String src = sourceFolder + "emptyFieldNotMerged.pdf" ;
210+ String fileName = "signExistingNotMergedFieldNotReusedAP.pdf" ;
211+ String dest = destinationFolder + fileName ;
212+ PdfReader reader = new PdfReader ( src ) ;
213+ PdfSigner signer = new PdfSigner ( reader , new FileStream ( dest , FileMode . Create ) , new StampingProperties ( ) ) ;
214+ signer . SetCertificationLevel ( PdfSigner . NOT_CERTIFIED ) ;
215+ signer . GetSignatureAppearance ( ) . SetLayer2Text ( "Verified and signed by me." ) . SetReason ( "Test 1" ) . SetLocation
216+ ( "TestCity" ) . SetReuseAppearance ( false ) ;
217+ signer . SetFieldName ( "Signature1" ) ;
218+ IExternalSignature pks = new PrivateKeySignature ( pk , DigestAlgorithms . SHA256 ) ;
219+ signer . SignDetached ( pks , chain , null , null , null , 0 , PdfSigner . CryptoStandard . CADES ) ;
220+ NUnit . Framework . Assert . IsNull ( new CompareTool ( ) . CompareVisually ( dest , sourceFolder + "cmp_" + fileName , destinationFolder
221+ , "diff_" ) ) ;
222+ }
223+
224+ [ NUnit . Framework . Test ]
225+ public virtual void SignExistingNotMergedFieldReusedAPTest ( ) {
226+ // TODO: DEVSIX-5162 (signature appearance expected to be updated (reused appearance will be used as a background))
227+ // Field is not merged with widget and has /P key
228+ String src = sourceFolder + "emptyFieldNotMerged.pdf" ;
229+ String fileName = "signExistingNotMergedFieldReusedAP.pdf" ;
230+ String dest = destinationFolder + fileName ;
231+ PdfReader reader = new PdfReader ( src ) ;
232+ PdfSigner signer = new PdfSigner ( reader , new FileStream ( dest , FileMode . Create ) , new StampingProperties ( ) ) ;
233+ signer . SetCertificationLevel ( PdfSigner . NOT_CERTIFIED ) ;
234+ signer . GetSignatureAppearance ( ) . SetLayer2Text ( "Verified and signed by me." ) . SetReason ( "Test 1" ) . SetLocation
235+ ( "TestCity" ) . SetReuseAppearance ( true ) ;
236+ signer . SetFieldName ( "Signature1" ) ;
237+ IExternalSignature pks = new PrivateKeySignature ( pk , DigestAlgorithms . SHA256 ) ;
238+ signer . SignDetached ( pks , chain , null , null , null , 0 , PdfSigner . CryptoStandard . CADES ) ;
239+ NUnit . Framework . Assert . IsNull ( new CompareTool ( ) . CompareVisually ( dest , sourceFolder + "cmp_" + fileName , destinationFolder
240+ , "diff_" ) ) ;
241+ }
242+
243+ [ NUnit . Framework . Test ]
244+ public virtual void SignExistingNotMergedFieldReusedAPEntryNDicTest ( ) {
245+ // TODO: DEVSIX-5162 (remove expected exception after fix)
246+ // Field is not merged with widget and has /P key
247+ String src = sourceFolder + "emptyFieldNotMergedEntryNDict.pdf" ;
248+ String fileName = "signExistingNotMergedFieldReusedAPEntryNDic.pdf" ;
249+ String dest = destinationFolder + fileName ;
250+ PdfReader reader = new PdfReader ( src ) ;
251+ PdfSigner signer = new PdfSigner ( reader , new FileStream ( dest , FileMode . Create ) , new StampingProperties ( ) ) ;
252+ signer . SetCertificationLevel ( PdfSigner . NOT_CERTIFIED ) ;
253+ NUnit . Framework . Assert . That ( ( ) => {
254+ signer . GetSignatureAppearance ( ) . SetLayer2Text ( "Verified and signed by me." ) . SetReason ( "Test 1" ) . SetLocation
255+ ( "TestCity" ) . SetReuseAppearance ( true ) ;
256+ signer . SetFieldName ( "Signature1" ) ;
257+ IExternalSignature pks = new PrivateKeySignature ( pk , DigestAlgorithms . SHA256 ) ;
258+ signer . SignDetached ( pks , chain , null , null , null , 0 , PdfSigner . CryptoStandard . CADES ) ;
259+ NUnit . Framework . Assert . IsNull ( new CompareTool ( ) . CompareVisually ( dest , sourceFolder + "cmp_" + fileName , destinationFolder
260+ , "diff_" ) ) ;
261+ }
262+ , NUnit . Framework . Throws . InstanceOf < NullReferenceException > ( ) )
263+ ;
264+ }
265+
195266 private void TestSignatureOnRotatedPage ( int pageNum , PdfSignatureAppearance . RenderingMode renderingMode , StringBuilder
196267 assertionResults ) {
197268 String fileName = "signaturesOnRotatedPages" + pageNum + "_mode_" + renderingMode . ToString ( ) + ".pdf" ;
0 commit comments