derived-key-test.c revision 178825
171333Sitojun/* 2118968Sume * Copyright (c) 2001 Kungliga Tekniska H�gskolan 362656Skris * (Royal Institute of Technology, Stockholm, Sweden). 455505Sshin * All rights reserved. 555505Sshin * 6224144Shrs * Redistribution and use in source and binary forms, with or without 755505Sshin * modification, are permitted provided that the following conditions 8222732Shrs * are met: 955505Sshin * 1055505Sshin * 1. Redistributions of source code must retain the above copyright 1155505Sshin * notice, this list of conditions and the following disclaimer. 1255505Sshin * 1355505Sshin * 2. Redistributions in binary form must reproduce the above copyright 1455505Sshin * notice, this list of conditions and the following disclaimer in the 1555505Sshin * documentation and/or other materials provided with the distribution. 1655505Sshin * 1755505Sshin * 3. Neither the name of KTH nor the names of its contributors may be 1855505Sshin * used to endorse or promote products derived from this software without 1955505Sshin * specific prior written permission. 20222732Shrs * 2155505Sshin * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 2255505Sshin * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2355505Sshin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2455505Sshin * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 2555505Sshin * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2655505Sshin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2755505Sshin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2855505Sshin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2955505Sshin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 3055505Sshin * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 3155505Sshin * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 3255505Sshin 3355505Sshin#include "krb5_locl.h" 3455505Sshin#include <err.h> 3555505Sshin 3655505SshinRCSID("$Id: derived-key-test.c 16342 2005-12-02 14:14:43Z lha $"); 3755505Sshin 3855505Sshinenum { MAXSIZE = 24 }; 3955505Sshin 4055505Sshinstatic struct testcase { 4155505Sshin krb5_enctype enctype; 4255505Sshin unsigned char constant[MAXSIZE]; 4355505Sshin size_t constant_len; 4455505Sshin unsigned char key[MAXSIZE]; 4557120Sshin unsigned char res[MAXSIZE]; 4655505Sshin} tests[] = { 4757120Sshin {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0x55}, 5, 48151468Ssuz {0xdc, 0xe0, 0x6b, 0x1f, 0x64, 0xc8, 0x57, 0xa1, 0x1c, 0x3d, 0xb5, 0x7c, 0x51, 0x89, 0x9b, 0x2c, 0xc1, 0x79, 0x10, 0x08, 0xce, 0x97, 0x3b, 0x92}, 4955505Sshin {0x92, 0x51, 0x79, 0xd0, 0x45, 0x91, 0xa7, 0x9b, 0x5d, 0x31, 0x92, 0xc4, 0xa7, 0xe9, 0xc2, 0x89, 0xb0, 0x49, 0xc7, 0x1f, 0x6e, 0xe6, 0x04, 0xcd}}, 5055505Sshin {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0xaa}, 5, 5155505Sshin {0x5e, 0x13, 0xd3, 0x1c, 0x70, 0xef, 0x76, 0x57, 0x46, 0x57, 0x85, 0x31, 0xcb, 0x51, 0xc1, 0x5b, 0xf1, 0x1c, 0xa8, 0x2c, 0x97, 0xce, 0xe9, 0xf2}, 5255505Sshin {0x9e, 0x58, 0xe5, 0xa1, 0x46, 0xd9, 0x94, 0x2a, 0x10, 0x1c, 0x46, 0x98, 0x45, 0xd6, 0x7a, 0x20, 0xe3, 0xc4, 0x25, 0x9e, 0xd9, 0x13, 0xf2, 0x07}}, 5355505Sshin {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0x55}, 5, 5455505Sshin {0x98, 0xe6, 0xfd, 0x8a, 0x04, 0xa4, 0xb6, 0x85, 0x9b, 0x75, 0xa1, 0x76, 0x54, 0x0b, 0x97, 0x52, 0xba, 0xd3, 0xec, 0xd6, 0x10, 0xa2, 0x52, 0xbc}, 55224144Shrs {0x13, 0xfe, 0xf8, 0x0d, 0x76, 0x3e, 0x94, 0xec, 0x6d, 0x13, 0xfd, 0x2c, 0xa1, 0xd0, 0x85, 0x07, 0x02, 0x49, 0xda, 0xd3, 0x98, 0x08, 0xea, 0xbf}}, 56222732Shrs {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0xaa}, 5, 5755505Sshin {0x62, 0x2a, 0xec, 0x25, 0xa2, 0xfe, 0x2c, 0xad, 0x70, 0x94, 0x68, 0x0b, 0x7c, 0x64, 0x94, 0x02, 0x80, 0x08, 0x4c, 0x1a, 0x7c, 0xec, 0x92, 0xb5}, 58136764Ssuz {0xf8, 0xdf, 0xbf, 0x04, 0xb0, 0x97, 0xe6, 0xd9, 0xdc, 0x07, 0x02, 0x68, 0x6b, 0xcb, 0x34, 0x89, 0xd9, 0x1f, 0xd9, 0xa4, 0x51, 0x6b, 0x70, 0x3e}}, 5955505Sshin {ETYPE_DES3_CBC_SHA1, {0x6b, 0x65, 0x72, 0x62, 0x65, 0x72, 0x6f, 0x73}, 8, 60253970Shrs {0xd3, 0xf8, 0x29, 0x8c, 0xcb, 0x16, 0x64, 0x38, 0xdc, 0xb9, 0xb9, 0x3e, 0xe5, 0xa7, 0x62, 0x92, 0x86, 0xa4, 0x91, 0xf8, 0x38, 0xf8, 0x02, 0xfb}, 6155505Sshin {0x23, 0x70, 0xda, 0x57, 0x5d, 0x2a, 0x3d, 0xa8, 0x64, 0xce, 0xbf, 0xdc, 0x52, 0x04, 0xd5, 0x6d, 0xf7, 0x79, 0xa7, 0xdf, 0x43, 0xd9, 0xda, 0x43}}, 6278064Sume {ETYPE_DES3_CBC_SHA1, {0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65}, 7, 6355505Sshin {0xb5, 0x5e, 0x98, 0x34, 0x67, 0xe5, 0x51, 0xb3, 0xe5, 0xd0, 0xe5, 0xb6, 0xc8, 0x0d, 0x45, 0x76, 0x94, 0x23, 0xa8, 0x73, 0xdc, 0x62, 0xb3, 0x0e}, 6455505Sshin {0x01, 0x26, 0x38, 0x8a, 0xad, 0xc8, 0x1a, 0x1f, 0x2a, 0x62, 0xbc, 0x45, 0xf8, 0xd5, 0xc1, 0x91, 0x51, 0xba, 0xcd, 0xd5, 0xcb, 0x79, 0x8a, 0x3e}}, 6555505Sshin {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0x55}, 5, 6655505Sshin {0xc1, 0x08, 0x16, 0x49, 0xad, 0xa7, 0x43, 0x62, 0xe6, 0xa1, 0x45, 0x9d, 0x01, 0xdf, 0xd3, 0x0d, 0x67, 0xc2, 0x23, 0x4c, 0x94, 0x07, 0x04, 0xda}, 6755505Sshin {0x34, 0x80, 0x57, 0xec, 0x98, 0xfd, 0xc4, 0x80, 0x16, 0x16, 0x1c, 0x2a, 0x4c, 0x7a, 0x94, 0x3e, 0x92, 0xae, 0x49, 0x2c, 0x98, 0x91, 0x75, 0xf7}}, 6855505Sshin {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0xaa}, 5, 6955505Sshin {0x5d, 0x15, 0x4a, 0xf2, 0x38, 0xf4, 0x67, 0x13, 0x15, 0x57, 0x19, 0xd5, 0x5e, 0x2f, 0x1f, 0x79, 0x0d, 0xd6, 0x61, 0xf2, 0x79, 0xa7, 0x91, 0x7c}, 70222732Shrs {0xa8, 0x80, 0x8a, 0xc2, 0x67, 0xda, 0xda, 0x3d, 0xcb, 0xe9, 0xa7, 0xc8, 0x46, 0x26, 0xfb, 0xc7, 0x61, 0xc2, 0x94, 0xb0, 0x13, 0x15, 0xe5, 0xc1}}, 71222732Shrs {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0x55}, 5, 72222732Shrs {0x79, 0x85, 0x62, 0xe0, 0x49, 0x85, 0x2f, 0x57, 0xdc, 0x8c, 0x34, 0x3b, 0xa1, 0x7f, 0x2c, 0xa1, 0xd9, 0x73, 0x94, 0xef, 0xc8, 0xad, 0xc4, 0x43}, 73222732Shrs {0xc8, 0x13, 0xf8, 0x8a, 0x3b, 0xe3, 0xb3, 0x34, 0xf7, 0x54, 0x25, 0xce, 0x91, 0x75, 0xfb, 0xe3, 0xc8, 0x49, 0x3b, 0x89, 0xc8, 0x70, 0x3b, 0x49}}, 74222732Shrs {ETYPE_DES3_CBC_SHA1, {0x00, 0x00, 0x00, 0x01, 0xaa}, 5, 7598172Sume {0x26, 0xdc, 0xe3, 0x34, 0xb5, 0x45, 0x29, 0x2f, 0x2f, 0xea, 0xb9, 0xa8, 0x70, 0x1a, 0x89, 0xa4, 0xb9, 0x9e, 0xb9, 0x94, 0x2c, 0xec, 0xd0, 0x16}, 7698172Sume {0xf4, 0x8f, 0xfd, 0x6e, 0x83, 0xf8, 0x3e, 0x73, 0x54, 0xe6, 0x94, 0xfd, 0x25, 0x2c, 0xf8, 0x3b, 0xfe, 0x58, 0xf7, 0xd5, 0xba, 0x37, 0xec, 0x5d}}, 7798172Sume {0} 78173412Skevlo}; 79222732Shrs 80222732Shrsint KRB5_LIB_FUNCTION 8155505Sshinmain(int argc, char **argv) 82222732Shrs{ 83222732Shrs struct testcase *t; 84222732Shrs krb5_context context; 8555505Sshin krb5_error_code ret; 86222732Shrs int val = 0; 87222732Shrs 88222732Shrs ret = krb5_init_context (&context); 8955505Sshin if (ret) 90222732Shrs errx (1, "krb5_init_context failed: %d", ret); 91222732Shrs 92222732Shrs for (t = tests; t->enctype != 0; ++t) { 93222732Shrs krb5_keyblock key; 94222732Shrs krb5_keyblock *dkey; 95222732Shrs 96222732Shrs key.keytype = KEYTYPE_DES3; 97222732Shrs key.keyvalue.length = MAXSIZE; 98222732Shrs key.keyvalue.data = t->key; 99222732Shrs 100222732Shrs ret = krb5_derive_key(context, &key, t->enctype, t->constant, 101222732Shrs t->constant_len, &dkey); 102222732Shrs if (ret) 103222732Shrs krb5_err (context, 1, ret, "krb5_derive_key"); 104222732Shrs if (memcmp (dkey->keyvalue.data, t->res, dkey->keyvalue.length) != 0) { 105222732Shrs const unsigned char *p = dkey->keyvalue.data; 106222732Shrs int i; 107222732Shrs 108222732Shrs printf ("derive_key failed\n"); 109222732Shrs printf ("should be: "); 110222732Shrs for (i = 0; i < dkey->keyvalue.length; ++i) 111222732Shrs printf ("%02x", t->res[i]); 112222732Shrs printf ("\nresult was: "); 113222732Shrs for (i = 0; i < dkey->keyvalue.length; ++i) 114222743Shrs printf ("%02x", p[i]); 115222732Shrs printf ("\n"); 116222732Shrs val = 1; 117222732Shrs } 118222732Shrs krb5_free_keyblock(context, dkey); 11962656Skris } 120118784Sume krb5_free_context(context); 12155505Sshin 12255505Sshin return val; 12355505Sshin} 12455505Sshin