#ifndef DES_INTERNAL_DEFS
#define DES_INTERNAL_DEFS
#include "k5-int.h"
#ifndef KRB5_MIT_DES__
#define KRB5_MIT_DES__
#if defined(__MACH__) && defined(__APPLE__)
#include <TargetConditionals.h>
#include <AvailabilityMacros.h>
#if TARGET_RT_MAC_CFM
#error "Use KfM 4.0 SDK headers for CFM compilation."
#endif
#if defined(DEPRECATED_IN_MAC_OS_X_VERSION_10_5) && !defined(KRB5_SUPRESS_DEPRECATED_WARNINGS)
#define KRB5INT_DES_DEPRECATED DEPRECATED_IN_MAC_OS_X_VERSION_10_5
#endif
#endif
#ifndef KRB5INT_DES_DEPRECATED
#define KRB5INT_DES_DEPRECATED
#endif
#include <limits.h>
#if UINT_MAX >= 0xFFFFFFFFUL
#define DES_INT32 int
#define DES_UINT32 unsigned int
#else
#define DES_INT32 long
#define DES_UINT32 unsigned long
#endif
typedef unsigned char des_cblock[8]
KRB5INT_DES_DEPRECATED;
typedef struct des_ks_struct { DES_INT32 _[2]; } des_key_schedule[16]
KRB5INT_DES_DEPRECATED;
typedef des_cblock mit_des_cblock;
typedef des_key_schedule mit_des_key_schedule;
typedef mit_des_cblock mit_des3_cblock[3];
typedef mit_des_key_schedule mit_des3_key_schedule[3];
#define MIT_DES_ENCRYPT 1
#define MIT_DES_DECRYPT 0
typedef struct mit_des_ran_key_seed {
krb5_encrypt_block eblock;
krb5_data sequence;
} mit_des_random_state;
#define MIT_DES_BLOCK_LENGTH (8*sizeof(krb5_octet))
#define MIT_DES_KEYSIZE 8
#define MIT_DES_CBC_CKSUM_LENGTH (4*sizeof(krb5_octet))
#endif
krb5_error_code mit_afs_string_to_key(krb5_keyblock *keyblock,
const krb5_data *data,
const krb5_data *salt);
char *mit_afs_crypt(const char *pw, const char *salt, char *iobuf);
unsigned long mit_des_cbc_cksum(const krb5_octet *, krb5_octet *,
unsigned long, const mit_des_key_schedule,
const krb5_octet *);
int
mit_des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out,
unsigned long length, const mit_des_key_schedule schedule,
const mit_des_cblock ivec, int enc);
#define mit_des_zeroblock krb5int_c_mit_des_zeroblock
extern const mit_des_cblock mit_des_zeroblock;
krb5_error_code mit_des_finish_random_key(const krb5_encrypt_block *,
krb5_pointer *);
krb5_error_code mit_des_finish_key(krb5_encrypt_block *);
krb5_error_code mit_des_init_random_key(const krb5_encrypt_block *,
const krb5_keyblock *,
krb5_pointer *);
void mit_des_fixup_key_parity(mit_des_cblock);
int mit_des_check_key_parity(mit_des_cblock);
int mit_des_key_sched(mit_des_cblock, mit_des_key_schedule);
krb5_error_code mit_des_process_key(krb5_encrypt_block *,
const krb5_keyblock *);
krb5_error_code mit_des_random_key(const krb5_encrypt_block *,
krb5_pointer, krb5_keyblock **);
krb5_error_code mit_des_string_to_key(const krb5_encrypt_block *,
krb5_keyblock *, const krb5_data *,
const krb5_data *);
krb5_error_code mit_des_string_to_key_int(krb5_keyblock *, const krb5_data *,
const krb5_data *);
int mit_des_is_weak_key(mit_des_cblock);
krb5_error_code mit_des_combine_subkeys(const krb5_keyblock *,
const krb5_keyblock *,
krb5_keyblock **);
int mit_des_make_key_sched(mit_des_cblock, mit_des_key_schedule);
extern void swap_bits(char *);
extern unsigned long long_swap_bits(unsigned long);
extern unsigned long swap_six_bits_to_ansi(unsigned long);
extern unsigned long swap_four_bits_to_ansi(unsigned long);
extern unsigned long swap_bit_pos_1(unsigned long);
extern unsigned long swap_bit_pos_0(unsigned long);
extern unsigned long swap_bit_pos_0_to_ansi(unsigned long);
extern unsigned long rev_swap_bit_pos_0(unsigned long);
extern unsigned long swap_byte_bits(unsigned long);
extern unsigned long swap_long_bytes_bit_number(unsigned long);
#ifdef FILE
extern void test_set(FILE *, const char *, int, const char *, int);
#endif
void
krb5int_des3_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
const mit_des_key_schedule ks1,
const mit_des_key_schedule ks2,
const mit_des_key_schedule ks3,
mit_des_cblock ivec);
void
krb5int_des3_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
const mit_des_key_schedule ks1,
const mit_des_key_schedule ks2,
const mit_des_key_schedule ks3,
mit_des_cblock ivec);
void
krb5int_des_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
const mit_des_key_schedule schedule,
mit_des_cblock ivec);
void
krb5int_des_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
const mit_des_key_schedule schedule,
mit_des_cblock ivec);
void
krb5int_des_cbc_mac(const krb5_crypto_iov *data, unsigned long num_data,
const mit_des_key_schedule schedule, mit_des_cblock ivec,
mit_des_cblock out);
krb5_error_code mit_des3_process_key(krb5_encrypt_block *eblock,
const krb5_keyblock *keyblock);
int mit_des3_key_sched(mit_des3_cblock key, mit_des3_key_schedule schedule);
krb5_error_code mit_des3_string_to_key(const krb5_encrypt_block *eblock,
krb5_keyblock *keyblock,
const krb5_data *data,
const krb5_data *salt);
krb5_error_code mit_des_n_fold(const krb5_octet *input, const size_t in_len,
krb5_octet *output, const size_t out_len);
int mit_des_is_weak_keyblock(krb5_keyblock *keyblock);
void mit_des_fixup_keyblock_parity(krb5_keyblock *keyblock);
krb5_error_code mit_des_set_random_generator_seed(const krb5_data *seed,
krb5_pointer random_state);
krb5_error_code mit_des_set_random_sequence_number(const krb5_data *sequence,
krb5_pointer random_state);
#endif