LCOV - code coverage report
Current view: top level - third_party/openssl/crypto/evp - names.c (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 28 68 41.2 %
Date: 2015-10-10 Functions: 4 11 36.4 %

          Line data    Source code
       1             : /* crypto/evp/names.c */
       2             : /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
       3             :  * All rights reserved.
       4             :  *
       5             :  * This package is an SSL implementation written
       6             :  * by Eric Young (eay@cryptsoft.com).
       7             :  * The implementation was written so as to conform with Netscapes SSL.
       8             :  *
       9             :  * This library is free for commercial and non-commercial use as long as
      10             :  * the following conditions are aheared to.  The following conditions
      11             :  * apply to all code found in this distribution, be it the RC4, RSA,
      12             :  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
      13             :  * included with this distribution is covered by the same copyright terms
      14             :  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
      15             :  *
      16             :  * Copyright remains Eric Young's, and as such any Copyright notices in
      17             :  * the code are not to be removed.
      18             :  * If this package is used in a product, Eric Young should be given attribution
      19             :  * as the author of the parts of the library used.
      20             :  * This can be in the form of a textual message at program startup or
      21             :  * in documentation (online or textual) provided with the package.
      22             :  *
      23             :  * Redistribution and use in source and binary forms, with or without
      24             :  * modification, are permitted provided that the following conditions
      25             :  * are met:
      26             :  * 1. Redistributions of source code must retain the copyright
      27             :  *    notice, this list of conditions and the following disclaimer.
      28             :  * 2. Redistributions in binary form must reproduce the above copyright
      29             :  *    notice, this list of conditions and the following disclaimer in the
      30             :  *    documentation and/or other materials provided with the distribution.
      31             :  * 3. All advertising materials mentioning features or use of this software
      32             :  *    must display the following acknowledgement:
      33             :  *    "This product includes cryptographic software written by
      34             :  *     Eric Young (eay@cryptsoft.com)"
      35             :  *    The word 'cryptographic' can be left out if the rouines from the library
      36             :  *    being used are not cryptographic related :-).
      37             :  * 4. If you include any Windows specific code (or a derivative thereof) from
      38             :  *    the apps directory (application code) you must include an acknowledgement:
      39             :  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
      40             :  *
      41             :  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
      42             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      43             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      44             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
      45             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      46             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      47             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      48             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      49             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      50             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      51             :  * SUCH DAMAGE.
      52             :  *
      53             :  * The licence and distribution terms for any publically available version or
      54             :  * derivative of this code cannot be changed.  i.e. this code cannot simply be
      55             :  * copied and put under another distribution licence
      56             :  * [including the GNU Public Licence.]
      57             :  */
      58             : 
      59             : #include <stdio.h>
      60             : #include "cryptlib.h"
      61             : #include <openssl/evp.h>
      62             : #include <openssl/objects.h>
      63             : #include <openssl/x509.h>
      64             : 
      65       14036 : int EVP_add_cipher(const EVP_CIPHER *c)
      66             : {
      67             :     int r;
      68             : 
      69       14036 :     if (c == NULL)
      70             :         return 0;
      71             : 
      72       13068 :     OPENSSL_init();
      73             : 
      74       13068 :     r = OBJ_NAME_add(OBJ_nid2sn(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
      75             :                      (const char *)c);
      76       13068 :     if (r == 0)
      77             :         return (0);
      78       13068 :     check_defer(c->nid);
      79       13068 :     r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
      80             :                      (const char *)c);
      81       13068 :     return (r);
      82             : }
      83             : 
      84        2662 : int EVP_add_digest(const EVP_MD *md)
      85             : {
      86             :     int r;
      87             :     const char *name;
      88        2662 :     OPENSSL_init();
      89             : 
      90        2662 :     name = OBJ_nid2sn(md->type);
      91        2662 :     r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md);
      92        2662 :     if (r == 0)
      93             :         return (0);
      94        2662 :     check_defer(md->type);
      95        2662 :     r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH,
      96             :                      (const char *)md);
      97        2662 :     if (r == 0)
      98             :         return (0);
      99             : 
     100        2662 :     if (md->pkey_type && md->type != md->pkey_type) {
     101        2178 :         r = OBJ_NAME_add(OBJ_nid2sn(md->pkey_type),
     102             :                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
     103        2178 :         if (r == 0)
     104             :             return (0);
     105        2178 :         check_defer(md->pkey_type);
     106        2178 :         r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
     107             :                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
     108             :     }
     109        2662 :     return (r);
     110             : }
     111             : 
     112        1573 : const EVP_CIPHER *EVP_get_cipherbyname(const char *name)
     113             : {
     114             :     const EVP_CIPHER *cp;
     115             : 
     116        1573 :     cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH);
     117        1573 :     return (cp);
     118             : }
     119             : 
     120        3712 : const EVP_MD *EVP_get_digestbyname(const char *name)
     121             : {
     122             :     const EVP_MD *cp;
     123             : 
     124        3712 :     cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH);
     125        3712 :     return (cp);
     126             : }
     127             : 
     128           0 : void EVP_cleanup(void)
     129             : {
     130           0 :     OBJ_NAME_cleanup(OBJ_NAME_TYPE_CIPHER_METH);
     131           0 :     OBJ_NAME_cleanup(OBJ_NAME_TYPE_MD_METH);
     132             :     /*
     133             :      * The above calls will only clean out the contents of the name hash
     134             :      * table, but not the hash table itself.  The following line does that
     135             :      * part.  -- Richard Levitte
     136             :      */
     137           0 :     OBJ_NAME_cleanup(-1);
     138             : 
     139           0 :     EVP_PBE_cleanup();
     140           0 :     if (obj_cleanup_defer == 2) {
     141           0 :         obj_cleanup_defer = 0;
     142           0 :         OBJ_cleanup();
     143             :     }
     144           0 :     OBJ_sigid_free();
     145           0 : }
     146             : 
     147             : struct doall_cipher {
     148             :     void *arg;
     149             :     void (*fn) (const EVP_CIPHER *ciph,
     150             :                 const char *from, const char *to, void *arg);
     151             : };
     152             : 
     153           0 : static void do_all_cipher_fn(const OBJ_NAME *nm, void *arg)
     154             : {
     155             :     struct doall_cipher *dc = arg;
     156           0 :     if (nm->alias)
     157           0 :         dc->fn(NULL, nm->name, nm->data, dc->arg);
     158             :     else
     159           0 :         dc->fn((const EVP_CIPHER *)nm->data, nm->name, NULL, dc->arg);
     160           0 : }
     161             : 
     162           0 : void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph,
     163             :                                    const char *from, const char *to, void *x),
     164             :                        void *arg)
     165             : {
     166             :     struct doall_cipher dc;
     167           0 :     dc.fn = fn;
     168           0 :     dc.arg = arg;
     169           0 :     OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
     170           0 : }
     171             : 
     172           0 : void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph,
     173             :                                           const char *from, const char *to,
     174             :                                           void *x), void *arg)
     175             : {
     176             :     struct doall_cipher dc;
     177           0 :     dc.fn = fn;
     178           0 :     dc.arg = arg;
     179           0 :     OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
     180           0 : }
     181             : 
     182             : struct doall_md {
     183             :     void *arg;
     184             :     void (*fn) (const EVP_MD *ciph,
     185             :                 const char *from, const char *to, void *arg);
     186             : };
     187             : 
     188           0 : static void do_all_md_fn(const OBJ_NAME *nm, void *arg)
     189             : {
     190             :     struct doall_md *dc = arg;
     191           0 :     if (nm->alias)
     192           0 :         dc->fn(NULL, nm->name, nm->data, dc->arg);
     193             :     else
     194           0 :         dc->fn((const EVP_MD *)nm->data, nm->name, NULL, dc->arg);
     195           0 : }
     196             : 
     197           0 : void EVP_MD_do_all(void (*fn) (const EVP_MD *md,
     198             :                                const char *from, const char *to, void *x),
     199             :                    void *arg)
     200             : {
     201             :     struct doall_md dc;
     202           0 :     dc.fn = fn;
     203           0 :     dc.arg = arg;
     204           0 :     OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
     205           0 : }
     206             : 
     207           0 : void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *md,
     208             :                                       const char *from, const char *to,
     209             :                                       void *x), void *arg)
     210             : {
     211             :     struct doall_md dc;
     212           0 :     dc.fn = fn;
     213           0 :     dc.arg = arg;
     214           0 :     OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
     215           0 : }

Generated by: LCOV version 1.10