2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 /* The rxkad security object. This contains packet processing routines that
11 * are prohibited from being exported. */
14 #include <afsconfig.h>
16 #include "afs/param.h"
18 #include <afs/param.h>
28 #if defined(AFS_AIX_ENV) || defined(AFS_AUX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_XBSD_ENV)
32 #include "netinet/in.h"
34 #include "afs/sysincludes.h"
39 #include <sys/types.h>
45 #include <netinet/in.h>
49 #include <des/stats.h>
50 #include "private_data.h"
51 #define XPRT_RXKAD_CRYPT
54 rxkad_DecryptPacket(const struct rx_connection *conn,
55 const fc_KeySchedule * schedule,
56 const fc_InitializationVector * ivec, const int inlen,
57 struct rx_packet *packet)
60 struct rx_securityClass *obj;
61 struct rxkad_cprivate *tp; /* s & c have type at same offset */
67 obj = rx_SecurityObjectOf(conn);
68 tp = (struct rxkad_cprivate *)obj->privateData;
69 ADD_RXKAD_STATS(bytesDecrypted[rxkad_TypeIndex(tp->type)],len);
70 memcpy((void *)xor, (void *)ivec, sizeof(xor));
71 for (i = 0; len; i++) {
72 data = rx_data(packet, i, tlen);
75 tlen = MIN(len, tlen);
76 fc_cbc_encrypt(data, data, tlen, *schedule, xor, DECRYPT);
79 /* Do this if packet checksums are ever enabled (below), but
80 * current version just passes zero
82 cksum = ntohl(rx_GetInt32(packet, 1));
88 rxkad_EncryptPacket(const struct rx_connection * conn,
89 const fc_KeySchedule * schedule,
90 const fc_InitializationVector * ivec, const int inlen,
91 struct rx_packet * packet)
94 struct rx_securityClass *obj;
95 struct rxkad_cprivate *tp; /* s & c have type at same offset */
101 obj = rx_SecurityObjectOf(conn);
102 tp = (struct rxkad_cprivate *)obj->privateData;
103 ADD_RXKAD_STATS(bytesEncrypted[rxkad_TypeIndex(tp->type)],len);
107 * * Future option to add cksum here, but for now we just put 0
109 rx_PutInt32(packet, 1 * sizeof(afs_int32), 0);
111 memcpy((void *)xor, (void *)ivec, sizeof(xor));
112 for (i = 0; len; i++) {
113 data = rx_data(packet, i, tlen);
116 tlen = MIN(len, tlen);
117 fc_cbc_encrypt(data, data, tlen, *schedule, xor, ENCRYPT);