1 #ifndef CERTPATHVALIDATORRESULT_H_ 2 #define CERTPATHVALIDATORRESULT_H_ 5 #include <openssl/x509_vfy.h> 6 #include <openssl/x509.h> 39 UNABLE_TO_GET_ISSUER_CERT = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT,
41 UNABLE_TO_GET_CRL = X509_V_ERR_UNABLE_TO_GET_CRL,
43 UNABLE_TO_DECRYPT_CERT_SIGNATURE = X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE,
45 UNABLE_TO_DECRYPT_CRL_SIGNATURE = X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE,
47 UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY,
49 CERT_SIGNATURE_FAILURE = X509_V_ERR_CERT_SIGNATURE_FAILURE,
51 CRL_SIGNATURE_FAILURE = X509_V_ERR_CRL_SIGNATURE_FAILURE,
53 CERT_NOT_YET_VALID = X509_V_ERR_CERT_NOT_YET_VALID,
55 CRL_NOT_YET_VALID = X509_V_ERR_CRL_NOT_YET_VALID,
57 CERT_HAS_EXPIRED = X509_V_ERR_CERT_HAS_EXPIRED,
59 CRL_HAS_EXPIRED = X509_V_ERR_CRL_HAS_EXPIRED,
61 ERROR_IN_CERT_NOT_BEFORE_FIELD = X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD,
63 ERROR_IN_CERT_NOT_AFTER_FIELD = X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD,
65 ERROR_IN_CRL_LAST_UPDATE_FIELD = X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD,
67 ERROR_IN_CRL_NEXT_UPDATE_FIELD = X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD,
69 OUT_OF_MEM = X509_V_ERR_OUT_OF_MEM,
71 DEPTH_ZERO_SELF_SIGNED_CERT = X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,
73 SELF_SIGNED_CERT_IN_CHAIN = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN,
75 UNABLE_TO_GET_ISSUER_CERT_LOCALLY = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
77 UNABLE_TO_VERIFY_LEAF_SIGNATURE = X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE,
79 CERT_CHAIN_TOO_LONG = X509_V_ERR_CERT_CHAIN_TOO_LONG,
81 CERT_REVOKED = X509_V_ERR_CERT_REVOKED,
83 INVALID_CA = X509_V_ERR_INVALID_CA,
85 INVALID_NON_CA =X509_V_ERR_INVALID_NON_CA,
87 PATH_LENGTH_EXCEEDED = X509_V_ERR_PATH_LENGTH_EXCEEDED,
89 PROXY_PATH_LENGTH_EXCEEDED = X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED,
91 PROXY_CERTIFICATES_NOT_ALLOWED = X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED,
93 INVALID_PURPOSE = X509_V_ERR_INVALID_PURPOSE,
95 CERT_UNTRUSTED = X509_V_ERR_CERT_UNTRUSTED,
97 CERT_REJECTED = X509_V_ERR_CERT_REJECTED,
99 APPLICATION_VERIFICATION = X509_V_ERR_APPLICATION_VERIFICATION,
101 SUBJECT_ISSUER_MISMATCH = X509_V_ERR_SUBJECT_ISSUER_MISMATCH,
103 AKID_SKID_MISMATCH = X509_V_ERR_AKID_SKID_MISMATCH,
105 AKID_ISSUER_SERIAL_MISMATCH = X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH,
107 KEYUSAGE_NO_CERTSIGN = X509_V_ERR_KEYUSAGE_NO_CERTSIGN,
109 UNABLE_TO_GET_CRL_ISSUER = X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER,
111 UNHANDLED_CRITICAL_EXTENSION = X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION,
113 KEYUSAGE_NO_CRL_SIGN = X509_V_ERR_KEYUSAGE_NO_CRL_SIGN,
115 KEYUSAGE_NO_DIGITAL_SIGNATURE = X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE,
117 UNHANDLED_CRITICAL_CRL_EXTENSION = X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION,
119 NO_EXPLICIT_POLICY = X509_V_ERR_NO_EXPLICIT_POLICY
137 : invalidCert(new
Certificate(cve.getInvalidCertificate())),
138 depth(cve.getDepth()), errorCode(cve.getErrorCode()), details(cve.getDetails())
147 delete this->invalidCert;
157 this->errorCode = error;
166 this->details = details;
175 return this->errorCode;
184 return this->details;
207 X509_NAME_oneline(X509_get_subject_name(this->invalidCert->getX509()), buf,
sizeof(buf));
209 ret =
"Invalid certificate: " + string(buf) +
"\n";
210 ret = ret +
"Depth: " + s.str() +
"\n";
211 ret = ret +
"Error: " + this->getMessage();
223 return this->errorCode;
239 case UNABLE_TO_GET_ISSUER_CERT:
240 ret =
"unable to get issuer certificate";
242 case UNABLE_TO_GET_CRL:
243 ret =
"unable to get certificate CRL";
245 case UNABLE_TO_DECRYPT_CERT_SIGNATURE:
246 ret =
"unable to decrypt certificate's signature";
248 case UNABLE_TO_DECRYPT_CRL_SIGNATURE:
249 ret =
"unable to decrypt CRL's signature";
251 case UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
252 ret =
"unable to decode issuer public key";
254 case CERT_SIGNATURE_FAILURE:
255 ret =
"certificate signature failure";
257 case CRL_SIGNATURE_FAILURE:
258 ret =
"CRL signature failure";
260 case CERT_NOT_YET_VALID:
261 ret =
"certificate is not yet valid";
263 case CRL_NOT_YET_VALID:
264 ret =
"CRL is not yet valid";
266 case CERT_HAS_EXPIRED:
267 ret =
"certificate has expired";
269 case CRL_HAS_EXPIRED:
270 ret =
"CRL has expired";
272 case ERROR_IN_CERT_NOT_BEFORE_FIELD:
273 ret =
"format error in certificate's notBefore field";
275 case ERROR_IN_CERT_NOT_AFTER_FIELD:
276 ret =
"format error in certificate's notAfter field";
278 case ERROR_IN_CRL_LAST_UPDATE_FIELD:
279 ret =
"format error in CRL's lastUpdate field";
281 case ERROR_IN_CRL_NEXT_UPDATE_FIELD:
282 ret =
"format error in CRL's nextUpdate field";
285 ret =
"out of memory";
287 case DEPTH_ZERO_SELF_SIGNED_CERT:
288 ret =
"self signed certificate";
290 case SELF_SIGNED_CERT_IN_CHAIN:
291 ret =
"self signed certificate in certificate chain";
293 case UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
294 ret =
"unable to get local issuer certificate";
296 case UNABLE_TO_VERIFY_LEAF_SIGNATURE:
297 ret =
"unable to verify the first certificate";
299 case CERT_CHAIN_TOO_LONG:
300 ret =
"certificate chain too long";
303 ret =
"certificate revoked";
306 ret =
"invalid CA certificate";
309 ret =
"invalid non-CA certificate has CA markings";
311 case PATH_LENGTH_EXCEEDED:
312 ret =
"path length constraint exceeded";
314 case PROXY_PATH_LENGTH_EXCEEDED:
315 ret =
"proxy path length constraint exceeded";
317 case PROXY_CERTIFICATES_NOT_ALLOWED:
318 ret =
"proxy cerificates not allowed, please set the appropriate flag";
320 case INVALID_PURPOSE:
321 ret =
"unsupported certificate purpose";
324 ret =
"certificate not trusted";
327 ret =
"certificate rejected";
329 case APPLICATION_VERIFICATION:
330 ret =
"application verification failure";
332 case SUBJECT_ISSUER_MISMATCH:
333 ret =
"subject issuer mismatch";
335 case AKID_SKID_MISMATCH:
336 ret =
"authority and subject key identifier mismatch";
338 case AKID_ISSUER_SERIAL_MISMATCH:
339 ret =
"authority and issuer serial number mismatch";
341 case KEYUSAGE_NO_CERTSIGN:
342 ret =
"key usage does not include certificate signing";
344 case UNABLE_TO_GET_CRL_ISSUER:
345 ret =
"unable to get CRL issuer certificate";
347 case UNHANDLED_CRITICAL_EXTENSION:
348 ret =
"unhandled critical extension";
350 case KEYUSAGE_NO_CRL_SIGN:
351 ret =
"key usage does not include CRL signing";
353 case KEYUSAGE_NO_DIGITAL_SIGNATURE:
354 ret =
"key usage does not include digital signature";
356 case UNHANDLED_CRITICAL_CRL_EXTENSION:
357 ret =
"unhandled critical CRL extension";
359 case NO_EXPLICIT_POLICY:
360 ret =
"no explicit policy";
363 ret =
"unknown error";
374 X509 *newCert = X509_dup(cert->
getX509());
384 return *this->invalidCert;
411 this->validationFlags.push_back(flag);
420 this->validationFlags = flags;
439 return this->validationFlags;
456 case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
457 ret = UNABLE_TO_GET_ISSUER_CERT;
459 case X509_V_ERR_UNABLE_TO_GET_CRL:
460 ret = UNABLE_TO_GET_CRL;
462 case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
463 ret = UNABLE_TO_DECRYPT_CERT_SIGNATURE;
465 case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE:
466 ret = UNABLE_TO_DECRYPT_CRL_SIGNATURE;
468 case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
469 ret = UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;
471 case X509_V_ERR_CERT_SIGNATURE_FAILURE:
472 ret = CERT_SIGNATURE_FAILURE;
474 case X509_V_ERR_CRL_SIGNATURE_FAILURE:
475 ret = CRL_SIGNATURE_FAILURE;
477 case X509_V_ERR_CERT_NOT_YET_VALID:
478 ret = CERT_NOT_YET_VALID;
480 case X509_V_ERR_CRL_NOT_YET_VALID:
481 ret = CRL_NOT_YET_VALID;
483 case X509_V_ERR_CERT_HAS_EXPIRED:
484 ret = CERT_HAS_EXPIRED;
486 case X509_V_ERR_CRL_HAS_EXPIRED:
487 ret = CRL_HAS_EXPIRED;
489 case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
490 ret = ERROR_IN_CERT_NOT_BEFORE_FIELD;
492 case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
493 ret = ERROR_IN_CERT_NOT_AFTER_FIELD;
495 case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD:
496 ret = ERROR_IN_CRL_LAST_UPDATE_FIELD;
498 case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD:
499 ret = ERROR_IN_CRL_NEXT_UPDATE_FIELD;
501 case X509_V_ERR_OUT_OF_MEM:
504 case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
505 ret = DEPTH_ZERO_SELF_SIGNED_CERT;
507 case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
508 ret = SELF_SIGNED_CERT_IN_CHAIN;
510 case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
511 ret = UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
513 case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
514 ret = UNABLE_TO_VERIFY_LEAF_SIGNATURE;
516 case X509_V_ERR_CERT_CHAIN_TOO_LONG:
517 ret = CERT_CHAIN_TOO_LONG;
519 case X509_V_ERR_CERT_REVOKED:
522 case X509_V_ERR_INVALID_CA:
525 case X509_V_ERR_INVALID_NON_CA:
526 ret = INVALID_NON_CA;
528 case X509_V_ERR_PATH_LENGTH_EXCEEDED:
529 ret = PATH_LENGTH_EXCEEDED;
531 case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED:
532 ret = PROXY_PATH_LENGTH_EXCEEDED;
534 case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED:
535 ret = PROXY_CERTIFICATES_NOT_ALLOWED;
537 case X509_V_ERR_INVALID_PURPOSE:
538 ret = INVALID_PURPOSE;
540 case X509_V_ERR_CERT_UNTRUSTED:
541 ret = CERT_UNTRUSTED;
543 case X509_V_ERR_CERT_REJECTED:
546 case X509_V_ERR_APPLICATION_VERIFICATION:
547 ret = APPLICATION_VERIFICATION;
549 case X509_V_ERR_SUBJECT_ISSUER_MISMATCH:
550 ret = SUBJECT_ISSUER_MISMATCH;
552 case X509_V_ERR_AKID_SKID_MISMATCH:
553 ret = AKID_SKID_MISMATCH;
555 case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH:
556 ret = AKID_ISSUER_SERIAL_MISMATCH;
558 case X509_V_ERR_KEYUSAGE_NO_CERTSIGN:
559 ret = KEYUSAGE_NO_CERTSIGN;
561 case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER:
562 ret = UNABLE_TO_GET_CRL_ISSUER;
564 case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
565 ret = UNHANDLED_CRITICAL_EXTENSION;
567 case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN:
568 ret = KEYUSAGE_NO_CRL_SIGN;
570 case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE:
571 ret = KEYUSAGE_NO_DIGITAL_SIGNATURE;
573 case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION:
574 ret = UNHANDLED_CRITICAL_CRL_EXTENSION;
576 case X509_V_ERR_NO_EXPLICIT_POLICY:
577 ret = NO_EXPLICIT_POLICY;
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