Add rxgk_util.c
[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 const RXGK_CHALLENGE_NONCE_LEN = 20;
98
99 /* RX challenge and response structures */
100 struct RXGK_Challenge {
101     opaque nonce[RXGK_CHALLENGE_NONCE_LEN];
102 };
103 const RXGK_MAXAUTHENTICATOR = 1416;     /* better fit in a packet! */
104 struct RXGK_Response {
105     rxgkTime start_time;
106     RXGK_Data token;
107     opaque authenticator<RXGK_MAXAUTHENTICATOR>;
108 };
109
110 struct RXGK_Authenticator {
111     opaque nonce[RXGK_CHALLENGE_NONCE_LEN];
112     opaque appdata<>;
113     RXGK_Level level;
114     afs_uint32 epoch;
115     afs_uint32 cid;
116     afs_uint32 call_numbers<>;
117 };
118
119 /* RPC-L from draft-brashear-afs3-pts-extended-names-09 (final). */
120
121 #define AUTHDATAMAX 2048
122 #define AUTHPRINTABLEMAX 2048
123 struct PrAuthName {
124     afs_int32 kind;
125     opaque data<AUTHDATAMAX>;
126     opaque display<AUTHPRINTABLEMAX>;
127 };
128
129 /* PrAuthName 'kind' values */
130 const PRAUTHTYPE_GSS = 2;
131
132 /* RPC-L from draft-wilkinson-afs3-rxgk-afs. */
133
134 const RXGK_NEVERDATE = 0;
135
136 /* Begin authenticator appdata definition. */
137
138 struct RXGK_Authenticator_AFSAppData {
139     afsUUID client_uuid;
140     RXGK_Data cb_tok;
141     RXGK_Data cb_key;
142     afs_int32 enctype;
143     afsUUID target_uuid;
144 };
145
146 /* Begin token definitions. */
147
148 struct RXGK_TokenContainer {
149     afs_int32 kvno;
150     afs_int32 enctype;
151     opaque    encrypted_token<>;
152 };
153 struct RXGK_Token {
154     afs_int32 enctype;
155     opaque K0<>;
156     RXGK_Level level;
157     afs_uint32 lifetime;
158     afs_uint32 bytelife;
159     rxgkTime expirationtime;
160     struct PrAuthName identities<>;
161 };
162
163 /* Begin definitions for AFSCombineTokens. */
164
165 AFSCombineTokens(IN RXGK_Data *user_tok,
166     IN RXGK_Data *cm_tok,
167     IN RXGK_CombineOptions *options,
168     IN afsUUID destination,
169     OUT RXGK_Data *new_token,
170     OUT RXGK_TokenInfo *token_info) = RXGK_AFSCOMBINETOKENS;