13e12c5d1SDavid du Colombier #pragma lib "libauth.a" 23e12c5d1SDavid du Colombier 3*219b2ee8SDavid du Colombier typedef struct Ticket Ticket; 4*219b2ee8SDavid du Colombier typedef struct Ticketreq Ticketreq; 5*219b2ee8SDavid du Colombier typedef struct Authenticator Authenticator; 6*219b2ee8SDavid du Colombier typedef struct Nvrsafe Nvrsafe; 7*219b2ee8SDavid du Colombier typedef struct Passwordreq Passwordreq; 8*219b2ee8SDavid du Colombier typedef struct Chalstate Chalstate; 93e12c5d1SDavid du Colombier 10*219b2ee8SDavid du Colombier enum 11*219b2ee8SDavid du Colombier { 12*219b2ee8SDavid du Colombier DOMLEN= 48, /* length of an authentication domain name */ 13*219b2ee8SDavid du Colombier DESKEYLEN= 7, /* length of a des key for encrypt/decrypt */ 14*219b2ee8SDavid du Colombier CHALLEN= 8, /* length of a challenge */ 15*219b2ee8SDavid du Colombier NETCHLEN= 16, /* max network challenge length */ 163e12c5d1SDavid du Colombier CONFIGLEN= 14, 173e12c5d1SDavid du Colombier 18*219b2ee8SDavid du Colombier KEYDBLEN= NAMELEN+DESKEYLEN+4+2 193e12c5d1SDavid du Colombier }; 203e12c5d1SDavid du Colombier 21*219b2ee8SDavid du Colombier /* encryption numberings (anti-replay) */ 22*219b2ee8SDavid du Colombier enum 23*219b2ee8SDavid du Colombier { 24*219b2ee8SDavid du Colombier AuthTreq=1, /* ticket request */ 25*219b2ee8SDavid du Colombier AuthChal=2, /* challenge box request */ 26*219b2ee8SDavid du Colombier AuthPass=3, /* change password */ 27*219b2ee8SDavid du Colombier AuthMod=6, /* modify user */ 28*219b2ee8SDavid du Colombier 29*219b2ee8SDavid du Colombier AuthOK=4, /* reply follows */ 30*219b2ee8SDavid du Colombier AuthErr=5, /* error follows */ 31*219b2ee8SDavid du Colombier 32*219b2ee8SDavid du Colombier AuthTs=64, /* ticket encrypted with server's key */ 33*219b2ee8SDavid du Colombier AuthTc, /* ticket encrypted with client's key */ 34*219b2ee8SDavid du Colombier AuthAs, /* server generated authenticator */ 35*219b2ee8SDavid du Colombier AuthAc, /* client generated authenticator */ 36*219b2ee8SDavid du Colombier }; 37*219b2ee8SDavid du Colombier 38*219b2ee8SDavid du Colombier struct Ticketreq 39*219b2ee8SDavid du Colombier { 40*219b2ee8SDavid du Colombier char type; 41*219b2ee8SDavid du Colombier char authid[NAMELEN]; /* server's encryption id */ 42*219b2ee8SDavid du Colombier char authdom[DOMLEN]; /* server's authentication domain */ 43*219b2ee8SDavid du Colombier char chal[CHALLEN]; /* challenge from server */ 44*219b2ee8SDavid du Colombier char hostid[NAMELEN]; /* host's encryption id */ 45*219b2ee8SDavid du Colombier char uid[NAMELEN]; /* uid of requesting user on host */ 46*219b2ee8SDavid du Colombier }; 47*219b2ee8SDavid du Colombier #define TICKREQLEN (3*NAMELEN+CHALLEN+DOMLEN+1) 48*219b2ee8SDavid du Colombier 49*219b2ee8SDavid du Colombier struct Ticket 50*219b2ee8SDavid du Colombier { 51*219b2ee8SDavid du Colombier char num; /* replay protection */ 52*219b2ee8SDavid du Colombier char chal[CHALLEN]; /* server challenge */ 53*219b2ee8SDavid du Colombier char cuid[NAMELEN]; /* uid on client */ 54*219b2ee8SDavid du Colombier char suid[NAMELEN]; /* uid on server */ 55*219b2ee8SDavid du Colombier char key[DESKEYLEN]; /* nonce DES key */ 56*219b2ee8SDavid du Colombier }; 57*219b2ee8SDavid du Colombier #define TICKETLEN (CHALLEN+2*NAMELEN+DESKEYLEN+1) 58*219b2ee8SDavid du Colombier 59*219b2ee8SDavid du Colombier struct Authenticator 60*219b2ee8SDavid du Colombier { 61*219b2ee8SDavid du Colombier char num; /* replay protection */ 62*219b2ee8SDavid du Colombier char chal[CHALLEN]; 63*219b2ee8SDavid du Colombier ulong id; /* authenticator id, ++'d with each auth */ 64*219b2ee8SDavid du Colombier }; 65*219b2ee8SDavid du Colombier #define AUTHENTLEN (CHALLEN+4+1) 66*219b2ee8SDavid du Colombier 67*219b2ee8SDavid du Colombier struct Passwordreq 68*219b2ee8SDavid du Colombier { 69*219b2ee8SDavid du Colombier char num; 70*219b2ee8SDavid du Colombier char old[NAMELEN]; 71*219b2ee8SDavid du Colombier char new[NAMELEN]; 72*219b2ee8SDavid du Colombier }; 73*219b2ee8SDavid du Colombier #define PASSREQLEN (2*NAMELEN+1) 74*219b2ee8SDavid du Colombier 753e12c5d1SDavid du Colombier struct Nvrsafe 763e12c5d1SDavid du Colombier { 77*219b2ee8SDavid du Colombier char machkey[DESKEYLEN]; 783e12c5d1SDavid du Colombier uchar machsum; 79*219b2ee8SDavid du Colombier char authkey[DESKEYLEN]; 803e12c5d1SDavid du Colombier uchar authsum; 813e12c5d1SDavid du Colombier char config[CONFIGLEN]; 823e12c5d1SDavid du Colombier uchar configsum; 83*219b2ee8SDavid du Colombier char authid[NAMELEN]; 84*219b2ee8SDavid du Colombier uchar authidsum; 85*219b2ee8SDavid du Colombier char authdom[DOMLEN]; 86*219b2ee8SDavid du Colombier uchar authdomsum; 873e12c5d1SDavid du Colombier }; 883e12c5d1SDavid du Colombier 89*219b2ee8SDavid du Colombier struct Chalstate 90*219b2ee8SDavid du Colombier { 91*219b2ee8SDavid du Colombier int afd; /* /dev/authenticate */ 92*219b2ee8SDavid du Colombier int asfd; /* authdial() */ 93*219b2ee8SDavid du Colombier char chal[NETCHLEN]; /* challenge/response */ 94*219b2ee8SDavid du Colombier }; 95*219b2ee8SDavid du Colombier 96*219b2ee8SDavid du Colombier extern int convT2M(Ticket*, char*, char*); 97*219b2ee8SDavid du Colombier extern void convM2T(char*, Ticket*, char*); 98*219b2ee8SDavid du Colombier extern int convA2M(Authenticator*, char*, char*); 99*219b2ee8SDavid du Colombier extern void convM2A(char*, Authenticator*, char*); 100*219b2ee8SDavid du Colombier extern int convTR2M(Ticketreq*, char*); 101*219b2ee8SDavid du Colombier extern void convM2TR(char*, Ticketreq*); 102*219b2ee8SDavid du Colombier extern int convPR2M(Passwordreq*, char*, char*); 103*219b2ee8SDavid du Colombier extern void convM2PR(char*, Passwordreq*, char*); 1043e12c5d1SDavid du Colombier extern uchar nvcsum(void*, int); 105*219b2ee8SDavid du Colombier extern int opasstokey(void*, char*); 106*219b2ee8SDavid du Colombier extern int passtokey(void*, char*); 107*219b2ee8SDavid du Colombier extern int authenticate(int, int); 108*219b2ee8SDavid du Colombier extern int newns(char*, char*); 109*219b2ee8SDavid du Colombier extern int authdial(void); 110*219b2ee8SDavid du Colombier extern int auth(int); 111*219b2ee8SDavid du Colombier extern int srvauth(int, char*); 112*219b2ee8SDavid du Colombier extern int getchal(Chalstate*, char*); 113*219b2ee8SDavid du Colombier extern int chalreply(Chalstate*, char*); 114*219b2ee8SDavid du Colombier extern int amount(int, char*, int, char*); 115