Commit | Line | Data |
---|---|---|
8a97ab44 A |
1 | #ifndef DST_INTERNAL_H |
2 | #define DST_INTERNAL_H | |
3 | ||
4 | /* | |
5 | * Portions Copyright (c) 1995-1998 by Trusted Information Systems, Inc. | |
6 | * | |
7 | * Permission to use, copy modify, and distribute this software for any | |
8 | * purpose with or without fee is hereby granted, provided that the above | |
9 | * copyright notice and this permission notice appear in all copies. | |
10 | * | |
11 | * THE SOFTWARE IS PROVIDED "AS IS" AND TRUSTED INFORMATION SYSTEMS | |
12 | * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL | |
13 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL | |
14 | * TRUSTED INFORMATION SYSTEMS BE LIABLE FOR ANY SPECIAL, DIRECT, | |
15 | * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING | |
16 | * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | |
17 | * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION | |
18 | * WITH THE USE OR PERFORMANCE OF THE SOFTWARE. | |
19 | */ | |
20 | #include <limits.h> | |
21 | #include <sys/param.h> | |
22 | #if (!defined(BSD)) || (BSD < 199306) | |
23 | # include <sys/bitypes.h> | |
24 | #else | |
25 | # include <sys/types.h> | |
26 | #endif | |
27 | ||
28 | #ifndef PATH_MAX | |
29 | # ifdef POSIX_PATH_MAX | |
30 | # define PATH_MAX POSIX_PATH_MAX | |
31 | # else | |
32 | # define PATH_MAX 255 /* this is the value of POSIX_PATH_MAX */ | |
33 | # endif | |
34 | #endif | |
35 | ||
36 | #ifndef dst_func | |
37 | #define dst_func res_9_dst_func | |
38 | #endif | |
39 | #define DST_KEY res_9_DST_KEY | |
40 | typedef struct dst_key { | |
41 | char *dk_key_name; /* name of the key */ | |
42 | int dk_key_size; /* this is the size of the key in bits */ | |
43 | int dk_proto; /* what protocols this key can be used for */ | |
44 | int dk_alg; /* algorithm number from key record */ | |
45 | u_int32_t dk_flags; /* and the flags of the public key */ | |
46 | u_int16_t dk_id; /* identifier of the key */ | |
47 | void *dk_KEY_struct; /* pointer to key in crypto pkg fmt */ | |
48 | struct dst_func *dk_func; /* point to cryptto pgk specific function table */ | |
49 | } DST_KEY; | |
50 | #define HAS_DST_KEY | |
51 | ||
52 | #ifdef __APPLE__ | |
53 | #include "dst.h" | |
54 | #else | |
55 | #include <isc/dst.h> | |
56 | #endif | |
57 | ||
58 | /* | |
59 | * define what crypto systems are supported for RSA, | |
60 | * BSAFE is prefered over RSAREF; only one can be set at any time | |
61 | */ | |
62 | #if defined(BSAFE) && defined(RSAREF) | |
63 | # error "Cannot have both BSAFE and RSAREF defined" | |
64 | #endif | |
65 | ||
66 | /* Declare dst_lib specific constants */ | |
67 | #define KEY_FILE_FORMAT "1.2" | |
68 | ||
69 | /* suffixes for key file names */ | |
70 | #define PRIVATE_KEY "private" | |
71 | #define PUBLIC_KEY "key" | |
72 | ||
73 | /* error handling */ | |
74 | #ifdef REPORT_ERRORS | |
75 | #define EREPORT(str) printf str | |
76 | #else | |
77 | #define EREPORT(str) (void)0 | |
78 | #endif | |
79 | ||
80 | /* use our own special macro to FRRE memory */ | |
81 | ||
82 | #ifndef SAFE_FREE | |
83 | #define SAFE_FREE(a) \ | |
84 | do{if(a != NULL){memset(a,0, sizeof(*a)); free(a); a=NULL;}} while (0) | |
85 | #define SAFE_FREE2(a,s) if (a != NULL && s > 0){memset(a,0, s);free(a); a=NULL;} | |
86 | #endif | |
87 | ||
88 | #define dst_func res_9_dst_func | |
89 | typedef struct dst_func { | |
90 | int (*sign)(const int mode, DST_KEY *key, void **context, | |
91 | const u_int8_t *data, const int len, | |
92 | u_int8_t *signature, const int sig_len); | |
93 | int (*verify)(const int mode, DST_KEY *key, void **context, | |
94 | const u_int8_t *data, const int len, | |
95 | const u_int8_t *signature, const int sig_len); | |
96 | int (*compare)(const DST_KEY *key1, const DST_KEY *key2); | |
97 | int (*generate)(DST_KEY *key, int parms); | |
98 | void *(*destroy)(void *key); | |
99 | /* conversion functions */ | |
100 | int (*to_dns_key)(const DST_KEY *key, u_int8_t *out, | |
101 | const int out_len); | |
102 | int (*from_dns_key)(DST_KEY *key, const u_int8_t *str, | |
103 | const int str_len); | |
104 | int (*to_file_fmt)(const DST_KEY *key, char *out, | |
105 | const int out_len); | |
106 | int (*from_file_fmt)(DST_KEY *key, const char *out, | |
107 | const int out_len); | |
108 | ||
109 | } dst_func; | |
110 | ||
111 | #define dst_t_func res_9_dst_t_func | |
112 | extern dst_func *dst_t_func[DST_MAX_ALGS]; | |
113 | ||
114 | #define key_file_fmt_str res_9_key_file_fmt_str | |
115 | extern const char *key_file_fmt_str; | |
116 | ||
117 | #define dst_path res_9_dst_path | |
118 | extern const char *dst_path; | |
119 | ||
120 | #ifndef DST_HASH_SIZE | |
121 | #define DST_HASH_SIZE 20 /* RIPEMD160 and SHA-1 are 20 bytes MD5 is 16 */ | |
122 | #endif | |
123 | ||
124 | #define dst_bsafe_init res_9_dst_bsafe_init | |
125 | int dst_bsafe_init(void); | |
126 | ||
127 | #define dst_rsaref_init res_9_dst_rsaref_init | |
128 | int dst_rsaref_init(void); | |
129 | ||
130 | #define dst_hmac_md5_init res_9_dst_hmac_md5_init | |
131 | int dst_hmac_md5_init(void); | |
132 | ||
133 | #define dst_cylink_init res_9_dst_cylink_init | |
134 | int dst_cylink_init(void); | |
135 | ||
136 | #define dst_eay_dss_init res_9_dst_eay_dss_init | |
137 | int dst_eay_dss_init(void); | |
138 | ||
139 | /* from higher level support routines */ | |
140 | #define dst_s_calculate_bits res_9_dst_s_calculate_bits | |
141 | int dst_s_calculate_bits( const u_int8_t *str, const int max_bits); | |
142 | ||
143 | #define dst_s_verify_str res_9_dst_s_verify_str | |
144 | int dst_s_verify_str( const char **buf, const char *str); | |
145 | ||
146 | ||
147 | /* conversion between dns names and key file names */ | |
148 | #define dst_s_filename_length res_9_dst_s_filename_length | |
149 | size_t dst_s_filename_length( const char *name, const char *suffix); | |
150 | ||
151 | #define dst_s_build_filename res_9_dst_s_build_filename | |
152 | int dst_s_build_filename( char *filename, const char *name, | |
153 | u_int16_t id, int alg, const char *suffix, | |
154 | size_t filename_length); | |
155 | ||
156 | #define dst_s_fopen res_9_dst_s_fopen | |
157 | FILE *dst_s_fopen (const char *filename, const char *mode, int perm); | |
158 | ||
159 | /* | |
160 | * read and write network byte order into u_int?_t | |
161 | * all of these should be retired | |
162 | */ | |
163 | #define dst_s_get_int16 res_9_dst_s_get_int16 | |
164 | u_int16_t dst_s_get_int16( const u_int8_t *buf); | |
165 | ||
166 | #define dst_s_put_int16 res_9_dst_s_put_int16 | |
167 | void dst_s_put_int16( u_int8_t *buf, const u_int16_t val); | |
168 | ||
169 | #define dst_s_get_int32 res_9_dst_s_get_int32 | |
170 | u_int32_t dst_s_get_int32( const u_int8_t *buf); | |
171 | ||
172 | #define dst_s_put_int32 res_9_dst_s_put_int32 | |
173 | void dst_s_put_int32( u_int8_t *buf, const u_int32_t val); | |
174 | ||
175 | #ifdef DUMP | |
176 | # undef DUMP | |
177 | # define DUMP(a,b,c,d) dst_s_dump(a,b,c,d) | |
178 | #else | |
179 | # define DUMP(a,b,c,d) | |
180 | #endif | |
181 | #define dst_s_dump res_9_dst_s_dump | |
182 | void | |
183 | dst_s_dump(const int mode, const u_char *data, const int size, | |
184 | const char *msg); | |
185 | ||
186 | ||
187 | ||
188 | #endif /* DST_INTERNAL_H */ |