xref: /inferno-os/module/auth9.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
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