#include struct packedkey { short int pk_daycut; unsigned char pk_root[3]; unsigned char pk_tomorrow[4]; unsigned char pk_today[8]; char pk_key_serial_number[12]; char spare[3]; }; typedef struct packedkey PACKEDKEY; struct Keyinfo { short int DayCut; char Root[23]; char Tomorrow[32]; char Today[64]; }; typedef struct Keyinfo KeyInfo; extern short int Year /* 0x2585e */; extern short int Month /* 0x25892 */; extern short int Day /* 0x2592c */; extern short int Hour /* 0x2580c */; short int LoadKeyInfo2 (struct packedkey /* id 5 */ *pk /* 0x44 */, caddr_t keyfile /* 0x48 */, caddr_t username /* 0x4c */); void GenerateChallengeBits (short int Randnum /* 0xffffffee */, caddr_t Stim /* 0x48 */); short int VerifyResponse(struct packedkey *PackedKeyInfo, caddr_t Stim, caddr_t Answer); static void unpack(struct packedkey *packedp, struct Keyinfo *unpackedp); static void UnMapAnswer(caddr_t Answer, caddr_t f); static void MapAnswer(caddr_t Answer, caddr_t f); caddr_t PrintBitStr(caddr_t data, int count, caddr_t addendum); void GetDate(); static short unsigned int GetChanges(short unsigned int DayCut /*0xffffffee*/, char Isodd /*0xffffffed*/); void ApplyChanges(caddr_t Td0 /*0x44*/, caddr_t Tm0 /*0x48*/, short unsigned int ChgCount /*0xffffffee*/, caddr_t Td1 /*0x50*/); static void InvertAnswer(caddr_t f0 /*0x44*/, caddr_t Td /*0x48*/, caddr_t f1 /*0x4c*/); static void DeriveAnswer(caddr_t f0 /*0x44*/, caddr_t Td /*0x48*/, caddr_t f1 /*0x4c*/); static char nnot(char c /* 0xffffffef */); int HexToVal(caddr_t buf /*0x44*/, caddr_t data /*0x48*/, int count /*0x4c*/); unsigned char hch2val (char a_byte /* 0xffffffef */); static short unsigned int ord (short unsigned int c /* 0xffffffee */);