LCOV - code coverage report
Current view: top level - third_party/openssl/crypto/asn1 - x_algor.c (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 5 38 13.2 %
Date: 2015-10-10 Functions: 1 11 9.1 %

          Line data    Source code
       1             : /* x_algor.c */
       2             : /*
       3             :  * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
       4             :  * 2000.
       5             :  */
       6             : /* ====================================================================
       7             :  * Copyright (c) 2000 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 <stddef.h>
      61             : #include <openssl/x509.h>
      62             : #include <openssl/asn1.h>
      63             : #include <openssl/asn1t.h>
      64             : 
      65             : ASN1_SEQUENCE(X509_ALGOR) = {
      66             :         ASN1_SIMPLE(X509_ALGOR, algorithm, ASN1_OBJECT),
      67             :         ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY)
      68             : } ASN1_SEQUENCE_END(X509_ALGOR)
      69             : 
      70             : ASN1_ITEM_TEMPLATE(X509_ALGORS) =
      71             :         ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR)
      72             : ASN1_ITEM_TEMPLATE_END(X509_ALGORS)
      73             : 
      74           0 : IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR)
      75           0 : IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(X509_ALGORS, X509_ALGORS, X509_ALGORS)
      76           0 : IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR)
      77             : 
      78             : IMPLEMENT_STACK_OF(X509_ALGOR)
      79             : IMPLEMENT_ASN1_SET_OF(X509_ALGOR)
      80             : 
      81           0 : int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval)
      82             : {
      83           0 :     if (!alg)
      84             :         return 0;
      85           0 :     if (ptype != V_ASN1_UNDEF) {
      86           0 :         if (alg->parameter == NULL)
      87           0 :             alg->parameter = ASN1_TYPE_new();
      88           0 :         if (alg->parameter == NULL)
      89             :             return 0;
      90             :     }
      91           0 :     if (alg) {
      92           0 :         if (alg->algorithm)
      93           0 :             ASN1_OBJECT_free(alg->algorithm);
      94           0 :         alg->algorithm = aobj;
      95             :     }
      96           0 :     if (ptype == 0)
      97             :         return 1;
      98           0 :     if (ptype == V_ASN1_UNDEF) {
      99           0 :         if (alg->parameter) {
     100           0 :             ASN1_TYPE_free(alg->parameter);
     101           0 :             alg->parameter = NULL;
     102             :         }
     103             :     } else
     104           0 :         ASN1_TYPE_set(alg->parameter, ptype, pval);
     105             :     return 1;
     106             : }
     107             : 
     108           0 : void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval,
     109             :                      X509_ALGOR *algor)
     110             : {
     111           0 :     if (paobj)
     112           0 :         *paobj = algor->algorithm;
     113           0 :     if (pptype) {
     114           0 :         if (algor->parameter == NULL) {
     115           0 :             *pptype = V_ASN1_UNDEF;
     116           0 :             return;
     117             :         } else
     118           0 :             *pptype = algor->parameter->type;
     119           0 :         if (ppval)
     120           0 :             *ppval = algor->parameter->value.ptr;
     121             :     }
     122             : }
     123             : 
     124             : /* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */
     125             : 
     126           0 : void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md)
     127             : {
     128             :     int param_type;
     129             : 
     130           0 :     if (md->flags & EVP_MD_FLAG_DIGALGID_ABSENT)
     131             :         param_type = V_ASN1_UNDEF;
     132             :     else
     133             :         param_type = V_ASN1_NULL;
     134             : 
     135           0 :     X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL);
     136             : 
     137           0 : }
     138             : 
     139         370 : int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b)
     140             : {
     141             :     int rv;
     142         370 :     rv = OBJ_cmp(a->algorithm, b->algorithm);
     143         370 :     if (rv)
     144             :         return rv;
     145         370 :     if (!a->parameter && !b->parameter)
     146             :         return 0;
     147         370 :     return ASN1_TYPE_cmp(a->parameter, b->parameter);
     148             : }

Generated by: LCOV version 1.10