Home | History | Annotate | Download | only in x509v3
      1 /* pcy_lib.c */
      2 /*
      3  * Written by Dr Stephen N Henson (steve (at) openssl.org) for the OpenSSL project
      4  * 2004.
      5  */
      6 /* ====================================================================
      7  * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  *
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  *
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in
     18  *    the documentation and/or other materials provided with the
     19  *    distribution.
     20  *
     21  * 3. All advertising materials mentioning features or use of this
     22  *    software must display the following acknowledgment:
     23  *    "This product includes software developed by the OpenSSL Project
     24  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
     25  *
     26  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
     27  *    endorse or promote products derived from this software without
     28  *    prior written permission. For written permission, please contact
     29  *    licensing (at) OpenSSL.org.
     30  *
     31  * 5. Products derived from this software may not be called "OpenSSL"
     32  *    nor may "OpenSSL" appear in their names without prior written
     33  *    permission of the OpenSSL Project.
     34  *
     35  * 6. Redistributions of any form whatsoever must retain the following
     36  *    acknowledgment:
     37  *    "This product includes software developed by the OpenSSL Project
     38  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
     39  *
     40  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
     41  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     42  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     43  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
     44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     46  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     47  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     49  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     50  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     51  * OF THE POSSIBILITY OF SUCH DAMAGE.
     52  * ====================================================================
     53  *
     54  * This product includes cryptographic software written by Eric Young
     55  * (eay (at) cryptsoft.com).  This product includes software written by Tim
     56  * Hudson (tjh (at) cryptsoft.com). */
     57 
     58 #include <openssl/x509.h>
     59 #include <openssl/x509v3.h>
     60 
     61 #include "pcy_int.h"
     62 
     63 /* accessor functions */
     64 
     65 /* X509_POLICY_TREE stuff */
     66 
     67 int X509_policy_tree_level_count(const X509_POLICY_TREE *tree)
     68 {
     69     if (!tree)
     70         return 0;
     71     return tree->nlevel;
     72 }
     73 
     74 X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree,
     75                                                int i)
     76 {
     77     if (!tree || (i < 0) || (i >= tree->nlevel))
     78         return NULL;
     79     return tree->levels + i;
     80 }
     81 
     82 STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const
     83                                                            X509_POLICY_TREE
     84                                                            *tree)
     85 {
     86     if (!tree)
     87         return NULL;
     88     return tree->auth_policies;
     89 }
     90 
     91 STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const
     92                                                                 X509_POLICY_TREE
     93                                                                 *tree)
     94 {
     95     if (!tree)
     96         return NULL;
     97     if (tree->flags & POLICY_FLAG_ANY_POLICY)
     98         return tree->auth_policies;
     99     else
    100         return tree->user_policies;
    101 }
    102 
    103 /* X509_POLICY_LEVEL stuff */
    104 
    105 int X509_policy_level_node_count(X509_POLICY_LEVEL *level)
    106 {
    107     int n;
    108     if (!level)
    109         return 0;
    110     if (level->anyPolicy)
    111         n = 1;
    112     else
    113         n = 0;
    114     if (level->nodes)
    115         n += sk_X509_POLICY_NODE_num(level->nodes);
    116     return n;
    117 }
    118 
    119 X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i)
    120 {
    121     if (!level)
    122         return NULL;
    123     if (level->anyPolicy) {
    124         if (i == 0)
    125             return level->anyPolicy;
    126         i--;
    127     }
    128     return sk_X509_POLICY_NODE_value(level->nodes, i);
    129 }
    130 
    131 /* X509_POLICY_NODE stuff */
    132 
    133 const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node)
    134 {
    135     if (!node)
    136         return NULL;
    137     return node->data->valid_policy;
    138 }
    139 
    140 STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const
    141                                                            X509_POLICY_NODE
    142                                                            *node)
    143 {
    144     if (!node)
    145         return NULL;
    146     return node->data->qualifier_set;
    147 }
    148 
    149 const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE
    150                                                      *node)
    151 {
    152     if (!node)
    153         return NULL;
    154     return node->parent;
    155 }
    156