1*0a6a1f1dSLionel Sambuc /* $NetBSD: test_pknistkdf.c,v 1.3 2014/04/24 13:45:34 pettai Exp $ */
2ebfedea0SLionel Sambuc
3ebfedea0SLionel Sambuc /*
4ebfedea0SLionel Sambuc * Copyright (c) 2008 Kungliga Tekniska Högskolan
5ebfedea0SLionel Sambuc * (Royal Institute of Technology, Stockholm, Sweden).
6ebfedea0SLionel Sambuc * All rights reserved.
7ebfedea0SLionel Sambuc *
8ebfedea0SLionel Sambuc * Redistribution and use in source and binary forms, with or without
9ebfedea0SLionel Sambuc * modification, are permitted provided that the following conditions
10ebfedea0SLionel Sambuc * are met:
11ebfedea0SLionel Sambuc *
12ebfedea0SLionel Sambuc * 1. Redistributions of source code must retain the above copyright
13ebfedea0SLionel Sambuc * notice, this list of conditions and the following disclaimer.
14ebfedea0SLionel Sambuc *
15ebfedea0SLionel Sambuc * 2. Redistributions in binary form must reproduce the above copyright
16ebfedea0SLionel Sambuc * notice, this list of conditions and the following disclaimer in the
17ebfedea0SLionel Sambuc * documentation and/or other materials provided with the distribution.
18ebfedea0SLionel Sambuc *
19ebfedea0SLionel Sambuc * 3. Neither the name of KTH nor the names of its contributors may be
20ebfedea0SLionel Sambuc * used to endorse or promote products derived from this software without
21ebfedea0SLionel Sambuc * specific prior written permission.
22ebfedea0SLionel Sambuc *
23ebfedea0SLionel Sambuc * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24ebfedea0SLionel Sambuc * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25ebfedea0SLionel Sambuc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26ebfedea0SLionel Sambuc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27ebfedea0SLionel Sambuc * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28ebfedea0SLionel Sambuc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29ebfedea0SLionel Sambuc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30ebfedea0SLionel Sambuc * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31ebfedea0SLionel Sambuc * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32ebfedea0SLionel Sambuc * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33ebfedea0SLionel Sambuc * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
34ebfedea0SLionel Sambuc
35ebfedea0SLionel Sambuc #include "krb5_locl.h"
36ebfedea0SLionel Sambuc #include <krb5/pkinit_asn1.h>
37ebfedea0SLionel Sambuc #include <err.h>
38ebfedea0SLionel Sambuc #include <krb5/getarg.h>
39ebfedea0SLionel Sambuc #include <krb5/hex.h>
40ebfedea0SLionel Sambuc
41ebfedea0SLionel Sambuc static int verbose_flag = 0;
42ebfedea0SLionel Sambuc
43ebfedea0SLionel Sambuc struct testcase {
44ebfedea0SLionel Sambuc const heim_oid *oid;
45ebfedea0SLionel Sambuc krb5_data Z;
46ebfedea0SLionel Sambuc const char *client;
47ebfedea0SLionel Sambuc const char *server;
48ebfedea0SLionel Sambuc krb5_enctype enctype;
49ebfedea0SLionel Sambuc krb5_data as_req;
50ebfedea0SLionel Sambuc krb5_data pk_as_rep;
51ebfedea0SLionel Sambuc krb5_data ticket;
52ebfedea0SLionel Sambuc
53ebfedea0SLionel Sambuc krb5_data key;
54ebfedea0SLionel Sambuc } tests[] = {
55ebfedea0SLionel Sambuc /* 0 */
56ebfedea0SLionel Sambuc {
57ebfedea0SLionel Sambuc NULL, /* AlgorithmIdentifier */
58ebfedea0SLionel Sambuc { /* Z */
59ebfedea0SLionel Sambuc 256,
60ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
61ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
62ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
63ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
64ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
65ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
66ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
67ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
68ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
69ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
70ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
71ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
72ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
73ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
74ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
75ebfedea0SLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
76ebfedea0SLionel Sambuc },
77ebfedea0SLionel Sambuc "lha@SU.SE", /* client, partyUInfo */
78ebfedea0SLionel Sambuc "krbtgt/SU.SE@SU.SE", /* server, partyVInfo */
79ebfedea0SLionel Sambuc ETYPE_AES256_CTS_HMAC_SHA1_96, /* enctype */
80ebfedea0SLionel Sambuc { /* as_req */
81ebfedea0SLionel Sambuc 10,
82ebfedea0SLionel Sambuc "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
83ebfedea0SLionel Sambuc },
84ebfedea0SLionel Sambuc { /* pk_as_rep */
85ebfedea0SLionel Sambuc 9,
86ebfedea0SLionel Sambuc "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"
87ebfedea0SLionel Sambuc },
88ebfedea0SLionel Sambuc { /* ticket */
89ebfedea0SLionel Sambuc 55,
90ebfedea0SLionel Sambuc "\x61\x35\x30\x33\xa0\x03\x02\x01\x05\xa1\x07\x1b\x05\x53\x55\x2e"
91ebfedea0SLionel Sambuc "\x53\x45\xa2\x10\x30\x0e\xa0\x03\x02\x01\x01\xa1\x07\x30\x05\x1b"
92ebfedea0SLionel Sambuc "\x03\x6c\x68\x61\xa3\x11\x30\x0f\xa0\x03\x02\x01\x12\xa2\x08\x04"
93ebfedea0SLionel Sambuc "\x06\x68\x65\x6a\x68\x65\x6a"
94ebfedea0SLionel Sambuc },
95ebfedea0SLionel Sambuc { /* key */
96ebfedea0SLionel Sambuc 32,
97ebfedea0SLionel Sambuc "\xc7\x62\x89\xec\x4b\x28\xa6\x91\xff\xce\x80\xbb\xb7\xec\x82\x41"
98ebfedea0SLionel Sambuc "\x52\x3f\x99\xb1\x90\xcf\x2d\x34\x8f\x54\xa8\x65\x81\x2c\x32\x73"
99ebfedea0SLionel Sambuc }
100*0a6a1f1dSLionel Sambuc },
101*0a6a1f1dSLionel Sambuc /* 1 */
102*0a6a1f1dSLionel Sambuc {
103*0a6a1f1dSLionel Sambuc NULL, /* AlgorithmIdentifier */
104*0a6a1f1dSLionel Sambuc { /* Z */
105*0a6a1f1dSLionel Sambuc 256,
106*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
107*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
108*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
109*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
110*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
111*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
112*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
113*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
114*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
115*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
116*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
117*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
118*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
119*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
120*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
121*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
122*0a6a1f1dSLionel Sambuc },
123*0a6a1f1dSLionel Sambuc "lha@SU.SE", /* client, partyUInfo */
124*0a6a1f1dSLionel Sambuc "krbtgt/SU.SE@SU.SE", /* server, partyVInfo */
125*0a6a1f1dSLionel Sambuc ETYPE_AES256_CTS_HMAC_SHA1_96, /* enctype */
126*0a6a1f1dSLionel Sambuc { /* as_req */
127*0a6a1f1dSLionel Sambuc 10,
128*0a6a1f1dSLionel Sambuc "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
129*0a6a1f1dSLionel Sambuc },
130*0a6a1f1dSLionel Sambuc { /* pk_as_rep */
131*0a6a1f1dSLionel Sambuc 9,
132*0a6a1f1dSLionel Sambuc "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"
133*0a6a1f1dSLionel Sambuc },
134*0a6a1f1dSLionel Sambuc { /* ticket */
135*0a6a1f1dSLionel Sambuc 55,
136*0a6a1f1dSLionel Sambuc "\x61\x35\x30\x33\xa0\x03\x02\x01\x05\xa1\x07\x1b\x05\x53\x55\x2e"
137*0a6a1f1dSLionel Sambuc "\x53\x45\xa2\x10\x30\x0e\xa0\x03\x02\x01\x01\xa1\x07\x30\x05\x1b"
138*0a6a1f1dSLionel Sambuc "\x03\x6c\x68\x61\xa3\x11\x30\x0f\xa0\x03\x02\x01\x12\xa2\x08\x04"
139*0a6a1f1dSLionel Sambuc "\x06\x68\x65\x6a\x68\x65\x6a"
140*0a6a1f1dSLionel Sambuc },
141*0a6a1f1dSLionel Sambuc { /* key */
142*0a6a1f1dSLionel Sambuc 32,
143*0a6a1f1dSLionel Sambuc "\x59\xf3\xca\x77\x5b\x20\x17\xe9\xad\x36\x3f\x47\xca\xbd\x43\xb8"
144*0a6a1f1dSLionel Sambuc "\x8c\xb8\x90\x35\x8d\xc6\x0d\x52\x0d\x11\x9f\xb0\xdc\x24\x0b\x61"
145*0a6a1f1dSLionel Sambuc }
146*0a6a1f1dSLionel Sambuc },
147*0a6a1f1dSLionel Sambuc /* 2 */
148*0a6a1f1dSLionel Sambuc {
149*0a6a1f1dSLionel Sambuc NULL, /* AlgorithmIdentifier */
150*0a6a1f1dSLionel Sambuc { /* Z */
151*0a6a1f1dSLionel Sambuc 256,
152*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
153*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
154*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
155*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
156*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
157*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
158*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
159*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
160*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
161*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
162*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
163*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
164*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
165*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
166*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
167*0a6a1f1dSLionel Sambuc "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
168*0a6a1f1dSLionel Sambuc },
169*0a6a1f1dSLionel Sambuc "lha@SU.SE", /* client, partyUInfo */
170*0a6a1f1dSLionel Sambuc "krbtgt/SU.SE@SU.SE", /* server, partyVInfo */
171*0a6a1f1dSLionel Sambuc ETYPE_AES256_CTS_HMAC_SHA1_96, /* enctype */
172*0a6a1f1dSLionel Sambuc { /* as_req */
173*0a6a1f1dSLionel Sambuc 10,
174*0a6a1f1dSLionel Sambuc "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
175*0a6a1f1dSLionel Sambuc },
176*0a6a1f1dSLionel Sambuc { /* pk_as_rep */
177*0a6a1f1dSLionel Sambuc 9,
178*0a6a1f1dSLionel Sambuc "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"
179*0a6a1f1dSLionel Sambuc },
180*0a6a1f1dSLionel Sambuc { /* ticket */
181*0a6a1f1dSLionel Sambuc 55,
182*0a6a1f1dSLionel Sambuc "\x61\x35\x30\x33\xa0\x03\x02\x01\x05\xa1\x07\x1b\x05\x53\x55\x2e"
183*0a6a1f1dSLionel Sambuc "\x53\x45\xa2\x10\x30\x0e\xa0\x03\x02\x01\x01\xa1\x07\x30\x05\x1b"
184*0a6a1f1dSLionel Sambuc "\x03\x6c\x68\x61\xa3\x11\x30\x0f\xa0\x03\x02\x01\x12\xa2\x08\x04"
185*0a6a1f1dSLionel Sambuc "\x06\x68\x65\x6a\x68\x65\x6a"
186*0a6a1f1dSLionel Sambuc },
187*0a6a1f1dSLionel Sambuc { /* key */
188*0a6a1f1dSLionel Sambuc 32,
189*0a6a1f1dSLionel Sambuc "\x8a\x9a\xc5\x5f\x45\xda\x1a\x73\xd9\x1e\xe9\x88\x1f\xa9\x48\x81"
190*0a6a1f1dSLionel Sambuc "\xce\xac\x66\x2d\xb1\xd3\xb9\x0a\x9d\x0e\x52\x83\xdf\xe1\x84\x3d"
191*0a6a1f1dSLionel Sambuc }
192ebfedea0SLionel Sambuc }
193ebfedea0SLionel Sambuc };
194ebfedea0SLionel Sambuc
195ebfedea0SLionel Sambuc #ifdef MAKETICKET
196ebfedea0SLionel Sambuc static void
fooTicket(void)197ebfedea0SLionel Sambuc fooTicket(void)
198ebfedea0SLionel Sambuc {
199ebfedea0SLionel Sambuc krb5_error_code ret;
200ebfedea0SLionel Sambuc krb5_data data;
201ebfedea0SLionel Sambuc size_t size;
202ebfedea0SLionel Sambuc Ticket t;
203ebfedea0SLionel Sambuc
204ebfedea0SLionel Sambuc t.tkt_vno = 5;
205ebfedea0SLionel Sambuc t.realm = "SU.SE";
206ebfedea0SLionel Sambuc t.sname.name_type = KRB5_NT_PRINCIPAL;
207ebfedea0SLionel Sambuc t.sname.name_string.len = 1;
208ebfedea0SLionel Sambuc t.sname.name_string.val = ecalloc(1, sizeof(t.sname.name_string.val[0]));
209ebfedea0SLionel Sambuc t.sname.name_string.val[0] = estrdup("lha");
210ebfedea0SLionel Sambuc t.enc_part.etype = ETYPE_AES256_CTS_HMAC_SHA1_96;
211ebfedea0SLionel Sambuc t.enc_part.kvno = NULL;
212ebfedea0SLionel Sambuc t.enc_part.cipher.length = 6;
213ebfedea0SLionel Sambuc t.enc_part.cipher.data = "hejhej";
214ebfedea0SLionel Sambuc
215ebfedea0SLionel Sambuc ASN1_MALLOC_ENCODE(Ticket, data.data, data.length, &t, &size, ret);
216ebfedea0SLionel Sambuc if (ret)
217ebfedea0SLionel Sambuc errx(1, "ASN1_MALLOC_ENCODE(Ticket)");
218ebfedea0SLionel Sambuc
219ebfedea0SLionel Sambuc rk_dumpdata("foo", data.data, data.length);
220ebfedea0SLionel Sambuc free(data.data);
221ebfedea0SLionel Sambuc }
222ebfedea0SLionel Sambuc #endif
223ebfedea0SLionel Sambuc
224ebfedea0SLionel Sambuc static void
test_dh2key(krb5_context context,int i,struct testcase * c)225ebfedea0SLionel Sambuc test_dh2key(krb5_context context, int i, struct testcase *c)
226ebfedea0SLionel Sambuc {
227ebfedea0SLionel Sambuc krb5_error_code ret;
228ebfedea0SLionel Sambuc krb5_keyblock key;
229ebfedea0SLionel Sambuc krb5_principal client, server;
230ebfedea0SLionel Sambuc Ticket ticket;
231ebfedea0SLionel Sambuc AlgorithmIdentifier ai;
232ebfedea0SLionel Sambuc size_t size;
233ebfedea0SLionel Sambuc
234*0a6a1f1dSLionel Sambuc memset(&ticket, 0, sizeof(ticket));
235ebfedea0SLionel Sambuc
236ebfedea0SLionel Sambuc ai.algorithm = *c->oid;
237ebfedea0SLionel Sambuc ai.parameters = NULL;
238ebfedea0SLionel Sambuc
239ebfedea0SLionel Sambuc ret = decode_Ticket(c->ticket.data, c->ticket.length, &ticket, &size);
240ebfedea0SLionel Sambuc if (ret)
241ebfedea0SLionel Sambuc krb5_errx(context, 1, "decode ticket: %d", ret);
242ebfedea0SLionel Sambuc
243ebfedea0SLionel Sambuc ret = krb5_parse_name(context, c->client, &client);
244ebfedea0SLionel Sambuc if (ret)
245ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "parse_name: %s", c->client);
246ebfedea0SLionel Sambuc ret = krb5_parse_name(context, c->server, &server);
247ebfedea0SLionel Sambuc if (ret)
248ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "parse_name: %s", c->server);
249ebfedea0SLionel Sambuc
250ebfedea0SLionel Sambuc if (verbose_flag) {
251ebfedea0SLionel Sambuc char *str;
252ebfedea0SLionel Sambuc hex_encode(c->Z.data, c->Z.length, &str);
253ebfedea0SLionel Sambuc printf("Z: %s\n", str);
254ebfedea0SLionel Sambuc free(str);
255ebfedea0SLionel Sambuc printf("client: %s\n", c->client);
256ebfedea0SLionel Sambuc printf("server: %s\n", c->server);
257ebfedea0SLionel Sambuc printf("enctype: %d\n", (int)c->enctype);
258ebfedea0SLionel Sambuc hex_encode(c->as_req.data, c->as_req.length, &str);
259ebfedea0SLionel Sambuc printf("as-req: %s\n", str);
260ebfedea0SLionel Sambuc free(str);
261ebfedea0SLionel Sambuc hex_encode(c->pk_as_rep.data, c->pk_as_rep.length, &str);
262ebfedea0SLionel Sambuc printf("pk-as-rep: %s\n", str);
263ebfedea0SLionel Sambuc free(str);
264ebfedea0SLionel Sambuc hex_encode(c->ticket.data, c->ticket.length, &str);
265ebfedea0SLionel Sambuc printf("ticket: %s\n", str);
266ebfedea0SLionel Sambuc free(str);
267ebfedea0SLionel Sambuc }
268ebfedea0SLionel Sambuc
269ebfedea0SLionel Sambuc ret = _krb5_pk_kdf(context,
270ebfedea0SLionel Sambuc &ai,
271ebfedea0SLionel Sambuc c->Z.data,
272ebfedea0SLionel Sambuc c->Z.length,
273ebfedea0SLionel Sambuc client,
274ebfedea0SLionel Sambuc server,
275ebfedea0SLionel Sambuc c->enctype,
276ebfedea0SLionel Sambuc &c->as_req,
277ebfedea0SLionel Sambuc &c->pk_as_rep,
278ebfedea0SLionel Sambuc &ticket,
279ebfedea0SLionel Sambuc &key);
280ebfedea0SLionel Sambuc krb5_free_principal(context, client);
281ebfedea0SLionel Sambuc krb5_free_principal(context, server);
282ebfedea0SLionel Sambuc if (ret)
283ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "_krb5_pk_kdf: %d", i);
284ebfedea0SLionel Sambuc
285ebfedea0SLionel Sambuc if (verbose_flag) {
286ebfedea0SLionel Sambuc char *str;
287ebfedea0SLionel Sambuc hex_encode(key.keyvalue.data, key.keyvalue.length, &str);
288ebfedea0SLionel Sambuc printf("key: %s\n", str);
289ebfedea0SLionel Sambuc free(str);
290ebfedea0SLionel Sambuc }
291ebfedea0SLionel Sambuc
292ebfedea0SLionel Sambuc if (key.keyvalue.length != c->key.length ||
293ebfedea0SLionel Sambuc memcmp(key.keyvalue.data, c->key.data, c->key.length) != 0)
294ebfedea0SLionel Sambuc krb5_errx(context, 1, "resulting key wrong: %d", i);
295ebfedea0SLionel Sambuc
296ebfedea0SLionel Sambuc krb5_free_keyblock_contents(context, &key);
297ebfedea0SLionel Sambuc free_Ticket(&ticket);
298ebfedea0SLionel Sambuc }
299ebfedea0SLionel Sambuc
300ebfedea0SLionel Sambuc
301ebfedea0SLionel Sambuc
302ebfedea0SLionel Sambuc
303ebfedea0SLionel Sambuc static int version_flag = 0;
304ebfedea0SLionel Sambuc static int help_flag = 0;
305ebfedea0SLionel Sambuc
306ebfedea0SLionel Sambuc static struct getargs args[] = {
307ebfedea0SLionel Sambuc {"verbose", 0, arg_flag, &verbose_flag,
308ebfedea0SLionel Sambuc "verbose output", NULL },
309ebfedea0SLionel Sambuc {"version", 0, arg_flag, &version_flag,
310ebfedea0SLionel Sambuc "print version", NULL },
311ebfedea0SLionel Sambuc {"help", 0, arg_flag, &help_flag,
312ebfedea0SLionel Sambuc NULL, NULL }
313ebfedea0SLionel Sambuc };
314ebfedea0SLionel Sambuc
315ebfedea0SLionel Sambuc static void
usage(int ret)316ebfedea0SLionel Sambuc usage (int ret)
317ebfedea0SLionel Sambuc {
318ebfedea0SLionel Sambuc arg_printusage (args,
319ebfedea0SLionel Sambuc sizeof(args)/sizeof(*args),
320ebfedea0SLionel Sambuc NULL,
321ebfedea0SLionel Sambuc "");
322ebfedea0SLionel Sambuc exit (ret);
323ebfedea0SLionel Sambuc }
324ebfedea0SLionel Sambuc
325ebfedea0SLionel Sambuc
326ebfedea0SLionel Sambuc int
main(int argc,char ** argv)327ebfedea0SLionel Sambuc main(int argc, char **argv)
328ebfedea0SLionel Sambuc {
329ebfedea0SLionel Sambuc krb5_context context;
330ebfedea0SLionel Sambuc krb5_error_code ret;
331ebfedea0SLionel Sambuc int i, optidx = 0;
332ebfedea0SLionel Sambuc
333ebfedea0SLionel Sambuc setprogname(argv[0]);
334ebfedea0SLionel Sambuc
335ebfedea0SLionel Sambuc if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
336ebfedea0SLionel Sambuc usage(1);
337ebfedea0SLionel Sambuc
338ebfedea0SLionel Sambuc if (help_flag)
339ebfedea0SLionel Sambuc usage (0);
340ebfedea0SLionel Sambuc
341ebfedea0SLionel Sambuc if(version_flag){
342ebfedea0SLionel Sambuc print_version(NULL);
343ebfedea0SLionel Sambuc exit(0);
344ebfedea0SLionel Sambuc }
345ebfedea0SLionel Sambuc
346ebfedea0SLionel Sambuc argc -= optidx;
347ebfedea0SLionel Sambuc argv += optidx;
348ebfedea0SLionel Sambuc
349ebfedea0SLionel Sambuc #ifdef MAKETICKET
350ebfedea0SLionel Sambuc fooTicket();
351ebfedea0SLionel Sambuc #endif
352ebfedea0SLionel Sambuc
353ebfedea0SLionel Sambuc ret = krb5_init_context(&context);
354ebfedea0SLionel Sambuc if (ret)
355ebfedea0SLionel Sambuc errx (1, "krb5_init_context failed: %d", ret);
356ebfedea0SLionel Sambuc
357ebfedea0SLionel Sambuc tests[0].oid = &asn1_oid_id_pkinit_kdf_ah_sha1;
358*0a6a1f1dSLionel Sambuc tests[1].oid = &asn1_oid_id_pkinit_kdf_ah_sha256;
359*0a6a1f1dSLionel Sambuc tests[2].oid = &asn1_oid_id_pkinit_kdf_ah_sha512;
360ebfedea0SLionel Sambuc
361ebfedea0SLionel Sambuc for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++)
362ebfedea0SLionel Sambuc test_dh2key(context, i, &tests[i]);
363ebfedea0SLionel Sambuc
364ebfedea0SLionel Sambuc krb5_free_context(context);
365ebfedea0SLionel Sambuc
366ebfedea0SLionel Sambuc return 0;
367ebfedea0SLionel Sambuc }
368