|
|
1.1 root 1: /*
2: * $Source: /usr/src/kerberosIV/krb/RCS/create_ciph.c,v $
3: * $Author: kfall $
4: *
5: * Copyright 1986, 1987, 1988 by the Massachusetts Institute
6: * of Technology.
7: *
8: * For copying and distribution information, please see the file
9: * <mit-copyright.h>.
10: */
11:
12: #ifndef lint
13: static char *rcsid_create_ciph_c =
14: "$Header: /usr/src/kerberosIV/krb/RCS/create_ciph.c,v 4.9 90/06/25 20:55:25 kfall Exp $";
15: #endif /* lint */
16:
17: #include <mit-copyright.h>
18: #include <des.h>
19: #include <krb.h>
20: #include <strings.h>
21:
22: /*
23: * This routine is used by the authentication server to create
24: * a packet for its client, containing a ticket for the requested
25: * service (given in "tkt"), and some information about the ticket,
26: #ifndef NOENCRYPTION
27: * all encrypted in the given key ("key").
28: #endif
29: *
30: * Returns KSUCCESS no matter what.
31: *
32: * The length of the cipher is stored in c->length; the format of
33: * c->dat is as follows:
34: *
35: * variable
36: * type or constant data
37: * ---- ----------- ----
38: *
39: *
40: * 8 bytes session session key for client, service
41: *
42: * string service service name
43: *
44: * string instance service instance
45: *
46: * string realm KDC realm
47: *
48: * unsigned char life ticket lifetime
49: *
50: * unsigned char kvno service key version number
51: *
52: * unsigned char tkt->length length of following ticket
53: *
54: * data tkt->dat ticket for service
55: *
56: * 4 bytes kdc_time KDC's timestamp
57: *
58: * <=7 bytes null null pad to 8 byte multiple
59: *
60: */
61:
62: create_ciph(c, session, service, instance, realm, life, kvno, tkt,
63: kdc_time, key)
64: KTEXT c; /* Text block to hold ciphertext */
65: C_Block session; /* Session key to send to user */
66: char *service; /* Service name on ticket */
67: char *instance; /* Instance name on ticket */
68: char *realm; /* Realm of this KDC */
69: unsigned long life; /* Lifetime of the ticket */
70: int kvno; /* Key version number for service */
71: KTEXT tkt; /* The ticket for the service */
72: unsigned long kdc_time; /* KDC time */
73: C_Block key; /* Key to encrypt ciphertext with */
74: {
75: char *ptr;
76: Key_schedule key_s;
77:
78: ptr = (char *) c->dat;
79:
80: bcopy((char *) session, ptr, 8);
81: ptr += 8;
82:
83: (void) strcpy(ptr,service);
84: ptr += strlen(service) + 1;
85:
86: (void) strcpy(ptr,instance);
87: ptr += strlen(instance) + 1;
88:
89: (void) strcpy(ptr,realm);
90: ptr += strlen(realm) + 1;
91:
92: *(ptr++) = (unsigned char) life;
93: *(ptr++) = (unsigned char) kvno;
94: *(ptr++) = (unsigned char) tkt->length;
95:
96: bcopy((char *)(tkt->dat),ptr,tkt->length);
97: ptr += tkt->length;
98:
99: bcopy((char *) &kdc_time,ptr,4);
100: ptr += 4;
101:
102: /* guarantee null padded encrypted data to multiple of 8 bytes */
103: bzero(ptr, 7);
104:
105: c->length = (((ptr - (char *) c->dat) + 7) / 8) * 8;
106:
107: #ifndef NOENCRYPTION
108: key_sched(key,key_s);
109: pcbc_encrypt((C_Block *)c->dat,(C_Block *)c->dat,
110: (long) c->length,key_s,key,ENCRYPT);
111: #endif /* NOENCRYPTION */
112:
113: return(KSUCCESS);
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.