libcryptosec
CertPathValidatorResult.h
Go to the documentation of this file.
1 #ifndef CERTPATHVALIDATORRESULT_H_
2 #define CERTPATHVALIDATORRESULT_H_
3 
4 
5 #include <openssl/x509_vfy.h>
6 #include <openssl/x509.h>
7 #include <string>
8 #include <sstream>
9 #include <vector>
10 #include "Certificate.h"
11 #include "ValidationFlags.h"
12 
13 using namespace std;
14 
15 /*
16  * @ingroup Util
17  * */
18 
19 /*
20  * @brief Encapsula informações sobre o resultado de uma validação de certificado X509.
21  * */
23 {
24 
25 public:
26 
33  enum ErrorCode
34  {
36 
37  OK = X509_V_OK,
38 
39  UNABLE_TO_GET_ISSUER_CERT = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT,
40 
41  UNABLE_TO_GET_CRL = X509_V_ERR_UNABLE_TO_GET_CRL,
42 
43  UNABLE_TO_DECRYPT_CERT_SIGNATURE = X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE,
44 
45  UNABLE_TO_DECRYPT_CRL_SIGNATURE = X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE,
46 
47  UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY,
48 
49  CERT_SIGNATURE_FAILURE = X509_V_ERR_CERT_SIGNATURE_FAILURE,
50 
51  CRL_SIGNATURE_FAILURE = X509_V_ERR_CRL_SIGNATURE_FAILURE,
52 
53  CERT_NOT_YET_VALID = X509_V_ERR_CERT_NOT_YET_VALID,
54 
55  CRL_NOT_YET_VALID = X509_V_ERR_CRL_NOT_YET_VALID,
56 
57  CERT_HAS_EXPIRED = X509_V_ERR_CERT_HAS_EXPIRED,
58 
59  CRL_HAS_EXPIRED = X509_V_ERR_CRL_HAS_EXPIRED,
60 
61  ERROR_IN_CERT_NOT_BEFORE_FIELD = X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD,
62 
63  ERROR_IN_CERT_NOT_AFTER_FIELD = X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD,
64 
65  ERROR_IN_CRL_LAST_UPDATE_FIELD = X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD,
66 
67  ERROR_IN_CRL_NEXT_UPDATE_FIELD = X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD,
68 
69  OUT_OF_MEM = X509_V_ERR_OUT_OF_MEM,
70 
71  DEPTH_ZERO_SELF_SIGNED_CERT = X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,
72 
73  SELF_SIGNED_CERT_IN_CHAIN = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN,
74 
75  UNABLE_TO_GET_ISSUER_CERT_LOCALLY = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
76 
77  UNABLE_TO_VERIFY_LEAF_SIGNATURE = X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE,
78 
79  CERT_CHAIN_TOO_LONG = X509_V_ERR_CERT_CHAIN_TOO_LONG,
80 
81  CERT_REVOKED = X509_V_ERR_CERT_REVOKED,
82 
83  INVALID_CA = X509_V_ERR_INVALID_CA,
84 
85  INVALID_NON_CA =X509_V_ERR_INVALID_NON_CA,
86 
87  PATH_LENGTH_EXCEEDED = X509_V_ERR_PATH_LENGTH_EXCEEDED,
88 
89  PROXY_PATH_LENGTH_EXCEEDED = X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED,
90 
91  PROXY_CERTIFICATES_NOT_ALLOWED = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED,
92 
93  INVALID_PURPOSE = X509_V_ERR_INVALID_PURPOSE,
94 
95  CERT_UNTRUSTED = X509_V_ERR_CERT_UNTRUSTED,
96 
97  CERT_REJECTED = X509_V_ERR_CERT_REJECTED,
98 
99  APPLICATION_VERIFICATION = X509_V_ERR_APPLICATION_VERIFICATION,
100 
101  SUBJECT_ISSUER_MISMATCH = X509_V_ERR_SUBJECT_ISSUER_MISMATCH,
102 
103  AKID_SKID_MISMATCH = X509_V_ERR_AKID_SKID_MISMATCH,
104 
105  AKID_ISSUER_SERIAL_MISMATCH = X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH,
106 
107  KEYUSAGE_NO_CERTSIGN = X509_V_ERR_KEYUSAGE_NO_CERTSIGN,
108 
109  UNABLE_TO_GET_CRL_ISSUER = X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER,
110 
111  UNHANDLED_CRITICAL_EXTENSION = X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION,
112 
113  KEYUSAGE_NO_CRL_SIGN = X509_V_ERR_KEYUSAGE_NO_CRL_SIGN,
114 
115  KEYUSAGE_NO_DIGITAL_SIGNATURE = X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE,
116 
117  UNHANDLED_CRITICAL_CRL_EXTENSION = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION,
118 
119  NO_EXPLICIT_POLICY = X509_V_ERR_NO_EXPLICIT_POLICY
120 
121  };
122 
123 public:
124 
125  /*
126  * Construtor padrão.
127  * */
128  CertPathValidatorResult() : invalidCert(NULL), depth(0), errorCode(UNKNOWN), details(""), validationFlags(vector<ValidationFlags>())
129  {
130  }
131 
132  /*
133  * Construtor de cópia.
134  * @param cve referência para o objeto CertPathValidatorResult a ser copiado.
135  * */
137  : invalidCert(new Certificate(cve.getInvalidCertificate())),
138  depth(cve.getDepth()), errorCode(cve.getErrorCode()), details(cve.getDetails())
139  {
140  }
141 
142  /*
143  * Destrutor.
144  * */
146  {
147  delete this->invalidCert;
148  }
149 
150 
151  /*
152  * Define erro de validação
153  * @param error enum ErrorCode.
154  * */
155  virtual void setErrorCode(ErrorCode error)
156  {
157  this->errorCode = error;
158  }
159 
160  /*
161  * Define string de detalhes.
162  * @param details string de detalhes.
163  * */
164  virtual void setDetails(string details)
165  {
166  this->details = details;
167  }
168 
169  /*
170  * Retorna erro de validação.
171  * @return enum ErrorCode.
172  * */
173  virtual ErrorCode getErrorType() const
174  {
175  return this->errorCode;
176  }
177 
178  /*
179  * Retorna detalhes da validação.
180  * @return string.
181  * */
182  virtual string getDetails()const
183  {
184  return this->details;
185  }
186 
187  /*
188  * Traduz erro de validação para a string correspondente.
189  * @return string correspondente ao erro de validação.
190  * */
191  virtual string getMessage() const
192  {
193  return (CertPathValidatorResult::errorCode2Message(this->errorCode));
194  }
195 
196  /*
197  * Retorna mensagem detalhada sobre a validação de um certificado.
198  * @return string contendo mensagem detalhada sobre a validação de um certificado.
199  * */
200  virtual std::string toString() const
201  {
202  char buf[256];
203  stringstream s;
204  string ret;
205 
206  s << this->depth;
207  X509_NAME_oneline(X509_get_subject_name(this->invalidCert->getX509()), buf, sizeof(buf));
208 
209  ret = "Invalid certificate: " + string(buf) + "\n";
210  ret = ret + "Depth: " + s.str() + "\n";
211  ret = ret + "Error: " + this->getMessage();
212 
213  return ret;
214  }
215 
216  /*
217  * Retorna código de erro da validação de certificado.
218  * @return ErroCode correspondente ao erro de validação.
219  *
220  * **/
221  virtual ErrorCode getErrorCode() const
222  {
223  return this->errorCode;
224  }
225 
226  /*
227  * Traduz erro de validação para a string correspondente.
228  * @return string correspondente ao erro de validação.
229  * */
230  static string errorCode2Message(ErrorCode errorCode)
231  {
232  string ret;
233  switch (errorCode)
234  {
235  case OK:
236  ret = "ok";
237  break;
238 
239  case UNABLE_TO_GET_ISSUER_CERT:
240  ret = "unable to get issuer certificate";
241  break;
242  case UNABLE_TO_GET_CRL:
243  ret = "unable to get certificate CRL";
244  break;
245  case UNABLE_TO_DECRYPT_CERT_SIGNATURE:
246  ret = "unable to decrypt certificate's signature";
247  break;
248  case UNABLE_TO_DECRYPT_CRL_SIGNATURE:
249  ret = "unable to decrypt CRL's signature";
250  break;
251  case UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
252  ret = "unable to decode issuer public key";
253  break;
254  case CERT_SIGNATURE_FAILURE:
255  ret = "certificate signature failure";
256  break;
257  case CRL_SIGNATURE_FAILURE:
258  ret = "CRL signature failure";
259  break;
260  case CERT_NOT_YET_VALID:
261  ret = "certificate is not yet valid";
262  break;
263  case CRL_NOT_YET_VALID:
264  ret = "CRL is not yet valid";
265  break;
266  case CERT_HAS_EXPIRED:
267  ret = "certificate has expired";
268  break;
269  case CRL_HAS_EXPIRED:
270  ret = "CRL has expired";
271  break;
272  case ERROR_IN_CERT_NOT_BEFORE_FIELD:
273  ret = "format error in certificate's notBefore field";
274  break;
275  case ERROR_IN_CERT_NOT_AFTER_FIELD:
276  ret = "format error in certificate's notAfter field";
277  break;
278  case ERROR_IN_CRL_LAST_UPDATE_FIELD:
279  ret = "format error in CRL's lastUpdate field";
280  break;
281  case ERROR_IN_CRL_NEXT_UPDATE_FIELD:
282  ret = "format error in CRL's nextUpdate field";
283  break;
284  case OUT_OF_MEM:
285  ret = "out of memory";
286  break;
287  case DEPTH_ZERO_SELF_SIGNED_CERT:
288  ret = "self signed certificate";
289  break;
290  case SELF_SIGNED_CERT_IN_CHAIN:
291  ret = "self signed certificate in certificate chain";
292  break;
293  case UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
294  ret = "unable to get local issuer certificate";
295  break;
296  case UNABLE_TO_VERIFY_LEAF_SIGNATURE:
297  ret = "unable to verify the first certificate";
298  break;
299  case CERT_CHAIN_TOO_LONG:
300  ret = "certificate chain too long";
301  break;
302  case CERT_REVOKED:
303  ret = "certificate revoked";
304  break;
305  case INVALID_CA:
306  ret = "invalid CA certificate";
307  break;
308  case INVALID_NON_CA:
309  ret = "invalid non-CA certificate has CA markings";
310  break;
311  case PATH_LENGTH_EXCEEDED:
312  ret = "path length constraint exceeded";
313  break;
314  case PROXY_PATH_LENGTH_EXCEEDED:
315  ret = "proxy path length constraint exceeded";
316  break;
317  case PROXY_CERTIFICATES_NOT_ALLOWED:
318  ret = "proxy cerificates not allowed, please set the appropriate flag";
319  break;
320  case INVALID_PURPOSE:
321  ret = "unsupported certificate purpose";
322  break;
323  case CERT_UNTRUSTED:
324  ret = "certificate not trusted";
325  break;
326  case CERT_REJECTED:
327  ret = "certificate rejected";
328  break;
329  case APPLICATION_VERIFICATION:
330  ret = "application verification failure";
331  break;
332  case SUBJECT_ISSUER_MISMATCH:
333  ret = "subject issuer mismatch";
334  break;
335  case AKID_SKID_MISMATCH:
336  ret = "authority and subject key identifier mismatch";
337  break;
338  case AKID_ISSUER_SERIAL_MISMATCH:
339  ret = "authority and issuer serial number mismatch";
340  break;
341  case KEYUSAGE_NO_CERTSIGN:
342  ret = "key usage does not include certificate signing";
343  break;
344  case UNABLE_TO_GET_CRL_ISSUER:
345  ret = "unable to get CRL issuer certificate";
346  break;
347  case UNHANDLED_CRITICAL_EXTENSION:
348  ret = "unhandled critical extension";
349  break;
350  case KEYUSAGE_NO_CRL_SIGN:
351  ret = "key usage does not include CRL signing";
352  break;
353  case KEYUSAGE_NO_DIGITAL_SIGNATURE:
354  ret = "key usage does not include digital signature";
355  break;
356  case UNHANDLED_CRITICAL_CRL_EXTENSION:
357  ret = "unhandled critical CRL extension";
358  break;
359  case NO_EXPLICIT_POLICY:
360  ret = "no explicit policy";
361  break;
362  default:
363  ret = "unknown error";
364  }
365  return ret;
366  }
367 
368  /*
369  * Define o certificado submetido a validação.
370  * @param cert ponteiro para o objeto Certificate.
371  * */
372  virtual void setInvalidCertificate(Certificate *cert)
373  {
374  X509 *newCert = X509_dup(cert->getX509());
375  this->invalidCert = new Certificate(newCert);
376  }
377 
378  /*
379  * Retorna o certificado submetido a validação.
380  * @return referência para o certificado submetido a validação.
381  * */
383  {
384  return *this->invalidCert;
385  }
386 
387  /*
388  * Retorna profundidade em que ocorreu erro de validação.
389  * @return inteiro correspondente à profundidade em que ocorreu erro de validação.
390  */
391  virtual int getDepth() const
392  {
393  return this->depth;
394  }
395 
396  /*
397  * Define profundidade em que ocorreu erro de validação.
398  * @param depth inteiro correspondente à profundidade em que ocorreu erro de validação.
399  * */
400  virtual void setDepth(int depth)
401  {
402  this->depth = depth;
403  }
404 
405  /*
406  * Adiciona uma opção de validação.
407  * @param flag item enum ValidationFlag.
408  * */
410  {
411  this->validationFlags.push_back(flag);
412  }
413 
414  /*
415  * Define opções de validação.
416  * @param vetor com as opções de validação. Se o método for chamado sem parâmetro, as opções são resetadas.
417  * */
418  virtual void setValidationFlag(vector<ValidationFlags> flags = vector<ValidationFlags>())
419  {
420  this->validationFlags = flags;
421  }
422 
423  /*
424  * Retorna as opções de validação definidas.
425  * @return vetor de ValidationFlags.
426  * */
427  virtual vector<ValidationFlags> getValidationFlags()
428  {
429  //codigo antigo, utilizando this->validationFlags com um unsigned int
430 /* vector<ValidationFlags> flags;
431 
432  if(!(this->validationFlags & X509_V_FLAG_CRL_CHECK))
433  flags.push_back(CRL_CHECK);
434 
435  if(!(this->validationFlags & X509_V_FLAG_CRL_CHECK_ALL))
436  flags.push_back(CRL_CHECK_ALL);
437 
438  return flags;*/
439  return this->validationFlags;
440  }
441 
442  /*
443  * Mapeia as constantes de erro de validação do OpenSSL para a enum ErrorCode.
444  * @param n constante de erro de validação do OpenSSL.
445  * @return enum ErrorCode correspondente.
446  * */
447  static ErrorCode long2ErrorCode(long n)
448  {
449  ErrorCode ret;
450 
451  switch (n)
452  {
453  case X509_V_OK:
454  ret = OK;
455  break;
456  case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
457  ret = UNABLE_TO_GET_ISSUER_CERT;
458  break;
459  case X509_V_ERR_UNABLE_TO_GET_CRL:
460  ret = UNABLE_TO_GET_CRL;
461  break;
462  case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
463  ret = UNABLE_TO_DECRYPT_CERT_SIGNATURE;
464  break;
465  case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE:
466  ret = UNABLE_TO_DECRYPT_CRL_SIGNATURE;
467  break;
468  case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
469  ret = UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;
470  break;
471  case X509_V_ERR_CERT_SIGNATURE_FAILURE:
472  ret = CERT_SIGNATURE_FAILURE;
473  break;
474  case X509_V_ERR_CRL_SIGNATURE_FAILURE:
475  ret = CRL_SIGNATURE_FAILURE;
476  break;
477  case X509_V_ERR_CERT_NOT_YET_VALID:
478  ret = CERT_NOT_YET_VALID;
479  break;
480  case X509_V_ERR_CRL_NOT_YET_VALID:
481  ret = CRL_NOT_YET_VALID;
482  break;
483  case X509_V_ERR_CERT_HAS_EXPIRED:
484  ret = CERT_HAS_EXPIRED;
485  break;
486  case X509_V_ERR_CRL_HAS_EXPIRED:
487  ret = CRL_HAS_EXPIRED;
488  break;
489  case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
490  ret = ERROR_IN_CERT_NOT_BEFORE_FIELD;
491  break;
492  case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
493  ret = ERROR_IN_CERT_NOT_AFTER_FIELD;
494  break;
495  case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD:
496  ret = ERROR_IN_CRL_LAST_UPDATE_FIELD;
497  break;
498  case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD:
499  ret = ERROR_IN_CRL_NEXT_UPDATE_FIELD;
500  break;
501  case X509_V_ERR_OUT_OF_MEM:
502  ret = OUT_OF_MEM;
503  break;
504  case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
505  ret = DEPTH_ZERO_SELF_SIGNED_CERT;
506  break;
507  case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
508  ret = SELF_SIGNED_CERT_IN_CHAIN;
509  break;
510  case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
511  ret = UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
512  break;
513  case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
514  ret = UNABLE_TO_VERIFY_LEAF_SIGNATURE;
515  break;
516  case X509_V_ERR_CERT_CHAIN_TOO_LONG:
517  ret = CERT_CHAIN_TOO_LONG;
518  break;
519  case X509_V_ERR_CERT_REVOKED:
520  ret = CERT_REVOKED;
521  break;
522  case X509_V_ERR_INVALID_CA:
523  ret = INVALID_CA;
524  break;
525  case X509_V_ERR_INVALID_NON_CA:
526  ret = INVALID_NON_CA;
527  break;
528  case X509_V_ERR_PATH_LENGTH_EXCEEDED:
529  ret = PATH_LENGTH_EXCEEDED;
530  break;
531  case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED:
532  ret = PROXY_PATH_LENGTH_EXCEEDED;
533  break;
534  case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED:
535  ret = PROXY_CERTIFICATES_NOT_ALLOWED;
536  break;
537  case X509_V_ERR_INVALID_PURPOSE:
538  ret = INVALID_PURPOSE;
539  break;
540  case X509_V_ERR_CERT_UNTRUSTED:
541  ret = CERT_UNTRUSTED;
542  break;
543  case X509_V_ERR_CERT_REJECTED:
544  ret = CERT_REJECTED;
545  break;
546  case X509_V_ERR_APPLICATION_VERIFICATION:
547  ret = APPLICATION_VERIFICATION;
548  break;
549  case X509_V_ERR_SUBJECT_ISSUER_MISMATCH:
550  ret = SUBJECT_ISSUER_MISMATCH;
551  break;
552  case X509_V_ERR_AKID_SKID_MISMATCH:
553  ret = AKID_SKID_MISMATCH;
554  break;
555  case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH:
556  ret = AKID_ISSUER_SERIAL_MISMATCH;
557  break;
558  case X509_V_ERR_KEYUSAGE_NO_CERTSIGN:
559  ret = KEYUSAGE_NO_CERTSIGN;
560  break;
561  case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER:
562  ret = UNABLE_TO_GET_CRL_ISSUER;
563  break;
564  case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
565  ret = UNHANDLED_CRITICAL_EXTENSION;
566  break;
567  case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN:
568  ret = KEYUSAGE_NO_CRL_SIGN;
569  break;
570  case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE:
571  ret = KEYUSAGE_NO_DIGITAL_SIGNATURE;
572  break;
573  case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION:
574  ret = UNHANDLED_CRITICAL_CRL_EXTENSION;
575  break;
576  case X509_V_ERR_NO_EXPLICIT_POLICY:
577  ret = NO_EXPLICIT_POLICY;
578  break;
579  default:
580  ret = UNKNOWN;
581  }
582 
583  return ret;
584  }
585 
586 protected:
587  /*
588  * Certificado submetido a validação.
589  * */
591 
592  /*
593  * Profundidade em que ocorreu erro de validação.
594  * */
595  int depth;
596 
597  /*
598  * Erro de validação.
599  * */
601 
602  /*
603  * Detalhes da validação.
604  * */
605  string details;
606 
607  /*
608  * Opções de validação.
609  * */
610  vector<ValidationFlags> validationFlags;
611 };
612 
613 #endif /*CERTPATHVALIDATORRESULT_H_*/
Definition: CertPathValidatorResult.h:22
virtual string getDetails() const
Definition: CertPathValidatorResult.h:182
int depth
Definition: CertPathValidatorResult.h:595
virtual ErrorCode getErrorType() const
Definition: CertPathValidatorResult.h:173
virtual ~CertPathValidatorResult()
Definition: CertPathValidatorResult.h:145
CertPathValidatorResult(const CertPathValidatorResult &cve)
Definition: CertPathValidatorResult.h:136
Certificate * invalidCert
Definition: CertPathValidatorResult.h:590
string details
Definition: CertPathValidatorResult.h:605
virtual vector< ValidationFlags > getValidationFlags()
Definition: CertPathValidatorResult.h:427
virtual void setInvalidCertificate(Certificate *cert)
Definition: CertPathValidatorResult.h:372
virtual int getDepth() const
Definition: CertPathValidatorResult.h:391
CertPathValidatorResult()
Definition: CertPathValidatorResult.h:128
static ErrorCode long2ErrorCode(long n)
Definition: CertPathValidatorResult.h:447
ValidationFlags
Definition: ValidationFlags.h:10
virtual string getMessage() const
Definition: CertPathValidatorResult.h:191
static string errorCode2Message(ErrorCode errorCode)
Definition: CertPathValidatorResult.h:230
virtual void setDetails(string details)
Definition: CertPathValidatorResult.h:164
Definition: CertPathValidatorResult.h:35
virtual Certificate & getInvalidCertificate() const
Definition: CertPathValidatorResult.h:382
virtual std::string toString() const
Definition: CertPathValidatorResult.h:200
X509 * getX509() const
Definition: Certificate.cpp:662
ErrorCode errorCode
Definition: CertPathValidatorResult.h:600
virtual ErrorCode getErrorCode() const
Definition: CertPathValidatorResult.h:221
virtual void setErrorCode(ErrorCode error)
Definition: CertPathValidatorResult.h:155
vector< ValidationFlags > validationFlags
Definition: CertPathValidatorResult.h:610
virtual void setValidationFlag(ValidationFlags flag)
Definition: CertPathValidatorResult.h:409
Definition: Certificate.h:38
virtual void setValidationFlag(vector< ValidationFlags > flags=vector< ValidationFlags >())
Definition: CertPathValidatorResult.h:418
virtual void setDepth(int depth)
Definition: CertPathValidatorResult.h:400
ErrorCode
Definition: CertPathValidatorResult.h:33