Blame src/tests/test1.c

Packit fd8b60
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
Packit fd8b60
/* tests/test1.c - Regression tests for krb5 library */
Packit fd8b60
/*
Packit fd8b60
 * Copyright 1990 by the Massachusetts Institute of Technology.
Packit fd8b60
 * All Rights Reserved.
Packit fd8b60
 *
Packit fd8b60
 * Export of this software from the United States of America may
Packit fd8b60
 *   require a specific license from the United States Government.
Packit fd8b60
 *   It is the responsibility of any person or organization contemplating
Packit fd8b60
 *   export to obtain such a license before exporting.
Packit fd8b60
 *
Packit fd8b60
 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
Packit fd8b60
 * distribute this software and its documentation for any purpose and
Packit fd8b60
 * without fee is hereby granted, provided that the above copyright
Packit fd8b60
 * notice appear in all copies and that both that copyright notice and
Packit fd8b60
 * this permission notice appear in supporting documentation, and that
Packit fd8b60
 * the name of M.I.T. not be used in advertising or publicity pertaining
Packit fd8b60
 * to distribution of the software without specific, written prior
Packit fd8b60
 * permission.  Furthermore if you modify this software you must label
Packit fd8b60
 * your software as modified software and not distribute it in such a
Packit fd8b60
 * fashion that it might be confused with the original M.I.T. software.
Packit fd8b60
 * M.I.T. makes no representations about the suitability of
Packit fd8b60
 * this software for any purpose.  It is provided "as is" without express
Packit fd8b60
 * or implied warranty.
Packit fd8b60
 */
Packit fd8b60
Packit fd8b60
#include "krb5.h"
Packit fd8b60
Packit fd8b60
unsigned char key_one[8] = { 0x10, 0x23, 0x32, 0x45, 0x54, 0x67, 0x76, 0x89 };
Packit fd8b60
unsigned char key_two[8] = { 0xea, 0x89, 0x57, 0x76, 0x5b, 0xcd, 0x0d, 0x34 };
Packit fd8b60
Packit fd8b60
extern void dump_data();
Packit fd8b60
Packit fd8b60
tkt_test_1()
Packit fd8b60
{
Packit fd8b60
    krb5_data *data;
Packit fd8b60
    krb5_ticket tk_in, *tk_out;
Packit fd8b60
    krb5_keyblock sess_k, serv_k, *nsess;
Packit fd8b60
    krb5_enc_tkt_part tk_in_enc;
Packit fd8b60
    int code;
Packit fd8b60
    krb5_address *addr_list[2];
Packit fd8b60
    krb5_address addr_1;
Packit fd8b60
    static krb5_octet ip_addr_1[4] = { 18, 72, 0, 122 };
Packit fd8b60
    char *out;
Packit fd8b60
Packit fd8b60
    /*
Packit fd8b60
     * fill in some values on the "in" side of the ticket
Packit fd8b60
     */
Packit fd8b60
    code = krb5_parse_name ("server/test/1@BOGUS.ORG", &tk_in.server);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err("tkt_test_1", code, " parsing server principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    serv_k.enctype = 1;         /* XXX symbolic constant */
Packit fd8b60
    serv_k.length = 8;          /* XXX symbolic constant */
Packit fd8b60
    serv_k.contents = key_one;
Packit fd8b60
Packit fd8b60
    sess_k.enctype = 1;         /* XXX symbolic constant */
Packit fd8b60
    sess_k.length = 8;          /* XXX symbolic constant */
Packit fd8b60
    sess_k.contents = key_two;
Packit fd8b60
Packit fd8b60
    tk_in.etype = 1;            /* XXX symbolic constant here */
Packit fd8b60
    tk_in.skvno = 4;
Packit fd8b60
Packit fd8b60
    tk_in.enc_part2 = &tk_in_enc;
Packit fd8b60
Packit fd8b60
    tk_in_enc.flags = 0x11;
Packit fd8b60
    tk_in_enc.session = &sess_k;
Packit fd8b60
Packit fd8b60
    tk_in_enc.times.authtime = 42;
Packit fd8b60
    tk_in_enc.times.starttime = 43;
Packit fd8b60
    tk_in_enc.times.endtime = 44;
Packit fd8b60
Packit fd8b60
    code = krb5_parse_name ("client/test/1@BOGUS.ORG", &tk_in_enc.client);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err("tkt_test_1", code, " parsing client principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    tk_in_enc.transited.length = 0;
Packit fd8b60
Packit fd8b60
    addr_1.addrtype = ADDRTYPE_INET; /* XXX should be KRB5_ADDR... */
Packit fd8b60
    addr_1.length = 4;
Packit fd8b60
    addr_1.contents = ip_addr_1;
Packit fd8b60
Packit fd8b60
    addr_list[0] = &addr_1;
Packit fd8b60
    addr_list[1] = 0;
Packit fd8b60
Packit fd8b60
Packit fd8b60
    tk_in_enc.caddrs = addr_list;
Packit fd8b60
    tk_in_enc.authorization_data = 0;
Packit fd8b60
Packit fd8b60
    code = krb5_encrypt_tkt_part(&serv_k, &tk_in);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, " encrypting ticket");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    data = 0;
Packit fd8b60
Packit fd8b60
    code = krb5_encode_ticket (&tk_in,  &data);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, " encoding ticket");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    dump_data(data);
Packit fd8b60
Packit fd8b60
    tk_out = 0;
Packit fd8b60
    code = krb5_decode_ticket (data, &tk_out);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, "decoding ticket");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    /* check the plaintext values */
