/* * Copyright 2006-2017 ICEsoft Technologies Canada Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.icepdf.core.pobjects.acroform; import org.icepdf.core.pobjects.Name; import org.icepdf.core.util.Library; import java.util.HashMap; /** * Signature field (PDF 1.3) is a form field that contains a digital signature (see 12.8, "Digital Signatures"). The field * dictionary representing a signature field may contain the additional entries listed in Table 232, as well as the * standard entries described in Table 220. The field type (FT) shall be Sig, and the field value (V), if present, shall * be a signature dictionary containing the signature and specifying various attributes of the signature field * (see Table 252). * <br> * NOTE 1This signature form field serves two primary purposes. The first is to define the form field that will provide * the visual signing properties for display but it also may hold information needed later when the actual signing takes * place, such as the signature technology to use. This carries information from the author of the document to the * software that later does the signing. * <br> * NOTE 2Filling in (signing) the signature field entails updating at least the V entry and usually also the AP entry of * the associated widget annotation. Exporting a signature field typically exports the T, V, and AP entries. * <br> * Like any other field, a signature field may be described by a widget annotation dictionary containing entries pertaining * to an annotation as well as a field (see 12.5.6.19, "Widget Annotations"). The annotation rectangle (Rect) in such a * dictionary shall give the position of the field on its page. Signature fields that are not intended to be visible shall * have an annotation rectangle that has zero height and width. Conforming readers shall treat such signatures as not * visible. Conforming readers shall also treat signatures as not visible if either the Hidden bit or the NoView bit of * the F entry is true. The F entry is described in Table 164, and annotation flags are described in Table 165. * * @since 5.2 */ public class SignatureFieldDictionary extends FieldDictionary { /** * (Optional; shall be an indirect reference; PDF 1.5) A signature field lock dictionary that specifies a set of form * fields that shall be locked when this signature field is signed. Table 233 lists the entries in this dictionary. */ public static final Name LOCK_KEY = new Name("Lock"); /** * (Optional; shall be an indirect reference; PDF 1.5) A seed value dictionary (see Table 234) containing information * that constrains the properties of a signature that is applied to this field. */ public static final Name SV_KEY = new Name("SV"); // optional private LockDictionary lockDictionary; // optional private SeedValueDictionary seedValueDictionary; // not optional private SignatureDictionary signatureDictionary; public SignatureFieldDictionary(Library library, HashMap entries) { super(library, entries); // get the lock, todo currently no examples of this Object tmp = library.getObject(entries, LOCK_KEY); if (tmp instanceof HashMap) { lockDictionary = new LockDictionary(library, (HashMap) tmp); } // get the seeds, todo currently no examples of this tmp = library.getObject(entries, SV_KEY); if (tmp instanceof HashMap) { seedValueDictionary = new SeedValueDictionary(library, (HashMap) tmp); } // get the sig dictionary if (hasFieldValue()) { tmp = library.getObject(entries, V_KEY); if (tmp instanceof HashMap) { signatureDictionary = new SignatureDictionary(library, (HashMap) tmp); } } } /** * Gets the associated signature dictionary and sub dictionaries. * * @return /sig's field dictionary. */ public SignatureDictionary getSignatureDictionary() { return signatureDictionary; } /** * A signature field lock dictionary that specifies a set of form fields that shall be locked when this signature * field is signed. Table 233 lists the entries in this dictionary. * * @return signature field object, can be null. */ public LockDictionary getLockDictionary() { return lockDictionary; } /** * A seed value dictionary (see Table 234) containing information that constrains the properties of a signature * that is applied to this field. * * @return seed value object, can be null. */ public SeedValueDictionary getSeedValueDictionary() { return seedValueDictionary; } }