/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 * 
 *************************************************************/


 
#ifndef __com_sun_star_security_DocumentSignatureInformation_idl__
#define __com_sun_star_security_DocumentSignatureInformation_idl__ 

#include <com/sun/star/security/XCertificate.idl>
#include <com/sun/star/security/CertificateValidity.idl>

 
//============================================================================= 

module com { module sun { module star { module security {

//============================================================================= 
 
/** Status of digital signatures in a document.

    <p>
    This structure has the information about a digital signature in a document, and the status if the signature is valid.
    </p>
 */
 
struct DocumentSignatureInformation
{
    XCertificate    Signer;
    long            SignatureDate;
    long            SignatureTime;
    boolean         SignatureIsValid;
    /* reflects the validity of the certificate.
       Contains a value from the constants of
       <type scope="com::sun::star::security">CertificateValidity</type>.
     */
    long CertificateStatus;
    /* indicates what content of a document is signed.
        <p>
        This value can be ignored when this struct is returned as part of 
        a macro signature validation.
        As of OpenOffice.org 3.2 and ODF 1.2 the document signature comprises 
        all files except the signature file itself. 
        Signatures in OOo 2.x were only
        applied to the files in the root of the document, except mimetype, the 
        Pictures and ObjectReplacements/Objects folder. That is, macros
        were not part of the document signature.
        OOo 3.0 signed everthing, execept mimetype and the META-INF folder.
        <p>
        If PartialDocumentSignature is true, then the signature was created by OOo
        with a version less then 3.2. In this case, not all files are signed. The 
        signature can still be regarded as valid, as long as SignatureIsValid is true
        and the certificate could be validated. However, users should be notified about
        the fact, that not everything in this document is signed.
    */
    boolean PartialDocumentSignature;

};

//============================================================================= 
 
}; }; }; };

#endif

