test_cfx.c revision 178825
1178825Sdfr/* 2178825Sdfr * Copyright (c) 2006 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 34178825Sdfr#include "krb5/gsskrb5_locl.h" 35178825Sdfr 36178825SdfrRCSID("$Id: test_cfx.c 19031 2006-11-13 18:02:57Z lha $"); 37178825Sdfr 38178825Sdfrstruct range { 39178825Sdfr size_t lower; 40178825Sdfr size_t upper; 41178825Sdfr}; 42178825Sdfr 43178825Sdfrstruct range tests[] = { 44178825Sdfr { 0, 1040 }, 45178825Sdfr { 2040, 2080 }, 46178825Sdfr { 4080, 5000 }, 47178825Sdfr { 8180, 8292 }, 48178825Sdfr { 9980, 10010 } 49178825Sdfr}; 50178825Sdfr 51178825Sdfrstatic void 52178825Sdfrtest_range(const struct range *r, int integ, 53178825Sdfr krb5_context context, krb5_crypto crypto) 54178825Sdfr{ 55178825Sdfr krb5_error_code ret; 56178825Sdfr size_t size, rsize; 57178825Sdfr 58178825Sdfr for (size = r->lower; size < r->upper; size++) { 59178825Sdfr OM_uint32 max_wrap_size; 60178825Sdfr size_t cksumsize; 61178825Sdfr uint16_t padsize; 62178825Sdfr 63178825Sdfr ret = _gsskrb5cfx_max_wrap_length_cfx(context, 64178825Sdfr crypto, 65178825Sdfr integ, 66178825Sdfr size, 67178825Sdfr &max_wrap_size); 68178825Sdfr if (ret) 69178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_max_wrap_length_cfx: %d", ret); 70178825Sdfr if (max_wrap_size == 0) 71178825Sdfr continue; 72178825Sdfr 73178825Sdfr ret = _gsskrb5cfx_wrap_length_cfx(context, 74178825Sdfr crypto, 75178825Sdfr integ, 76178825Sdfr max_wrap_size, 77178825Sdfr &rsize, &cksumsize, &padsize); 78178825Sdfr if (ret) 79178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_wrap_length_cfx: %d", ret); 80178825Sdfr 81178825Sdfr if (size < rsize) 82178825Sdfr krb5_errx(context, 1, 83178825Sdfr "size (%d) < rsize (%d) for max_wrap_size %d", 84178825Sdfr (int)size, (int)rsize, (int)max_wrap_size); 85178825Sdfr } 86178825Sdfr} 87178825Sdfr 88178825Sdfrstatic void 89178825Sdfrtest_special(krb5_context context, krb5_crypto crypto, 90178825Sdfr int integ, size_t testsize) 91178825Sdfr{ 92178825Sdfr krb5_error_code ret; 93178825Sdfr size_t rsize; 94178825Sdfr OM_uint32 max_wrap_size; 95178825Sdfr size_t cksumsize; 96178825Sdfr uint16_t padsize; 97178825Sdfr 98178825Sdfr ret = _gsskrb5cfx_max_wrap_length_cfx(context, 99178825Sdfr crypto, 100178825Sdfr integ, 101178825Sdfr testsize, 102178825Sdfr &max_wrap_size); 103178825Sdfr if (ret) 104178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_max_wrap_length_cfx: %d", ret); 105178825Sdfr 106178825Sdfr ret = _gsskrb5cfx_wrap_length_cfx(context, 107178825Sdfr crypto, 108178825Sdfr integ, 109178825Sdfr max_wrap_size, 110178825Sdfr &rsize, &cksumsize, &padsize); 111178825Sdfr if (ret) 112178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_wrap_length_cfx: %d", ret); 113178825Sdfr 114178825Sdfr if (testsize < rsize) 115178825Sdfr krb5_errx(context, 1, 116178825Sdfr "testsize (%d) < rsize (%d) for max_wrap_size %d", 117178825Sdfr (int)testsize, (int)rsize, (int)max_wrap_size); 118178825Sdfr} 119178825Sdfr 120178825Sdfr 121178825Sdfr 122178825Sdfr 123178825Sdfrint 124178825Sdfrmain(int argc, char **argv) 125178825Sdfr{ 126178825Sdfr krb5_keyblock keyblock; 127178825Sdfr krb5_error_code ret; 128178825Sdfr krb5_context context; 129178825Sdfr krb5_crypto crypto; 130178825Sdfr int i; 131178825Sdfr 132178825Sdfr ret = krb5_init_context(&context); 133178825Sdfr if (ret) 134178825Sdfr errx(1, "krb5_context_init: %d", ret); 135178825Sdfr 136178825Sdfr ret = krb5_generate_random_keyblock(context, 137178825Sdfr ENCTYPE_AES256_CTS_HMAC_SHA1_96, 138178825Sdfr &keyblock); 139178825Sdfr if (ret) 140178825Sdfr krb5_err(context, 1, ret, "krb5_generate_random_keyblock"); 141178825Sdfr 142178825Sdfr ret = krb5_crypto_init(context, &keyblock, 0, &crypto); 143178825Sdfr if (ret) 144178825Sdfr krb5_err(context, 1, ret, "krb5_crypto_init"); 145178825Sdfr 146178825Sdfr test_special(context, crypto, 1, 60); 147178825Sdfr test_special(context, crypto, 0, 60); 148178825Sdfr 149178825Sdfr for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { 150178825Sdfr test_range(&tests[i], 1, context, crypto); 151178825Sdfr test_range(&tests[i], 0, context, crypto); 152178825Sdfr } 153178825Sdfr 154178825Sdfr krb5_free_keyblock_contents(context, &keyblock); 155178825Sdfr krb5_crypto_destroy(context, crypto); 156178825Sdfr krb5_free_context(context); 157178825Sdfr 158178825Sdfr return 0; 159178825Sdfr} 160