178527Sassar/*
278527Sassar * Copyright (c) 2001 Kungliga Tekniska H�gskolan
378527Sassar * (Royal Institute of Technology, Stockholm, Sweden).
478527Sassar * All rights reserved.
578527Sassar *
678527Sassar * Redistribution and use in source and binary forms, with or without
778527Sassar * modification, are permitted provided that the following conditions
878527Sassar * are met:
978527Sassar *
1078527Sassar * 1. Redistributions of source code must retain the above copyright
1178527Sassar *    notice, this list of conditions and the following disclaimer.
1278527Sassar *
1378527Sassar * 2. Redistributions in binary form must reproduce the above copyright
1478527Sassar *    notice, this list of conditions and the following disclaimer in the
1578527Sassar *    documentation and/or other materials provided with the distribution.
1678527Sassar *
1778527Sassar * 3. Neither the name of KTH nor the names of its contributors may be
1878527Sassar *    used to endorse or promote products derived from this software without
1978527Sassar *    specific prior written permission.
2078527Sassar *
2178527Sassar * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
2278527Sassar * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2378527Sassar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2478527Sassar * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
2578527Sassar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2678527Sassar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2778527Sassar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2878527Sassar * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2978527Sassar * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3078527Sassar * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
3178527Sassar * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
3278527Sassar
3378527Sassar#include "krb5_locl.h"
3478527Sassar
35178825SdfrRCSID("$Id: store-test.c 16344 2005-12-02 15:15:43Z lha $");
3678527Sassar
3778527Sassarstatic void
3878527Sassarprint_data(unsigned char *data, size_t len)
3978527Sassar{
4078527Sassar    int i;
4178527Sassar    for(i = 0; i < len; i++) {
4278527Sassar	if(i > 0 && (i % 16) == 0)
4378527Sassar	    printf("\n            ");
4478527Sassar	printf("%02x ", data[i]);
4578527Sassar    }
4678527Sassar    printf("\n");
4778527Sassar}
4878527Sassar
4978527Sassarstatic int
5078527Sassarcompare(const char *name, krb5_storage *sp, void *expected, size_t len)
5178527Sassar{
5278527Sassar    int ret = 0;
5378527Sassar    krb5_data data;
5478527Sassar    krb5_storage_to_data(sp, &data);
5578527Sassar    krb5_storage_free(sp);
5678527Sassar    if(data.length != len || memcmp(data.data, expected, len) != 0) {
5778527Sassar	printf("%s mismatch\n", name);
5878527Sassar	printf("  Expected: ");
5978527Sassar	print_data(expected, len);
6078527Sassar	printf("  Actual:   ");
6178527Sassar	print_data(data.data, data.length);
6278527Sassar	ret++;
6378527Sassar    }
6478527Sassar    krb5_data_free(&data);
6578527Sassar    return ret;
6678527Sassar}
6778527Sassar
6878527Sassarint
6978527Sassarmain(int argc, char **argv)
7078527Sassar{
7178527Sassar    int nerr = 0;
7278527Sassar    krb5_storage *sp;
7378527Sassar    krb5_context context;
7478527Sassar    krb5_principal principal;
7578527Sassar
7678527Sassar
7778527Sassar    krb5_init_context(&context);
7878527Sassar
7978527Sassar    sp = krb5_storage_emem();
8078527Sassar    krb5_store_int32(sp, 0x01020304);
8178527Sassar    nerr += compare("Integer", sp, "\x1\x2\x3\x4", 4);
8278527Sassar
8378527Sassar    sp = krb5_storage_emem();
8478527Sassar    krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_LE);
8578527Sassar    krb5_store_int32(sp, 0x01020304);
8678527Sassar    nerr += compare("Integer (LE)", sp, "\x4\x3\x2\x1", 4);
8778527Sassar
8878527Sassar    sp = krb5_storage_emem();
8978527Sassar    krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_BE);
9078527Sassar    krb5_store_int32(sp, 0x01020304);
9178527Sassar    nerr += compare("Integer (BE)", sp, "\x1\x2\x3\x4", 4);
9278527Sassar
9378527Sassar    sp = krb5_storage_emem();
9478527Sassar    krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_HOST);
9578527Sassar    krb5_store_int32(sp, 0x01020304);
9678527Sassar    {
9778527Sassar	int test = 1;
9878527Sassar	void *data;
9978527Sassar	if(*(char*)&test)
10078527Sassar	    data = "\x4\x3\x2\x1";
10178527Sassar	else
10278527Sassar	    data = "\x1\x2\x3\x4";
10378527Sassar	nerr += compare("Integer (host)", sp, data, 4);
10478527Sassar    }
10578527Sassar
10678527Sassar    sp = krb5_storage_emem();
10778527Sassar    krb5_make_principal(context, &principal, "TEST", "foobar", NULL);
10878527Sassar    krb5_store_principal(sp, principal);
109178825Sdfr    krb5_free_principal(context, principal);
11078527Sassar    nerr += compare("Principal", sp, "\x0\x0\x0\x1"
11178527Sassar		    "\x0\x0\x0\x1"
11278527Sassar		    "\x0\x0\x0\x4TEST"
11378527Sassar		    "\x0\x0\x0\x6""foobar", 26);
11478527Sassar
115178825Sdfr    krb5_free_context(context);
116178825Sdfr
11778527Sassar    return nerr ? 1 : 0;
11878527Sassar}
119