Index: podofo/trunk/src/doc/PdfSignatureField.cpp
===================================================================
--- podofo/trunk/src/doc/PdfSignatureField.cpp	(revision 1960)
+++ podofo/trunk/src/doc/PdfSignatureField.cpp	(working copy)
@@ -42,19 +42,19 @@
 
 namespace PoDoFo {
 
-PdfSignatureField::PdfSignatureField( PdfPage* pPage, const PdfRect & rRect, PdfDocument* pDoc )
+PdfSignatureField::PdfSignatureField( PdfPage* pPage, const PdfRect & rRect, PdfDocument* pDoc, EPdfSignFieldSubFilter eSubFilter )
 	:PdfField(PoDoFo::ePdfField_Signature, pPage, rRect, pDoc)
 {
     m_pSignatureObj = NULL;
-    Init();
+    Init( eSubFilter );
 }
 
-PdfSignatureField::PdfSignatureField( PdfAnnotation* pWidget, PdfAcroForm* pParent, PdfDocument* pDoc, bool bInit )
+PdfSignatureField::PdfSignatureField( PdfAnnotation* pWidget, PdfAcroForm* pParent, PdfDocument* pDoc, bool bInit, EPdfSignFieldSubFilter eSubFilter )
 	:PdfField(PoDoFo::ePdfField_Signature, pWidget,  pParent, pDoc)
 {
     m_pSignatureObj = NULL;
     if( bInit )
-        Init();
+        Init( eSubFilter );
 }
 
 PdfSignatureField::PdfSignatureField( PdfAnnotation* pWidget )
@@ -81,11 +81,11 @@
     this->GetAppearanceCharacteristics( true );
 }
 
-void PdfSignatureField::Init()
+void PdfSignatureField::Init( EPdfSignFieldSubFilter eSubFilter )
 {
     m_pSignatureObj = NULL;
 
-    EnsureSignatureObject ();
+    EnsureSignatureObject ( eSubFilter );
 }
 
 void PdfSignatureField::SetSignatureReason(const PdfString & rsText)
@@ -241,7 +241,7 @@
     return m_pSignatureObj;
 }
 
-void PdfSignatureField::EnsureSignatureObject( void )
+void PdfSignatureField::EnsureSignatureObject( EPdfSignFieldSubFilter eSubFilter )
 {
     if( m_pSignatureObj )
         return;
@@ -256,7 +256,24 @@
     PdfDictionary &dict = m_pSignatureObj->GetDictionary();
 
     dict.AddKey( PdfName::KeyFilter, PdfName( "Adobe.PPKLite" ) );
-    dict.AddKey( "SubFilter", PdfName( "adbe.pkcs7.detached" ) );
+
+    switch( eSubFilter )
+    {
+    case ePdfSignFieldSubFilter_pkcs7detached:
+        dict.AddKey( "SubFilter", PdfName( "adbe.pkcs7.detached" ) );
+        break;
+    case ePdfSignFieldSubFilter_pkcs7sha1: 
+        dict.AddKey( "SubFilter", PdfName( "adbe.pkcs7.sha1" ) );
+        break;
+    case ePdfSignFieldSubFilter_x509rsasha1: 
+        dict.AddKey( "SubFilter", PdfName( "adbe.x509.rsa_sha1" ) );
+        break;
+    case ePdfSignFieldSubFilter_ETSICAdES: 
+        dict.AddKey( "SubFilter", PdfName( "ETSI.CAdES.detached" ) );
+        break;
+    default:
+        PODOFO_RAISE_ERROR( ePdfError_InvalidEnumValue );
+    }
 }
 
 }
Index: podofo/trunk/src/doc/PdfSignatureField.h
===================================================================
--- podofo/trunk/src/doc/PdfSignatureField.h	(revision 1960)
+++ podofo/trunk/src/doc/PdfSignatureField.h	(working copy)
@@ -46,10 +46,18 @@
  */
 class PODOFO_DOC_API PdfSignatureField :public PdfField
 {
+public:
+    typedef enum {
+        ePdfSignFieldSubFilter_pkcs7detached = 1,
+        ePdfSignFieldSubFilter_pkcs7sha1 = 2,
+        ePdfSignFieldSubFilter_x509rsasha1 = 3,
+        ePdfSignFieldSubFilter_ETSICAdES = 4,
+    } EPdfSignFieldSubFilter;
+
 protected:
     PdfObject*     m_pSignatureObj;
 
-    void Init();
+    void Init( EPdfSignFieldSubFilter eSubFilter );
 public:
 
     typedef enum {
@@ -60,12 +68,12 @@
 
     /** Create a new PdfSignatureField
      */
-    PdfSignatureField( PdfPage* pPage, const PdfRect & rRect, PdfDocument* pDoc );
+    PdfSignatureField( PdfPage* pPage, const PdfRect & rRect, PdfDocument* pDoc, EPdfSignFieldSubFilter eSubFilter = ePdfSignFieldSubFilter_pkcs7detached );
 
     /** Create a new PdfSignatureField
      *  \param bInit creates a signature field with/without a /V key
      */
-    PdfSignatureField( PdfAnnotation* pWidget, PdfAcroForm* pParent, PdfDocument* pDoc, bool bInit = true);
+    PdfSignatureField( PdfAnnotation* pWidget, PdfAcroForm* pParent, PdfDocument* pDoc, bool bInit = true, EPdfSignFieldSubFilter eSubFilter = ePdfSignFieldSubFilter_pkcs7detached );
 
     /** Creates a PdfSignatureField from an existing PdfAnnotation, which should
      *  be an annotation with a field type Sig.
@@ -135,7 +143,7 @@
      *  set. This is useful for cases when the signature field had been
      *  created from an existing annotation, which didn't have it set.
      */
-    void EnsureSignatureObject( void );
+    void EnsureSignatureObject(EPdfSignFieldSubFilter eSubFilter = ePdfSignFieldSubFilter_pkcs7detached );
 };
 
 }
