/*
* XAdES4j - A Java library for generation and verification of XAdES signatures.
* Copyright (C) 2010 Luis Goncalves.
*
* XAdES4j is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 3 of the License, or any later version.
*
* XAdES4j is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with XAdES4j. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Low-level representation of the qualifying properties information and corresponing
* structural verification. These types are intermediate representations (data objects)
* of the properties between the XML tree and the high-level types.
* <p>
* The diference for the types in {@code xades4j.properties} is that data objects
* contain all the data that is needed to create the final XML structure. For instance,
* the high-level {@code SigningCertificate} contains a list of {@code X509Certificate}
* while the corresponding data object contains a list of {@code CertRef} with the
* certificate's digest and issuer/serial.
* <p>
* Data objects enable the clear separation of gathering the data needed for a property
* and generating its actual XML structure (marshalling). Also, they allow the
* separation between the unmarshalling and property verification.
* <p>
* Data objects are also the appropriate subject to structural verification, i.e.
* checking if all the required fields are present, if needed collections aren't empty,
* and so on. This has to be done after unmarshalling because the unmarshaller can
* be replaced. Also, in signature production some properties have data supplied
* by the user, which needs be validated. Data objects and the corresponding structure
* verifiers are the central point for these checks.
* <p>
* The library provides a property data object and the corresponding strucutre
* verifier for all the supported properties. In addition, there is a generic DOM
* container (that is also supported by the default properties marshaller) and a
* extension point for new property data objects (@link OtherPropertyData}.
* <p>
* The types on this package are not heavily documented because they are simple
* data containers. No checks are made on the data objects themselves, as the
* corresponding structure verifiers handle that task.
* <p>
* An important note is that <b>whenever a byte[] is used</b> to represent an octet stream
* that is base-64 encoded in XAdES <b>it should NOT be encoded in base-64 in the property
* data object</b>.
*/
package xades4j.properties.data;