Add rxgk boilerplate
[openafs.git] / src / rxgk / rxgk_int.xg
1 /*
2  * Protocol descriptions for core RXGK structures and RPCs.
3  */
4
5 package RXGK_
6 prefix S
7
8 /* constants for RXGK RPC numbers */
9 #define RXGK_GSSNEGOTIATE       1
10 #define RXGK_COMBINETOKENS      2
11 #define RXGK_AFSCOMBINETOKENS   3
12
13 /* RPC-L from draft-wilkinson-afs3-rxgk */
14
15 /* General values */
16
17 typedef afs_int64 rxgkTime;
18
19 /* key usage values */
20 const RXGK_CLIENT_ENC_PACKET            = 1026;
21 const RXGK_CLIENT_MIC_PACKET            = 1027;
22 const RXGK_SERVER_ENC_PACKET            = 1028;
23 const RXGK_SERVER_MIC_PACKET            = 1029;
24 const RXGK_CLIENT_ENC_RESPONSE          = 1030;
25 const RXGK_SERVER_ENC_TOKEN             = 1036;
26
27 /* Security levels */
28 enum RXGK_Level {
29     RXGK_LEVEL_CLEAR = 0,
30     RXGK_LEVEL_AUTH = 1,
31     RXGK_LEVEL_CRYPT = 2
32 };
33
34 /* limits for variable-length arrays */
35 const RXGK_MAXENCTYPES = 255;
36 const RXGK_MAXLEVELS = 255;
37 const RXGK_MAXMIC = 1024;
38 const RXGK_MAXNONCE = 1024;
39 const RXGK_MAXDATA = 1048576;
40
41 typedef afs_int32 RXGK_Enctypes<RXGK_MAXENCTYPES>;
42 typedef opaque RXGK_Data<RXGK_MAXDATA>;
43
44 /* Begin definitions for RXGK_GSSNegotiate. */
45
46 struct RXGK_StartParams {
47    RXGK_Enctypes enctypes;
48    RXGK_Level levels<RXGK_MAXLEVELS>;
49    afs_uint32 lifetime;
50    afs_uint32 bytelife;
51    opaque client_nonce<RXGK_MAXNONCE>;
52 };
53
54 struct RXGK_ClientInfo {
55    afs_int32 errorcode;
56    afs_int32 enctype;
57    RXGK_Level level;
58    afs_uint32 lifetime;
59    afs_uint32 bytelife;
60    rxgkTime expiration;
61    opaque mic<RXGK_MAXMIC>;
62    RXGK_Data token;
63    opaque server_nonce<RXGK_MAXNONCE>;
64 };
65
66 GSSNegotiate(IN RXGK_StartParams *client_start,
67     IN RXGK_Data *input_token_buffer,
68     IN RXGK_Data *opaque_in,
69     OUT RXGK_Data *output_token_buffer,
70     OUT RXGK_Data *opaque_out,
71     OUT afs_uint32 *gss_major_status,
72     OUT afs_uint32 *gss_minor_status,
73     OUT RXGK_Data *rxgk_info) = RXGK_GSSNEGOTIATE;
74
75 /* Begin definitions for RXGK_CombineTokens. */
76
77 struct RXGK_CombineOptions {
78     RXGK_Enctypes enctypes;
79     RXGK_Level levels<RXGK_MAXLEVELS>;
80 };
81
82 struct RXGK_TokenInfo {
83     afs_int32 enctype;
84     RXGK_Level level;
85     afs_uint32 lifetime;
86     afs_uint32 bytelife;
87     rxgkTime expiration;
88 };
89
90 CombineTokens(IN RXGK_Data *token0, IN RXGK_Data *token1,
91              IN RXGK_CombineOptions *options,
92              OUT RXGK_Data *new_token,
93              OUT RXGK_TokenInfo *info) = RXGK_COMBINETOKENS;
94
95 /* Begin definitions for security class operation. */
96
97 /* RX challenge and response structures */
98 struct RXGK_Challenge {
99     opaque nonce[20];
100 };
101 const RXGK_MAXAUTHENTICATOR = 1416;     /* better fit in a packet! */
102 struct RXGK_Response {
103     rxgkTime start_time;
104     RXGK_Data token;
105     opaque authenticator<RXGK_MAXAUTHENTICATOR>;
106 };
107
108 struct RXGK_Authenticator {
109     opaque nonce[20];
110     opaque appdata<>;
111     RXGK_Level level;
112     afs_uint32 epoch;
113     afs_uint32 cid;
114     afs_uint32 call_numbers<>;
115 };
116
117 /* RPC-L from draft-brashear-afs3-pts-extended-names-09 (final). */
118
119 #define AUTHDATAMAX 2048
120 #define AUTHPRINTABLEMAX 2048
121 struct PrAuthName {
122     afs_int32 kind;
123     opaque data<AUTHDATAMAX>;
124     opaque display<AUTHPRINTABLEMAX>;
125 };
126
127 /* RPC-L from draft-wilkinson-afs3-rxgk-afs. */
128
129 /* Begin authenticator appdata definition. */
130
131 struct RXGK_Authenticator_AFSAppData {
132     afsUUID client_uuid;
133     RXGK_Data cb_tok;
134     RXGK_Data cb_key;
135     afs_int32 enctype;
136     afsUUID target_uuid;
137 };
138
139 /* Begin token definitions. */
140
141 struct RXGK_TokenContainer {
142     afs_int32 kvno;
143     afs_int32 enctype;
144     opaque    encrypted_token<>;
145 };
146 struct RXGK_Token {
147     afs_int32 enctype;
148     opaque K0<>;
149     RXGK_Level level;
150     afs_uint32 lifetime;
151     afs_uint32 bytelife;
152     rxgkTime expirationtime;
153     struct PrAuthName identities<>;
154 };
155
156 /* Begin definitions for AFSCombineTokens. */
157
158 AFSCombineTokens(IN RXGK_Data *user_tok,
159     IN RXGK_Data *cm_tok,
160     IN RXGK_CombineOptions *options,
161     IN afsUUID destination,
162     OUT RXGK_Data *new_token,
163     OUT RXGK_TokenInfo *token_info) = RXGK_AFSCOMBINETOKENS;