xref: /minix3/crypto/external/bsd/heimdal/dist/lib/krb5/test_pknistkdf.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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