DIRECTORY CrRPC, TimeP15V2, CHNameP2V0, AuthenticationP14V2; AuthenticationP14V2ServerImpl: CEDAR PROGRAM IMPORTS CrRPC, AuthenticationP14V2 ~ { OPEN AuthenticationP14V2; Server: CrRPC.ServerProc ~ { ENABLE { AuthenticationP14V2.CallError => { -- (1) beginError[h, 1]; CrRPC.PutCARDINAL[h, ORD[problem]]; CrRPC.PutCARDINAL[h, ORD[whichArg]]; GO TO Finished; }; AuthenticationP14V2.AuthenticationError => { -- (2) beginError[h, 2]; CrRPC.PutCARDINAL[h, ORD[problem]]; GO TO Finished; }; }; IF (pgmVersion # 2) THEN { beginReject[h, CrRPC.noSuchVersion]; CrRPC.PutCARDINAL[h, 2]; --low CrRPC.PutCARDINAL[h, 2]; --high RETURN }; SELECT proc FROM 2 => { -- CheckSimpleCredentials credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; ok: BOOLEAN; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [ok] _ CheckSimpleCredentials[h, credentials, verifier]; beginReturn[h]; CrRPC.PutBOOL[h, ok]; }; 4 => { -- ChangeStrongKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; newKey: AuthenticationP14V2.Block; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; FOR i0: CARDINAL IN [0..4) DO newKey[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; [] _ ChangeStrongKey[h, credentials, verifier, newKey]; beginReturn[h]; }; 5 => { -- DeleteStrongKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; name: CHNameP2V0.ThreePartName; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; [] _ DeleteStrongKey[h, credentials, verifier, name]; beginReturn[h]; }; 3 => { -- CreateStrongKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; name: CHNameP2V0.ThreePartName; key: AuthenticationP14V2.Block; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; FOR i0: CARDINAL IN [0..4) DO key[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; [] _ CreateStrongKey[h, credentials, verifier, name, key]; beginReturn[h]; }; 7 => { -- ChangeSimpleKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; newKey: CARDINAL; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; newKey _ CrRPC.GetCARDINAL[h]; [] _ ChangeSimpleKey[h, credentials, verifier, newKey]; beginReturn[h]; }; 8 => { -- DeleteSimpleKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; name: CHNameP2V0.ThreePartName; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; [] _ DeleteSimpleKey[h, credentials, verifier, name]; beginReturn[h]; }; 6 => { -- CreateSimpleKey credentials: AuthenticationP14V2.Credentials; verifier: AuthenticationP14V2.SeqWords; name: CHNameP2V0.ThreePartName; key: CARDINAL; credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; key _ CrRPC.GetCARDINAL[h]; [] _ CreateSimpleKey[h, credentials, verifier, name, key]; beginReturn[h]; }; 1 => { -- GetStrongCredentials initiator: CHNameP2V0.ThreePartName; recipient: CHNameP2V0.ThreePartName; nonce: CARD; encryptedCredentialsPackage: AuthenticationP14V2.SeqWords; initiator.organization _ CrRPC.GetROPE[h]; initiator.domain _ CrRPC.GetROPE[h]; initiator.object _ CrRPC.GetROPE[h]; recipient.organization _ CrRPC.GetROPE[h]; recipient.domain _ CrRPC.GetROPE[h]; recipient.object _ CrRPC.GetROPE[h]; nonce _ CrRPC.GetCARD[h]; [encryptedCredentialsPackage] _ GetStrongCredentials[h, initiator, recipient, nonce]; beginReturn[h]; CrRPC.PutCARDINAL[h, encryptedCredentialsPackage.length]; FOR i0: CARDINAL IN [0..encryptedCredentialsPackage.length) DO CrRPC.PutCARDINAL[h, encryptedCredentialsPackage.body[i0]]; ENDLOOP; }; ENDCASE => { beginReject[h, CrRPC.noSuchProcedure]; }; EXITS Finished => { NULL }; }; CrRPC.RegisterServerProc[pgm~14, serverProc~Server, pgmVersion~2]; CrRPC.EnsureListener[class~$SPP]; }... rAuthenticationP14V2ServerImpl.Mesa Copyright (C) 1986 by Xerox Corporation. All rights reserved. Generated by Demers.pa at November 22, 1986 2:18:31 pm PST using Sirocco [1.0] of September 25, 1986 3:44:23 am PDT [h: Handle, pgm: CARD, pgmVersion: CARDINAL, proc: CARDINAL, beginReturn: BeginReturnProc, beginError: BeginErrorProc, beginReject: BeginRejectProc] ʘšœ"™"Jšœ>™>Jšœ:™:Jšœ8™8J˜—šÏk ˜ J˜J˜ J˜ J˜—J˜šÏnœœ˜,Jšœ˜&Jšœ˜—J˜šžœ˜Jšœ”™”J˜šœ˜šœ#Ïc˜)J˜Jšœœ ˜#Jšœœ ˜$Jšœœ ˜J˜—šœ-Ÿ˜3J˜Jšœœ ˜#Jšœœ ˜J˜—J˜—J˜šœœ˜J˜$JšœŸ˜JšœŸ˜Jš˜J˜—J˜šœ˜šœŸ˜ J˜-J˜'Jšœœ˜ J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜J˜8J˜J˜J˜J˜J˜—šœŸ˜J˜-J˜'J˜"J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—šœœœ˜J˜"Jšœ˜—J˜J˜7J˜J˜J˜J˜—šœŸ˜J˜-J˜'J˜J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜%J˜J˜J˜J˜5J˜J˜J˜J˜—šœŸ˜J˜-J˜'J˜J˜J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜%J˜J˜šœœœ˜J˜Jšœ˜—J˜J˜:J˜J˜J˜J˜—šœŸ˜J˜-J˜'Jšœœ˜J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜J˜J˜7J˜J˜J˜J˜—šœŸ˜J˜-J˜'J˜J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜%J˜J˜J˜J˜5J˜J˜J˜J˜—šœŸ˜J˜-J˜'J˜Jšœœ˜J˜Jšœœ˜-˜Jšœ œ˜)Jšœœ.˜Fšœœœ˜#J˜2Jšœ˜—J˜—˜Jšœ œ˜)Jšœ œ.˜=šœœœ˜#J˜)Jšœ˜—J˜—J˜%J˜J˜J˜J˜J˜:J˜J˜J˜J˜—šœŸ˜J˜$J˜$Jšœœ˜ J˜:J˜J˜*J˜$J˜$J˜*J˜$J˜$J˜J˜J˜UJ˜J˜J˜J˜9šœœœ)˜>J˜;Jšœ˜—J˜—šœ˜ J˜&J˜——J˜š˜Jšœœ˜—J˜—˜J˜BJ˜!—J˜J˜—…—T#å