1 /* $NetBSD: dh.h,v 1.1.1.2 2011/04/14 14:08:31 elric Exp $ */ 2 3 /* 4 * Copyright (c) 2006 Kungliga Tekniska Högskolan 5 * (Royal Institute of Technology, Stockholm, Sweden). 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * 3. Neither the name of the Institute nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 /* 37 * Id 38 */ 39 40 #ifndef _HEIM_DH_H 41 #define _HEIM_DH_H 1 42 43 /* symbol renaming */ 44 #define DH_null_method hc_DH_null_method 45 #define DH_tfm_method hc_DH_tfm_method 46 #define DH_ltm_method hc_DH_ltm_method 47 #define DH_new hc_DH_new 48 #define DH_new_method hc_DH_new_method 49 #define DH_free hc_DH_free 50 #define DH_up_ref hc_DH_up_ref 51 #define DH_size hc_DH_size 52 #define DH_set_default_method hc_DH_set_default_method 53 #define DH_get_default_method hc_DH_get_default_method 54 #define DH_set_method hc_DH_set_method 55 #define DH_get_method hc_DH_get_method 56 #define DH_set_ex_data hc_DH_set_ex_data 57 #define DH_get_ex_data hc_DH_get_ex_data 58 #define DH_generate_parameters_ex hc_DH_generate_parameters_ex 59 #define DH_check_pubkey hc_DH_check_pubkey 60 #define DH_generate_key hc_DH_generate_key 61 #define DH_compute_key hc_DH_compute_key 62 #define i2d_DHparams hc_i2d_DHparams 63 64 /* 65 * 66 */ 67 68 typedef struct DH DH; 69 typedef struct DH_METHOD DH_METHOD; 70 71 #include <hcrypto/bn.h> 72 #include <hcrypto/engine.h> 73 74 struct DH_METHOD { 75 const char *name; 76 int (*generate_key)(DH *); 77 int (*compute_key)(unsigned char *,const BIGNUM *,DH *); 78 int (*bn_mod_exp)(const DH *, BIGNUM *, const BIGNUM *, 79 const BIGNUM *, const BIGNUM *, BN_CTX *, 80 BN_MONT_CTX *); 81 int (*init)(DH *); 82 int (*finish)(DH *); 83 int flags; 84 void *app_data; 85 int (*generate_params)(DH *, int, int, BN_GENCB *); 86 }; 87 88 struct DH { 89 int pad; 90 int version; 91 BIGNUM *p; 92 BIGNUM *g; 93 long length; 94 BIGNUM *pub_key; 95 BIGNUM *priv_key; 96 int flags; 97 void *method_mont_p; 98 BIGNUM *q; 99 BIGNUM *j; 100 void *seed; 101 int seedlen; 102 BIGNUM *counter; 103 int references; 104 struct CRYPTO_EX_DATA { 105 void *sk; 106 int dummy; 107 } ex_data; 108 const DH_METHOD *meth; 109 ENGINE *engine; 110 }; 111 112 /* DH_check_pubkey return codes in `codes' argument. */ 113 #define DH_CHECK_PUBKEY_TOO_SMALL 1 114 #define DH_CHECK_PUBKEY_TOO_LARGE 2 115 116 /* 117 * 118 */ 119 120 const DH_METHOD *DH_null_method(void); 121 const DH_METHOD *DH_tfm_method(void); 122 const DH_METHOD *DH_ltm_method(void); 123 124 DH * DH_new(void); 125 DH * DH_new_method(ENGINE *); 126 void DH_free(DH *); 127 int DH_up_ref(DH *); 128 129 int DH_size(const DH *); 130 131 132 void DH_set_default_method(const DH_METHOD *); 133 const DH_METHOD * 134 DH_get_default_method(void); 135 int DH_set_method(DH *, const DH_METHOD *); 136 137 int DH_set_ex_data(DH *, int, void *); 138 void * DH_get_ex_data(DH *, int); 139 140 int DH_generate_parameters_ex(DH *, int, int, BN_GENCB *); 141 int DH_check_pubkey(const DH *, const BIGNUM *, int *); 142 int DH_generate_key(DH *); 143 int DH_compute_key(unsigned char *,const BIGNUM *,DH *); 144 145 int i2d_DHparams(DH *, unsigned char **); 146 147 #endif /* _HEIM_DH_H */ 148 149