/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

#ifndef __com_sun_star_xml_crypto_xsecurityenvironment_idl_
#define __com_sun_star_xml_crypto_xsecurityenvironment_idl_

#include <com/sun/star/uno/SecurityException.idl>
#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 certificates 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 information
     */
    string getSecurityEnvironmentInformation ( );

    /**
     * List all certificates, private (as returned by getPersonalCertificates) as well as those of other people/orgas
     *
     * @since LibreOffice 6.0
     */
    sequence< com::sun::star::security::XCertificate > getAllCertificates() raises( com::sun::star::uno::SecurityException ) ;

} ;

} ; } ; } ; } ; } ;

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
