27 #include <sys/types.h>
38 static int s_srandom_called = 0;
46 static unsigned char s_fixedkey[8] = {23,82,107,6,35,78,88,7};
76 int i, bytesToWrite, bytesWrote;
77 unsigned char encryptedPasswd[16] = {
82 if (strcmp(fname,
"-") != 0) {
83 fp =
fopen(fname,
"w");
87 chmod(fname, S_IRUSR|S_IWUSR);
92 strncpy(encryptedPasswd, passwd, 8);
93 if (passwdViewOnly !=
NULL)
94 strncpy(encryptedPasswd + 8, passwdViewOnly, 8);
100 des(encryptedPasswd, encryptedPasswd);
101 if (passwdViewOnly !=
NULL)
102 des(encryptedPasswd + 8, encryptedPasswd + 8);
104 bytesToWrite = (passwdViewOnly ==
NULL) ? 8 : 16;
105 bytesWrote = fwrite(encryptedPasswd, 1, bytesToWrite, fp);
110 return (bytesWrote == bytesToWrite);
130 if (passwd !=
NULL) {
150 char *passwdFullControl,
char *passwdViewOnly)
156 if (strcmp(fname,
"-") != 0) {
163 for (i = 0; i < 16; i++) {
179 if (passwdFullControl !=
NULL) {
181 memcpy(passwdFullControl, passwd, 8);
182 passwdFullControl[8] =
'\0';
186 if (i == 16 && passwdViewOnly !=
NULL) {
187 des(&passwd[8], &passwd[8]);
188 memcpy(passwdViewOnly, &passwd[8], 8);
189 passwdViewOnly[8] =
'\0';
193 memset(passwd, 0, 16);
195 return (i < 16) ? 1 : 2;
210 if (!s_srandom_called) {
211 seed = (
unsigned int)
time(0) ^ (
unsigned int)
getpid();
213 s_srandom_called = 1;
217 bytes[i] = (
unsigned char)(
random() & 255);
229 unsigned char key[8];
234 for (i = 0; i < 8; i++) {
245 des(bytes+i, bytes+i);