Foxit PDF SDK

Public Types | Public Member Functions | List of all members
foxit::pdf::Signature Class Reference
Inheritance diagram for foxit::pdf::Signature:

## Public Types
enum | APFlags { e_APFlagFoxitFlag = 0x0001, e_APFlagLabel = 0x0002, e_APFlagReason = 0x0004, e_APFlagSigningTime = 0x0008, e_APFlagDN = 0x0010, e_APFlagLocation = 0x0020, e_APFlagSigner = 0x0040, e_APFlagBitmap = 0x0080, e_APFlagText = 0x0100, e_APFlagFoxitEditorFlag = 0x0200, e_APFlagProducer = 0x0400 }
| Enumeration for signature appearance flags. More...
enum | DigestAlgorithm { e_DigestSHA1 = 0, e_DigestSHA256 = 1, e_DigestSHA384 = 2, e_DigestSHA512 = 3 }
| Enumeration for signature digest algorithm. More...
enum | DocPermission { e_DocPermUnrestricted = 0, e_DocPermNoChangesAllowed = 1, e_DocPermFillingFormAndSigning = 2, e_DocPermFillingFormSigningAndAnnotating = 3 }
| Enumeration for signature document permission. More...
enum | FieldMDPAction { e_FieldMDPActionNone = 0, e_FieldMDPActionAll = 1, e_FieldMDPActionInclude = 2, e_FieldMDPActionExclude = 3 }
| Enumeration for signature FieldMDP("MDP" means modification detection and prevention) action type. More...
enum | KeyName { e_KeyNameSigner = 0, e_KeyNameLocation = 1, e_KeyNameReason = 2, e_KeyNameContactInfo = 3, e_KeyNameDN = 4, e_KeyNameText = 5, e_KeyNameProducer = 6 }
| Enumeration for signature key name. More...
enum | LabelName { e_LabelNameSigner = 0, e_LabelNameLocation = 1, e_LabelNameReason = 2, e_LabelNameSignTime = 3, e_LabelNameDN = 4, e_LabelNameProducer = 6 }
| Enumeration for signature label name. More...
enum | PAdESLevel { e_PAdESLevelNotPAdES = 0, e_PAdESLevelNone = 1, e_PAdESLevelBB = 2, e_PAdESLevelBT = 3, e_PAdESLevelBLT = 4, e_PAdESLevelBLTA = 5 }
| Enumeration for PAdES level. More...
enum | SignatureType { e_SignatureTypeOrdinary = 0, e_SignatureTypeTimeStamp = 3, e_SignatureTypePagingSeal = 4 }
| Enumeration for signature type. More...
enum | States { e_StateUnknown = 0x80000000, e_StateNoSignData = 0x00000200, e_StateUnsigned = 0x00000001, e_StateSigned = 0x00000002, e_StateVerifyValid = 0x00000004, e_StateVerifyInvalid = 0x00000008, e_StateVerifyErrorData = 0x00000010, e_StateVerifyNoSupportWay = 0x00000020, e_StateVerifyErrorByteRange = 0x00000040, e_StateVerifyChange = 0x00000080, e_StateVerifyIncredible = 0x00000100, e_StateVerifyNoChange = 0x00000400, e_StateVerifyIssueValid = 0x00001000, e_StateVerifyIssueUnknown = 0x00002000, e_StateVerifyIssueRevoke = 0x00004000, e_StateVerifyIssueExpire = 0x00008000, e_StateVerifyIssueUncheck = 0x00010000, e_StateVerifyIssueCurrent = 0x00020000, e_StateVerifyTimestampNone = 0x00040000, e_StateVerifyTimestampDoc = 0x00080000, e_StateVerifyTimestampValid = 0x00100000, e_StateVerifyTimestampInvalid = 0x00200000, e_StateVerifyTimestampExpire = 0x00400000, e_StateVerifyTimestampIssueUnknown = 0x00800000, e_StateVerifyTimestampIssueValid = 0x01000000, e_StateVerifyTimestampTimeBefore = 0x02000000, e_StateCertCannotGetVRI = 0x04000000, e_StateVerifyChangeLegal = 0x08000000, e_StateVerifyChangeIllegal = 0x10000000 }
| Enumeration for signature states. More...
Public Types inherited from foxit::pdf::interform::Field
enum | Flags { e_FlagReadOnly = 0x01, e_FlagRequired = 0x02, e_FlagNoExport = 0x04, e_FlagButtonNoToggleToOff = 0x100, e_FlagButtonRadiosInUnison = 0x200, e_FlagTextMultiline = 0x100, e_FlagTextPassword = 0x200, e_FlagTextFileSelect = 0x400, e_FlagTextNoSpellCheck = 0x800, e_FlagTextDoNotScroll = 0x1000, e_FlagTextComb = 0x2000, e_FlagComboEdit = 0x100, e_FlagChoiceMultiSelect = 0x100, e_FlagTextRichText = 0x4000, e_FlagChoiceSort = 0x200, e_FlagChoiceCommitOnSelChange = 0x400 }
| Enumeration for form field flags. More...
enum | Type { e_TypeUnknown = 0, e_TypePushButton = 1, e_TypeCheckBox = 2, e_TypeRadioButton = 3, e_TypeComboBox = 4, e_TypeListBox = 5, e_TypeTextField = 6, e_TypeSignature = 7 }
| Enumeration for form field type. More...

