--- /dev/null
+/*
+ * $Source$
+ * $Author$
+ *
+ * Copyright 1990 by the Massachusetts Institute of Technology.
+ *
+ * For copying and distribution information, please see the file
+ * <krb5/mit-copyright.h>.
+ *
+ * Regression tests for the kerberos library.
+ */
+
+#if !defined(lint) && !defined(SABER)
+static char rcsid_test1_c [] =
+"$Id$";
+#endif /* !lint & !SABER */
+
+#include <krb5/copyright.h>
+
+#include <krb5/krb5.h>
+
+unsigned char key_one[8] = { 0x10, 0x23, 0x32, 0x45, 0x54, 0x67, 0x76, 0x89 };
+unsigned char key_two[8] = { 0xea, 0x89, 0x57, 0x76, 0x5b, 0xcd, 0x0d, 0x34 };
+
+extern void dump_data();
+
+tkt_test_1()
+{
+ krb5_data *data;
+ krb5_ticket tk_in, *tk_out;
+ krb5_keyblock sess_k, serv_k, *nsess;
+ krb5_enc_tkt_part tk_in_enc;
+ int code;
+ krb5_address *addr_list[2];
+ krb5_address addr_1;
+ static krb5_octet ip_addr_1[4] = { 18, 72, 0, 122 };
+ char *out;
+
+ /*
+ * fill in some values on the "in" side of the ticket
+ */
+ code = krb5_parse_name ("server/test/1@BOGUS.ORG", &tk_in.server);
+ if (code != 0) {
+ com_err("tkt_test_1", code, " parsing server principal");
+ return;
+ }
+
+ serv_k.keytype = 1; /* XXX symbolic constant */
+ serv_k.length = 8; /* XXX symbolic constant */
+ serv_k.contents = key_one;
+
+ sess_k.keytype = 1; /* XXX symbolic constant */
+ sess_k.length = 8; /* XXX symbolic constant */
+ sess_k.contents = key_two;
+
+ tk_in.etype = 1; /* XXX symbolic constant here */
+ tk_in.skvno = 4;
+
+ tk_in.enc_part2 = &tk_in_enc;
+
+ tk_in_enc.confounder = 52;
+ tk_in_enc.flags = 0x11;
+ tk_in_enc.session = &sess_k;
+
+ tk_in_enc.times.authtime = 42;
+ tk_in_enc.times.starttime = 43;
+ tk_in_enc.times.endtime = 44;
+
+ code = krb5_parse_name ("client/test/1@BOGUS.ORG", &tk_in_enc.client);
+ if (code != 0) {
+ com_err("tkt_test_1", code, " parsing client principal");
+ return;
+ }
+ tk_in_enc.transited.length = 0;
+
+ addr_1.addrtype = ADDRTYPE_INET; /* XXX should be KRB5_ADDR... */
+ addr_1.length = 4;
+ addr_1.contents = ip_addr_1;
+
+ addr_list[0] = &addr_1;
+ addr_list[1] = 0;
+
+
+ tk_in_enc.caddrs = addr_list;
+ tk_in_enc.authorization_data = 0;
+
+ code = krb5_encrypt_tkt_part(&serv_k, &tk_in);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, " encrypting ticket");
+ return;
+ }
+
+ data = 0;
+
+ code = krb5_encode_ticket (&tk_in, &data);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, " encoding ticket");
+ return;
+ }
+
+ dump_data(data);
+
+ tk_out = 0;
+ code = krb5_decode_ticket (data, &tk_out);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, "decoding ticket");
+ return;
+ }
+ /* check the plaintext values */
+ if (tk_out->etype != 1) {
+ com_err ("tkt_test_1", 0, "wrong etype");
+ return;
+ }
+ if (tk_out->skvno != 4) {
+ com_err ("tkt_test_1", 0, "wrong kvno");
+ return;
+ }
+
+ code = krb5_unparse_name(tk_out->server, &out);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, "couldn't unparse server principal");
+ return;
+ }
+ if (strcmp (out, "server/test/1@BOGUS.ORG") != 0) {
+ com_err("tkt_test_1", 0, "wrong server principal");
+ return;
+ }
+ free(out);
+ out = 0;
+
+ /* decode the ciphertext */
+ code = krb5_decrypt_tkt_part (&serv_k, tk_out);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, "while decrypting ticket");
+ return;
+ }
+
+ /* check the contents */
+ if (tk_out->enc_part2->flags != 0x11) {
+ com_err("tkt_test_1", 0, "wrong flags");
+ return;
+ }
+
+ nsess = tk_out->enc_part2->session;
+
+ if (nsess->keytype != 1) {
+ com_err("tkt_test_1", 0, "wrong session key type");
+ return;
+ }
+ if (nsess->length != 8) {
+ com_err("tkt_test_1", 0, "wrong session key length");
+ return;
+ }
+ if (bcmp(nsess->contents, key_two, 8) != 0) {
+ com_err("tkt_test_1", 0, "wrong session key contents");
+ return;
+ }
+
+ code = krb5_unparse_name(tk_out->enc_part2->client, &out);
+ if (code != 0) {
+ com_err ("tkt_test_1", code, "couldn't unparse client principal");
+ return;
+ }
+ if (strcmp (out, "client/test/1@BOGUS.ORG") != 0) {
+ com_err("tkt_test_1", 0, "wrong client principal");
+ return;
+ }
+ free(out);
+ out = 0;
+ if (tk_out->enc_part2->transited.length != 0) {
+ com_err("tkt_test_1", 0, "wrong transited length");
+ return;
+ }
+ /* XXX should check address here, too */
+ /* XXX should check times here */
+ /* XXX should check auth. data here */
+ printf("test 1 passed\n");
+}
+
+
+
+main()
+{
+ initialize_isod_error_table();
+ initialize_krb5_error_table();
+ tkt_test_1();
+}