3 * $Id: crypt.h,v 1.2 1997/08/04 10:24:21 mdw Exp $
5 * Cryptographic transfer of `become' requests
10 /*----- Licensing notice --------------------------------------------------*
12 * This file is part of `become'
14 * `Become' is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
19 * `Become' is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with `become'; if not, write to the Free Software Foundation,
26 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 /*----- Revision history --------------------------------------------------*
32 * Revision 1.2 1997/08/04 10:24:21 mdw
33 * Sources placed under CVS control.
35 * Revision 1.1 1997/07/21 13:47:51 mdw
47 /*----- Required headers --------------------------------------------------*/
59 /*----- Type definitions and data structures ------------------------------*/
61 /* --- Encryption formats --- */
64 cryptType_idea
, /* Symmetric IDEA encryption */
65 cryptType_rsa
/* Public key RSA (later project) */
68 /* --- Encrypted buffer format --- *
70 * C structures are no good here. Time for some explicit offsets.
74 crq_cryptType
= 0, /* Encryption type (1 byte) */
75 crq_iv
= crq_cryptType
+ 1, /* Plaintext IV (8 bytes) */
76 crq_session
= crq_iv
+ 8, /* IDEA session key (16 bytes) */
77 crq_cipher
= crq_session
+ 16, /* Where to start encrypting */
78 crq_time
= crq_cipher
, /* Time stamp (4 bytes) */
79 crq_pid
= crq_time
+ 4, /* Process ID (4 bytes) */
80 crq_from
= crq_pid
+ 4, /* From user id (4 bytes) */
81 crq_to
= crq_from
+ 4, /* To user id (4 bytes) */
82 crq_cmd
= crq_to
+ 4, /* Command string (lots of bytes) */
83 crq_check
= crq_cmd
+ CMDLEN_MAX
, /* Checksum for request (4 bytes) */
84 crq_size
= crq_check
+ 4 /* Size of encrypted request */
87 /* --- Encrypted result format --- */
90 crp_iv
= 0, /* Plaintext IV (8 bytes) */
91 crp_cipher
= crp_iv
+ 8, /* Where to start encrypting */
92 crp_time
= crp_cipher
, /* Time of request (4 bytes) */
93 crp_pid
= crp_time
+ 4, /* Process ID of client (4 bytes) */
94 crp_answer
= crp_pid
+ 4, /* Answer (1 or 0) (1 byte) */
95 crp_check
= crp_answer
+ 1, /* Checksum for reply (4 bytes) */
96 crp_size
= crp_check
+ 4 /* Size of encrypted reply */
99 /*----- Functions provided ------------------------------------------------*/
101 /* --- @crypt_packRequest@ --- *
103 * Arguments: @request *rq@ = pointer to request block
104 * @unsigned char *buff@ = pointer to a buffer
105 * @time_t t@ = the current time
106 * @pid_t pid@ = my process ID
107 * @unsigned char *k@ = pointer to 128-bit key
108 * @unsigned char *sk@ = where to put the session key
110 * Returns: The number of bytes written.
112 * Use: Packs a request block into a buffer. The buffer should have
113 * space for at least @crq_size@ bytes. The buffer comes back
114 * encrypted and ready to send.
117 extern void crypt_packRequest(request */
*rq*/
, unsigned char */
*buff*/
,
118 time_t /*t*/, pid_t
/*pid*/,
119 unsigned char */
*k*/
, unsigned char */
*sk*/
);
121 /* --- @crypt_unpackRequest@ --- *
123 * Arguments: @reqest *rq@ = pointer to destination request block
124 * @unsigned char *buff@ = pointer to source buffer
125 * @unsigned char *k@ = pointer to encryption key
126 * @unsigned char *sk@ = pointer to where to store session key
127 * @unsigned char *rpl@ = where to start building reply
131 * Use: Decrypts and unpacks a request buffer.
134 extern int crypt_unpackRequest(request */
*rq*/
, unsigned char */
*buff*/
,
135 unsigned char */
*k*/
, unsigned char */
*sk*/
,
136 unsigned char */
*rpl*/
);
138 /* --- @crypt_packReply@ --- *
140 * Arguments: @unsigned char *buff@ = pointer to reply block
141 * @unsigned char *sk@ = pointer to session key
142 * @int answer@ = yes or no
146 * Use: Packs and encrypts a reply block.
149 extern void crypt_packReply(unsigned char */
*buff*/
, unsigned char */
*sk*/
,
152 /* --- @crypt_unpackReply@ --- *
154 * Arguments: @unsigned char *buff@ = pointer to reply buffer
155 * @unsigned char *sk@ = pointer to session key
156 * @time_t t@ = time at which request was sent
157 * @pid_t pid@ = my process ID
159 * Returns: >0 if request granted, zero if denied, <0 if reply rejected
161 * Use: Unpacks a reply block, and informs the caller of the outcome.
164 extern int crypt_unpackReply(unsigned char */
*buff*/
, unsigned char */
*sk*/
,
165 time_t /*t*/, pid_t
/*pid*/);
167 /*----- That's all, folks -------------------------------------------------*/