## Public Member Functions
| Signature (const foxit::pdf::PDFDoc &document, foxit::pdf::objects::PDFDictionary *sig_field_dict)
| Constructor, from signature field dictionary. More...
| Signature (const interform::Field &field)
| Constructor, with parent class object. More...
| ~Signature ()
| Destructor.
bool | ClearSignedData ()
| Clear the data and appearance if current signature is singed and verified valid. More...
void | EnableEmbedFont (bool enable_embed_font)
| Enable or disable embed font. More...
void | EnableIncrementalSaveForFirstSigning (bool enable_incremental_save)
| Enable or disable incremental save for first signing. User should call this function before calling function Signature::StartSign. Default: false. More...
bool | GenerateAppearance ()
| Generate the appearance of unsigned signature. More...
uint32 | GetAppearanceFlags ()
| Get signature appearance flags. More...
common::Bitmap | GetBitmap ()
| Get a bitmap which is used for the signature appearance. More...
bool | GetByteRangeArray (uint32 out_byte_range_array[4])
| Get the byte ranges data, including 4 elements. More...
WString | GetCert (int32 index) const
| Get a certificate from current signature's certificate chain by index. More...
int32 | GetCertCount () const
| Get the count of certificates in current signature's certificate chain. More...
String | GetCertificateInfo (const char *key)
| Get certificate information. More...
DocPermission | GetDocPermission ()
| Get document permission for current signature. More...
PDFDoc | GetDocument ()
| Get the PDF document, which current signature belongs to. More...
FieldMDPAction | GetFieldMDPAction ()
| Get FieldMDP("MDP" means modification detection and prevention) action type. More...
WStringArray | GetFieldMDPActionFields ()
| Get the field name array which is used for FieldMDP action. More...
String | GetFilter ()
| Get filter. More...
WString | GetKeyLabel (LabelName label_name)
| Get the string for specified key label. More...
WString | GetKeyValue (KeyName key)
| Get the string value for specified key name. More...
PAdESLevel | GetPAdESLevel ()
| Get PAdES level. More...
SignatureArray | GetPagingSealGroupElements ()
| Get the group elements of current paging seal signature. More...
PagingSealSignature | GetPagingSealSignature ()
| Get the paging seal signature. More...
objects::PDFDictionary * | GetSignatureDict () const
| Get signature dictionary. More...
SignatureType | GetSignatureType ()
| Get signature type. More...
PDFDoc | GetSignedVersionDocument (const wchar_t *file_path)
| Get the PDF document in the signed version in which current signature was signed. More...
DateTime | GetSignTime ()
| Get time of signing. More...
uint32 | GetState ()
| Get current state. More...
String | GetSubFilter ()
| Get sub filter. More...
bool | IsEmpty () const
| Check whether current object is empty or not. More...
bool | IsSigned ()
| Check whether current signature is signed or not. More...
bool | IsTimeStamp ()
| Check if current signature is a time stamp signature. More...
void | SetAppearanceContent (const String &appearance_content)
| Set customized appearance content (as low level drawing operation commands) for signed signature appearance. More...
void | SetAppearanceFlags (uint32 appearance_flags)
| Set signature appearance flags. More...
void | SetBitmap (const common::Bitmap &bitmap)
| Set a bitmap for the signature appearance. More...
void | SetCertChain (const WStringArray &cert_chain)
| Set a certificate chain. More...
void | SetCustomObject (const char *key, objects::PDFObject *pdf_object)
| Set custom PDF object for signature dictionary. More...
void | SetDefaultContentsLength (uint32 default_length)
| Set the default length of signature contents which represents signature value (known as signed data). More...
void | SetDocPermission (DocPermission permission)
| Set document permission for current signature. More...
void | SetFieldMDPActionFields (const FieldMDPAction &action, const WStringArray &field_array)
| Set FieldMDP("MDP" means modification detection and prevention) action names array. More...
void | SetFilter (const char *filter)
| Set filter. More...
void | SetImage (const char *file_path, int frame_index)
| Set an image for the signature appearance, with a specified frame index. More...
void | SetImage (const common::Image &image, int frame_index)
| Set an image for the signature appearance, with a specified frame index. More...
void | SetImage (const wchar_t *file_path, int frame_index)
| Set an image for the signature appearance, with a specified frame index. More...
void | SetKeyLabel (LabelName label_name, const wchar_t *label_value)
| Set the string for specified key label. More...
void | SetKeyValue (KeyName key, const wchar_t *value)
| Set the string value for specified key name. More...
void | SetSignTime (const DateTime &sign_time)
| Set time of signing. More...
void | SetSubFilter (const char *sub_filter)
| Set sub filter. More...
common::Progressive | StartSign (const wchar_t *cert_path, const foxit::WString &cert_password, foxit::pdf::Signature::DigestAlgorithm digest_algorithm, foxit::common::file::StreamCallback *stream_callback, const void *client_data=0, foxit::common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartSign (const wchar_t *cert_path, const WString &cert_password, DigestAlgorithm digest_algorithm, const char *save_path, const void *client_data=0, common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartSign (const wchar_t *cert_path, const WString &cert_password, DigestAlgorithm digest_algorithm, const wchar_t *save_path, const void *client_data=0, common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartSign (foxit::common::file::StreamCallback *cert_file_stream, const foxit::WString &cert_password, foxit::pdf::Signature::DigestAlgorithm digest_algorithm, foxit::common::file::StreamCallback *stream_callback, const void *client_data=0, foxit::common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartSign (foxit::common::file::StreamCallback *cert_file_stream, const WString &cert_password, DigestAlgorithm digest_algorithm, const char *save_path, const void *client_data=0, common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartSign (foxit::common::file::StreamCallback *cert_file_stream, const WString &cert_password, DigestAlgorithm digest_algorithm, const wchar_t *save_path, const void *client_data=0, common::PauseCallback *pause=0)
| Start signing current signature if current signature is unsigned. More...
common::Progressive | StartVerify (const void *client_data=0, common::PauseCallback *pause=0)
| Start verifying the intergrity of current signature if current signature is signed. More...
Public Member Functions inherited from foxit::pdf::interform::Field
| Field (const Field &field)
| Constructor, with another form field object. More...
| Field (const PDFDoc &document, objects::PDFDictionary *field_dict)
| Constructor, from field dictionary. More...
| ~Field ()
| Destructor.
common::Alignment | GetAlignment () const
| Get the alignment value. More...
WString | GetAlternateName () const
| Get alternate name. More...
Control | GetControl (const foxit::pdf::PDFPage &page, int index)
| Get a form control by index, in a specified PDF page. More...
Control | GetControl (int index)
| Get a form control by index. More...
int | GetControlCount () const
| Get count of form controls. More...
int | GetControlCount (const foxit::pdf::PDFPage &page) const
| Get count of form controls in a specified PDF page. More...
DefaultAppearance | GetDefaultAppearance () const
| Get the default appearance data. More...
WString | GetDefaultValue () const
| Get default value. More...
objects::PDFObject * | GetDefaultValueObj () const
| Get the PDF object of field's default value. More...
objects::PDFDictionary * | GetDict () const
| Get the PDF dictionary of current object. More...
uint32 | GetFlags () const
| Get field flags. More...
objects::PDFObject * | GetInheritedAttribute (const char *attribute_name) const
| Get the PDF object for specified attribute which may be inherited from the ancestor node in the field tree. More...
WString | GetMappingName () const
| Get mapping name. More...
int | GetMaxLength () const
| Get maximum length of the field's text, in characters. More...
WString | GetName () const
| Get field name. More...
ChoiceOptionArray | GetOptions () const
| Get options of list box or combo box. More...
int | GetTopVisibleIndex ()
| Get top index of option for scrollable list boxes. More...
Type | GetType () const
| Get field type. More...
WString | GetValue () const
| Get value. More...
objects::PDFObject * | GetValueObj () const
| Get the PDF object of field's value. More...
bool | IsEmpty () const
| Check whether current object is empty or not. More...
bool | operator!= (const Field &other) const
| Not equal operator. More...
Field & | operator= (const Field &other)
| Assign operator. More...
bool | operator== (const Field &other) const
| Equal operator. More...
bool | Reset ()
| Reset data in current field to its default value. (Not support signature field) More...
void | SetAlignment (common::Alignment alignment)
| Set alignment property of a form, as a document-wide default value. (Not support signature field) More...
void | SetAlternateName (const wchar_t *alternate_name)
| Set alternate name. (Not support signature field) More...
void | SetDefaultAppearance (const DefaultAppearance &default_ap)
| Set default appearance data. More...
void | SetDefaultValue (const wchar_t *value)
| Set default value. More...
void | SetFlags (uint32 flags)
| Set field flags. More...
void | SetMappingName (const wchar_t *name)
| Set mapping name. (Not support signature field) More...
void | SetMaxLength (int max_length)
| Set maximum length of the field's text, in characters. More...
void | SetOptions (const ChoiceOptionArray &option_array)
| Set options of list box or combo box. More...
void | SetTopVisibleIndex (int index)
| Set top index for scrollable list boxes. More...
void | SetValue (const wchar_t *value)
| Set value. More...
Public Member Functions inherited from foxit::Base
FS_HANDLE | Handle () const
| Get the handle of current object. More...

## Detailed Description

A digital signature (PDF 1.3) can be used to authenticate the identity of a user and the document's contents. It stores information about the signer and the state of the document when it was signed. The signature is contained in a signature field, as a type of form field, so class Signature is derived from class interform::Field. A signature object can be retrieved/added by following functions:

- To be counted and retrieved as a signature object directly from PDF document, please use functions pdf::PDFDoc::GetSignatureCount and PDFDoc::GetSignature.
- To be counted and retrieved as a signature field, please use functions interform::Form::GetFieldCount and interform::Form::GetField when field type is interform::Field::e_TypeSignature.
- To add a new signature, please use function PDFPage::AddSignature.
- To remove a signature, please use function PDFDoc::RemoveSignature.

In a signature, filter and sub filter keys are used to specify the filter and sub filter of signature callback object which will be used to sign and verify the signature. Foxit PDF SDK has default signature callbacks for following filter and sub filter:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For sub filter "ETSI.CAdES.detached" and sub filter "ETSI.RFC3161", please ensure a default time stmap server has been set to TimeStampServerMgr if default signature callbacks for them will be used to do signing. For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, user should prepare customized signature callback and register the callback to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
This class offers functions to get/set signature information/properties, sign or verify a signature, and so on. For example:

- To sign an unsigned signature, please use functions Signature::StartSign. When signing a signature successfully, user is strongly recommended to close current document and then open the signed PDF document and then do following operation.
- To verify the integrity of a signed signature, please use functions Signature::StartVerify. To check if a signed signature is valid or not, please refer to class LTVVerifier.
- To retrieve signature dictionary directly, please use function Signature::GetSignatureDict.

Before signing an unsigned signature, user can call following functions to set information for signing and signed appearance:

- For using default Foxit appearance template, related information can be set by Signature::SetAppearanceFlags, Signature::SetSignTime, Signature::SetKeyValue, Signature::SetBitmap, Signature::SetImage.
- For using customized appearance, please set appearance stream content by function Signature::SetAppearanceContent.

If an unsigned signature has been set some information for signing, but the document is saved directly or closed without signing the signature, these data (including filter and sub filter) will be lost in the saved document or in the closed document. When the document is opened again, the unsigned signature needs to be specified at least filter and sub filter for signing; otherwise, this signature cannot be signed.

See also
  interform::Field
  interform::Form
  PDFDoc
  PDFPage
  TimeStampServerMgr
  LTVVerifier

## Member Enumeration Documentation

## ◆ APFlags

enum foxit::pdf::Signature::APFlags

Enumeration for signature appearance flags.

Values of this enumeration can be used alone or in combination.

Enumerator
e_APFlagFoxitFlag | If set, show Foxit flag on signature appearance.
e_APFlagLabel | If set, show label on signature appearance.
e_APFlagReason | If set, show reason on signature appearance.
e_APFlagSigningTime | If set, show signing time on signature appearance.
e_APFlagDN | If set, show distinguish name on signature appearance.
e_APFlagLocation | If set, show location on signature appearance.
e_APFlagSigner | If set, show signer on signature appearance.
e_APFlagBitmap | If set, show bitmap on signature appearance.
e_APFlagText | If set, show text content on signature appearance.
e_APFlagFoxitEditorFlag | If set, show Foxit Editor content on signature appearance.
e_APFlagProducer | If set, show producer content on signature appearance.

## ◆ DigestAlgorithm

enum foxit::pdf::Signature::DigestAlgorithm

Enumeration for signature digest algorithm.

Values of this enumeration should be used alone.

Enumerator
e_DigestSHA1 | Signature digest algorithm: sha1 algorithm.
e_DigestSHA256 | Signature digest algorithm: sha256 algorithm.
e_DigestSHA384 | Signature digest algorithm: sha384 algorithm.
e_DigestSHA512 | Signature digest algorithm: sha512 algorithm.

## ◆ DocPermission

enum foxit::pdf::Signature::DocPermission

Enumeration for signature document permission.

Values of this enumeration should be used alone.

Enumerator
e_DocPermUnrestricted | No restriction.
e_DocPermNoChangesAllowed | No changes to the PDF document (which is signed by the signture) are permitted. Any change to this kind of PDF document will invalidate the signature.
e_DocPermFillingFormAndSigning | Permitted changes are filling in forms, instantiating page templates, and signing. Other changes will invalidate the signature.
e_DocPermFillingFormSigningAndAnnotating | Permitted changes are the same as for 2, as well as annotation creation, deletion, and modification. Other changes will invalidate the signature.

## ◆ FieldMDPAction

enum foxit::pdf::Signature::FieldMDPAction

Enumeration for signature FieldMDP("MDP" means modification detection and prevention) action type.

Values of this enumeration should be used alone.

Enumerator
e_FieldMDPActionNone | No Field MDP action.
e_FieldMDPActionAll | All form fields' flags will be set read-only.
e_FieldMDPActionInclude | Specified form fields' flags will be set read-only. Note "Specified form fields" can be get/set by functions Signature::GetFieldMDPActionFields and Signature::SetFieldMDPActionFields. Please refer to these functions for more details.
e_FieldMDPActionExclude | Flags of form fields (except specified form fields) will be set read-only. Note "Specified form fields" can be get/set by functions Signature::GetFieldMDPActionFields and Signature::SetFieldMDPActionFields. Please refer to these functions for more details.

## ◆ KeyName

enum foxit::pdf::Signature::KeyName

Enumeration for signature key name.

Values of this enumeration should be used alone.

Enumerator
e_KeyNameSigner | Signature key name: signer.
e_KeyNameLocation | Signature key name: location.
e_KeyNameReason | Signature key name: reason.
e_KeyNameContactInfo | Signature key name: contact information.
e_KeyNameDN | Signature key name: distinguish name.
e_KeyNameText | Signature key name: text content.
e_KeyNameProducer | Signature key name: producer content.

## ◆ LabelName

enum foxit::pdf::Signature::LabelName

Enumeration for signature label name.

Values of this enumeration should be used alone.

Enumerator
e_LabelNameSigner | Signature label name for signer. Note Default label name for signer is "Digitally signed by " in Foxit PDF SDK.
e_LabelNameLocation | Signature label name for location. Note Default label name for location is "Location: " in Foxit PDF SDK.
e_LabelNameReason | Signature label name for reason. Note Default label name for reason is "Reason: " in Foxit PDF SDK.
e_LabelNameSignTime | Signature label name for sign time. Note Default label name for sign time is "Date: " in Foxit PDF SDK.
e_LabelNameDN | Signature key name for distinguish name. Note Default label name for distinguish name is "DN: " in Foxit PDF SDK.
e_LabelNameProducer | Signature key name for producer name. Note Default label name for producer name is empty in Foxit PDF SDK.

## ◆ PAdESLevel

enum foxit::pdf::Signature::PAdESLevel

Enumeration for PAdES level.

Values of this enumeration should be used alone.

Enumerator
e_PAdESLevelNotPAdES | Not a PAdES signature.
e_PAdESLevelNone | PAdES level: none.
e_PAdESLevelBB | PAdES level: B-B.
e_PAdESLevelBT | PAdES level: B-T.
e_PAdESLevelBLT | PAdES level: B-LT.
e_PAdESLevelBLTA | PAdES level: B-LTA.

## ◆ SignatureType

enum foxit::pdf::Signature::SignatureType

Enumeration for signature type.

Values of this enumeration should be used alone.

Enumerator
e_SignatureTypeOrdinary | Signature type: ordinary.
e_SignatureTypeTimeStamp | Signature type: time stamp.
e_SignatureTypePagingSeal | Signature type: paging seal.

## ◆ States

enum foxit::pdf::Signature::States

Enumeration for signature states.

Values of this enumeration can be used alone or in combination.
These values can be divided into four parts:

- Values starting from Signature::e_StateUnknown (with same prefix name) represent signed state, before signature is verified successfully.
- Values starting from Signature::e_StateVerifyValid (with same prefix name) represent the verified state of a signature.
- Values starting from Signature::e_StateVerifyIssueValid (with same prefix name) represent the verified state of issue for a signature, with more details.
- Values starting from Signature::e_StateVerifyTimestampNone (with same prefix name) represent the verified state for time stamp, with more details.

Enumerator
e_StateUnknown | Unknown signature.
e_StateNoSignData | Signature does not have any data for signing.It means that there is not "V" entry in the signature dictionary.
e_StateUnsigned | Unsigned signature.
e_StateSigned | Signed signature.
e_StateVerifyValid | Verification state of a signature is valid.
e_StateVerifyInvalid | Verification state of a signature is invalid.
e_StateVerifyErrorData | Signature data is destroyed (that means the signature data cannot be parsed properly).
e_StateVerifyNoSupportWay | Unsupported signature.
e_StateVerifyErrorByteRange | Non expected byte range.
e_StateVerifyChange | The document has been changed within the scope of the signature. (This indicates that signature is invalid.)
e_StateVerifyIncredible | Signature cannot be trusted (containing aggression).
e_StateVerifyNoChange | The document has not been changed within the scope of the signature.
e_StateVerifyIssueValid | Verification state of the issuer is valid.
e_StateVerifyIssueUnknown | Verification state of the issuer is unknown.
e_StateVerifyIssueRevoke | Certificate for verifying issuer is revoked.
e_StateVerifyIssueExpire | Certificate for verifying issuer is expired.
e_StateVerifyIssueUncheck | Not check the issuer.
e_StateVerifyIssueCurrent | The verified issue is current issuer.
e_StateVerifyTimestampNone | No time stamp or not check time stamp.
e_StateVerifyTimestampDoc | The signature is a time stamp signature.
e_StateVerifyTimestampValid | Verification state of the time stamp is valid.
e_StateVerifyTimestampInvalid | Verification state of the time stamp is invalid.
e_StateVerifyTimestampExpire | Verification state of the time stamp is expired.
e_StateVerifyTimestampIssueUnknown | Verification state of the time stamp issuer is unknown.
e_StateVerifyTimestampIssueValid | Verification state of the time stamp issuer is valid.
e_StateVerifyTimestampTimeBefore | Verification state of the time stamp time is valid, since the times is before the expiration date.
e_StateCertCannotGetVRI | Cannot get verify relevant information.
e_StateVerifyChangeLegal | The document has been changed outside of signature scope, but the changed is permitted.
e_StateVerifyChangeIllegal | The document has been changed outside of signature scope, and the changed invalidate the signature.

## Constructor & Destructor Documentation

## ◆ Signature() [1/2]

foxit::pdf::Signature::Signature | ( | const interform::Field & | field | ) |
| explicit

Constructor, with parent class object.

Parameters

  [in] | field | Parent class object.

## ◆ Signature() [2/2]

foxit::pdf::Signature::Signature | ( | const foxit::pdf::PDFDoc & | document,
|  | foxit::pdf::objects::PDFDictionary * | sig_field_dict
| ) |  |

Constructor, from signature field dictionary.

Parameters

  [in] | document | A valid PDF document.
  [in] | sig_field_dict | A PDF dictionary which represents a signature field. It should belong to the PDF document specified by parameter document;

## Member Function Documentation

## ◆ ClearSignedData()

bool foxit::pdf::Signature::ClearSignedData | ( |  | ) |

Clear the data and appearance if current signature is singed and verified valid.

This function is used for a signed and valid signature.
Attention: From 7.0, this function is only used to verify the intergrity of a signature. To check if a signature is valid or not, please refer to class LTVVerifier.

Returns
  true means clear the data and appearance successfully, while false means no need to clear data and appearance or any error.

## ◆ EnableEmbedFont()

void foxit::pdf::Signature::EnableEmbedFont | ( | bool | enable_embed_font | ) |

Enable or disable embed font.

Parameters

  enable_embed_font | A flag indicates that whether to embed font for siganture's text. true means that embed font for siganture's text. false means that not to embed font for siganture's text.

Returns
  None.

## ◆ EnableIncrementalSaveForFirstSigning()

void foxit::pdf::Signature::EnableIncrementalSaveForFirstSigning | ( | bool | enable_incremental_save | ) |

Enable or disable incremental save for first signing. User should call this function before calling function Signature::StartSign.
Default: false.

Parameters

  [in] | enable_incremental_save | A flag indicates that whether to use incremental save for first signing. true means that use incremental save for first signing. false means that use default save for first signing.

Returns
  None.

## ◆ GenerateAppearance()

bool foxit::pdf::Signature::GenerateAppearance | ( |  | ) |

Generate the appearance of unsigned signature.

This function is used to display the unsigned ordinary signature on page without calling the function Signature::StartSign.

Returns
  true means success, while false means failure.

## ◆ GetAppearanceFlags()

uint32 foxit::pdf::Signature::GetAppearanceFlags | ( |  | ) |

Get signature appearance flags.

Signature appearance flags indicate which information will be shown. Currently, this is only useful after Signature::SetAppearanceFlags is set successfully. For a signature gotten from PDF document, the return value of this function would be useless.

Returns
  Signature appearance flags. Please refer to values starting from Signature::e_APFlagFoxitFlag and this would be one or a combination of these values.

## ◆ GetBitmap()

common::Bitmap foxit::pdf::Signature::GetBitmap | ( |  | ) |

Get a bitmap which is used for the signature appearance.

Returns
  The bitmap used in appearance. If the return value of function common::Bitmap::IsEmpty for the returned bitmap object is true, that means no bitmap is used in appearance or there is any error.

## ◆ GetByteRangeArray()

bool foxit::pdf::Signature::GetByteRangeArray | ( | uint32 | out_byte_range_array[4] | ) |

Get the byte ranges data, including 4 elements.

This function is used for a signed signature to retrieve its byte range for digest calculation. The array of byte ranges contains 4 elements. These 4 elements are always in pairs of integers (starting byte offset, length in bytes), describing the exact byte range for the digest calculation.
Please refer to <PDF Reference 1.7> Section 8.7 Digital Signatures for more details.

Parameters

  [out] | out_byte_range_array | Output parameter that receives data of byte ranges. Please ensure this array can contain 4 elements.

Returns
  true means success, while false means failure.

## ◆ GetCert()

WString foxit::pdf::Signature::GetCert | ( | int32 | index | ) | const

Get a certificate from current signature's certificate chain by index.

This function is recommended to be used before verifying a signature. When sub filter of current signature is "adbe.x509.rsa_sha1", application needs to call this function to get verified public certificate before verifying signature. The first certificate in certificate chain is the signing certificate, and it can be used to verify the signature.

Parameters

  [in] | index | The index of certificate to be gotten. Valid range: from 0 to (count-1). count is returned by function Signature::GetCertCount.

Returns
  A certificate.

## ◆ GetCertCount()

int32 foxit::pdf::Signature::GetCertCount | ( |  | ) | const

Get the count of certificates in current signature's certificate chain.

This function is recommended to be used before verifying a signature. When sub filter of current signature is "adbe.x509.rsa_sha1", application needs to call this function to get the count of certificates in certificate chain and then call function Signature::GetCert to get verified public certificate before verifying signature.

Returns
  The count of certificates.

## ◆ GetCertificateInfo()

String foxit::pdf::Signature::GetCertificateInfo | ( | const char * | key | ) |

Get certificate information.

This function is used for a signed signature. Currently, this function only supports for iOS and android platform.

Parameters

  [in] | key | Certificate key string. Currently it can be one of the following keys: "SerialNumber" "Issuer" "Subject" "ValidPeriodFrom" "ValidPeriodTo"

Returns
  Certificate information string.

Note
  For "ValidPeriodFrom" or "ValidPeriodTo" key, timezone value will not be computed in.

## ◆ GetDocPermission()

DocPermission foxit::pdf::Signature::GetDocPermission | ( |  | ) |

Get document permission for current signature.

- If permission value is not Signature::e_DocPermUnrestricted, that means adding new signature will fail when current signature is signed
- If permission value is Signature::e_DocPermFillingFormAndSigning or Signature::e_DocPermFillingFormSigningAndAnnotating, that means current signature field's flag is read-only when current signature is signed.

Returns
  The document permission.Please refer to values starting from Signature::e_DocPermUnrestricted and this should be one of these values.

## ◆ GetDocument()

PDFDoc foxit::pdf::Signature::GetDocument | ( |  | ) |

Get the PDF document, which current signature belongs to.

Returns
  A PDF document object.

## ◆ GetFieldMDPAction()

FieldMDPAction foxit::pdf::Signature::GetFieldMDPAction | ( |  | ) |

Get FieldMDP("MDP" means modification detection and prevention) action type.

Returns
  FieldMDP action type. Please refer to values starting from Signature::e_FieldMDPActionNone and this should be one of these values.

## ◆ GetFieldMDPActionFields()

WStringArray foxit::pdf::Signature::GetFieldMDPActionFields | ( |  | ) |

Get the field name array which is used for FieldMDP action.

Returned field name array is associated to the FieldMDP action (which can be checked by function Signature::GetFieldMDPAction):

- If FieldMDP action type is Signature::e_FieldMDPActionNone, returned field name array is uselss.
- If FieldMDP action type is Signature::e_FieldMDPActionAll, returned field name array will contain name of all form fields.
- If FieldMDP action type is Signature::e_FieldMDPActionInclude, returned field name array specifies form fields whose flags are read-only when current signature is signed.
- If FieldMDP action type is Signature::e_FieldMDPActionExclude, returned field name array specifies form fields whose flags are not read-only (but rest fields' flags are read-only) when current signature is a signed signature.

Returns
  FieldMDP action field name array.

## ◆ GetFilter()

String foxit::pdf::Signature::GetFilter | ( |  | ) |

Get filter.

Filter and sub filter are used to specify which registered signature callback object will be used to sign/verify current signature.

Returns
  Filter string.

## ◆ GetKeyLabel()

WString foxit::pdf::Signature::GetKeyLabel | ( | LabelName | label_name | ) |

Get the string for specified key label.

If current signature is a time stamp signature, this function will always return an empty string.

Parameters

  [in] | label_name | Key label. Please refer to values starting from Signature::e_LabelNameSigner and this should be one of these values.

Returns
  String for specified key label.

## ◆ GetKeyValue()

WString foxit::pdf::Signature::GetKeyValue | ( | KeyName | key | ) |

Get the string value for specified key name.

This function is used to get string value of some key in signature dictionary, such as "Reason", "Location" and so on. Specially,

Parameters

  [in] | key | Key name. Please refer to values starting from Signature::e_KeyNameSigner and this should be one of these values.

Returns
  The string value.

## ◆ GetPAdESLevel()

PAdESLevel foxit::pdf::Signature::GetPAdESLevel | ( |  | ) |

Get PAdES level.

Returns
  PAdES level. Please refer to values starting from Signature::e_PAdESLevelNotPAdES and this would be one of these values.

## ◆ GetPagingSealGroupElements()

SignatureArray foxit::pdf::Signature::GetPagingSealGroupElements | ( |  | ) |

Get the group elements of current paging seal signature.

If current signature type is Signature::e_SignatureTypePagingSeal, this function will return the array of signature associated with current signature. Otherwise, an empty array will be returned.

Returns
  A signature array.

## ◆ GetPagingSealSignature()

PagingSealSignature foxit::pdf::Signature::GetPagingSealSignature | ( |  | ) |

Get the paging seal signature.

If current signature type is Signature::e_SignatureTypePagingSeal, this function will return the paging seal signature object associated with current signature.

Returns
  A PagingSealSignature object. If the return value of function Signature::IsEmpty for the returned object is true, that means current signature is not paging seal signature.

## ◆ GetSignatureDict()

objects::PDFDictionary* foxit::pdf::Signature::GetSignatureDict | ( |  | ) | const

Get signature dictionary.

Signature dictionary is a part of signature field dictionary.

Returns
  The signature dictionary. If there is any error, this function will return NULL.

## ◆ GetSignatureType()

SignatureType foxit::pdf::Signature::GetSignatureType | ( |  | ) |

Get signature type.

Returns
  Signature type. Please refer to values starting from Signature::e_SignatureTypeOrdinary and this would be one of these values.

## ◆ GetSignedVersionDocument()

PDFDoc foxit::pdf::Signature::GetSignedVersionDocument | ( | const wchar_t * | file_path | ) |

Get the PDF document in the signed version in which current signature was signed.

This function is useful when a PDF document has benn signed by serveral signatures and user wants to get the PDF document in which one signature is signed.

Parameters

  [in] | file_path | The full path of the original opened PDF document which current signature belongs to. It should not be an empty string.

Returns
  A PDF document object in singed version in which current signature was signed. The returned PDF document may represent a differenct PDF document from current PDF document where current signature is retrieved, or is just current PDF document. User should ensure to keep current PDF document object valid when reading or operating signed version document. Please ensure the returned document object has been loaded successfully, before using most functions in class PDFDoc.

## ◆ GetSignTime()

DateTime foxit::pdf::Signature::GetSignTime | ( |  | ) |

Get time of signing.

Returns
  A date and time object that receives the signing time. If no signing time is found, this function will return a date and time object with all values 0.

## ◆ GetState()

uint32 foxit::pdf::Signature::GetState | ( |  | ) |

Get current state.

- Before verifying a signature, this function is to get the state about if current signature is signed or if current signature is lack of data for signing.
- After verifying a signature, this function is to get the verified state – which indicates that the verified signature is signed; if the verified signature is still unsigned, this function will get the unsigned state instead.

Returns
  The value of signature state. Please refer to values starting from Signature::e_StateUnknown and this would be one or combination of them.
  Specially, if the returned state is Signature::e_StateNoSignData, that means current signature has no data for signing, and please at least call function Signature::SetKeyValue to set necessary filter and sub filter to current signature. Use can also call following functions to set other data for signing and signed appearance before calling function Signature::StartSign:
  - For using default Foxit appearance template, related information can be set by Signature::SetAppearanceFlags, Signature::SetSignTime, Signature::SetKeyValue, Signature::SetBitmap, Signature::SetImage.
  - For using customized appearance, please set appearance stream content by function Signature::SetAppearanceContent.

## ◆ GetSubFilter()

String foxit::pdf::Signature::GetSubFilter | ( |  | ) |

Get sub filter.

Filter and sub filter are used to specify which registered signature callback object will be used to sign/verify current signature.

Returns
  Sub filter string.

## ◆ IsEmpty()

bool foxit::pdf::Signature::IsEmpty | ( |  | ) | const

Check whether current object is empty or not.

When the current object is empty, that means current object is useless.

Returns
  true means current object is empty, while false means not.

## ◆ IsSigned()

bool foxit::pdf::Signature::IsSigned | ( |  | ) |

Check whether current signature is signed or not.

Returns
  true means current signature is signed, and false means not.

## ◆ IsTimeStamp()

bool foxit::pdf::Signature::IsTimeStamp | ( |  | ) |

Check if current signature is a time stamp signature.

Returns
  true means current signature is a time stamp signature, while false means not.

## ◆ SetAppearanceContent()

void foxit::pdf::Signature::SetAppearanceContent | ( | const String & | appearance_content | ) |

Set customized appearance content (as low level drawing operation commands) for signed signature appearance.

This function can only be used for an unsigned signature before calling function Signature::StartSign for the unsigned signature.
Once customized appearance content is set, it will be used as the signed appearance. In this case, appearance flags set by Signature::SetAppearanceFlags will be ignored and related informations will not be used in appearance – these information are set by: Signature::SetSignTime, Signature::SetKeyValue (except filter and sub-filter), Signature::SetBitmap, Signature::SetImage.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | appearance_content | Customized appearance content. This should be sequence of drawing operation commands to be used for the appearance, for example "10 10 m 20 10 l S". Please refer to <PDF Reference 1.7> P196 for more details.

Returns
  None.

## ◆ SetAppearanceFlags()

void foxit::pdf::Signature::SetAppearanceFlags | ( | uint32 | appearance_flags | ) |

Set signature appearance flags.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature.
Signature appearance flags indicate which information will be shown in the signed appearance. If customized appearance content has been set by function Signature::SetAppearanceContent, appearance flags will be ignored.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | appearance_flags | Signature appearance flags. Please refer to values starting from Signature::e_APFlagFoxitFlag and this should be one or a combination of these values.

Returns
  None.

## ◆ SetBitmap()

void foxit::pdf::Signature::SetBitmap | ( | const common::Bitmap & | bitmap | ) |

Set a bitmap for the signature appearance.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature. If customized appearance content has been set by function Signature::SetAppearanceContent, the bitmap will not be used in signed appearance.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | bitmap | A bitmap to be set to the appearance. It should be valid.

Returns
  None.

## ◆ SetCertChain()

void foxit::pdf::Signature::SetCertChain | ( | const WStringArray & | cert_chain | ) |

Set a certificate chain.

This function is recommended to be used before signing an unsigned signature. When the signature sub filter is "adbe.x509.rsa_sha1", users need to call this function to set the cert chain to the signature. For other sub filter, this function will return directly without doing anything.

Parameters

  [in] | cert_chain | A string array that represents the certificate chain.

Returns
  None.

## ◆ SetCustomObject()

void foxit::pdf::Signature::SetCustomObject | ( | const char * | key,
|  | objects::PDFObject * | pdf_object
| ) |  |

Set custom PDF object for signature dictionary.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature.

Parameters

  [in] | key | The key of signature dictionary, whose value element will be set. It should not be an empty string.
  [in] | pdf_object | A custom PDFObject object to be set as the key's value. It should not be NULL. It can be a direct PDF object or an indirect PDF object.

Returns
  None.

## ◆ SetDefaultContentsLength()

void foxit::pdf::Signature::SetDefaultContentsLength | ( | uint32 | default_length | ) |

Set the default length of signature contents which represents signature value (known as signed data).

This function can only be used before function Signature::StartSign for an unsigned signature.
Signature contents represent the signature value (known as signed data). When initializing the signature field, the signature contents will be initialized with the default length 7942. When using custom signature callback to sign and verify an unsigned signature, user can call this function to change the default length of signature contents. In this case, user should also ensure that the length of returned signed data in callback function SignatureCallback::Sign should not be larger than the default length set by this function.

Parameters

  [in] | default_length | The default length of the signature value (known as signed data), in bytes. It should not be less than 4098.

Returns
  None.

## ◆ SetDocPermission()

void foxit::pdf::Signature::SetDocPermission | ( | DocPermission | permission | ) |

Set document permission for current signature.

This function is only useful for an unsigned signature. If this function is used for a signed signature, nothing will be done.
Some notes about the permission value:

- If any permission value except Signature::e_DocPermUnrestricted is set to current unsigned signature, then adding new signature will fail when current signature is a signed signature.
- If permission value Signature::e_DocPermFillingFormAndSigning or Signature::e_DocPermFillingFormSigningAndAnnotating is set to current unsigned signature, then FieldMDP action would be Signature::e_FieldMDPActionInclude and current signature field's flag would be read-only when current signature is a signed signature.

Parameters

  [in] | permission | The document permission. Please refer to values starting from Signature::e_DocPermUnrestricted and this should be one of these values.

Returns
  None.

## ◆ SetFieldMDPActionFields()

void foxit::pdf::Signature::SetFieldMDPActionFields | ( | const FieldMDPAction & | action,
|  | const WStringArray & | field_array
| ) |  |

Set FieldMDP("MDP" means modification detection and prevention) action names array.

This function is only useful for an unsigned signature. If this function is used for a signed signature, nothing will be done.
If current signature is signed, this function is invalidate.

Parameters

  [in] | action | FieldMDP action type.Please refer to values starting from Signature::e_FieldMDPActionNone and this should be one of these values. If this value is Signature::e_FieldMDPActionNone, that means no FieldMDP action will be used. If this value is Signature::e_FieldMDPActionAll, parameter field_array will be ignored and all fields will be included in the object digest (and hence do not permit changes after current signature is signed). If this value is Signature::e_FieldMDPActionInclude, that means only flags of form fields specified by parameter field_array will be set read-only and these fields will be included in the object digest (and hence do not permit changes after current signature is signed). If this value is Signature::e_FieldMDPActionExclude, that means flags of form fields (except those specified by parameter field_array) will be set read-only and these fields are included in the object digest (and hence do not permit changes after current signature is signed).
  [in] | field_array | A field name array used for FieldMDP action.

Returns
  None.

## ◆ SetFilter()

void foxit::pdf::Signature::SetFilter | ( | const char * | filter | ) |

Set filter.

Filter and sub filter are used to specify which registered signature callback object will be used to sign/verify current signature. User could should set filter and sub filter to use default signature callback in Foxit PDF SDK, or use other filter and sub fitler but please ensure that a signature callback object with non-default filter and sub filter should has been registered in Foxit PDF SDK before signing or verifying current signature. Filter and sub filter for default signature callback are:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

Parameters

  [in] | filter | String for filter. It cannot be an empty string.

Returns
  None.

## ◆ SetImage() [1/3]

void foxit::pdf::Signature::SetImage | ( | const char * | file_path,
|  | int | frame_index
| ) |  |

Set an image for the signature appearance, with a specified frame index.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature. If customized appearance content has been set by function Signature::SetAppearanceContent, the image will not be used in signed appearance.
Input image may contain multiple frames, and only one frame of the image can be set to current signature.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | file_path | A full path of an existing image file. It should not be an empty string.
  [in] | frame_index | Frame index. Valid range: from 0 to (count-1). count is returned by function common::Image::GetFrameCount of input image file.

Returns
  None.

## ◆ SetImage() [2/3]

void foxit::pdf::Signature::SetImage | ( | const common::Image & | image,
|  | int | frame_index
| ) |  |

Set an image for the signature appearance, with a specified frame index.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature. If customized appearance content has been set by function Signature::SetAppearanceContent, the image will not be used in signed appearance.
Input image may contain multiple frames, and only one frame of the image can be set to current signature.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | image | An image. One of its frames will be set to current signature. This image contains at least one frame and the image type should not be common::Image::e_Unknown.
  [in] | frame_index | Frame index. Valid range: from 0 to (count-1). count is returned by function common::Image::GetFrameCount.

Returns
  None.

## ◆ SetImage() [3/3]

void foxit::pdf::Signature::SetImage | ( | const wchar_t * | file_path,
|  | int | frame_index
| ) |  |

Set an image for the signature appearance, with a specified frame index.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature. If customized appearance content has been set by function Signature::SetAppearanceContent, the image will not be used in signed appearance.
Input image may contain multiple frames, and only one frame of the image can be set to current signature.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | file_path | A full path of an existing image file. It should not be an empty string.
  [in] | frame_index | Frame index. Valid range: from 0 to (count-1). count is returned by function common::Image::GetFrameCount of input image file.

Returns
  None.

## ◆ SetKeyLabel()

void foxit::pdf::Signature::SetKeyLabel | ( | LabelName | label_name,
|  | const wchar_t * | label_value
| ) |  |

Set the string for specified key label.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature.
This function is used to set string value for custom label of some key in signature dictionary. If no custom label is set, default labels will be used by Foxit PDF SDK. Please refer to comment of values starting from Signature::e_LabelNameSigner for more details.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | label_name | Key label. Please refer to values starting from Signature::e_LabelNameSigner and this should be one of these values.
  [in] | label_value | New string value for key label. If this is an empty string, Foxit PDF SDK will use default label. Please refer to comment of values starting from Signature::e_LabelNameSigner for more details.

Returns
  None.

## ◆ SetKeyValue()

void foxit::pdf::Signature::SetKeyValue | ( | KeyName | key,
|  | const wchar_t * | value
| ) |  |

Set the string value for specified key name.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature.
This function is used to set string value of some key in signature dictionary, such as signer, reason, location and so on.
If current signature is a time stamp signature, this function will do nothing.

Parameters

  [in] | key | Key name. Please refer to values starting from Signature::e_KeyNameSigner and this should be one of these values.
  [in] | value | New string value.

Returns
  None.

## ◆ SetSignTime()

void foxit::pdf::Signature::SetSignTime | ( | const DateTime & | sign_time | ) |

Set time of signing.

This function is recommended to be used before calling function Signature::StartSign for an unsigned signature.

Parameters

  [in] | sign_time | The signing time.

Returns
  None.

## ◆ SetSubFilter()

void foxit::pdf::Signature::SetSubFilter | ( | const char * | sub_filter | ) |

Set sub filter.

Filter and sub filter are used to specify which registered signature callback object will be used to sign/verify current signature. User could should set filter and sub filter to use default signature callback in Foxit PDF SDK, or use other filter and sub fitler but please ensure that a signature callback object with non-default filter and sub filter should has been registered in Foxit PDF SDK before signing or verifying current signature. Filter and sub filter for default signature callback are:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

Parameters

  [in] | sub_filter | String for sub filter.

Returns
  None.

## ◆ StartSign() [1/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | const wchar_t * | cert_path,
|  | const foxit::WString & | cert_password,
|  | foxit::pdf::Signature::DigestAlgorithm | digest_algorithm,
|  | foxit::common::file::StreamCallback * | stream_callback,
|  | const void * | client_data = `0`,
|  | foxit::common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For sub filter "ETSI.CAdES.detached" and sub filter "ETSI.RFC3161", please ensure a default time stmap server has been set to TimeStampServerMgr if default signature callbacks for them will be used to do signing. For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_path | A full path of a certificate file (including file name and extension), which will be used for signing. This can be an empty string if not necessary in custom signature callback. When this file path is not empty, it should be a valid path. If default signature callback is to be used for signing current signature, this can be a PFX certificate file.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | stream_callback | A foxit::common::file::StreamCallback object which is implemented by user to save the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartSign() [2/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | const wchar_t * | cert_path,
|  | const WString & | cert_password,
|  | DigestAlgorithm | digest_algorithm,
|  | const char * | save_path,
|  | const void * | client_data = `0`,
|  | common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For sub filter "ETSI.CAdES.detached" and sub filter "ETSI.RFC3161", please ensure a default time stmap server has been set to TimeStampServerMgr if default signature callbacks for them will be used to do signing. For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_path | A full path of a certificate file (including file name and extension), which will be used for signing. This can be an empty string if not necessary in custom signature callback. When this file path is not empty, it should be a valid path. If default signature callback is to be used for signing current signature, this can be a PFX certificate file.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | save_path | A full PDF file path for saving the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartSign() [3/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | const wchar_t * | cert_path,
|  | const WString & | cert_password,
|  | DigestAlgorithm | digest_algorithm,
|  | const wchar_t * | save_path,
|  | const void * | client_data = `0`,
|  | common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_path | A full path of a certificate file (including file name and extension), which will be used for signing. This can be an empty string if not necessary in custom signature callback. When this file path is not empty, it should be a valid path. If default signature callback is to be used for signing current signature, this can be a PFX certificate file.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | save_path | A full PDF file path for saving the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartSign() [4/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | foxit::common::file::StreamCallback * | cert_file_stream,
|  | const foxit::WString & | cert_password,
|  | foxit::pdf::Signature::DigestAlgorithm | digest_algorithm,
|  | foxit::common::file::StreamCallback * | stream_callback,
|  | const void * | client_data = `0`,
|  | foxit::common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For sub filter "ETSI.CAdES.detached" and sub filter "ETSI.RFC3161", please ensure a default time stmap server has been set to TimeStampServerMgr if default signature callbacks for them will be used to do signing. For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_file_stream | A foxit::common::file::StreamCallback object which is implemented by user to access content of a certificate file which will be used for signing. This can be NULL if not necessary in custom signature callback. If default signature callback is to be used for signing current signature, a PFX certificate file can be used.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | stream_callback | A foxit::common::file::StreamCallback object which is implemented by user to save the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartSign() [5/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | foxit::common::file::StreamCallback * | cert_file_stream,
|  | const WString & | cert_password,
|  | DigestAlgorithm | digest_algorithm,
|  | const char * | save_path,
|  | const void * | client_data = `0`,
|  | common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For sub filter "ETSI.CAdES.detached" and sub filter "ETSI.RFC3161", please ensure a default time stmap server has been set to TimeStampServerMgr if default signature callbacks for them will be used to do signing. For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_file_stream | A foxit::common::file::StreamCallback object which is implemented by user to access content of a certificate file which will be used for signing. This can be NULL if not necessary in custom signature callback. If default signature callback is to be used for signing current signature, a PFX certificate file can be used.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | save_path | A full PDF file path for saving the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartSign() [6/6]

common::Progressive foxit::pdf::Signature::StartSign | ( | foxit::common::file::StreamCallback * | cert_file_stream,
|  | const WString & | cert_password,
|  | DigestAlgorithm | digest_algorithm,
|  | const wchar_t * | save_path,
|  | const void * | client_data = `0`,
|  | common::PauseCallback * | pause = `0`
| ) |  |

Start signing current signature if current signature is unsigned.

This function is used for an unsigned signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to sign current signature. So before signing, please ensure current signature has valid filter and sub filter string values. If the filter and sub filter are one of following strings that means to use the default signature callback in Foxit PDF SDK:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

For other filter and sub filter or if user wants to use customized signature callback for above filter and sub filter, please ensure a customized signature callback has been registered to Foxit PDF SDK by function common::Library::RegisterSignatureCallback.
For PDF documents that are compliant with PDF/A specification, common::Library::SetDefaultICCProfilesPath is recommended to be called and enable embeding font by calling Signature::EnableEmbedFont before calling current function. It may take a long time to sign a signature, so Foxit PDF SDK uses a progressive process to do this.

Parameters

  [in] | cert_file_stream | A foxit::common::file::StreamCallback object which is implemented by user to access content of a certificate file which will be used for signing. This can be NULL if not necessary in custom signature callback. If default signature callback is to be used for signing current signature, a PFX certificate file can be used.
  [in] | cert_password | A password string used to open the cert file. If this is an empty string, that means no password is required.
  [in] | digest_algorithm | The algorithm of message digest for signed data. Please refer to values starting from Signature::e_DigestSHA1 and this should be one of these values.
  [in] | save_path | A full PDF file path for saving the signing result. The signed document would be saved to another PDF file.
  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to sign current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the signing process needs to be paused. This can be NULL which means not to pause during the signing process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.

Note
  This function does not support to save signed PDF document directly to the PDF file which is used to construct the related PDF document of current signature. In order to do so, user is recommended to do as following steps:
  Assume that the related PDF document object is constructed from a PDF file named "org.pdf".
  1. Use current function to save the signed result to an temporary file. Here, this temporary file is named as "temp.tmp".
  2. Ensure that the related PDF document object has destructed – which is equal to "close document".
  3. Remove "org.pdf" and rename "temp.tmp" to "org.pdf".
  Then user can open the signed PDF document to do other operation.

## ◆ StartVerify()

common::Progressive foxit::pdf::Signature::StartVerify | ( | const void * | client_data = `0`,
|  | common::PauseCallback * | pause = `0`
| ) |  |

Start verifying the intergrity of current signature if current signature is signed.

This function is used for a signed signature. Filter and sub filter keys of current signature specify the name of signature callback object which will be used to verify current signature. So before verifying, please ensure: the necessary signature callback object has been registered by function common::Library::RegisterSignatureCallback. If the filter and sub filter of current signed signature are one of following strings that means to use the default signature callback in Foxit PDF SDK and user does not need to register one for them:

- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.detached"
- filter: "Adobe.PPKLite" and sub filter: "adbe.pkcs7.sha1"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.CAdES.detached"
- filter: "Adobe.PPKLite" and sub filter: "ETSI.RFC3161"

It may take a long time to verify a signature, so Foxit PDF SDK uses a progressive process to do this.
From 7.0, this function is only used to verify the intergrity of a signature. To check if a signature is valid or not, please refer to class LTVVerifier.

Parameters

  [in] | client_data | A user-defined object, which will be passed to call back functions in SignatureCallback. This is useless if the default callback object will be used to verify current signature. Default value: NULL.
  [in] | pause | Pause object which decides if the verifying process needs to be paused. This can be NULL which means not to pause during the verifying process. If this is not NULL, it should be a valid pause object implemented by user. Default value: NULL.

Returns
  A progressive object. Please check the rate of current progress by function common::Progressive::GetRateOfProgress. If the rate is not 100 yet, call function common::Progressive::Continue to continue the progress until the progress is finished.