1 %/* 2 % * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 3 % * unrestricted use provided that this legend is included on all tape 4 % * media and as a part of the software program in whole or part. Users 5 % * may copy or modify Sun RPC without charge, but are not authorized 6 % * to license or distribute it to anyone else except as part of a product or 7 % * program developed by the user. 8 % * 9 % * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 10 % * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 11 % * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 12 % * 13 % * Sun RPC is provided with no support and without any obligation on the 14 % * part of Sun Microsystems, Inc. to assist in its use, correction, 15 % * modification or enhancement. 16 % * 17 % * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 18 % * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 19 % * OR ANY PART THEREOF. 20 % * 21 % * In no event will Sun Microsystems, Inc. be liable for any lost revenue 22 % * or profits or other special, indirect and consequential damages, even if 23 % * Sun has been advised of the possibility of such damages. 24 % * 25 % * Sun Microsystems, Inc. 26 % * 2550 Garcia Avenue 27 % * Mountain View, California 94043 28 % */ 29 /* 30 * Key server protocol definition 31 * Copyright (C) 1990, 1991 Sun Microsystems, Inc. 32 * 33 * The keyserver is a public key storage/encryption/decryption service 34 * The encryption method used is based on the Diffie-Hellman exponential 35 * key exchange technology. 36 * 37 * The key server is local to each machine, akin to the portmapper. 38 * Under TI-RPC, communication with the keyserver is through the 39 * loopback transport. 40 * 41 * NOTE: This .x file generates the USER level headers for the keyserver. 42 * the KERNEL level headers are created by hand as they kernel has special 43 * requirements. 44 */ 45 46 %#if 0 47 %#pragma ident "@(#)key_prot.x 1.7 94/04/29 SMI" 48 %#endif 49 % 50 %/* Copyright (c) 1990, 1991 Sun Microsystems, Inc. */ 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 70 const PROOT = 3; 71 const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"; 72 73 const HEXKEYBYTES = 48; /* HEXKEYBYTES == strlen(HEXMODULUS) */ 74 const KEYSIZE = 192; /* KEYSIZE == bit length of key */ 75 const 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 */ 81 const KEYCHECKSUMSIZE = 16; 82 83 /* 84 * status of operation 85 */ 86 enum 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 93 typedef opaque keybuf[HEXKEYBYTES]; /* store key in hex */ 94 95 typedef string netnamestr<MAXNETNAMELEN>; 96 97 /* 98 * Argument to ENCRYPT or DECRYPT 99 */ 100 struct cryptkeyarg { 101 netnamestr remotename; 102 des_block deskey; 103 }; 104 105 /* 106 * Argument to ENCRYPT_PK or DECRYPT_PK 107 */ 108 struct 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 */ 118 union cryptkeyres switch (keystatus status) { 119 case KEY_SUCCESS: 120 des_block deskey; 121 default: 122 void; 123 }; 124 125 const MAXGIDS = 16; /* max number of gids in gid list */ 126 127 /* 128 * Unix credential 129 */ 130 struct unixcred { 131 u_int uid; 132 u_int gid; 133 u_int gids<MAXGIDS>; 134 }; 135 136 /* 137 * Result returned from GETCRED 138 */ 139 union getcredres switch (keystatus status) { 140 case KEY_SUCCESS: 141 unixcred cred; 142 default: 143 void; 144 }; 145 /* 146 * key_netstarg; 147 */ 148 149 struct key_netstarg { 150 keybuf st_priv_key; 151 keybuf st_pub_key; 152 netnamestr st_netname; 153 }; 154 155 union key_netstres switch (keystatus status){ 156 case KEY_SUCCESS: 157 key_netstarg knet; 158 default: 159 void; 160 }; 161 162 #ifdef RPC_HDR 163 % 164 %#ifndef opaque 165 %#define opaque char 166 %#endif 167 % 168 #endif 169 program 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; 285 286 287