LCOV - code coverage report
Current view: top level - third_party/openssl/crypto/asn1 - x_x509a.c (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 1 54 1.9 %
Date: 2015-10-10 Functions: 1 17 5.9 %

          Line data    Source code
       1             : /* a_x509a.c */
       2             : /*
       3             :  * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
       4             :  * 1999.
       5             :  */
       6             : /* ====================================================================
       7             :  * Copyright (c) 1999 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@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@cryptsoft.com).  This product includes software written by Tim
      56             :  * Hudson (tjh@cryptsoft.com).
      57             :  *
      58             :  */
      59             : 
      60             : #include <stdio.h>
      61             : #include "cryptlib.h"
      62             : #include <openssl/evp.h>
      63             : #include <openssl/asn1t.h>
      64             : #include <openssl/x509.h>
      65             : 
      66             : /*
      67             :  * X509_CERT_AUX routines. These are used to encode additional user
      68             :  * modifiable data about a certificate. This data is appended to the X509
      69             :  * encoding when the *_X509_AUX routines are used. This means that the
      70             :  * "traditional" X509 routines will simply ignore the extra data.
      71             :  */
      72             : 
      73             : static X509_CERT_AUX *aux_get(X509 *x);
      74             : 
      75             : ASN1_SEQUENCE(X509_CERT_AUX) = {
      76             :         ASN1_SEQUENCE_OF_OPT(X509_CERT_AUX, trust, ASN1_OBJECT),
      77             :         ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, reject, ASN1_OBJECT, 0),
      78             :         ASN1_OPT(X509_CERT_AUX, alias, ASN1_UTF8STRING),
      79             :         ASN1_OPT(X509_CERT_AUX, keyid, ASN1_OCTET_STRING),
      80             :         ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, other, X509_ALGOR, 1)
      81             : } ASN1_SEQUENCE_END(X509_CERT_AUX)
      82             : 
      83        1681 : IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_AUX)
      84             : 
      85           0 : static X509_CERT_AUX *aux_get(X509 *x)
      86             : {
      87           0 :     if (!x)
      88             :         return NULL;
      89           0 :     if (!x->aux && !(x->aux = X509_CERT_AUX_new()))
      90             :         return NULL;
      91           0 :     return x->aux;
      92             : }
      93             : 
      94           0 : int X509_alias_set1(X509 *x, unsigned char *name, int len)
      95             : {
      96             :     X509_CERT_AUX *aux;
      97           0 :     if (!name) {
      98           0 :         if (!x || !x->aux || !x->aux->alias)
      99             :             return 1;
     100           0 :         ASN1_UTF8STRING_free(x->aux->alias);
     101           0 :         x->aux->alias = NULL;
     102           0 :         return 1;
     103             :     }
     104           0 :     if (!(aux = aux_get(x)))
     105             :         return 0;
     106           0 :     if (!aux->alias && !(aux->alias = ASN1_UTF8STRING_new()))
     107             :         return 0;
     108           0 :     return ASN1_STRING_set(aux->alias, name, len);
     109             : }
     110             : 
     111           0 : int X509_keyid_set1(X509 *x, unsigned char *id, int len)
     112             : {
     113             :     X509_CERT_AUX *aux;
     114           0 :     if (!id) {
     115           0 :         if (!x || !x->aux || !x->aux->keyid)
     116             :             return 1;
     117           0 :         ASN1_OCTET_STRING_free(x->aux->keyid);
     118           0 :         x->aux->keyid = NULL;
     119           0 :         return 1;
     120             :     }
     121           0 :     if (!(aux = aux_get(x)))
     122             :         return 0;
     123           0 :     if (!aux->keyid && !(aux->keyid = ASN1_OCTET_STRING_new()))
     124             :         return 0;
     125           0 :     return ASN1_STRING_set(aux->keyid, id, len);
     126             : }
     127             : 
     128           0 : unsigned char *X509_alias_get0(X509 *x, int *len)
     129             : {
     130           0 :     if (!x->aux || !x->aux->alias)
     131             :         return NULL;
     132           0 :     if (len)
     133           0 :         *len = x->aux->alias->length;
     134           0 :     return x->aux->alias->data;
     135             : }
     136             : 
     137           0 : unsigned char *X509_keyid_get0(X509 *x, int *len)
     138             : {
     139           0 :     if (!x->aux || !x->aux->keyid)
     140             :         return NULL;
     141           0 :     if (len)
     142           0 :         *len = x->aux->keyid->length;
     143           0 :     return x->aux->keyid->data;
     144             : }
     145             : 
     146           0 : int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj)
     147             : {
     148             :     X509_CERT_AUX *aux;
     149             :     ASN1_OBJECT *objtmp;
     150           0 :     if (!(objtmp = OBJ_dup(obj)))
     151             :         return 0;
     152           0 :     if (!(aux = aux_get(x)))
     153             :         return 0;
     154           0 :     if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null()))
     155             :         return 0;
     156           0 :     return sk_ASN1_OBJECT_push(aux->trust, objtmp);
     157             : }
     158             : 
     159           0 : int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj)
     160             : {
     161             :     X509_CERT_AUX *aux;
     162             :     ASN1_OBJECT *objtmp;
     163           0 :     if (!(objtmp = OBJ_dup(obj)))
     164             :         return 0;
     165           0 :     if (!(aux = aux_get(x)))
     166             :         return 0;
     167           0 :     if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null()))
     168             :         return 0;
     169           0 :     return sk_ASN1_OBJECT_push(aux->reject, objtmp);
     170             : }
     171             : 
     172           0 : void X509_trust_clear(X509 *x)
     173             : {
     174           0 :     if (x->aux && x->aux->trust) {
     175           0 :         sk_ASN1_OBJECT_pop_free(x->aux->trust, ASN1_OBJECT_free);
     176           0 :         x->aux->trust = NULL;
     177             :     }
     178           0 : }
     179             : 
     180           0 : void X509_reject_clear(X509 *x)
     181             : {
     182           0 :     if (x->aux && x->aux->reject) {
     183           0 :         sk_ASN1_OBJECT_pop_free(x->aux->reject, ASN1_OBJECT_free);
     184           0 :         x->aux->reject = NULL;
     185             :     }
     186           0 : }
     187             : 
     188             : ASN1_SEQUENCE(X509_CERT_PAIR) = {
     189             :         ASN1_EXP_OPT(X509_CERT_PAIR, forward, X509, 0),
     190             :         ASN1_EXP_OPT(X509_CERT_PAIR, reverse, X509, 1)
     191             : } ASN1_SEQUENCE_END(X509_CERT_PAIR)
     192             : 
     193           0 : IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_PAIR)

Generated by: LCOV version 1.10