Packit fd8b60
    if (tk_out->etype != 1) {
Packit fd8b60
        com_err ("tkt_test_1", 0, "wrong etype");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    if (tk_out->skvno != 4) {
Packit fd8b60
        com_err ("tkt_test_1", 0, "wrong kvno");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    code = krb5_unparse_name(tk_out->server, &out;;
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, "couldn't unparse server principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    if (strcmp (out, "server/test/1@BOGUS.ORG") != 0) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong server principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    free(out);
Packit fd8b60
    out = 0;
Packit fd8b60
Packit fd8b60
    /* decode the ciphertext */
Packit fd8b60
    code = krb5_decrypt_tkt_part (&serv_k, tk_out);
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, "while decrypting ticket");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    /* check the contents */
Packit fd8b60
    if (tk_out->enc_part2->flags != 0x11) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong flags");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    nsess = tk_out->enc_part2->session;
Packit fd8b60
Packit fd8b60
    if (nsess->enctype != 1) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong session key type");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    if (nsess->length != 8) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong session key length");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    if (memcmp(nsess->contents, key_two, 8) != 0) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong session key contents");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    code = krb5_unparse_name(tk_out->enc_part2->client, &out;;
Packit fd8b60
    if (code != 0) {
Packit fd8b60
        com_err ("tkt_test_1", code, "couldn't unparse client principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    if (strcmp (out, "client/test/1@BOGUS.ORG") != 0) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong client principal");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    free(out);
Packit fd8b60
    out = 0;
Packit fd8b60
    if (tk_out->enc_part2->transited.length != 0) {
Packit fd8b60
        com_err("tkt_test_1", 0, "wrong transited length");
Packit fd8b60
        return;
Packit fd8b60
    }
Packit fd8b60
    /* XXX should check address here, too */
Packit fd8b60
    /* XXX should check times here */
Packit fd8b60
    /* XXX should check auth. data here */
Packit fd8b60
    printf("test 1 passed\n");
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
Packit fd8b60
Packit fd8b60
main()
Packit fd8b60
{
Packit fd8b60
    krb5_init_ets();
Packit fd8b60
    tkt_test_1();
Packit fd8b60
}