keys.c revision 178825
1261268Sjhb/*
2281887Sjhb * Copyright (c) 1997 - 2000 Kungliga Tekniska H�gskolan
3261268Sjhb * (Royal Institute of Technology, Stockholm, Sweden).
4261268Sjhb * All rights reserved.
5261268Sjhb *
6261268Sjhb * Redistribution and use in source and binary forms, with or without
7261268Sjhb * modification, are permitted provided that the following conditions
8261268Sjhb * are met:
9261268Sjhb *
10261268Sjhb * 1. Redistributions of source code must retain the above copyright
11261268Sjhb *    notice, this list of conditions and the following disclaimer.
12261268Sjhb *
13261268Sjhb * 2. Redistributions in binary form must reproduce the above copyright
14261268Sjhb *    notice, this list of conditions and the following disclaimer in the
15261268Sjhb *    documentation and/or other materials provided with the distribution.
16261268Sjhb *
17261268Sjhb * 3. Neither the name of the Institute nor the names of its contributors
18261268Sjhb *    may be used to endorse or promote products derived from this software
19261268Sjhb *    without specific prior written permission.
20261268Sjhb *
21261268Sjhb * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22261268Sjhb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23261268Sjhb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24261268Sjhb * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25261268Sjhb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26261268Sjhb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27261268Sjhb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28261268Sjhb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29261268Sjhb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30261268Sjhb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31261268Sjhb * SUCH DAMAGE.
32261268Sjhb */
33261268Sjhb
34261268Sjhb#include "kadm5_locl.h"
35261268Sjhb
36261268SjhbRCSID("$Id: keys.c 14297 2004-10-11 23:50:25Z lha $");
37261268Sjhb
38261268Sjhb/*
39261268Sjhb * free all the memory used by (len, keys)
40261268Sjhb */
41261268Sjhb
42261268Sjhbvoid
43261268Sjhb_kadm5_free_keys (krb5_context context,
44261268Sjhb		  int len, Key *keys)
45261268Sjhb{
46261268Sjhb    hdb_free_keys(context, len, keys);
47261268Sjhb}
48261268Sjhb
49261268Sjhb/*
50261268Sjhb * null-ify `len', `keys'
51261268Sjhb */
52261268Sjhb
53261268Sjhbvoid
54261268Sjhb_kadm5_init_keys (Key *keys, int len)
55261268Sjhb{
56261268Sjhb    int i;
57261268Sjhb
58261268Sjhb    for (i = 0; i < len; ++i) {
59261268Sjhb	keys[i].mkvno               = NULL;
60261268Sjhb	keys[i].salt                = NULL;
61261268Sjhb	keys[i].key.keyvalue.length = 0;
62261268Sjhb	keys[i].key.keyvalue.data   = NULL;
63261268Sjhb    }
64261268Sjhb}
65261268Sjhb
66261268Sjhb/*
67261268Sjhb * return 0 iff `keys1, len1' and `keys2, len2' are identical
68261268Sjhb */
69261268Sjhb
70261268Sjhbint
71261268Sjhb_kadm5_cmp_keys(Key *keys1, int len1, Key *keys2, int len2)
72261268Sjhb{
73261268Sjhb    int i;
74261268Sjhb
75    if (len1 != len2)
76	return 1;
77
78    for (i = 0; i < len1; ++i) {
79	if ((keys1[i].salt != NULL && keys2[i].salt == NULL)
80	    || (keys1[i].salt == NULL && keys2[i].salt != NULL))
81	    return 1;
82	if (keys1[i].salt != NULL) {
83	    if (keys1[i].salt->type != keys2[i].salt->type)
84		return 1;
85	    if (keys1[i].salt->salt.length != keys2[i].salt->salt.length)
86		return 1;
87	    if (memcmp (keys1[i].salt->salt.data, keys2[i].salt->salt.data,
88			keys1[i].salt->salt.length) != 0)
89		return 1;
90	}
91	if (keys1[i].key.keytype != keys2[i].key.keytype)
92	    return 1;
93	if (keys1[i].key.keyvalue.length != keys2[i].key.keyvalue.length)
94	    return 1;
95	if (memcmp (keys1[i].key.keyvalue.data, keys2[i].key.keyvalue.data,
96		    keys1[i].key.keyvalue.length) != 0)
97	    return 1;
98    }
99    return 0;
100}
101