libcryptosec
CertPathValidator.h
Go to the documentation of this file.
1 #ifndef CERTPATHVALIDATOR_H_
2 #define CERTPATHVALIDATOR_H_
3 
4 #include <vector>
5 #include <time.h>
6 
8 #include "Certificate.h"
10 #include "ValidationFlags.h"
11 #include <libcryptosec/DateTime.h>
12 
13 
22 {
23 public:
24 
25  /*
26  * Construtor.
27  * @param untrusted certificado a ser validado.
28  * @param untrustedChain vetor contendo os certificados do caminho de certificação.
29  * @param trustedChain vetor de certificados confiáveis.
30  * @param when momento do tempo para se considerar a validade dos certificados.
31  * @param crls vetor de LCRs.
32  * @param flags vetor de flags para validação.
33  * @param @result ponteiro para objeto de diagnostico de validação em caso de erro.
34  * */
35  CertPathValidator(Certificate& untrusted, vector<Certificate>& untrustedChain, vector<Certificate>& trustedChain, DateTime when = DateTime(time(NULL)),
36  vector<CertificateRevocationList> crls = vector<CertificateRevocationList>(), vector<ValidationFlags> flags = vector<ValidationFlags>())
37  : flags(flags), when(when), untrusted(untrusted), trustedChain(trustedChain), untrustedChain(untrustedChain), crls(crls)
38  {}
39 
40  /*
41  * Destrutor padrão.
42  * */
43  virtual ~CertPathValidator(){};
44 
45  /*
46  * Define momento do tempo para se considerar a validade dos certificados.
47  * @param when objeto DateTime;
48  * */
49  void setTime(DateTime when);
50 
51  /*
52  * Define o certificado a ser validado.
53  * @param cert referência a um objeto Certificate.
54  * */
55  void setUntrusted(Certificate& cert);
56 
57  /*
58  * Define caminho de certificação
59  * @param certs referência a um vetor de Certificados.
60  * */
61  void setUnstrustedChain(vector<Certificate>& certs);
62 
63  /*
64  * Define certificados confiáveis.
65  * @param certs referência a um vetor de Certificados.
66  * */
67  void setTrustedChain(vector<Certificate>& certs);
68 
69  /*
70  * Define LCRs
71  * Caso use-se a flag CRL_CHECK, deve-se definir a LCR referente ao certificado a ser validado. Já a flag CRL_CHECK_ALL exige que sejam definidas as LCRs de cada certificado do caminho de certificação, incluindo os certificados confiáveis.
72  * @param crls referência a um vetor de CertificateRevocationList.
73  * */
74  void setCrls(vector<CertificateRevocationList>& crls);
75 
76  /*
77  * Define flags de validação
78  * @param flag item da enum ValidationFlags.
79  * */
81 
82  /*
83  * Define objeto de diagnóstico de validação.
84  * @param result ponteiro de ponteiro para objeto CertPathValidatorResult.
85  * */
86  //void setResult(CertPathValidatorResult** result);
87 
88  /*
89  * Realiza validação de certificado.
90  * @return true caso o certificado seja válido. Caso o certificado seja inválido, false é retornado e o objeto CertPathValidatorResult é instanciado.
91  * */
92  bool verify();
93 
94  /*
95  * Retorna se há avisos
96  * @return true se há avisos, false caso contrário.
97  * */
98  bool getWarningsStatus();
99 
100  /*
101  * Retorna informações sobre a execução da validação.
102  * @return vetor de objetos CertPathValidatorResult;
103  * */
104  vector<CertPathValidatorResult> getResults();
105 
106  /*
107  * Função callback de tratamento de erro de validação de assinaturas
108  * @param ok resultado da verificação
109  * @param ctx contexto de certificado
110  * @return 1
111  */
112  static int callback(int ok, X509_STORE_CTX *ctx);
113 
114 protected:
115 
116  /*
117  * Opções de validação.
118  * */
119  vector<ValidationFlags> flags;
120 
121  /*
122  * Momento para se considerar a validade dos certificados.
123  * */
125 
126  /*
127  * Certificado a ser validado.
128  * */
130 
131  /*
132  * Certificados confiáveis
133  * */
134  vector<Certificate>& trustedChain;
135 
136  /*
137  * Caminho de certificação.
138  * É opcional incluir neste vetor o certificado a ser verificado e o a AC Raiz.
139  * */
140  vector<Certificate>& untrustedChain;
141 
142  /*
143  * LCRs para verificar revogação
144  * Deve conter a LCR referente unstrusted se a opção CRL_CHECK é habilitada.
145  * Se CRL_CHECK_ALL está habilitada, crls deve conter as LCRs referentes a cada certificado da cadeia de certificação.s
146  * */
147  vector<CertificateRevocationList> crls;
148 
149  /*
150  * Informações sobre o resultado da validação.
151  * */
152  //CertPathValidatorResult** result;
153 
154  /*
155  * Informações sobre o o resultado da validação.
156  * Esta var estática é utilizada para obter os dados na funcao de callback em C.
157  * Verificar problemas de concorrência com esta variável no caso de multi-threading.
158  * */
159  static vector<CertPathValidatorResult> results;
160 
161 };
162 
163 #endif /*CERTPATHVALIDATOR_H_*/
Implementa a representação da data. É utilizada em certificados, LCRs. Utiliza o formato epoch (time_...
Definition: DateTime.h:27
bool getWarningsStatus()
Definition: CertPathValidator.cpp:166
void setVerificationFlags(ValidationFlags flag)
Definition: CertPathValidator.cpp:39
vector< CertPathValidatorResult > getResults()
Definition: CertPathValidator.cpp:161
void setCrls(vector< CertificateRevocationList > &crls)
Definition: CertPathValidator.cpp:34
vector< ValidationFlags > flags
Definition: CertPathValidator.h:119
bool verify()
Definition: CertPathValidator.cpp:49
vector< Certificate > & trustedChain
Definition: CertPathValidator.h:134
void setTrustedChain(vector< Certificate > &certs)
Definition: CertPathValidator.cpp:29
void setUntrusted(Certificate &cert)
Definition: CertPathValidator.cpp:19
Certificate & untrusted
Definition: CertPathValidator.h:129
Valida certificados X509.
Definition: CertPathValidator.h:21
DateTime when
Definition: CertPathValidator.h:124
virtual ~CertPathValidator()
Definition: CertPathValidator.h:43
void setTime(DateTime when)
Definition: CertPathValidator.cpp:14
ValidationFlags
Definition: ValidationFlags.h:10
static int callback(int ok, X509_STORE_CTX *ctx)
Definition: CertPathValidator.cpp:178
vector< Certificate > & untrustedChain
Definition: CertPathValidator.h:140
CertPathValidator(Certificate &untrusted, vector< Certificate > &untrustedChain, vector< Certificate > &trustedChain, DateTime when=DateTime(time(NULL)), vector< CertificateRevocationList > crls=vector< CertificateRevocationList >(), vector< ValidationFlags > flags=vector< ValidationFlags >())
Definition: CertPathValidator.h:35
static vector< CertPathValidatorResult > results
Definition: CertPathValidator.h:159
void setUnstrustedChain(vector< Certificate > &certs)
Definition: CertPathValidator.cpp:24
Definition: Certificate.h:38
vector< CertificateRevocationList > crls
Definition: CertPathValidator.h:147