<> <> <> <> DIRECTORY CrRPC, TimeP15V2, CHNameP2V0, AuthenticationP14V2; AuthenticationP14V2ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS AuthenticationP14V2 ~ { OPEN AuthenticationP14V2; <> CallError: PUBLIC CallErrorType ~ CODE; AuthenticationError: PUBLIC AuthenticationErrorType ~ CODE; <> GetError: CrRPC.GetErrorProc ~ { SELECT errNum FROM 1 => { problem: CallProblem; whichArg: Which; problem _ VAL[CrRPC.GetCard16[s]]; whichArg _ VAL[CrRPC.GetCard16[s]]; ERROR CallError[problem, whichArg] }; 2 => { problem: Problem; problem _ VAL[CrRPC.GetCard16[s]]; ERROR AuthenticationError[problem] }; ENDCASE => { ERROR CrRPC.Error[h, remoteError, "Unexpected Remote Error"]; }; }; <> CheckSimpleCredentials: PUBLIC CheckSimpleCredentialsType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; }; GetResults: CrRPC.GetResultsProc ~ { ok _ CrRPC.GetBool[s]; }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~2 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ChangeStrongKey: PUBLIC ChangeStrongKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; FOR i2: CARDINAL IN [0..4) DO CrRPC.PutCard16[s, newKey[i2]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~4 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteStrongKey: PUBLIC DeleteStrongKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; CrRPC.PutRope[s, name.organization]; CrRPC.PutRope[s, name.domain]; CrRPC.PutRope[s, name.object]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~5 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; CreateStrongKey: PUBLIC CreateStrongKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; CrRPC.PutRope[s, name.organization]; CrRPC.PutRope[s, name.domain]; CrRPC.PutRope[s, name.object]; FOR i3: CARDINAL IN [0..4) DO CrRPC.PutCard16[s, key[i3]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~3 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ChangeSimpleKey: PUBLIC ChangeSimpleKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; CrRPC.PutCard16[s, newKey]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~7 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteSimpleKey: PUBLIC DeleteSimpleKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; CrRPC.PutRope[s, name.organization]; CrRPC.PutRope[s, name.domain]; CrRPC.PutRope[s, name.object]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~8 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; CreateSimpleKey: PUBLIC CreateSimpleKeyType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCard16[s, ORD[credentials.type]]; MProc1[h, s, credentials.value]; MProc1[h, s, verifier]; CrRPC.PutRope[s, name.organization]; CrRPC.PutRope[s, name.domain]; CrRPC.PutRope[s, name.object]; CrRPC.PutCard16[s, key]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~6 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; GetStrongCredentials: PUBLIC GetStrongCredentialsType ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutRope[s, initiator.organization]; CrRPC.PutRope[s, initiator.domain]; CrRPC.PutRope[s, initiator.object]; CrRPC.PutRope[s, recipient.organization]; CrRPC.PutRope[s, recipient.domain]; CrRPC.PutRope[s, recipient.object]; CrRPC.PutCard32[s, nonce]; }; GetResults: CrRPC.GetResultsProc ~ { encryptedCredentialsPackage _ UProc4[h, s]; }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~1 , putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; <> UProc4: PROC [h: CrRPC.Handle, s: CrRPC.STREAM] RETURNS [res: SeqWords] ~ { { length6: CARDINAL ~ CrRPC.GetCard16[s]; res _ NEW[SeqWordsObject[length6]]; FOR i5: CARDINAL IN [0..length6) DO res.body[i5] _ CrRPC.GetCard16[s]; ENDLOOP; }; }; MProc1: PROC [h: CrRPC.Handle, s: CrRPC.STREAM, val: SeqWords] ~ { CrRPC.PutCard16[s, val.length]; FOR i7: CARDINAL IN [0..val.length) DO CrRPC.PutCard16[s, val.body[i7]]; ENDLOOP; }; }...