1*46439007SCharles.ForsythAuth9: module 2*46439007SCharles.Forsyth{ 3*46439007SCharles.Forsyth PATH: con "/dis/lib/auth9.dis"; 4*46439007SCharles.Forsyth 5*46439007SCharles.Forsyth # 6*46439007SCharles.Forsyth # plan 9 authentication 7*46439007SCharles.Forsyth # 8*46439007SCharles.Forsyth 9*46439007SCharles.Forsyth ANAMELEN: con 28; # maximum size of name in previous proto 10*46439007SCharles.Forsyth AERRLEN: con 64; # maximum size of errstr in previous proto 11*46439007SCharles.Forsyth DOMLEN: con 48; # length of an authentication domain name 12*46439007SCharles.Forsyth DESKEYLEN: con 7; # length of a des key for encrypt/decrypt 13*46439007SCharles.Forsyth CHALLEN: con 8; # length of a plan9 sk1 challenge 14*46439007SCharles.Forsyth NETCHLEN: con 16; # max network challenge length (used in AS protocol) 15*46439007SCharles.Forsyth SECRETLEN: con 32; # max length of a secret 16*46439007SCharles.Forsyth 17*46439007SCharles.Forsyth # encryption numberings (anti-replay) 18*46439007SCharles.Forsyth AuthTreq: con 1; # ticket request 19*46439007SCharles.Forsyth AuthChal: con 2; # challenge box request 20*46439007SCharles.Forsyth AuthPass: con 3; # change password 21*46439007SCharles.Forsyth AuthOK: con 4; # fixed length reply follows 22*46439007SCharles.Forsyth AuthErr: con 5; # error follows 23*46439007SCharles.Forsyth AuthMod: con 6; # modify user 24*46439007SCharles.Forsyth AuthApop: con 7; # apop authentication for pop3 25*46439007SCharles.Forsyth AuthOKvar: con 9; # variable length reply follows 26*46439007SCharles.Forsyth AuthChap: con 10; # chap authentication for ppp 27*46439007SCharles.Forsyth AuthMSchap: con 11; # MS chap authentication for ppp 28*46439007SCharles.Forsyth AuthCram: con 12; # CRAM verification for IMAP (RFC2195 & rfc2104) 29*46439007SCharles.Forsyth AuthHttp: con 13; # http domain login 30*46439007SCharles.Forsyth AuthVNC: con 14; # VNC server login (deprecated) 31*46439007SCharles.Forsyth 32*46439007SCharles.Forsyth 33*46439007SCharles.Forsyth AuthTs: con 64; # ticket encrypted with server's key 34*46439007SCharles.Forsyth AuthTc: con 65; # ticket encrypted with client's key 35*46439007SCharles.Forsyth AuthAs: con 66; # server generated authenticator 36*46439007SCharles.Forsyth AuthAc: con 67; # client generated authenticator 37*46439007SCharles.Forsyth AuthTp: con 68; # ticket encrypted with client's key for password change 38*46439007SCharles.Forsyth AuthHr: con 69; # http reply 39*46439007SCharles.Forsyth 40*46439007SCharles.Forsyth Ticketreq: adt { 41*46439007SCharles.Forsyth rtype: int; 42*46439007SCharles.Forsyth authid: string; # [ANAMELEN] server's encryption id 43*46439007SCharles.Forsyth authdom: string; # [DOMLEN] server's authentication domain 44*46439007SCharles.Forsyth chal: array of byte; # [CHALLEN] challenge from server 45*46439007SCharles.Forsyth hostid: string; # [ANAMELEN] host's encryption id 46*46439007SCharles.Forsyth uid: string; # [ANAMELEN] uid of requesting user on host 47*46439007SCharles.Forsyth 48*46439007SCharles.Forsyth pack: fn(t: self ref Ticketreq): array of byte; 49*46439007SCharles.Forsyth unpack: fn(a: array of byte): (int, ref Ticketreq); 50*46439007SCharles.Forsyth }; 51*46439007SCharles.Forsyth TICKREQLEN: con 3*ANAMELEN+CHALLEN+DOMLEN+1; 52*46439007SCharles.Forsyth 53*46439007SCharles.Forsyth Ticket: adt { 54*46439007SCharles.Forsyth num: int; # replay protection 55*46439007SCharles.Forsyth chal: array of byte; # [CHALLEN] server challenge 56*46439007SCharles.Forsyth cuid: string; # [ANAMELEN] uid on client 57*46439007SCharles.Forsyth suid: string; # [ANAMELEN] uid on server 58*46439007SCharles.Forsyth key: array of byte; # [DESKEYLEN] nonce DES key 59*46439007SCharles.Forsyth 60*46439007SCharles.Forsyth pack: fn(t: self ref Ticket, key: array of byte): array of byte; 61*46439007SCharles.Forsyth unpack: fn(a: array of byte, key: array of byte): (int, ref Ticket); 62*46439007SCharles.Forsyth }; 63*46439007SCharles.Forsyth TICKETLEN: con CHALLEN+2*ANAMELEN+DESKEYLEN+1; 64*46439007SCharles.Forsyth 65*46439007SCharles.Forsyth Authenticator: adt { 66*46439007SCharles.Forsyth num: int; # replay protection 67*46439007SCharles.Forsyth chal: array of byte; # [CHALLEN] 68*46439007SCharles.Forsyth id: int; # authenticator id, ++'d with each auth 69*46439007SCharles.Forsyth 70*46439007SCharles.Forsyth pack: fn(f: self ref Authenticator, key: array of byte): array of byte; 71*46439007SCharles.Forsyth unpack: fn(a: array of byte, key: array of byte): (int, ref Authenticator); 72*46439007SCharles.Forsyth }; 73*46439007SCharles.Forsyth AUTHENTLEN: con CHALLEN+4+1; 74*46439007SCharles.Forsyth 75*46439007SCharles.Forsyth Passwordreq: adt { 76*46439007SCharles.Forsyth num: int; 77*46439007SCharles.Forsyth old: array of byte; # [ANAMELEN] 78*46439007SCharles.Forsyth new: array of byte; # [ANAMELEN] 79*46439007SCharles.Forsyth changesecret: int; 80*46439007SCharles.Forsyth secret: array of byte; # [SECRETLEN] new secret 81*46439007SCharles.Forsyth 82*46439007SCharles.Forsyth pack: fn(f: self ref Passwordreq, key: array of byte): array of byte; 83*46439007SCharles.Forsyth unpack: fn(a: array of byte, key: array of byte): (int, ref Passwordreq); 84*46439007SCharles.Forsyth }; 85*46439007SCharles.Forsyth PASSREQLEN: con 2*ANAMELEN+1+1+SECRETLEN; 86*46439007SCharles.Forsyth 87*46439007SCharles.Forsyth # secure ID and Plan 9 auth key/request/reply encryption 88*46439007SCharles.Forsyth netcrypt: fn(key: array of byte, chal: string): string; 89*46439007SCharles.Forsyth passtokey: fn(pw: string): array of byte; 90*46439007SCharles.Forsyth des56to64: fn(a: array of byte): array of byte; 91*46439007SCharles.Forsyth encrypt: fn(key: array of byte, data: array of byte, n: int); 92*46439007SCharles.Forsyth decrypt: fn(key: array of byte, data: array of byte, n: int); 93*46439007SCharles.Forsyth 94*46439007SCharles.Forsyth # dial auth server 95*46439007SCharles.Forsyth# authdial(netroot: string, authdom: string): ref Sys->FD; 96*46439007SCharles.Forsyth 97*46439007SCharles.Forsyth # exchange messages with auth server 98*46439007SCharles.Forsyth _asgetticket: fn(fd: ref Sys->FD, tr: ref Ticketreq, key: array of byte): (ref Ticket, array of byte); 99*46439007SCharles.Forsyth _asrdresp: fn(fd: ref Sys->FD, n: int): array of byte; 100*46439007SCharles.Forsyth 101*46439007SCharles.Forsyth init: fn(); 102*46439007SCharles.Forsyth}; 103*46439007SCharles.Forsyth 104