typedef struct X509_POLICY_DATA_st X509_POLICY_DATA;
DEFINE_STACK_OF(X509_POLICY_DATA)
struct X509_POLICY_DATA_st {
unsigned int flags;
ASN1_OBJECT *valid_policy;
STACK_OF(POLICYQUALINFO) *qualifier_set;
STACK_OF(ASN1_OBJECT) *expected_policy_set;
};
#define POLICY_DATA_FLAG_MAPPED 0x1
#define POLICY_DATA_FLAG_MAPPED_ANY 0x2
#define POLICY_DATA_FLAG_MAP_MASK 0x3
#define POLICY_DATA_FLAG_SHARED_QUALIFIERS 0x4
#define POLICY_DATA_FLAG_EXTRA_NODE 0x8
#define POLICY_DATA_FLAG_CRITICAL 0x10
struct X509_POLICY_CACHE_st {
X509_POLICY_DATA *anyPolicy;
STACK_OF(X509_POLICY_DATA) *data;
long any_skip;
long explicit_skip;
long map_skip;
};
struct X509_POLICY_NODE_st {
const X509_POLICY_DATA *data;
X509_POLICY_NODE *parent;
int nchild;
};
struct X509_POLICY_LEVEL_st {
X509 *cert;
STACK_OF(X509_POLICY_NODE) *nodes;
X509_POLICY_NODE *anyPolicy;
unsigned int flags;
};
struct X509_POLICY_TREE_st {
size_t node_count;
size_t node_maximum;
X509_POLICY_LEVEL *levels;
int nlevel;
STACK_OF(X509_POLICY_DATA) *extra_data;
STACK_OF(X509_POLICY_NODE) *auth_policies;
STACK_OF(X509_POLICY_NODE) *user_policies;
unsigned int flags;
};
#define POLICY_FLAG_ANY_POLICY 0x2
#define node_data_critical(data) (data->flags & POLICY_DATA_FLAG_CRITICAL)
#define node_critical(node) node_data_critical(node->data)
X509_POLICY_DATA *ossl_policy_data_new(POLICYINFO *policy, const ASN1_OBJECT *id,
int crit);
void ossl_policy_data_free(X509_POLICY_DATA *data);
X509_POLICY_DATA *ossl_policy_cache_find_data(const X509_POLICY_CACHE *cache,
const ASN1_OBJECT *id);
int ossl_policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps);
STACK_OF(X509_POLICY_NODE) *ossl_policy_node_cmp_new(void);
void ossl_policy_cache_free(X509_POLICY_CACHE *cache);
X509_POLICY_NODE *ossl_policy_level_find_node(const X509_POLICY_LEVEL *level,
const X509_POLICY_NODE *parent,
const ASN1_OBJECT *id);
X509_POLICY_NODE *ossl_policy_tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk,
const ASN1_OBJECT *id);
X509_POLICY_NODE *ossl_policy_level_add_node(X509_POLICY_LEVEL *level,
X509_POLICY_DATA *data,
X509_POLICY_NODE *parent,
X509_POLICY_TREE *tree,
int extra_data);
void ossl_policy_node_free(X509_POLICY_NODE *node);
int ossl_policy_node_match(const X509_POLICY_LEVEL *lvl,
const X509_POLICY_NODE *node, const ASN1_OBJECT *oid);
const X509_POLICY_CACHE *ossl_policy_cache_set(X509 *x);