1178825Sdfr/* 2233294Sstas * Copyright (c) 2006 Kungliga Tekniska H��gskolan 3233294Sstas * (Royal Institute of Technology, Stockholm, Sweden). 4233294Sstas * All rights reserved. 5178825Sdfr * 6233294Sstas * Redistribution and use in source and binary forms, with or without 7233294Sstas * modification, are permitted provided that the following conditions 8233294Sstas * are met: 9178825Sdfr * 10233294Sstas * 1. Redistributions of source code must retain the above copyright 11233294Sstas * notice, this list of conditions and the following disclaimer. 12178825Sdfr * 13233294Sstas * 2. Redistributions in binary form must reproduce the above copyright 14233294Sstas * notice, this list of conditions and the following disclaimer in the 15233294Sstas * 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 34233294Sstas#include "gsskrb5_locl.h" 35178825Sdfr 36178825Sdfrstruct range { 37178825Sdfr size_t lower; 38178825Sdfr size_t upper; 39178825Sdfr}; 40178825Sdfr 41178825Sdfrstruct range tests[] = { 42178825Sdfr { 0, 1040 }, 43178825Sdfr { 2040, 2080 }, 44178825Sdfr { 4080, 5000 }, 45178825Sdfr { 8180, 8292 }, 46178825Sdfr { 9980, 10010 } 47178825Sdfr}; 48178825Sdfr 49178825Sdfrstatic void 50233294Sstastest_range(const struct range *r, int integ, 51178825Sdfr krb5_context context, krb5_crypto crypto) 52178825Sdfr{ 53178825Sdfr krb5_error_code ret; 54178825Sdfr size_t size, rsize; 55233294Sstas struct gsskrb5_ctx ctx; 56178825Sdfr 57178825Sdfr for (size = r->lower; size < r->upper; size++) { 58178825Sdfr size_t cksumsize; 59178825Sdfr uint16_t padsize; 60233294Sstas OM_uint32 minor; 61233294Sstas OM_uint32 max_wrap_size; 62178825Sdfr 63233294Sstas ctx.crypto = crypto; 64233294Sstas 65233294Sstas ret = _gssapi_wrap_size_cfx(&minor, 66233294Sstas &ctx, 67233294Sstas context, 68233294Sstas integ, 69233294Sstas 0, 70233294Sstas size, 71233294Sstas &max_wrap_size); 72178825Sdfr if (ret) 73178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_max_wrap_length_cfx: %d", ret); 74178825Sdfr if (max_wrap_size == 0) 75178825Sdfr continue; 76178825Sdfr 77178825Sdfr ret = _gsskrb5cfx_wrap_length_cfx(context, 78178825Sdfr crypto, 79178825Sdfr integ, 80233294Sstas 0, 81178825Sdfr max_wrap_size, 82178825Sdfr &rsize, &cksumsize, &padsize); 83178825Sdfr if (ret) 84178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_wrap_length_cfx: %d", ret); 85178825Sdfr 86178825Sdfr if (size < rsize) 87233294Sstas krb5_errx(context, 1, 88178825Sdfr "size (%d) < rsize (%d) for max_wrap_size %d", 89178825Sdfr (int)size, (int)rsize, (int)max_wrap_size); 90178825Sdfr } 91178825Sdfr} 92178825Sdfr 93178825Sdfrstatic void 94178825Sdfrtest_special(krb5_context context, krb5_crypto crypto, 95178825Sdfr int integ, size_t testsize) 96178825Sdfr{ 97178825Sdfr krb5_error_code ret; 98178825Sdfr size_t rsize; 99178825Sdfr OM_uint32 max_wrap_size; 100178825Sdfr size_t cksumsize; 101178825Sdfr uint16_t padsize; 102233294Sstas struct gsskrb5_ctx ctx; 103233294Sstas OM_uint32 minor; 104178825Sdfr 105233294Sstas ctx.crypto = crypto; 106233294Sstas 107233294Sstas ret = _gssapi_wrap_size_cfx(&minor, 108233294Sstas &ctx, 109233294Sstas context, 110233294Sstas integ, 111233294Sstas 0, 112233294Sstas testsize, 113233294Sstas &max_wrap_size); 114178825Sdfr if (ret) 115233294Sstas krb5_errx(context, 1, "_gsskrb5cfx_max_wrap_length_cfx: %d", ret); 116233294Sstas if (ret) 117178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_max_wrap_length_cfx: %d", ret); 118233294Sstas 119178825Sdfr ret = _gsskrb5cfx_wrap_length_cfx(context, 120178825Sdfr crypto, 121178825Sdfr integ, 122233294Sstas 0, 123178825Sdfr max_wrap_size, 124178825Sdfr &rsize, &cksumsize, &padsize); 125178825Sdfr if (ret) 126178825Sdfr krb5_errx(context, 1, "_gsskrb5cfx_wrap_length_cfx: %d", ret); 127233294Sstas 128178825Sdfr if (testsize < rsize) 129233294Sstas krb5_errx(context, 1, 130178825Sdfr "testsize (%d) < rsize (%d) for max_wrap_size %d", 131178825Sdfr (int)testsize, (int)rsize, (int)max_wrap_size); 132178825Sdfr} 133178825Sdfr 134178825Sdfr 135178825Sdfr 136178825Sdfr 137178825Sdfrint 138178825Sdfrmain(int argc, char **argv) 139178825Sdfr{ 140178825Sdfr krb5_keyblock keyblock; 141178825Sdfr krb5_error_code ret; 142178825Sdfr krb5_context context; 143178825Sdfr krb5_crypto crypto; 144178825Sdfr int i; 145178825Sdfr 146178825Sdfr ret = krb5_init_context(&context); 147178825Sdfr if (ret) 148178825Sdfr errx(1, "krb5_context_init: %d", ret); 149233294Sstas 150233294Sstas ret = krb5_generate_random_keyblock(context, 151178825Sdfr ENCTYPE_AES256_CTS_HMAC_SHA1_96, 152178825Sdfr &keyblock); 153178825Sdfr if (ret) 154178825Sdfr krb5_err(context, 1, ret, "krb5_generate_random_keyblock"); 155178825Sdfr 156178825Sdfr ret = krb5_crypto_init(context, &keyblock, 0, &crypto); 157178825Sdfr if (ret) 158178825Sdfr krb5_err(context, 1, ret, "krb5_crypto_init"); 159178825Sdfr 160178825Sdfr test_special(context, crypto, 1, 60); 161178825Sdfr test_special(context, crypto, 0, 60); 162178825Sdfr 163178825Sdfr for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { 164178825Sdfr test_range(&tests[i], 1, context, crypto); 165178825Sdfr test_range(&tests[i], 0, context, crypto); 166178825Sdfr } 167178825Sdfr 168178825Sdfr krb5_free_keyblock_contents(context, &keyblock); 169178825Sdfr krb5_crypto_destroy(context, crypto); 170178825Sdfr krb5_free_context(context); 171178825Sdfr 172178825Sdfr return 0; 173178825Sdfr} 174