/* RPCInternal.h*/ /* Last modified by D. Swinehart, August 25, 1982 3:53 PM */ /* Unambiguous name of a host */ struct HostNet { byte net; byte host; }; union Machine { /* a "word" */ word w; /* whole thing */ struct HostNet b; }; struct HostConversationID { /* Host-relative ID of a conversation; unique for all time --*/ word LS; word fields; /* Here's what would be in them: bLank bit ms bit 15 */ }; #define lenHostConversationID (sizeof (HostConversationID)/2) struct ConversationID { /* Absolute ID of a conversation; unique for all hosts and a long time --*/ union Machine originator; struct HostConversationID count; }; #define lenConversationID (sizeof (struct ConversationID)/2) struct DispatcherID { word LS; word ms; }; #define lenDispatcherID (sizeof (struct DispatcherID)/2) struct DispatcherDetails { word mds; /* top half of dispatcher's MDS base address --*/ struct DispatcherID dispatcherID; /* exporter-relative UID of interface instance --*/ num dispatcherHint; }; /* hint to exporter host's export table --*/ #define lenDispatcherDetails (sizeof (struct DispatcherDetails)/2) union RPCCall { struct DispatcherDetails dispatcherDet; int outcome; word words[1]; }; union RPCData { byte bytes[2]; word words[1]; }; /* ******** Authentication/Security: exported by RPCSecurity ******** --*/ /* for A talking to B using key CK, contains { CK, time, A }CB */ /* Authenticator must be constructed in "marshalled" form. */ struct Authenticator { num length; /* Unmarshalled automatically */ struct EncryptionKey ky; /* Byte order OK */ struct EncryptionKey kySpare;/* unused */ struct EncryptionKey ck; /* Byte order OK */ struct EncryptionKey ckSpare;/* unused */ word time[2]; /* Byte order OK until time used for something */ struct ShortSTRING a; }; /* Must be unmarshalled to examine, but is stored marshalled! */ #define lenAuthenticator (1+(4*lenEncryptionKey)+2) /* does not include length(a) */ /* 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 Intended to be returned along with an authenticator, also encrypted under KX (!) */ struct Authentication { num length; /* Unmarshalled automatically */ struct EncryptionKey kx; /* Byte order OK */ struct EncryptionKey kxSpare;/* Unused */ struct EncryptionKey ck; /* Byte order OK */ struct EncryptionKey ckSpare;/* Unused */ word nonceId[2]; /* Must unmarshall to compare */ struct ShortSTRING b; }; /* Must unmarshall to compare */ struct ConversationObject { struct ConversationObject *next; struct ConversationID id; int level; /* security level */ struct EncryptionKey key; /* Conversation Key */ struct IV iv; /* Initial vector */ struct ShortSTRING *originator; /* RPC.Principal */ struct ShortSTRING *responder; /* RPC.Principal */ struct Authenticator *authenticator; /* pointer to authenticator */ }; #define lenConversationObject (sizeof (struct ConversationObject)/2) #define Conversation ConversationObject