2018-05-04 16:08:28 +02:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2015-10-21 05:03:22 +02:00
|
|
|
/*
|
|
|
|
* pkix_revocationchecker.h
|
|
|
|
*
|
|
|
|
* RevocationChecker Object Type Definition
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _PKIX_REVOCATIONCHECKER_H
|
|
|
|
#define _PKIX_REVOCATIONCHECKER_H
|
|
|
|
|
|
|
|
#include "pkixt.h"
|
cherry-picked mozilla NSS upstream changes (to rev bad5fd065fa1, which is on par with 3.20):
bug1001332, 56b691c003ad, bug1086145, bug1054069, bug1155922, bug991783, bug1125025, bug1162521, bug1162644, bug1132941, bug1164364, bug1166205, bug1166163, bug1166515, bug1138554, bug1167046, bug1167043, bug1169451, bug1172128, bug1170322, bug102794, bug1128184, bug557830, bug1174648, bug1180244, bug1177784, bug1173413, bug1169174, bug1084669, bug951455, bug1183395, bug1177430, bug1183827, bug1160139, bug1154106, bug1142209, bug1185033, bug1193467, bug1182667(with sha512 changes backed out, which breaks VC6 compilation), bug1158489, bug337796
2018-07-12 15:44:51 +02:00
|
|
|
#include "certt.h"
|
2015-10-21 05:03:22 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* NOTE: nbio logistic removed. Will be replaced later. */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* All Flags are prefixed by CERT_REV_M_, where _M_ indicates
|
|
|
|
* this is a method dependent flag.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Whether or not to use a method for revocation testing.
|
|
|
|
* If set to "do not test", then all other flags are ignored.
|
|
|
|
*/
|
|
|
|
#define PKIX_REV_M_DO_NOT_TEST_USING_THIS_METHOD 0x00L
|
|
|
|
#define PKIX_REV_M_TEST_USING_THIS_METHOD 0x01L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Whether or not NSS is allowed to attempt to fetch fresh information
|
|
|
|
* from the network.
|
|
|
|
* (Although fetching will never happen if fresh information for the
|
|
|
|
* method is already locally available.)
|
|
|
|
*/
|
|
|
|
#define PKIX_REV_M_ALLOW_NETWORK_FETCHING 0x00L
|
|
|
|
#define PKIX_REV_M_FORBID_NETWORK_FETCHING 0x02L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Example for an implicit default source:
|
|
|
|
* The globally configured default OCSP responder.
|
|
|
|
* IGNORE means:
|
|
|
|
* ignore the implicit default source, whether it's configured or not.
|
|
|
|
* ALLOW means:
|
|
|
|
* if an implicit default source is configured,
|
|
|
|
* then it overrides any available or missing source in the cert.
|
|
|
|
* if no implicit default source is configured,
|
|
|
|
* then we continue to use what's available (or not available)
|
|
|
|
* in the certs.
|
|
|
|
*/
|
|
|
|
#define PKIX_REV_M_ALLOW_IMPLICIT_DEFAULT_SOURCE 0x00L
|
|
|
|
#define PKIX_REV_M_IGNORE_IMPLICIT_DEFAULT_SOURCE 0x04L /* OCSP only */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Defines the behavior if no fresh information is available,
|
|
|
|
* fetching from the network is allowed, but the source of revocation
|
|
|
|
* information is unknown (even after considering implicit sources,
|
|
|
|
* if allowed by other flags).
|
|
|
|
* SKIPT_TEST means:
|
|
|
|
* We ignore that no fresh information is available and
|
|
|
|
* skip this test.
|
|
|
|
* REQUIRE_INFO means:
|
|
|
|
* We still require that fresh information is available.
|
|
|
|
* Other flags define what happens on missing fresh info.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PKIX_REV_M_SKIP_TEST_ON_MISSING_SOURCE 0x00L
|
|
|
|
#define PKIX_REV_M_REQUIRE_INFO_ON_MISSING_SOURCE 0x08L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Defines the behavior if we are unable to obtain fresh information.
|
|
|
|
* INGORE means:
|
|
|
|
* Return "cert status unknown"
|
|
|
|
* FAIL means:
|
|
|
|
* Return "cert revoked".
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PKIX_REV_M_IGNORE_MISSING_FRESH_INFO 0x00L
|
|
|
|
#define PKIX_REV_M_FAIL_ON_MISSING_FRESH_INFO 0x10L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* What should happen if we were able to find fresh information using
|
|
|
|
* this method, and the data indicated the cert is good?
|
|
|
|
* STOP_TESTING means:
|
|
|
|
* Our success is sufficient, do not continue testing
|
|
|
|
* other methods.
|
|
|
|
* CONTINUE_TESTING means:
|
|
|
|
* We will continue and test the next allowed
|
|
|
|
* specified method.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define PKIX_REV_M_STOP_TESTING_ON_FRESH_INFO 0x00L
|
|
|
|
#define PKIX_REV_M_CONTINUE_TESTING_ON_FRESH_INFO 0x20L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* All Flags are prefixed by PKIX_REV_MI_, where _MI_ indicates
|
|
|
|
* this is a method independent flag.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This defines the order to checking.
|
|
|
|
* EACH_METHOD_SEPARATELY means:
|
|
|
|
* Do all tests related to a particular allowed method
|
|
|
|
* (both local information and network fetching) in a single step.
|
|
|
|
* Only after testing for a particular method is done,
|
|
|
|
* then switching to the next method will happen.
|
|
|
|
* ALL_LOCAL_INFORMATION_FIRST means:
|
|
|
|
* Start by testing the information for all allowed methods
|
|
|
|
* which are already locally available. Only after that is done
|
|
|
|
* consider to fetch from the network (as allowed by other flags).
|
|
|
|
*/
|
|
|
|
#define PKIX_REV_MI_TEST_EACH_METHOD_SEPARATELY 0x00L
|
|
|
|
#define PKIX_REV_MI_TEST_ALL_LOCAL_INFORMATION_FIRST 0x01L
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Use this flag to specify that it's necessary that fresh information
|
|
|
|
* is available for at least one of the allowed methods, but it's
|
|
|
|
* irrelevant which of the mechanisms succeeded.
|
|
|
|
* NO_OVERALL_INFO_REQUIREMENT means:
|
|
|
|
* We strictly follow the requirements for each individual method.
|
|
|
|
* REQUIRE_SOME_FRESH_INFO_AVAILABLE means:
|
|
|
|
* After the individual tests have been executed, we must have
|
|
|
|
* been able to find fresh information using at least one method.
|
|
|
|
* If we were unable to find fresh info, it's a failure.
|
|
|
|
*/
|
|
|
|
#define PKIX_REV_MI_NO_OVERALL_INFO_REQUIREMENT 0x00L
|
|
|
|
#define PKIX_REV_MI_REQUIRE_SOME_FRESH_INFO_AVAILABLE 0x02L
|
|
|
|
|
|
|
|
/* Defines check time for the cert, revocation methods lists and
|
|
|
|
* flags for leaf and chain certs revocation tests. */
|
|
|
|
struct PKIX_RevocationCheckerStruct {
|
|
|
|
PKIX_List *leafMethodList;
|
|
|
|
PKIX_List *chainMethodList;
|
|
|
|
PKIX_UInt32 leafMethodListFlags;
|
|
|
|
PKIX_UInt32 chainMethodListFlags;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* see source file for function documentation */
|
|
|
|
|
|
|
|
PKIX_Error *pkix_RevocationChecker_RegisterSelf(void *plContext);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _PKIX_REVOCATIONCHECKER_H */
|