<> <> <> <> DIRECTORY CrRPC, TimeP15V2, CHNameP2V0, AuthenticationP14V2; AuthenticationP14V2ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS AuthenticationP14V2 ~ { OPEN AuthenticationP14V2; <> CallError: PUBLIC ERROR [problem: AuthenticationP14V2.CallProblem, whichArg: AuthenticationP14V2.Which] ~ CODE; AuthenticationError: PUBLIC ERROR [problem: AuthenticationP14V2.Problem] ~ CODE; <> GetError: CrRPC.GetErrorProc ~ { SELECT errNum FROM 1 => { problem: AuthenticationP14V2.CallProblem; whichArg: AuthenticationP14V2.Which; problem _ VAL[CrRPC.GetCARDINAL[h]]; whichArg _ VAL[CrRPC.GetCARDINAL[h]]; ERROR CallError[problem, whichArg] }; 2 => { problem: AuthenticationP14V2.Problem; problem _ VAL[CrRPC.GetCARDINAL[h]]; ERROR AuthenticationError[problem] }; ENDCASE => { ERROR CrRPC.Error[h, remoteError, "Unexpected Remote Error"]; }; }; <> CheckSimpleCredentials: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords] RETURNS [ok: BOOLEAN] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { ok _ CrRPC.GetBOOL[h]; }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~2, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ChangeStrongKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, newKey: AuthenticationP14V2.Block] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; FOR i0: CARDINAL IN [0..4) DO CrRPC.PutCARDINAL[h, newKey[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~4, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteStrongKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, name: CHNameP2V0.ThreePartName] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~5, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; CreateStrongKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, name: CHNameP2V0.ThreePartName, key: AuthenticationP14V2.Block] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; FOR i0: CARDINAL IN [0..4) DO CrRPC.PutCARDINAL[h, key[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~3, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ChangeSimpleKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, newKey: CARDINAL] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, newKey]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~7, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteSimpleKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, name: CHNameP2V0.ThreePartName] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~8, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; CreateSimpleKey: PUBLIC PROC [h: CrRPC.Handle, credentials: AuthenticationP14V2.Credentials, verifier: AuthenticationP14V2.SeqWords, name: CHNameP2V0.ThreePartName, key: CARDINAL] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutCARDINAL[h, ORD[credentials.type]]; CrRPC.PutCARDINAL[h, credentials.value.length]; FOR i0: CARDINAL IN [0..credentials.value.length) DO CrRPC.PutCARDINAL[h, credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, verifier.length]; FOR i0: CARDINAL IN [0..verifier.length) DO CrRPC.PutCARDINAL[h, verifier.body[i0]]; ENDLOOP; CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARDINAL[h, key]; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~6, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; GetStrongCredentials: PUBLIC PROC [h: CrRPC.Handle, initiator: CHNameP2V0.ThreePartName, recipient: CHNameP2V0.ThreePartName, nonce: CARD] RETURNS [encryptedCredentialsPackage: AuthenticationP14V2.SeqWords] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, initiator.organization]; CrRPC.PutROPE[h, initiator.domain]; CrRPC.PutROPE[h, initiator.object]; CrRPC.PutROPE[h, recipient.organization]; CrRPC.PutROPE[h, recipient.domain]; CrRPC.PutROPE[h, recipient.object]; CrRPC.PutCARD[h, nonce]; }; GetResults: CrRPC.GetResultsProc ~ { { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; encryptedCredentialsPackage _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO encryptedCredentialsPackage.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; }; CrRPC.Call[h~h, remotePgm~14, remotePgmVersion~2, remoteProc~1, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; }...