/* * Short passwords, i.e 8 characters or less. */ static void afs_cmu_StringToKey (char *str, char *cell, DES_cblock *key) { char password[8+1]; /* crypt is limited to 8 chars anyway */ int i; int passlen; strncpy (password, cell, 8); password[8] = '\0'; passlen = strlen (str); if (passlen > 8) passlen = 8; for (i=0; i<passlen; i++) password[i] = str[i] ^ cell[i]; /* make sure cell is zero padded */ for (i=0; i<8; i++) if (password[i] == '\0') password[i] = 'X'; /* crypt only considers the first 8 characters of password but for some reason returns eleven characters of result (plus the two salt chars). */ #ifdef KRB4_USE_SYSTEM_CRYPT strncpy((char *)key, crypt(password, "p1") + 2, sizeof(DES_cblock)); #else /* Use OpenSSL's DES_crypt() */ strncpy((char *)key, DES_crypt(password, "p1") + 2, sizeof(DES_cblock)); #endif /* parity is inserted into the LSB so leftshift each byte up one bit. This allows ascii characters with a zero MSB to retain as much significance as possible. */ { char *keybytes = (char *)key; unsigned int temp; for (i = 0; i < 8; i++) { temp = (unsigned int) keybytes[i]; keybytes[i] = (unsigned char) (temp << 1); } } des_fixup_key_parity (key); }
char *_ossl_old_crypt(const char *buf,const char *salt) { return DES_crypt(buf, salt); }