@@ -192,6 +192,77 @@ public virtual void SignaturesOnRotatedPages() {
192
192
NUnit . Framework . Assert . AreEqual ( "" , assertionResults . ToString ( ) ) ;
193
193
}
194
194
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
+
195
266
private void TestSignatureOnRotatedPage ( int pageNum , PdfSignatureAppearance . RenderingMode renderingMode , StringBuilder
196
267
assertionResults ) {
197
268
String fileName = "signaturesOnRotatedPages" + pageNum + "_mode_" + renderingMode . ToString ( ) + ".pdf" ;
0 commit comments