#ifdef ENCRYPTION
#ifndef __ENCRYPTION__
#define __ENCRYPTION__
#define DIR_DECRYPT 1
#define DIR_ENCRYPT 2
typedef unsigned char Block[8];
typedef unsigned char *BlockT;
typedef struct { Block _; } Schedule[16];
#define VALIDKEY(key) ( key[0] | key[1] | key[2] | key[3] | key[4] | key[5] | key[6] | key[7])
#define SAMEKEY(k1, k2) (!memcmp((void *)k1, (void *)k2, sizeof(Block)))
typedef struct {
short type;
int length;
unsigned char *data;
} Session_Key;
#ifdef DEBUG
int printsub(char, unsigned char *, size_t);
#endif
void encrypt_parse(kstream, unsigned char *, int);
typedef struct {
char *name;
int type;
void (*output) (unsigned char *, int);
int (*input) (int);
void (*init) (int);
int (*start) (int, int);
int (*is) (unsigned char *, int);
int (*reply) (unsigned char *, int);
void (*session) (Session_Key *, int);
int (*keyid) (int, unsigned char *, int *);
void (*printsub) (unsigned char *, int, unsigned char *, int);
} Encryptions;
#define SK_DES 1
void encrypt_init (kstream, kstream_ptr);
Encryptions *findencryption (int);
void encrypt_auto (int);
void decrypt_auto (int);
void encrypt_is (unsigned char *, int);
void encrypt_reply (unsigned char *, int);
void encrypt_start_input (int);
void encrypt_session_key (Session_Key *, int);
void encrypt_end_input (void);
void encrypt_start_output (int);
void encrypt_end_output (void);
void encrypt_send_request_start (void);
void encrypt_send_request_end (void);
void encrypt_send_end (void);
void encrypt_wait (void);
int encrypt_is_encrypting (void);
void encrypt_send_support (void);
void encrypt_send_keyid (int, unsigned char *, int, int);
int net_write (unsigned char *, int);
int encrypt_cmd (int, char **);
void encrypt_display (void);
void krbdes_encrypt (unsigned char *, int);
int krbdes_decrypt (int);
int krbdes_is (unsigned char *, int);
int krbdes_reply (unsigned char *, int);
void krbdes_init (int);
int krbdes_start (int, int);
void krbdes_session (Session_Key *, int);
void krbdes_printsub (unsigned char *, int, unsigned char *, int);
void cfb64_encrypt (unsigned char *, int);
int cfb64_decrypt (int);
void cfb64_init (int);
int cfb64_start (int, int);
int cfb64_is (unsigned char *, int);
int cfb64_reply (unsigned char *, int);
void cfb64_session (Session_Key *, int);
int cfb64_keyid (int, unsigned char *, int *);
void cfb64_printsub (unsigned char *, int, unsigned char *, int);
void ofb64_encrypt (unsigned char *, int);
int ofb64_decrypt (int);
void ofb64_init (int);
int ofb64_start (int, int);
int ofb64_is (unsigned char *, int);
int ofb64_reply (unsigned char *, int);
void ofb64_session (Session_Key *, int);
int ofb64_keyid (int, unsigned char *, int *);
void ofb64_printsub (unsigned char *, int, unsigned char *, int);
int KRB5_CALLCONV
des_new_random_key (Block);
void KRB5_CALLCONV
des_set_random_generator_seed (Block);
void KRB5_CALLCONV
des_key_sched (Block, Schedule);
void KRB5_CALLCONV
des_ecb_encrypt (Block, Block, Schedule, int);
#ifdef DEBUG
extern int encrypt_debug_mode;
#endif
extern int (*decrypt_input) (int);
extern void (*encrypt_output) (unsigned char *, int);
int decrypt_ks_hack(unsigned char *, int);
#endif
#endif