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

1.1       misho       1: /*
                      2:  * Copyright (C) 2011 Sansar Choinyambuu, 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_comp_evidence pts_comp_evidence
                     18:  * @{ @ingroup pts
                     19:  */
                     20: 
                     21: #ifndef PTS_COMP_EVIDENCE_H_
                     22: #define PTS_COMP_EVIDENCE_H_
                     23: 
                     24: typedef struct pts_comp_evidence_t pts_comp_evidence_t;
                     25: typedef enum pts_pcr_transform_t pts_pcr_transform_t;
                     26: typedef enum pts_comp_evid_validation_t pts_comp_evid_validation_t;
                     27: 
                     28: #include "pts/pts_meas_algo.h"
                     29: #include "pts/components/pts_comp_func_name.h"
                     30: 
                     31: #include <library.h>
                     32: 
                     33: /**
                     34:  * PTS PCR Transformations
                     35:  */
                     36: enum pts_pcr_transform_t {
                     37:        /** No Transformation */
                     38:        PTS_PCR_TRANSFORM_NO =          0,
                     39:        /** Hash Value matched PCR size */
                     40:        PTS_PCR_TRANSFORM_MATCH =       1,
                     41:        /** Hash value shorter than PCR size */
                     42:        PTS_PCR_TRANSFORM_SHORT =       2,
                     43:        /** Hash value longer than PCR size */
                     44:        PTS_PCR_TRANSFORM_LONG =        3,
                     45: };
                     46: 
                     47: /**
                     48:  * PTS Component Evidence Validation Result Flags
                     49:  */
                     50: enum pts_comp_evid_validation_t {
                     51:        /** No Validation was attempted */
                     52:        PTS_COMP_EVID_VALIDATION_NONE =         0x00,
                     53:        /** Attempted validation, unable to verify */
                     54:        PTS_COMP_EVID_VALIDATION_UNABLE =       0x20,
                     55:        /** Attempted validation, verification failed */
                     56:        PTS_COMP_EVID_VALIDATION_FAILED =       0x40,
                     57:        /** Attempted validation, verification passed */
                     58:        PTS_COMP_EVID_VALIDATION_PASSED =       0x60,
                     59: };
                     60: 
                     61: /**
                     62:  * PTS Functional Component Interface
                     63:  */
                     64: struct pts_comp_evidence_t {
                     65: 
                     66:        /**
                     67:         * Gets the Component Functional Name and Sub-Component Depth
                     68:         *
                     69:         * @param depth                         Sub-Component Depth
                     70:         * @result                                      Component Functional Name
                     71:         */
                     72:        pts_comp_func_name_t* (*get_comp_func_name)(pts_comp_evidence_t *this,
                     73:                                                                                                uint32_t *depth);
                     74: 
                     75:        /**
                     76:         * Gets the PCR the measurement was extended into
                     77:         *
                     78:         * @result                                      PCR the measurement was extended into
                     79:         */
                     80:        uint32_t (*get_extended_pcr)(pts_comp_evidence_t *this);
                     81: 
                     82:        /**
                     83:         * Gets the measurement and the algorithms used
                     84:         *
                     85:         * @param extended_pcr          PCR the measurement was extended into
                     86:         * @param algo                          Measurement hash algorithm
                     87:         * @param transform                     Transformation used for PCR extension
                     88:         * @param measurement_time      Time the measurement was taken
                     89:         * @result                                      Measurement hash value
                     90:         */
                     91:        chunk_t (*get_measurement)(pts_comp_evidence_t *this,
                     92:                                                           uint32_t *extended_pcr,
                     93:                                                           pts_meas_algorithms_t *algo,
                     94:                                                           pts_pcr_transform_t *transform,
                     95:                                                           time_t *measurement_time);
                     96: 
                     97:        /**
                     98:         * Gets the PCR information if available
                     99:         *
                    100:         * @param pcr_before            PCR value before extension
                    101:         * @param pcr_after                     PCR value after extension
                    102:         * @result                                      TRUE if PCR information is available
                    103:         */
                    104:        bool (*get_pcr_info)(pts_comp_evidence_t *this, chunk_t *pcr_before,
                    105:                                                                                                        chunk_t *pcr_after);
                    106: 
                    107:        /**
                    108:         * Sets PCR information if available
                    109:         *
                    110:         * @param pcr_before            PCR value before extension
                    111:         * @param pcr_after                     PCR value after extension
                    112:         */
                    113:        void (*set_pcr_info)(pts_comp_evidence_t *this, chunk_t pcr_before,
                    114:                                                                                                        chunk_t pcr_after);
                    115: 
                    116:        /**
                    117:         * Gets Validation Result if available
                    118:         *
                    119:         * @param uri                           Verification Policy URI
                    120:         * @return validation           Validation Result
                    121:         */
                    122:        pts_comp_evid_validation_t (*get_validation)(pts_comp_evidence_t *this,
                    123:                                                                char **uri);
                    124: 
                    125:        /**
                    126:         * Sets Validation Result if available
                    127:         *
                    128:         * @param validation            Validation Result
                    129:         * @param uri                           Verification Policy URI
                    130:         */
                    131:        void (*set_validation)(pts_comp_evidence_t *this,
                    132:                                                   pts_comp_evid_validation_t validation, char* uri);
                    133: 
                    134:        /**
                    135:         * Destroys a pts_comp_evidence_t object.
                    136:         */
                    137:        void (*destroy)(pts_comp_evidence_t *this);
                    138: 
                    139: };
                    140: 
                    141: /**
                    142:  * Creates a pts_comp_evidence_t object
                    143:  *
                    144:  * @param name                                 Component Functional Name
                    145:  * @param depth                                        Sub-component depth
                    146:  * @param extended_pcr                 PCR the measurement was extended into
                    147:  * @param algo                                 Measurement hash algorithm
                    148:  * @param transform                            Transformation used for PCR extension
                    149:  * @param measurement_time             Time the measurement was taken, 0 if unknown
                    150:  * @param measurement                  Measurement hash value
                    151:  */
                    152: pts_comp_evidence_t* pts_comp_evidence_create(pts_comp_func_name_t *name,
                    153:                                                                                          uint32_t depth,
                    154:                                                                                          uint32_t extended_pcr,
                    155:                                                                                          pts_meas_algorithms_t algo,
                    156:                                                                                          pts_pcr_transform_t transform,
                    157:                                                                                          time_t measurement_time,
                    158:                                                                                          chunk_t measurement);
                    159: 
                    160: /**
                    161:  * Determine transform to fit measurement hash into PCR register
                    162:  *
                    163:  * @param algo                                 Measurement hash algorithm
                    164:  * @param pcr_len                              Length of the PCR registers in bytes
                    165:  * @return                                             PCR transform type
                    166:  */
                    167: pts_pcr_transform_t pts_meas_algo_to_pcr_transform(pts_meas_algorithms_t algo,
                    168:                                                                                                   size_t pcr_len);
                    169: 
                    170: #endif /** PTS_COMP_EVIDENCE_H_ @}*/

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