package org.icepdf.core.pobjects.acroform; import org.icepdf.core.pobjects.Dictionary; import org.icepdf.core.pobjects.Name; import org.icepdf.core.util.Library; import java.util.HashMap; /** * Signature reference dictionary. */ public class SignatureReferenceDictionary extends Dictionary { /** * (Optional) The type of PDF object that this dictionary describes; if present, shall be SigRef for a signature * reference dictionary. */ public static final Name SIG_REF_TYPE_VALUE = new Name("SigRef"); /** * (Required) The name of the transform method (see Section 12.8.2, Transform Methods) that shall guide the * modification analysis that takes place when the signature is validated. Valid values shall be: * <ul> * <li>DocMDP Used to detect modifications to a document relative to a signature field that is signed by the * originator of a document; see 12.8.2.2, DocMDP.</li> * <li>UR Used to detect modifications to a document that would invalidate a signature in a rights-enabled * document; see 12.8.2.3, UR.</li> * <li>FieldMDPUsed to detect modifications to a list of form fields specified in TransformParams; * see 12.8.2.4, FieldMDP.</li> * </ul> */ public static final Name TRANSFORM_METHOD_KEY = new Name("TransformMethod"); private TransformParams transformParams; /** * Available Transfer Method currently available. */ public enum TransformMethods { FieldMDP, DocMDP, UR3 } /** * (Optional) A dictionary specifying transform parameters (variable data) for the transform method specified by * TransformMethod. Each method takes its own set of parameters. See each of the sub-clauses specified previously * for details on the individual transform parameter dictionaries */ public static final Name TRANSFORM_PARAMS_KEY = new Name("TransformParams"); /** * (Required when TransformMethod is FieldMDP) An indirect reference to the object in the document upon which the * object modification analysis should be performed. For transform methods other than FieldMDP, this object is * implicitly defined. */ public static final Name DATA_KEY = new Name("Data"); /** * (Optional; PDF 1.5 required) A name identifying the algorithm that shall be used when computing the digest. * Valid values are MD5 and SHA1. Default value: MD5. For security reasons, MD5 should not be used. It is mentioned * for backwards compatibility, since it remains the default value. */ public static final Name DIGEST_METHOD_KEY = new Name("DigestMethod"); /** * Creates a new instance of a Dictionary. * * @param library document library. * @param entries dictionary entries. */ public SignatureReferenceDictionary(Library library, HashMap entries) { super(library, entries); } /** * Gets the transform method use by * * @return TransformMethods representing one of the preferred transform methods. */ public TransformMethods getTransformMethod() { Name tmp = library.getName(entries, TRANSFORM_METHOD_KEY); if (tmp != null) { if (tmp.equals(TransformMethods.DocMDP.toString())) { return TransformMethods.DocMDP; } else if (tmp.equals(TransformMethods.FieldMDP.toString())) { return TransformMethods.FieldMDP; } else if (tmp.equals(TransformMethods.UR3.toString())) { return TransformMethods.UR3; } } return null; } /** * Gets the transforms Params implementations specified by the transform method. * * @return TransformParams of type; DocMDPTransferParam, FieldMDPTransferParam, or UR3TransferParam. */ public TransformParams getTransformParams() { Name tmp = library.getName(entries, TRANSFORM_METHOD_KEY); if (tmp.equals(TransformMethods.DocMDP.toString())) { transformParams = new DocMDPTransferParam(library, library.getDictionary(entries, TRANSFORM_PARAMS_KEY)); } else if (tmp.equals(TransformMethods.FieldMDP.toString())) { transformParams = new FieldMDPTransferParam(library, library.getDictionary(entries, TRANSFORM_PARAMS_KEY)); } else if (tmp.equals(TransformMethods.UR3.toString())) { transformParams = new UR3TransferParam(library, library.getDictionary(entries, TRANSFORM_PARAMS_KEY)); } return transformParams; } }