root/source4/heimdal/lib/hcrypto/dsa.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. DSA_new
  2. DSA_free
  3. DSA_up_ref
  4. DSA_null_method
  5. DSA_set_default_method
  6. DSA_get_default_method
  7. DSA_verify

   1 /*
   2  * Copyright (c) 2006 Kungliga Tekniska Högskolan
   3  * (Royal Institute of Technology, Stockholm, Sweden).
   4  * All rights reserved.
   5  *
   6  * Redistribution and use in source and binary forms, with or without
   7  * modification, are permitted provided that the following conditions
   8  * are met:
   9  *
  10  * 1. Redistributions of source code must retain the above copyright
  11  *    notice, this list of conditions and the following disclaimer.
  12  *
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  *
  17  * 3. Neither the name of the Institute nor the names of its contributors
  18  *    may be used to endorse or promote products derived from this software
  19  *    without specific prior written permission.
  20  *
  21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
  22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
  25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31  * SUCH DAMAGE.
  32  */
  33 
  34 #ifdef HAVE_CONFIG_H
  35 #include <config.h>
  36 #endif
  37 
  38 RCSID("$Id$");
  39 
  40 #include <stdio.h>
  41 #include <stdlib.h>
  42 #include <dsa.h>
  43 
  44 #include <roken.h>
  45 
  46 /*
  47  *
  48  */
  49 
  50 DSA *
  51 DSA_new(void)
     /* [<][>][^][v][top][bottom][index][help] */
  52 {
  53     DSA *dsa = calloc(1, sizeof(*dsa));
  54     dsa->meth = rk_UNCONST(DSA_get_default_method());
  55     dsa->references = 1;
  56     return dsa;
  57 }
  58 
  59 void
  60 DSA_free(DSA *dsa)
     /* [<][>][^][v][top][bottom][index][help] */
  61 {
  62     if (dsa->references <= 0)
  63         abort();
  64 
  65     if (--dsa->references > 0)
  66         return;
  67 
  68     (*dsa->meth->finish)(dsa);
  69 
  70 #define free_if(f) if (f) { BN_free(f); }
  71     free_if(dsa->p);
  72     free_if(dsa->q);
  73     free_if(dsa->g);
  74     free_if(dsa->pub_key);
  75     free_if(dsa->priv_key);
  76     free_if(dsa->kinv);
  77     free_if(dsa->r);
  78 #undef free_if
  79 
  80     memset(dsa, 0, sizeof(*dsa));
  81     free(dsa);
  82 
  83 }
  84 
  85 int
  86 DSA_up_ref(DSA *dsa)
     /* [<][>][^][v][top][bottom][index][help] */
  87 {
  88     return ++dsa->references;
  89 }
  90 
  91 /*
  92  *
  93  */
  94 
  95 static const DSA_METHOD dsa_null_method = {
  96     "hcrypto null DSA"
  97 };
  98 
  99 const DSA_METHOD *
 100 DSA_null_method(void)
     /* [<][>][^][v][top][bottom][index][help] */
 101 {
 102     return &dsa_null_method;
 103 }
 104 
 105 
 106 const DSA_METHOD *dsa_default_mech = &dsa_null_method;
 107 
 108 void
 109 DSA_set_default_method(const DSA_METHOD *mech)
     /* [<][>][^][v][top][bottom][index][help] */
 110 {
 111     dsa_default_mech = mech;
 112 }
 113 
 114 const DSA_METHOD *
 115 DSA_get_default_method(void)
     /* [<][>][^][v][top][bottom][index][help] */
 116 {
 117     return dsa_default_mech;
 118 }
 119 
 120 int
 121 DSA_verify(int type, const unsigned char * digest, int digest_len,
     /* [<][>][^][v][top][bottom][index][help] */
 122            const unsigned char *sig, int sig_len, DSA *dsa)
 123 {
 124     return -1;
 125 }

/* [<][>][^][v][top][bottom][index][help] */