summaryrefslogtreecommitdiffstats
path: root/lib/librpc/secure_rpc/rpc/key_prot.x
diff options
context:
space:
mode:
Diffstat (limited to 'lib/librpc/secure_rpc/rpc/key_prot.x')
-rw-r--r--lib/librpc/secure_rpc/rpc/key_prot.x151
1 files changed, 151 insertions, 0 deletions
diff --git a/lib/librpc/secure_rpc/rpc/key_prot.x b/lib/librpc/secure_rpc/rpc/key_prot.x
new file mode 100644
index 0000000..2f6ebdb
--- /dev/null
+++ b/lib/librpc/secure_rpc/rpc/key_prot.x
@@ -0,0 +1,151 @@
+%/* @(#)key_prot.x 2.1 88/08/07 4.0 RPCSRC; from 1.7 88/02/08 SMI */
+%
+%/*
+% * Copyright (c) 1988 by Sun Microsystems, Inc.
+% */
+%
+%/*
+% * Compiled from key_prot.x using rpcgen.
+% * DO NOT EDIT THIS FILE!
+% * This is NOT source code!
+% */
+
+/*
+ * Key server protocol definition
+ * Copyright (C) 1987 Sun Microsystems, Inc.
+ *
+ * The keyserver is a public key storage/encryption/decryption service
+ * The encryption method used is Diffie-Hellman with 128 bit keys.
+ *
+ * The key server is local to each machine, akin to the portmapper.
+ * Only privileged processes may talk to the key server, so
+ * user processes must communicate through a privileged dispatcher (such
+ * as the kernel or a set-uid-root process).
+ */
+program KEY_PROG {
+ version KEY_VERS {
+ /*
+ * This is my secret key.
+ * Store it for me.
+ */
+ int
+ KEY_SET(keybuf) = 1;
+
+ /*
+ * I want to talk to X.
+ * Encrypt a conversation key for me.
+ */
+ cryptkeyres
+ KEY_ENCRYPT(cryptkeyarg) = 2;
+
+ /*
+ * X just sent me a message.
+ * Decrypt the conversation key for me.
+ */
+ cryptkeyres
+ KEY_DECRYPT(cryptkeyarg) = 3;
+
+ /*
+ * Generate a secure conversation key for me
+ */
+ des_block
+ KEY_GEN(void) = 4;
+
+ /*
+ * Get me the uid, gid and group-access-list associated
+ * with this netname (for kernel which cannot use yp)
+ */
+ getcredres
+ KEY_GETCRED(netnamestr) = 5;
+ } = 1;
+} = 100029;
+
+
+/*
+ * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
+ *
+ * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
+ * where p is also prime.
+ *
+ * PROOT satisfies the following two conditions:
+ * (1) (PROOT ** 2) % MODULUS != 1
+ * (2) (PROOT ** p) % MODULUS != 1
+ *
+ */
+
+const PROOT = 3;
+const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
+
+const HEXKEYBYTES = 48; /* HEXKEYBYTES == strlen(HEXMODULUS) */
+const KEYSIZE = 192; /* KEYSIZE == bit length of key */
+const KEYBYTES = 24; /* byte length of key */
+
+/*
+ * The first 16 hex digits of the encrypted secret key are used as
+ * a checksum in the database.
+ */
+const KEYCHECKSUMSIZE = 16;
+
+/*
+ * status of operation
+ */
+enum keystatus {
+ KEY_SUCCESS, /* no problems */
+ KEY_NOSECRET, /* no secret key stored */
+ KEY_UNKNOWN, /* unknown netname */
+ KEY_SYSTEMERR /* system error (out of memory, encryption failure) */
+};
+
+/*
+ * The kernel doesn't use keybuf, so we insure that it
+ * is ifdef'd out in the output files. The proper way to do
+ * this is to #ifndef KERNEL it here, and have the kernel build
+ * use rpcgen, but config doesn't understand rpcgen files so
+ * it is done this way.
+ */
+#ifndef RPC_SVC
+%#ifndef KERNEL
+typedef opaque keybuf[HEXKEYBYTES]; /* store key in hex */
+%#endif
+#endif
+
+typedef string netnamestr<MAXNETNAMELEN>;
+
+/*
+ * Argument to ENCRYPT or DECRYPT
+ */
+struct cryptkeyarg {
+ netnamestr remotename;
+ des_block deskey;
+};
+
+/*
+ * Result of ENCRYPT or DECRYPT
+ */
+union cryptkeyres switch (keystatus status) {
+case KEY_SUCCESS:
+ des_block deskey;
+default:
+ void;
+};
+
+const MAXGIDS = 16; /* max number of gids in gid list */
+
+/*
+ * Unix credential
+ */
+struct unixcred {
+ int uid;
+ int gid;
+ int gids<MAXGIDS>;
+};
+
+/*
+ * Result returned from GETCRED
+ */
+union getcredres switch (keystatus status) {
+case KEY_SUCCESS:
+ unixcred cred;
+default:
+ void;
+};
OpenPOWER on IntegriCloud