1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#include "des_int.h"
#include "des.h"
#undef mit_des3_cbc_encrypt
/* These functions are exported on KfM for ABI compatibility with
* older versions of the library. They have been pulled from the headers
* in the hope that someday we can remove them.
*
* Do not change the ABIs of any of these functions!
*/
//int des_read_pw_string(char *, int, char *, int);
char *des_crypt(const char *, const char *);
char *des_fcrypt(const char *, const char *, char *);
int make_key_sched(des_cblock *, des_key_schedule);
int des_set_key(des_cblock *, des_key_schedule);
void des_3cbc_encrypt(des_cblock *, des_cblock *, long,
des_key_schedule, des_key_schedule, des_key_schedule,
des_cblock *, int);
void des_3ecb_encrypt(des_cblock *, des_cblock *,
des_key_schedule, des_key_schedule, des_key_schedule,
int);
void des_generate_random_block(des_cblock);
void des_set_random_generator_seed(des_cblock);
void des_set_sequence_number(des_cblock);
#pragma mark -
/* Why was this exported on KfM? Who knows... */
int des_debug = 0;
char *des_crypt(const char *str, const char *salt)
{
char afs_buf[16];
return des_fcrypt(str, salt, afs_buf);
}
char *des_fcrypt(const char *str, const char *salt, char *buf)
{
return mit_afs_crypt(str, salt, buf);
}
int make_key_sched(des_cblock *k, des_key_schedule schedule)
{
return mit_des_key_sched((unsigned char *)k, schedule); /* YUCK! */
}
int des_set_key(des_cblock *key, des_key_schedule schedule)
{
return make_key_sched(key, schedule);
}
void des_3cbc_encrypt(des_cblock *in, des_cblock *out, long length,
des_key_schedule ks1, des_key_schedule ks2, des_key_schedule ks3,
des_cblock *iv, int enc)
{
mit_des3_cbc_encrypt((const des_cblock *)in, out, (unsigned long)length,
ks1, ks2, ks3,
(const unsigned char *)iv, /* YUCK! */
enc);
}
void des_3ecb_encrypt(des_cblock *clear, des_cblock *cipher,
des_key_schedule ks1, des_key_schedule ks2, des_key_schedule ks3,
int enc)
{
static const des_cblock iv;
mit_des3_cbc_encrypt((const des_cblock *)clear, cipher, 8, ks1, ks2, ks3, iv, enc);
}
void des_generate_random_block(des_cblock block)
{
krb5_data data;
data.length = sizeof(des_cblock);
data.data = (char *)block;
/* This function can return an error, however we must ignore it. */
/* The worst that happens is that the resulting block is non-random */
krb5_c_random_make_octets(/* XXX */ 0, &data);
}
void des_set_random_generator_seed(des_cblock block)
{
des_init_random_number_generator(block); /* XXX */
}
void des_set_sequence_number(des_cblock block)
{
des_init_random_number_generator(block); /* XXX */
}
|