#ifndef CRYPT_H
#define CRYPT_H

/* Number of bytes in salt (raw, fully used, not printable-encoded bytes). 
 * This is configurable, but don't set it too high (up to say 10). But 4
 * is plenty really, 2^32 salts possible (the DES-style crypt used only 4096).
 */
#define MD5_SALTLEN  4

/* Magic string, used in hashing. Configurable. */
#define MD5_MAGIC "xyzz"

/* Maximum length (in bytes) of digested data. 
 * This is /not/ configurable! Don't change it.
 */
#define MD5_MAXLEN  55

/* This salt value is used in generating salts. It must
 * be a valid salt as returned by md5crypt(), or the
 * routine will go into an infinite loop when generating
 * a salt from an unrecognized string. Any value returned
 * from md5crypt("anything", NULL, NULL) is valid here.
 */
#define MD5_VALID_SALT "anhlklck!ggddl`l`lg`bjblodlfcljdcnhffib`c" 
/* #define MD5_VALID_SALT "anhlklckggddlllgbjblodlfcljdcnhffibc" */

typedef unsigned char BytE;

/* char *custom_crypt(CONST char *key, CONST char *salt, unsigned char *rawout); */

char *custom_crypt(char *key, char *salt, unsigned char *rawout); 

/* int MD5Digest(  CONST BytE *buf, unsigned long  buflen, BytE *Digest); */

int MD5Digest PROT((  BytE *, unsigned long  buflen, BytE *));
int encode PROT(( unsigned char *, BytE *, int ));
void decode PROT(( unsigned char *, BytE *, int ));
void getsalt PROT((BytE *, BytE * ));
void crunchbuffer PROT((BytE *buf, SIGNED int *, char *, SIGNED int, int ));

#endif
