Annotation of embedaddon/strongswan/src/libimcv/pts/pts_database.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2011-2014 Andreas Steffen
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: /**
                     17:  * @defgroup pts_database pts_database
                     18:  * @{ @ingroup pts
                     19:  */
                     20: 
                     21: #ifndef PTS_DATABASE_H_
                     22: #define PTS_DATABASE_H_
                     23: 
                     24: typedef struct pts_database_t pts_database_t;
                     25: 
                     26: #include "pts_meas_algo.h"
                     27: #include "components/pts_comp_func_name.h"
                     28: 
                     29: #include <imv/imv_database.h>
                     30: #include <library.h>
                     31: 
                     32: /**
                     33:  * Class implementing the PTS File Measurement database
                     34:  *
                     35:  */
                     36: struct pts_database_t {
                     37: 
                     38:        /**
                     39:        * Get absolute pathname for file or directory measurement
                     40:        *
                     41:        * @param is_dir                 TRUE if dir, FALSE if file
                     42:        * @param id                             Primary key into directories or files table
                     43:        * @return                               Absolute pathname as a text string
                     44:        */
                     45:        char* (*get_pathname)(pts_database_t *this, bool is_dir, int id);
                     46: 
                     47:        /**
                     48:        * Get stored measurement hash for single file or directory entries
                     49:        *
                     50:        * @param pid                    Primary key of software product in database
                     51:        * @param algo                   Hash algorithm used for measurement
                     52:        * @param is_dir                 TRUE if directory was measured
                     53:        * @param id                             Primary key of measured file/directory
                     54:        * @return                               Enumerator over all matching measurement hashes
                     55:        */
                     56:        enumerator_t* (*create_file_hash_enumerator)(pts_database_t *this,
                     57:                                                                int pid, pts_meas_algorithms_t algo,
                     58:                                                                bool is_dir, int id);
                     59: 
                     60:        /**
                     61:        * Add PTS file measurement reference value
                     62:        *
                     63:        * @param pid                    Primary key of platform product
                     64:        * @param vid                    Primary key of generic product version
                     65:        * @return                               TRUE if successful
                     66:        */
                     67:        bool (*get_product_version)(pts_database_t *this, int pid, int *vid);
                     68: 
                     69:        /**
                     70:        * Add PTS file measurement reference value
                     71:        *
                     72:        * @param vid                    Primary key of generic product version
                     73:        * @param algo                   File measurement hash algorithm used
                     74:        * @param measurement    File measurement hash
                     75:        * @param filename               Optional name of the file to be checked
                     76:        * @param is_dir                 TRUE if part of directory measurement
                     77:        * @param id                             Primary key into directories/files table
                     78:        * @return                               TRUE if successful
                     79:        */
                     80:        bool (*add_file_measurement)(pts_database_t *this, int vid,
                     81:                                                                 pts_meas_algorithms_t algo,
                     82:                                                                 chunk_t measurement, char *filename,
                     83:                                                                 bool is_dir, int id);
                     84: 
                     85:        /**
                     86:        * Get PTS measurement[s] for a given filename stored in database
                     87:        *
                     88:        * @param pid                    Primary key of software product in database
                     89:        * @param algo                   File measurement hash algorithm used
                     90:        * @param filename               Name of the file to be checked
                     91:        * @return                               Enumerator over all matching measurement hashes
                     92:        */
                     93:        enumerator_t* (*create_file_meas_enumerator)(pts_database_t *this, int pid,
                     94:                                                                                                 pts_meas_algorithms_t algo,
                     95:                                                                                                 char *filename);
                     96: 
                     97:        /**
                     98:        * Check a functional component measurement against value stored in database
                     99:        *
                    100:        * @param measurement    measurement hash
                    101:        * @param cid                    Primary key of Component Functional Name entry
                    102:        * @param aik_id                 Primary key of AIK entry in database
                    103:        * @param seq_no                 Measurement sequence number
                    104:        * @param prc                    Number of the PCR the measurement was extended into
                    105:        * @param algo                   Hash algorithm used for measurement
                    106:        * @return                               SUCCESS if check was successful
                    107:        */
                    108:        status_t (*check_comp_measurement)(pts_database_t *this, chunk_t measurement,
                    109:                                                                           int cid, int aik_id, int seq_no, int pcr,
                    110:                                                                           pts_meas_algorithms_t algo);
                    111: 
                    112:        /**
                    113:        * Insert a functional component measurement into the database
                    114:        *
                    115:        * @param measurement    Measurement hash
                    116:        * @param cid                    Primary key of Component Functional Name entry
                    117:        * @param aik_id                 Primary key of AIK entry in database
                    118:        * @param seq_no                 Measurement sequence number
                    119:        * @param prc                    Number of the PCR the measurement was extended into
                    120:        * @param algo                   Hash algorithm used for measurement
                    121:        * @return                               SUCCESS if INSERT was successful
                    122:        */
                    123:        status_t (*insert_comp_measurement)(pts_database_t *this, chunk_t measurement,
                    124:                                                                                int cid, int aik_id, int seq_no, int pcr,
                    125:                                                                                pts_meas_algorithms_t algo);
                    126: 
                    127:        /**
                    128:        * Delete functional component measurements from the database
                    129:        *
                    130:        * @param cid                    Primary key of Component Functional Name entry
                    131:        * @param aik_id                 Primary key of AIK entry in database
                    132:        * @return                               number of deleted measurement entries
                    133:        */
                    134:        int (*delete_comp_measurements)(pts_database_t *this, int cid, int aik_id);
                    135: 
                    136:        /**
                    137:        * Get the number of measurements for a functional component and AIK
                    138:        *
                    139:        * @param comp_name              Component Functional Name
                    140:        * @param aik_id                 Primary key of AIK entry in database
                    141:        * @param algo                   Hash algorithm used for measurement
                    142:        * @param cid                    Primary key of Component Functional Name entry
                    143:        * @param count                  measurement count
                    144:        * @return                               SUCCESS if COUNT was successful
                    145:        */
                    146:        status_t (*get_comp_measurement_count)(pts_database_t *this,
                    147:                                                        pts_comp_func_name_t *comp_name, int aik_id,
                    148:                                                        pts_meas_algorithms_t algo, int *cid, int *count);
                    149: 
                    150:        /**
                    151:        * Destroys a pts_database_t object.
                    152:        */
                    153:        void (*destroy)(pts_database_t *this);
                    154: 
                    155: };
                    156: 
                    157: /**
                    158:  * Creates an pts_database_t object
                    159:  *
                    160:  * @param imv_db                       Already attached IMV database
                    161:  */
                    162: pts_database_t* pts_database_create(imv_database_t *imv_db);
                    163: 
                    164: #endif /** PTS_DATABASE_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>