Home | History | Annotate | Download | only in Public
      1 /**
      2  * @addtogroup MCD_MCDIMPL_DAEMON_REG
      3  * @{
      4  * G&D MobiCore Registry
      5  *
      6  * @file
      7  * Mobicore Driver Registry.
      8  *
      9  * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions and the following disclaimer.
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in the
     18  *    documentation and/or other materials provided with the distribution.
     19  * 3. The name of the author may not be used to endorse or promote
     20  *    products derived from this software without specific prior
     21  *    written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     24  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     27  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     29  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     34  */
     35 #ifndef MOBICORE_REGISTRY_H_
     36 #define MOBICORE_REGISTRY_H_
     37 
     38 #include "MobiCoreDriverApi.h"
     39 #include "mcContainer.h"
     40 
     41 #ifdef __cplusplus
     42 extern "C" {
     43 #endif
     44 
     45     /**
     46      * Registry object.
     47      */
     48     typedef struct {
     49         uint32_t len;
     50         uint8_t value[];
     51     } regObject_t;
     52 
     53     /** Maximum size of a trustlet in bytes. */
     54 #define MAX_TL_SIZE     (1 * 1024 * 1024)
     55 
     56 //-----------------------------------------------------------------
     57 
     58     /** Stores an authentication token in registry.
     59      * @param  so Authentication token secure object.
     60      * @return MC_DRV_OK if successful, otherwise error code.
     61      */
     62     mcResult_t mcRegistryStoreAuthToken(const mcSoAuthTokenCont_t *so);
     63 
     64     /** Reads an authentication token from registry.
     65      * @param[out] so Authentication token secure object.
     66      * @return MC_DRV_OK if successful, otherwise error code.
     67      */
     68     mcResult_t mcRegistryReadAuthToken(mcSoAuthTokenCont_t *so);
     69 
     70     /** Deletes the authentication token secure object from the registry.
     71      * @return MC_DRV_OK if successful, otherwise error code.
     72      */
     73     mcResult_t mcRegistryDeleteAuthToken(void);
     74 
     75     /** Stores a root container secure object in the registry.
     76      * @param so Root container secure object.
     77      * @return MC_DRV_OK if successful, otherwise error code.
     78      */
     79     mcResult_t mcRegistryStoreRoot(const mcSoRootCont_t *so);
     80 
     81     /** Reads a root container secure object from the registry.
     82      * @param[out] so Root container secure object.
     83      * @return MC_DRV_OK if successful, otherwise error code.
     84      */
     85     mcResult_t mcRegistryReadRoot(mcSoRootCont_t *so);
     86 
     87     /** Stores a service provider container secure object in the registry.
     88      * @param spid Service provider ID.
     89      * @param so Service provider container secure object.
     90      * @return MC_DRV_OK if successful, otherwise error code.
     91      */
     92     mcResult_t mcRegistryStoreSp(mcSpid_t spid, const mcSoSpCont_t *so);
     93 
     94     /** Reads a service provider container secure object from the registry.
     95      * @param spid Service provider ID.
     96      * @param[out] so Service provider container secure object.
     97      * @return MC_DRV_OK if successful, otherwise error code.
     98      */
     99     mcResult_t mcRegistryReadSp(mcSpid_t spid, mcSoSpCont_t *so);
    100 
    101     /** Deletes a service provider recursively, including all trustlets and
    102      * data.
    103      * @param spid Service provider ID.
    104      * @return MC_DRV_OK if successful, otherwise error code.
    105      */
    106     mcResult_t mcRegistryCleanupSp(mcSpid_t spid);
    107 
    108     /** Stores a trustlet container secure object in the registry.
    109      * @param uuid Trustlet UUID.
    110      * @param so Trustlet container secure object.
    111      * @return MC_DRV_OK if successful, otherwise error code.
    112      */
    113     mcResult_t mcRegistryStoreTrustletCon(const mcUuid_t *uuid, const mcSoTltCont_t *so);
    114 
    115     /** Reads a trustlet container secure object from the registry.
    116      * @param uuid Trustlet UUID.
    117      * @param[out] so Trustlet container secure object.
    118      * @return MC_DRV_OK if successful, otherwise error code.
    119      */
    120     mcResult_t mcRegistryReadTrustletCon(const mcUuid_t *uuid, mcSoTltCont_t *so);
    121 
    122     /** Deletes a trustlet container secure object and all of its associated data.
    123      * @param uuid Trustlet UUID.
    124      * @return MC_DRV_OK if successful, otherwise error code.
    125      */
    126     mcResult_t mcRegistryCleanupTrustlet(const mcUuid_t *uuid);
    127 
    128     /** Stores a data container secure object in the registry.
    129      * @param so Data container secure object.
    130      * @return MC_DRV_OK if successful, otherwise error code.
    131      */
    132     mcResult_t mcRegistryStoreData(const mcSoDataCont_t *so);
    133 
    134     /** Reads a data container secure object from the registry.
    135      * @param context (service provider = 0; trustlet = 1).
    136      * @param cid Service provider or UUID.
    137      * @param pid Personalization data identifier.
    138      * @param[out] so Data container secure object.
    139      * @param maxLen Maximum size (in bytes) of the destination buffer (so).
    140      * @return MC_DRV_OK if successful, otherwise error code.
    141      */
    142     mcResult_t mcRegistryReadData(
    143         uint32_t context,
    144         const mcCid_t *cid,
    145         mcPid_t pid,
    146         mcSoDataCont_t *so,
    147         uint32_t maxLen
    148     );
    149 
    150     /** Deletes the root container and all of its associated service provider
    151      * containers.
    152      * @return MC_DRV_OK if successful, otherwise error code.
    153      */
    154     mcResult_t mcRegistryCleanupRoot(void);
    155 
    156     /** Returns a registry object for a given service.
    157      * @param uuid service UUID
    158      * @return Registry object.
    159      * @note It is the responsibility of the caller to free the registry object
    160      * allocated by this function.
    161      */
    162     regObject_t *mcRegistryGetServiceBlob(const mcUuid_t  *uuid);
    163 
    164     /** Returns a registry object for a given service.
    165      * @param driverFilename driver filename
    166      * @return Registry object.
    167      * @note It is the responsibility of the caller to free the registry object
    168      * allocated by this function.
    169      */
    170     regObject_t *mcRegistryGetDriverBlob(const char *driverFilename);
    171 
    172 #ifdef __cplusplus
    173 }
    174 #endif
    175 
    176 #endif // MOBICORE_REGISTRY_H_
    177 
    178 /** @} */
    179