master
1%/*-
2% * Copyright (c) 2010, Oracle America, Inc.
3% *
4% * Redistribution and use in source and binary forms, with or without
5% * modification, are permitted provided that the following conditions are
6% * met:
7% *
8% * * Redistributions of source code must retain the above copyright
9% * notice, this list of conditions and the following disclaimer.
10% * * Redistributions in binary form must reproduce the above
11% * copyright notice, this list of conditions and the following
12% * disclaimer in the documentation and/or other materials
13% * provided with the distribution.
14% * * Neither the name of the "Oracle America, Inc." nor the names of its
15% * contributors may be used to endorse or promote products derived
16% * from this software without specific prior written permission.
17% *
18% * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19% * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20% * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21% * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22% * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23% * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24% * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25% * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26% * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27% * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28% * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29% * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30% */
31/*
32 * Key server protocol definition
33 * Copyright (C) 1990, 1991 Sun Microsystems, Inc.
34 *
35 * The keyserver is a public key storage/encryption/decryption service
36 * The encryption method used is based on the Diffie-Hellman exponential
37 * key exchange technology.
38 *
39 * The key server is local to each machine, akin to the portmapper.
40 * Under TI-RPC, communication with the keyserver is through the
41 * loopback transport.
42 *
43 * NOTE: This .x file generates the USER level headers for the keyserver.
44 * the KERNEL level headers are created by hand as they kernel has special
45 * requirements.
46 */
47
48%/* From: #pragma ident "@(#)key_prot.x 1.7 94/04/29 SMI" */
49%/* Copyright (c) 1990, 1991 Sun Microsystems, Inc. */
50%#include <sys/cdefs.h>
51%
52%/*
53% * Compiled from key_prot.x using rpcgen.
54% * DO NOT EDIT THIS FILE!
55% * This is NOT source code!
56% */
57
58/*
59 * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
60 *
61 * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
62 * where p is also prime.
63 *
64 * PROOT satisfies the following two conditions:
65 * (1) (PROOT ** 2) % MODULUS != 1
66 * (2) (PROOT ** p) % MODULUS != 1
67 *
68 */
69
70const PROOT = 3;
71const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
72
73const HEXKEYBYTES = 48; /* HEXKEYBYTES == strlen(HEXMODULUS) */
74const KEYSIZE = 192; /* KEYSIZE == bit length of key */
75const KEYBYTES = 24; /* byte length of key */
76
77/*
78 * The first 16 hex digits of the encrypted secret key are used as
79 * a checksum in the database.
80 */
81const KEYCHECKSUMSIZE = 16;
82
83/*
84 * status of operation
85 */
86enum keystatus {
87 KEY_SUCCESS, /* no problems */
88 KEY_NOSECRET, /* no secret key stored */
89 KEY_UNKNOWN, /* unknown netname */
90 KEY_SYSTEMERR /* system error (out of memory, encryption failure) */
91};
92
93typedef opaque keybuf[HEXKEYBYTES]; /* store key in hex */
94
95typedef string netnamestr<MAXNETNAMELEN>;
96
97/*
98 * Argument to ENCRYPT or DECRYPT
99 */
100struct cryptkeyarg {
101 netnamestr remotename;
102 des_block deskey;
103};
104
105/*
106 * Argument to ENCRYPT_PK or DECRYPT_PK
107 */
108struct cryptkeyarg2 {
109 netnamestr remotename;
110 netobj remotekey; /* Contains a length up to 1024 bytes */
111 des_block deskey;
112};
113
114
115/*
116 * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
117 */
118union cryptkeyres switch (keystatus status) {
119case KEY_SUCCESS:
120 des_block deskey;
121default:
122 void;
123};
124
125const MAXGIDS = 16; /* max number of gids in gid list */
126
127/*
128 * Unix credential
129 */
130struct unixcred {
131 u_int uid;
132 u_int gid;
133 u_int gids<MAXGIDS>;
134};
135
136/*
137 * Result returned from GETCRED
138 */
139union getcredres switch (keystatus status) {
140case KEY_SUCCESS:
141 unixcred cred;
142default:
143 void;
144};
145/*
146 * key_netstarg;
147 */
148
149struct key_netstarg {
150 keybuf st_priv_key;
151 keybuf st_pub_key;
152 netnamestr st_netname;
153};
154
155union key_netstres switch (keystatus status){
156case KEY_SUCCESS:
157 key_netstarg knet;
158default:
159 void;
160};
161
162#ifdef RPC_HDR
163%
164%#ifndef opaque
165%#define opaque char
166%#endif
167%
168#endif
169program KEY_PROG {
170 version KEY_VERS {
171
172 /*
173 * This is my secret key.
174 * Store it for me.
175 */
176 keystatus
177 KEY_SET(keybuf) = 1;
178
179 /*
180 * I want to talk to X.
181 * Encrypt a conversation key for me.
182 */
183 cryptkeyres
184 KEY_ENCRYPT(cryptkeyarg) = 2;
185
186 /*
187 * X just sent me a message.
188 * Decrypt the conversation key for me.
189 */
190 cryptkeyres
191 KEY_DECRYPT(cryptkeyarg) = 3;
192
193 /*
194 * Generate a secure conversation key for me
195 */
196 des_block
197 KEY_GEN(void) = 4;
198
199 /*
200 * Get me the uid, gid and group-access-list associated
201 * with this netname (for kernel which cannot use NIS)
202 */
203 getcredres
204 KEY_GETCRED(netnamestr) = 5;
205 } = 1;
206 version KEY_VERS2 {
207
208 /*
209 * #######
210 * Procedures 1-5 are identical to version 1
211 * #######
212 */
213
214 /*
215 * This is my secret key.
216 * Store it for me.
217 */
218 keystatus
219 KEY_SET(keybuf) = 1;
220
221 /*
222 * I want to talk to X.
223 * Encrypt a conversation key for me.
224 */
225 cryptkeyres
226 KEY_ENCRYPT(cryptkeyarg) = 2;
227
228 /*
229 * X just sent me a message.
230 * Decrypt the conversation key for me.
231 */
232 cryptkeyres
233 KEY_DECRYPT(cryptkeyarg) = 3;
234
235 /*
236 * Generate a secure conversation key for me
237 */
238 des_block
239 KEY_GEN(void) = 4;
240
241 /*
242 * Get me the uid, gid and group-access-list associated
243 * with this netname (for kernel which cannot use NIS)
244 */
245 getcredres
246 KEY_GETCRED(netnamestr) = 5;
247
248 /*
249 * I want to talk to X. and I know X's public key
250 * Encrypt a conversation key for me.
251 */
252 cryptkeyres
253 KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
254
255 /*
256 * X just sent me a message. and I know X's public key
257 * Decrypt the conversation key for me.
258 */
259 cryptkeyres
260 KEY_DECRYPT_PK(cryptkeyarg2) = 7;
261
262 /*
263 * Store my public key, netname and private key.
264 */
265 keystatus
266 KEY_NET_PUT(key_netstarg) = 8;
267
268 /*
269 * Retrieve my public key, netname and private key.
270 */
271 key_netstres
272 KEY_NET_GET(void) = 9;
273
274 /*
275 * Return me the conversation key that is constructed
276 * from my secret key and this publickey.
277 */
278
279 cryptkeyres
280 KEY_GET_CONV(keybuf) = 10;
281
282
283 } = 2;
284} = 100029;