/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org 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 version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
 
//i20156 - new file for XML security module

/** -- idl definition -- **/

#ifndef __com_sun_star_xml_crypto_xsecurityenvironment_idl_
#define __com_sun_star_xml_crypto_xsecurityenvironment_idl_

#ifndef __com_sun_star_uno_SecurityException_idl__
#include <com/sun/star/uno/SecurityException.idl> 
#endif

#include <com/sun/star/uno/XInterface.idl>
#include <com/sun/star/uno/Exception.idl>
#include <com/sun/star/security/XCertificate.idl>
#include <com/sun/star/security/CertificateCharacters.idl>
#include <com/sun/star/security/CertificateValidity.idl>

module com { module sun { module star { module xml { module crypto {

/**
 * Interface of Security Environment
 */
interface XSecurityEnvironment : com::sun::star::uno::XInterface
{
    /**
     * Get personal certificate from the environment
     */
    sequence< com::sun::star::security::XCertificate > getPersonalCertificates() raises( com::sun::star::uno::SecurityException ) ;

    /**
     * Get certificate from the environment by issuer name and serial number
     */
    com::sun::star::security::XCertificate getCertificate( [in] string issuerName, [in] sequence< byte > serialNumber ) raises( com::sun::star::uno::SecurityException ) ;

    /**
     * build certificate path from a certain certificate
     */
    sequence< com::sun::star::security::XCertificate > buildCertificatePath( [in] com::sun::star::security::XCertificate beginCert ) raises( com::sun::star::uno::SecurityException ) ;

    /**
     * Create certificate interface from raw DER encoded certificate
     */
    com::sun::star::security::XCertificate createCertificateFromRaw( [in] sequence< byte > rawCertificate ) raises( com::sun::star::uno::SecurityException ) ;

    /**
     * Create certificate interface from a Base64 encoded certificate.
     */
    com::sun::star::security::XCertificate createCertificateFromAscii( [in] string asciiCertificate ) raises( com::sun::star::uno::SecurityException ) ;

    /**
      Verify a certificate.
     
      The method provides a way to verify a certificate.
      @param xEECertificate
          The certificate which is to be validated.

      @param intermediateCertificates
          Additional certificates which can be used by the method in constructing
          the certificate chain. The root certificate may also be contained. However,
          the implementation must check if the root certificate is indeed trusted by
          the user.
          All entries of the sequence must be non-null references.

      @return
          The validation status will returned as a bit-wise long, please refer to
          CertificateValidity definition.
     */
    long verifyCertificate( [in] com::sun::star::security::XCertificate xEECertificate,
        [in] sequence< com::sun::star::security::XCertificate > intermediateCertificates)
        raises( com::sun::star::uno::SecurityException ) ;

    /**
     * Get a certificate characters.
     *
     * The method provides a way to get certificate characters like:
     * 1. Whether or not the certificate have a private key in the user profile.
     * 2. Whether or not the certificate is a trusted certificate.
     * 3. Whether or not the certificate is a self-signed certificate.
     * 
     * The certificate characters is defined as bit-wise long, please refer to
     * CertificateCharacters definition.
     */
    long getCertificateCharacters( [in] com::sun::star::security::XCertificate xCertificate ) raises( com::sun::star::uno::SecurityException ) ;
    
    /**
     * Get the Environment detail infos
     */
    string getSecurityEnvironmentInformation ( );
    
} ;

} ; } ; } ; } ; } ;

#endif

