xref: /freebsd/crypto/heimdal/lib/krb5/test_pkinit_dh2key.c (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
1c19800e8SDoug Rabson /*
2*ae771770SStanislav Sedov  * Copyright (c) 2005 Kungliga Tekniska Högskolan
3c19800e8SDoug Rabson  * (Royal Institute of Technology, Stockholm, Sweden).
4c19800e8SDoug Rabson  * All rights reserved.
5c19800e8SDoug Rabson  *
6c19800e8SDoug Rabson  * Redistribution and use in source and binary forms, with or without
7c19800e8SDoug Rabson  * modification, are permitted provided that the following conditions
8c19800e8SDoug Rabson  * are met:
9c19800e8SDoug Rabson  *
10c19800e8SDoug Rabson  * 1. Redistributions of source code must retain the above copyright
11c19800e8SDoug Rabson  *    notice, this list of conditions and the following disclaimer.
12c19800e8SDoug Rabson  *
13c19800e8SDoug Rabson  * 2. Redistributions in binary form must reproduce the above copyright
14c19800e8SDoug Rabson  *    notice, this list of conditions and the following disclaimer in the
15c19800e8SDoug Rabson  *    documentation and/or other materials provided with the distribution.
16c19800e8SDoug Rabson  *
17c19800e8SDoug Rabson  * 3. Neither the name of KTH nor the names of its contributors may be
18c19800e8SDoug Rabson  *    used to endorse or promote products derived from this software without
19c19800e8SDoug Rabson  *    specific prior written permission.
20c19800e8SDoug Rabson  *
21c19800e8SDoug Rabson  * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
22c19800e8SDoug Rabson  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23c19800e8SDoug Rabson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24c19800e8SDoug Rabson  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
25c19800e8SDoug Rabson  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26c19800e8SDoug Rabson  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27c19800e8SDoug Rabson  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28c19800e8SDoug Rabson  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29c19800e8SDoug Rabson  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30c19800e8SDoug Rabson  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31c19800e8SDoug Rabson  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
32c19800e8SDoug Rabson 
33c19800e8SDoug Rabson #include "krb5_locl.h"
34c19800e8SDoug Rabson #include <err.h>
35c19800e8SDoug Rabson #include <getarg.h>
36c19800e8SDoug Rabson 
37c19800e8SDoug Rabson static void
test_dh2key(int i,krb5_context context,const heim_octet_string * dh,const heim_octet_string * c_n,const heim_octet_string * k_n,krb5_enctype etype,const heim_octet_string * result)38c19800e8SDoug Rabson test_dh2key(int i,
39c19800e8SDoug Rabson 	    krb5_context context,
40c19800e8SDoug Rabson 	    const heim_octet_string *dh,
41c19800e8SDoug Rabson 	    const heim_octet_string *c_n,
42c19800e8SDoug Rabson 	    const heim_octet_string *k_n,
43c19800e8SDoug Rabson 	    krb5_enctype etype,
44c19800e8SDoug Rabson 	    const heim_octet_string *result)
45c19800e8SDoug Rabson {
46c19800e8SDoug Rabson     krb5_error_code ret;
47c19800e8SDoug Rabson     krb5_keyblock key;
48c19800e8SDoug Rabson 
49c19800e8SDoug Rabson     ret = _krb5_pk_octetstring2key(context,
50c19800e8SDoug Rabson 				   etype,
51c19800e8SDoug Rabson 				   dh->data, dh->length,
52c19800e8SDoug Rabson 				   c_n,
53c19800e8SDoug Rabson 				   k_n,
54c19800e8SDoug Rabson 				   &key);
55c19800e8SDoug Rabson     if (ret != 0)
56c19800e8SDoug Rabson 	krb5_err(context, 1, ret, "_krb5_pk_octetstring2key: %d", i);
57c19800e8SDoug Rabson 
58c19800e8SDoug Rabson     if (key.keyvalue.length != result->length ||
59c19800e8SDoug Rabson 	memcmp(key.keyvalue.data, result->data, result->length) != 0)
60c19800e8SDoug Rabson 	krb5_errx(context, 1, "resulting key wrong: %d", i);
61c19800e8SDoug Rabson 
62c19800e8SDoug Rabson     krb5_free_keyblock_contents(context, &key);
63c19800e8SDoug Rabson }
64c19800e8SDoug Rabson 
65c19800e8SDoug Rabson 
66c19800e8SDoug Rabson struct {
67c19800e8SDoug Rabson     krb5_enctype type;
68c19800e8SDoug Rabson     krb5_data X;
69c19800e8SDoug Rabson     krb5_data key;
70c19800e8SDoug Rabson } tests[] = {
71c19800e8SDoug Rabson     /* 0 */
72c19800e8SDoug Rabson     {
73c19800e8SDoug Rabson 	ETYPE_AES256_CTS_HMAC_SHA1_96,
74c19800e8SDoug Rabson 	{
75c19800e8SDoug Rabson 	    256,
76c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
77c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
78c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
79c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
80c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
81c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
82c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
83c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
84c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
85c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
86c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
87c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
88c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
89c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
90c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
91c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
92c19800e8SDoug Rabson 	},
93c19800e8SDoug Rabson 	{
94c19800e8SDoug Rabson 	    32,
95c19800e8SDoug Rabson 	    "\x5e\xe5\x0d\x67\x5c\x80\x9f\xe5\x9e\x4a\x77\x62\xc5\x4b\x65\x83"
96c19800e8SDoug Rabson 	    "\x75\x47\xea\xfb\x15\x9b\xd8\xcd\xc7\x5f\xfc\xa5\x91\x1e\x4c\x41"
97c19800e8SDoug Rabson 	}
98c19800e8SDoug Rabson     },
99c19800e8SDoug Rabson     /* 1 */
100c19800e8SDoug Rabson     {
101c19800e8SDoug Rabson 	ETYPE_AES256_CTS_HMAC_SHA1_96,
102c19800e8SDoug Rabson 	{
103c19800e8SDoug Rabson 	    128,
104c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
105c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
106c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
107c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
108c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
109c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
110c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
111c19800e8SDoug Rabson 	    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
112c19800e8SDoug Rabson 	},
113c19800e8SDoug Rabson 	{
114c19800e8SDoug Rabson 	    32,
115c19800e8SDoug Rabson 	    "\xac\xf7\x70\x7c\x08\x97\x3d\xdf\xdb\x27\xcd\x36\x14\x42\xcc\xfb"
116c19800e8SDoug Rabson 	    "\xa3\x55\xc8\x88\x4c\xb4\x72\xf3\x7d\xa6\x36\xd0\x7d\x56\x78\x7e"
117c19800e8SDoug Rabson 	}
118c19800e8SDoug Rabson     },
119c19800e8SDoug Rabson     /* 2 */
120c19800e8SDoug Rabson     {
121c19800e8SDoug Rabson 	ETYPE_AES256_CTS_HMAC_SHA1_96,
122c19800e8SDoug Rabson 	{
123c19800e8SDoug Rabson 	    128,
124c19800e8SDoug Rabson 	    "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
125c19800e8SDoug Rabson 	    "\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"
126c19800e8SDoug Rabson 	    "\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d"
127c19800e8SDoug Rabson 	    "\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c"
128c19800e8SDoug Rabson 	    "\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b"
129c19800e8SDoug Rabson 	    "\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a"
130c19800e8SDoug Rabson 	    "\x0b\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09"
131c19800e8SDoug Rabson 	    "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08"
132c19800e8SDoug Rabson 	},
133c19800e8SDoug Rabson 	{
134c19800e8SDoug Rabson 	    32,
135c19800e8SDoug Rabson 	    "\xc4\x42\xda\x58\x5f\xcb\x80\xe4\x3b\x47\x94\x6f\x25\x40\x93\xe3"
136c19800e8SDoug Rabson 	    "\x73\x29\xd9\x90\x01\x38\x0d\xb7\x83\x71\xdb\x3a\xcf\x5c\x79\x7e"
137c19800e8SDoug Rabson 	}
138c19800e8SDoug Rabson     },
139c19800e8SDoug Rabson     /* 3 */
140c19800e8SDoug Rabson     {
141c19800e8SDoug Rabson 	ETYPE_AES256_CTS_HMAC_SHA1_96,
142c19800e8SDoug Rabson 	{
143c19800e8SDoug Rabson 	    77,
144c19800e8SDoug Rabson 	    "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
145c19800e8SDoug Rabson 	    "\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"
146c19800e8SDoug Rabson 	    "\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d"
147c19800e8SDoug Rabson 	    "\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c"
148c19800e8SDoug Rabson 	    "\x0d\x0e\x0f\x10\x00\x01\x02\x03"
149c19800e8SDoug Rabson 	    "\x04\x05\x06\x07\x08"
150c19800e8SDoug Rabson 	},
151c19800e8SDoug Rabson 	{
152c19800e8SDoug Rabson 	    32,
153c19800e8SDoug Rabson 	    "\x00\x53\x95\x3b\x84\xc8\x96\xf4\xeb\x38\x5c\x3f\x2e\x75\x1c\x4a"
154c19800e8SDoug Rabson 	    "\x59\x0e\xd6\xff\xad\xca\x6f\xf6\x4f\x47\xeb\xeb\x8d\x78\x0f\xfc"
155c19800e8SDoug Rabson 	}
156c19800e8SDoug Rabson     }
157c19800e8SDoug Rabson };
158c19800e8SDoug Rabson 
159c19800e8SDoug Rabson 
160c19800e8SDoug Rabson static int version_flag = 0;
161c19800e8SDoug Rabson static int help_flag	= 0;
162c19800e8SDoug Rabson 
163c19800e8SDoug Rabson static struct getargs args[] = {
164c19800e8SDoug Rabson     {"version",	0,	arg_flag,	&version_flag,
165c19800e8SDoug Rabson      "print version", NULL },
166c19800e8SDoug Rabson     {"help",	0,	arg_flag,	&help_flag,
167c19800e8SDoug Rabson      NULL, NULL }
168c19800e8SDoug Rabson };
169c19800e8SDoug Rabson 
170c19800e8SDoug Rabson static void
usage(int ret)171c19800e8SDoug Rabson usage (int ret)
172c19800e8SDoug Rabson {
173c19800e8SDoug Rabson     arg_printusage (args,
174c19800e8SDoug Rabson 		    sizeof(args)/sizeof(*args),
175c19800e8SDoug Rabson 		    NULL,
176c19800e8SDoug Rabson 		    "");
177c19800e8SDoug Rabson     exit (ret);
178c19800e8SDoug Rabson }
179c19800e8SDoug Rabson 
180c19800e8SDoug Rabson 
181c19800e8SDoug Rabson int
main(int argc,char ** argv)182c19800e8SDoug Rabson main(int argc, char **argv)
183c19800e8SDoug Rabson {
184c19800e8SDoug Rabson     krb5_context context;
185c19800e8SDoug Rabson     krb5_error_code ret;
186c19800e8SDoug Rabson     int i, optidx = 0;
187c19800e8SDoug Rabson 
188c19800e8SDoug Rabson     setprogname(argv[0]);
189c19800e8SDoug Rabson 
190c19800e8SDoug Rabson     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
191c19800e8SDoug Rabson 	usage(1);
192c19800e8SDoug Rabson 
193c19800e8SDoug Rabson     if (help_flag)
194c19800e8SDoug Rabson 	usage (0);
195c19800e8SDoug Rabson 
196c19800e8SDoug Rabson     if(version_flag){
197c19800e8SDoug Rabson 	print_version(NULL);
198c19800e8SDoug Rabson 	exit(0);
199c19800e8SDoug Rabson     }
200c19800e8SDoug Rabson 
201c19800e8SDoug Rabson     argc -= optidx;
202c19800e8SDoug Rabson     argv += optidx;
203c19800e8SDoug Rabson 
204c19800e8SDoug Rabson     ret = krb5_init_context(&context);
205c19800e8SDoug Rabson     if (ret)
206c19800e8SDoug Rabson 	errx (1, "krb5_init_context failed: %d", ret);
207c19800e8SDoug Rabson 
208c19800e8SDoug Rabson     for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
209c19800e8SDoug Rabson 	test_dh2key(i, context, &tests[i].X, NULL, NULL,
210c19800e8SDoug Rabson 		    tests[i].type, &tests[i].key);
211c19800e8SDoug Rabson     }
212c19800e8SDoug Rabson 
213c19800e8SDoug Rabson     krb5_free_context(context);
214c19800e8SDoug Rabson 
215c19800e8SDoug Rabson     return 0;
216c19800e8SDoug Rabson }
217