enum authdh_namekind { ADN_FULLNAME = 0, ADN_NICKNAME = 1 }; typedef opaque des_block[8]; /* 64-bit block of encrypted data */ const MAXNETNAMELEN = 255; /* maximum length of a netname */ union authdh_cred switch (authdh_namekind namekind) { case ADN_FULLNAME: authdh_fullname fullname; case ADN_NICKNAME: authdh_nickname nickname; }; /* The following union is unused. */ /* union authdh_verf switch (authdh_namekind namekind) { case ADN_FULLNAME: authdh_fullname_verf fullname_verf; case ADN_NICKNAME: authdh_nickname_verf nickname_verf; }; */ struct authdh_fullname { string name<MAXNETNAMELEN>; /* netname of client */ des_block key; /* encrypted conversation key */ opaque w1[4]; /* W1 */ }; struct authdh_fullname_verf { des_block timestamp => full_ts; /* T (the 64 bits of T1 and T2) */ opaque w2[4]; /* W2 */ }; struct authdh_nickname { unsigned int nickname; /* nickname returned by server */ }; struct authdh_nickname_verf { des_block timestamp => nick_ts; /* T (the 64 bits of T1 and T2) */ opaque w[4]; /* Set to zero */ }; struct authdh_server_verf { des_block timestamp_verf; /* timestamp verifier (encrypted) */ unsigned int nickname => new_nickname; /* new client nickname (unencrypted) */ }; struct authdh_timestamp { unsigned int seconds; int useconds; int ttl; int ttl_1; };