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