Annotation of embedaddon/dhcp/dst/dst_internal.h, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>