test_pkinit_dh2key.c revision 178825
1178825Sdfr/* 2178825Sdfr * Copyright (c) 2005 Kungliga Tekniska H�gskolan 3178825Sdfr * (Royal Institute of Technology, Stockholm, Sweden). 4178825Sdfr * All rights reserved. 5178825Sdfr * 6178825Sdfr * Redistribution and use in source and binary forms, with or without 7178825Sdfr * modification, are permitted provided that the following conditions 8178825Sdfr * are met: 9178825Sdfr * 10178825Sdfr * 1. Redistributions of source code must retain the above copyright 11178825Sdfr * notice, this list of conditions and the following disclaimer. 12178825Sdfr * 13178825Sdfr * 2. Redistributions in binary form must reproduce the above copyright 14178825Sdfr * notice, this list of conditions and the following disclaimer in the 15178825Sdfr * documentation and/or other materials provided with the distribution. 16178825Sdfr * 17178825Sdfr * 3. Neither the name of KTH nor the names of its contributors may be 18178825Sdfr * used to endorse or promote products derived from this software without 19178825Sdfr * specific prior written permission. 20178825Sdfr * 21178825Sdfr * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 22178825Sdfr * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23178825Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24178825Sdfr * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 25178825Sdfr * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26178825Sdfr * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27178825Sdfr * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28178825Sdfr * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29178825Sdfr * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30178825Sdfr * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31178825Sdfr * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 32178825Sdfr 33178825Sdfr#include "krb5_locl.h" 34178825Sdfr#include <err.h> 35178825Sdfr#include <getarg.h> 36178825Sdfr 37178825SdfrRCSID("$Id: test_pkinit_dh2key.c 18809 2006-10-22 07:11:43Z lha $"); 38178825Sdfr 39178825Sdfrstatic void 40178825Sdfrtest_dh2key(int i, 41178825Sdfr krb5_context context, 42178825Sdfr const heim_octet_string *dh, 43178825Sdfr const heim_octet_string *c_n, 44178825Sdfr const heim_octet_string *k_n, 45178825Sdfr krb5_enctype etype, 46178825Sdfr const heim_octet_string *result) 47178825Sdfr{ 48178825Sdfr krb5_error_code ret; 49178825Sdfr krb5_keyblock key; 50178825Sdfr 51178825Sdfr ret = _krb5_pk_octetstring2key(context, 52178825Sdfr etype, 53178825Sdfr dh->data, dh->length, 54178825Sdfr c_n, 55178825Sdfr k_n, 56178825Sdfr &key); 57178825Sdfr if (ret != 0) 58178825Sdfr krb5_err(context, 1, ret, "_krb5_pk_octetstring2key: %d", i); 59178825Sdfr 60178825Sdfr if (key.keyvalue.length != result->length || 61178825Sdfr memcmp(key.keyvalue.data, result->data, result->length) != 0) 62178825Sdfr krb5_errx(context, 1, "resulting key wrong: %d", i); 63178825Sdfr 64178825Sdfr krb5_free_keyblock_contents(context, &key); 65178825Sdfr} 66178825Sdfr 67178825Sdfr 68178825Sdfrstruct { 69178825Sdfr krb5_enctype type; 70178825Sdfr krb5_data X; 71178825Sdfr krb5_data key; 72178825Sdfr} tests[] = { 73178825Sdfr /* 0 */ 74178825Sdfr { 75178825Sdfr ETYPE_AES256_CTS_HMAC_SHA1_96, 76178825Sdfr { 77178825Sdfr 256, 78178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 79178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 80178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 81178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 82178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 83178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 84178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 85178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 86178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 87178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 88178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 89178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 90178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 91178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 92178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 93178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 94178825Sdfr }, 95178825Sdfr { 96178825Sdfr 32, 97178825Sdfr "\x5e\xe5\x0d\x67\x5c\x80\x9f\xe5\x9e\x4a\x77\x62\xc5\x4b\x65\x83" 98178825Sdfr "\x75\x47\xea\xfb\x15\x9b\xd8\xcd\xc7\x5f\xfc\xa5\x91\x1e\x4c\x41" 99178825Sdfr } 100178825Sdfr }, 101178825Sdfr /* 1 */ 102178825Sdfr { 103178825Sdfr ETYPE_AES256_CTS_HMAC_SHA1_96, 104178825Sdfr { 105178825Sdfr 128, 106178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 107178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 108178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 109178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 110178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 111178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 112178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 113178825Sdfr "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 114178825Sdfr }, 115178825Sdfr { 116178825Sdfr 32, 117178825Sdfr "\xac\xf7\x70\x7c\x08\x97\x3d\xdf\xdb\x27\xcd\x36\x14\x42\xcc\xfb" 118178825Sdfr "\xa3\x55\xc8\x88\x4c\xb4\x72\xf3\x7d\xa6\x36\xd0\x7d\x56\x78\x7e" 119178825Sdfr } 120178825Sdfr }, 121178825Sdfr /* 2 */ 122178825Sdfr { 123178825Sdfr ETYPE_AES256_CTS_HMAC_SHA1_96, 124178825Sdfr { 125178825Sdfr 128, 126178825Sdfr "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" 127178825Sdfr "\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" 128178825Sdfr "\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d" 129178825Sdfr "\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" 130178825Sdfr "\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b" 131178825Sdfr "\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a" 132178825Sdfr "\x0b\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09" 133178825Sdfr "\x0a\x0b\x0c\x0d\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08" 134178825Sdfr }, 135178825Sdfr { 136178825Sdfr 32, 137178825Sdfr "\xc4\x42\xda\x58\x5f\xcb\x80\xe4\x3b\x47\x94\x6f\x25\x40\x93\xe3" 138178825Sdfr "\x73\x29\xd9\x90\x01\x38\x0d\xb7\x83\x71\xdb\x3a\xcf\x5c\x79\x7e" 139178825Sdfr } 140178825Sdfr }, 141178825Sdfr /* 3 */ 142178825Sdfr { 143178825Sdfr ETYPE_AES256_CTS_HMAC_SHA1_96, 144178825Sdfr { 145178825Sdfr 77, 146178825Sdfr "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" 147178825Sdfr "\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e" 148178825Sdfr "\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d" 149178825Sdfr "\x0e\x0f\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c" 150178825Sdfr "\x0d\x0e\x0f\x10\x00\x01\x02\x03" 151178825Sdfr "\x04\x05\x06\x07\x08" 152178825Sdfr }, 153178825Sdfr { 154178825Sdfr 32, 155178825Sdfr "\x00\x53\x95\x3b\x84\xc8\x96\xf4\xeb\x38\x5c\x3f\x2e\x75\x1c\x4a" 156178825Sdfr "\x59\x0e\xd6\xff\xad\xca\x6f\xf6\x4f\x47\xeb\xeb\x8d\x78\x0f\xfc" 157178825Sdfr } 158178825Sdfr } 159178825Sdfr}; 160178825Sdfr 161178825Sdfr 162178825Sdfrstatic int version_flag = 0; 163178825Sdfrstatic int help_flag = 0; 164178825Sdfr 165178825Sdfrstatic struct getargs args[] = { 166178825Sdfr {"version", 0, arg_flag, &version_flag, 167178825Sdfr "print version", NULL }, 168178825Sdfr {"help", 0, arg_flag, &help_flag, 169178825Sdfr NULL, NULL } 170178825Sdfr}; 171178825Sdfr 172178825Sdfrstatic void 173178825Sdfrusage (int ret) 174178825Sdfr{ 175178825Sdfr arg_printusage (args, 176178825Sdfr sizeof(args)/sizeof(*args), 177178825Sdfr NULL, 178178825Sdfr ""); 179178825Sdfr exit (ret); 180178825Sdfr} 181178825Sdfr 182178825Sdfr 183178825Sdfrint 184178825Sdfrmain(int argc, char **argv) 185178825Sdfr{ 186178825Sdfr krb5_context context; 187178825Sdfr krb5_error_code ret; 188178825Sdfr int i, optidx = 0; 189178825Sdfr 190178825Sdfr setprogname(argv[0]); 191178825Sdfr 192178825Sdfr if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) 193178825Sdfr usage(1); 194178825Sdfr 195178825Sdfr if (help_flag) 196178825Sdfr usage (0); 197178825Sdfr 198178825Sdfr if(version_flag){ 199178825Sdfr print_version(NULL); 200178825Sdfr exit(0); 201178825Sdfr } 202178825Sdfr 203178825Sdfr argc -= optidx; 204178825Sdfr argv += optidx; 205178825Sdfr 206178825Sdfr ret = krb5_init_context(&context); 207178825Sdfr if (ret) 208178825Sdfr errx (1, "krb5_init_context failed: %d", ret); 209178825Sdfr 210178825Sdfr for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { 211178825Sdfr test_dh2key(i, context, &tests[i].X, NULL, NULL, 212178825Sdfr tests[i].type, &tests[i].key); 213178825Sdfr } 214178825Sdfr 215178825Sdfr krb5_free_context(context); 216178825Sdfr 217178825Sdfr return 0; 218178825Sdfr} 219