1 /* 2 * Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #include "internal/cryptlib.h" 11 #include <openssl/x509.h> 12 #include <openssl/x509v3.h> 13 14 #include "pcy_local.h" 15 16 /* accessor functions */ 17 18 /* X509_POLICY_TREE stuff */ 19 X509_policy_tree_level_count(const X509_POLICY_TREE * tree)20int X509_policy_tree_level_count(const X509_POLICY_TREE *tree) 21 { 22 if (!tree) 23 return 0; 24 return tree->nlevel; 25 } 26 X509_policy_tree_get0_level(const X509_POLICY_TREE * tree,int i)27X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, 28 int i) 29 { 30 if (!tree || (i < 0) || (i >= tree->nlevel)) 31 return NULL; 32 return tree->levels + i; 33 } 34 STACK_OF(X509_POLICY_NODE)35STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const 36 X509_POLICY_TREE 37 *tree) 38 { 39 if (!tree) 40 return NULL; 41 return tree->auth_policies; 42 } 43 STACK_OF(X509_POLICY_NODE)44STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const 45 X509_POLICY_TREE 46 *tree) 47 { 48 if (!tree) 49 return NULL; 50 if (tree->flags & POLICY_FLAG_ANY_POLICY) 51 return tree->auth_policies; 52 else 53 return tree->user_policies; 54 } 55 56 /* X509_POLICY_LEVEL stuff */ 57 X509_policy_level_node_count(X509_POLICY_LEVEL * level)58int X509_policy_level_node_count(X509_POLICY_LEVEL *level) 59 { 60 int n; 61 if (!level) 62 return 0; 63 if (level->anyPolicy) 64 n = 1; 65 else 66 n = 0; 67 if (level->nodes) 68 n += sk_X509_POLICY_NODE_num(level->nodes); 69 return n; 70 } 71 X509_policy_level_get0_node(const X509_POLICY_LEVEL * level,int i)72X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, int i) 73 { 74 if (!level) 75 return NULL; 76 if (level->anyPolicy) { 77 if (i == 0) 78 return level->anyPolicy; 79 i--; 80 } 81 return sk_X509_POLICY_NODE_value(level->nodes, i); 82 } 83 84 /* X509_POLICY_NODE stuff */ 85 X509_policy_node_get0_policy(const X509_POLICY_NODE * node)86const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node) 87 { 88 if (!node) 89 return NULL; 90 return node->data->valid_policy; 91 } 92 STACK_OF(POLICYQUALINFO)93STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const 94 X509_POLICY_NODE 95 *node) 96 { 97 if (!node) 98 return NULL; 99 return node->data->qualifier_set; 100 } 101 X509_policy_node_get0_parent(const X509_POLICY_NODE * node)102const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE 103 *node) 104 { 105 if (!node) 106 return NULL; 107 return node->parent; 108 } 109