DIRECTORY DESFace USING [ Key ], Pup USING [ Host, Net ], RPC USING [ matchAllVersions, ShortROPE, VersionRange ] ; Agent: DEFINITIONS = { Authentication: TYPE = LONG POINTER TO AuthenticationRecord; -- Intended to be returned along with an authenticator, also encrypted under KX (!) -- AuthenticationRecord: TYPE = MACHINE DEPENDENT RECORD [ kx: DESFace.Key, kxSpare: DESFace.Key, ck: DESFace.Key, ckSpare: DESFace.Key, nonceId: LONG INTEGER, b: CARDINAL, -- length bText: PACKED SEQUENCE maxLength: CARDINAL OF CHAR ]; Authenticator: TYPE = LONG POINTER TO AuthenticatorLayout; -- The rest is encrypted with CBC-check using a zero IV -- AuthenticatorLayout: TYPE = MACHINE DEPENDENT RECORD[ ky: DESFace.Key, kySpare: DESFace.Key, -- space for larger keys! -- ck: DESFace.Key, ckSpare: DESFace.Key, -- space for larger keys! -- time: LONG CARDINAL, -- String body for a -- a: CARDINAL, -- length aText: PACKED SEQUENCE maxLength: CARDINAL OF CHAR ]; Principal: TYPE = RPC.ShortROPE; Machine: TYPE = RECORD [ net: Pup.Net, host: Pup.Host ]; Authenticate: PROC [nonceId: LONG INTEGER, a, b: Principal ] RETURNS [ an: Frob -- an encrypted authentication record--, ar: Frob -- an encrypted authenticator record-- ]; -- Length fields in authentication records will be encrypted! -- Frob: TYPE = REF FrobRecord; FrobLength: TYPE = [0..64); -- Prevents Frob-containing packets from getting too large -- FrobRecord: TYPE = RECORD [ s: SEQUENCE length: FrobLength OF WORD ]; Vitae: PROC[ clientMachine: Machine, -- Lark or other machine with GV database entry range: RPC.VersionRange_RPC.matchAllVersions, -- acceptable versions interfaceType: RPC.ShortROPE] -- e.g., LarkSmarts.Lark RETURNS [ serverMachine: Machine, -- e.g., 3#333# in binary form, used by C RPC to bind clientRname: Principal, -- client machine's own RName (e.g., Swinehart.pa.lark) clientInstance: RPC.ShortROPE, -- e.g., "Skylark" or "173#100#" serverInstance: RPC.ShortROPE -- e.g., "Morley.Lark", corr. to "LarkSmarts.Lark", NIL if none ]; RoutingHostForHost: PROC[ clientMachine: Machine, -- Address of the requester. targetMachine: Machine -- Address of the destination ] RETURNS [routingMachine: Machine]; }. úAgent.mesa Last modified by D. Swinehart, May 23, 1986 3:27:05 pm PDT Provides in RPC a number of services that are currently otherwise provided by other protocols, or not yet at all. Clients may bind to this interface using broadcast binding techniques; all servers that support broadcast binding must export an equivalent Agent interface. Authenticate: A "Needham-Schroeder" Authentication Service for RPC Clients may call Authenticate using a "clear" conversation, since all needed security is provided by encryption of the authentication data. for A talking to B using key CK, contains: {KX}KA, spare, { {CK}KA, spare, nonce, B }KX . The keys are single cipher blocks. The rest is encrypted with CBC-check using a zero IV String Body for b This is extracted from RPCSecurity, since it is not in any RPC Definitions for A talking to B using key CK, contains: {KY}KB, spare, { {CK}KB, spare, time, A }KY . The keys are single cipher blocks. Returns results in two arguments because each contains a variable-length sequence. Vitae: Uses standard and Thrush-specific values, along with defaults in Agent's user.profile, to provide a C RPC-based system with all that it needs to reach the desired server with the right authentication and so forth (in conjunction with a call to Authenticate.) It is assumed that the Teledeb program downloaded the proper program, and started it in the right mode. Failure to find an instance for the specified interface is indicated by a serverInstance value of NIL and a serverMachine value of [0,0] . This value should also be used as the server Rname in authentication contexts (e.g., as the variable "b" in Agent.Authenticate) RoutingHostForNet: What is the right (gateway) host to deliver a packet to in order to reach the specified host? Êe˜Jšœ ™ Jšœ:™:J˜Jšœq™qJšœœ™œJ˜šÏk ˜ Jšœœ ˜Jšœœ˜Jšœœ.˜7J˜J˜—Jšœ œ˜J˜JšœB™BJšœL™Lšœ>™>J˜Jš œœœœœ˜<šœ*™*Jšœ.™.Jšœ"™"Jšœ4™4JšÏcV˜VJ˜—š œœœ œœ˜7J˜J˜J˜J˜Jšœ œœ˜Jšœ™Jšœœž ˜Jš œœœ œœ˜2J˜J˜—Jš œœœœœ˜:J˜JšœJ™JJšœ*™*šœ-™-Jšœ"™"Jšž:˜:J˜—š œœœ œœ˜5J˜Jšœž˜3J˜Jšœž˜2Jšœ œœ˜Jšž˜Jšœœž ˜Jš œœœ œœœ˜3J˜J˜—Jšœ œœ ˜ J˜Jšœ œœ"˜8J˜—JšžR™RšÏn œœ œœ˜<šœ˜ Jšœ1˜1Jšœ2˜2—J˜Jšž@œ˜AJšœœœ ˜Jšœ œ ž=˜Yšœ œœ˜Jšœœœœ˜)J˜——J˜Jšœó™ó™ŠJ˜—šŸœœ˜ Jšœž/˜GJšœœœž˜DJšœœ ž˜6šœ˜ Jšœž5˜MJšœž7˜OJšœœ ž ˜?šœœ ž?˜]J™—Jšœ˜J˜——Jšœq™qšŸœœ˜Jšœž˜4Jšœž˜4Jšœ˜—Jšœ˜"J˜J˜J˜—…—°