/* * Common code to cbc_crypt() & ecb_crypt() */ static int common_crypt(char *key, char *buf, size_t len, unsigned int mode, struct desparams *desp) { int desdev; if ((len % 8) != 0 || len > DES_MAXDATA) return (DESERR_BADPARAM); desp->des_dir = ((mode & DES_DIRMASK) == DES_ENCRYPT) ? ENCRYPT : DECRYPT; desdev = mode & DES_DEVMASK; COPY8(key, desp->des_key); #ifdef sun_hardware if (desdev == DES_HW) { int res; if (g_desfd < 0 && (g_desfd == -1 || (g_desfd = getdesfd()) < 0)) goto software; /* no hardware device */ /* * hardware */ desp->des_len = len; if (len <= DES_QUICKLEN) { DESCOPY(buf, desp->des_data, len); res = ioctl(g_desfd, DESIOCQUICK, (char *)desp); DESCOPY(desp->des_data, buf, len); } else { desp->des_buf = (uchar_t *)buf; res = ioctl(g_desfd, DESIOCBLOCK, (char *)desp); } return (res == 0 ? DESERR_NONE : DESERR_HWERROR); } software: #endif /* * software */ if (!_des_crypt(buf, len, desp)) return (DESERR_HWERROR); return (desdev == DES_SW ? DESERR_NONE : DESERR_NOHWDEVICE); }
char * crypt(const char *key, const char *salt) { if (salt[0] == '$' && salt[2] == '$') { switch (salt[1]) { #ifdef MD5_IMPL case '1': /* md5 */ /* Unimplemented */ break; #endif /* SHA 256/512: Unimplemented */ case '5': /* SHA 256 */ case '6': /* SHA 512 */ default: break; } } return _des_crypt(key, salt); }
/* * Common code to cbc_crypt() & ecb_crypt() */ static int common_crypt (char *key, char *buf, register unsigned len, unsigned mode, register struct desparams *desp) { register int desdev; if ((len % 8) != 0 || len > DES_MAXDATA) return DESERR_BADPARAM; desp->des_dir = ((mode & DES_DIRMASK) == DES_ENCRYPT) ? ENCRYPT : DECRYPT; desdev = mode & DES_DEVMASK; COPY8 (key, desp->des_key); /* * software */ if (!_des_crypt (buf, len, desp)) return DESERR_HWERROR; return desdev == DES_SW ? DESERR_NONE : DESERR_NOHWDEVICE; }