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