root/source4/heimdal/lib/krb5/keyblock.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. krb5_keyblock_zero
  2. krb5_free_keyblock_contents
  3. krb5_free_keyblock
  4. krb5_copy_keyblock_contents
  5. krb5_copy_keyblock
  6. krb5_keyblock_get_enctype
  7. krb5_keyblock_init

   1 /*
   2  * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
   3  * (Royal Institute of Technology, Stockholm, Sweden).
   4  * All rights reserved.
   5  *
   6  * Redistribution and use in source and binary forms, with or without
   7  * modification, are permitted provided that the following conditions
   8  * are met:
   9  *
  10  * 1. Redistributions of source code must retain the above copyright
  11  *    notice, this list of conditions and the following disclaimer.
  12  *
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  *
  17  * 3. Neither the name of the Institute nor the names of its contributors
  18  *    may be used to endorse or promote products derived from this software
  19  *    without specific prior written permission.
  20  *
  21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
  22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
  25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31  * SUCH DAMAGE.
  32  */
  33 
  34 #include "krb5_locl.h"
  35 
  36 RCSID("$Id$");
  37 
  38 void KRB5_LIB_FUNCTION
  39 krb5_keyblock_zero(krb5_keyblock *keyblock)
     /* [<][>][^][v][top][bottom][index][help] */
  40 {
  41     keyblock->keytype = 0;
  42     krb5_data_zero(&keyblock->keyvalue);
  43 }
  44 
  45 void KRB5_LIB_FUNCTION
  46 krb5_free_keyblock_contents(krb5_context context,
     /* [<][>][^][v][top][bottom][index][help] */
  47                             krb5_keyblock *keyblock)
  48 {
  49     if(keyblock) {
  50         if (keyblock->keyvalue.data != NULL)
  51             memset(keyblock->keyvalue.data, 0, keyblock->keyvalue.length);
  52         krb5_data_free (&keyblock->keyvalue);
  53         keyblock->keytype = ENCTYPE_NULL;
  54     }
  55 }
  56 
  57 void KRB5_LIB_FUNCTION
  58 krb5_free_keyblock(krb5_context context,
     /* [<][>][^][v][top][bottom][index][help] */
  59                    krb5_keyblock *keyblock)
  60 {
  61     if(keyblock){
  62         krb5_free_keyblock_contents(context, keyblock);
  63         free(keyblock);
  64     }
  65 }
  66 
  67 krb5_error_code KRB5_LIB_FUNCTION
  68 krb5_copy_keyblock_contents (krb5_context context,
     /* [<][>][^][v][top][bottom][index][help] */
  69                              const krb5_keyblock *inblock,
  70                              krb5_keyblock *to)
  71 {
  72     return copy_EncryptionKey(inblock, to);
  73 }
  74 
  75 krb5_error_code KRB5_LIB_FUNCTION
  76 krb5_copy_keyblock (krb5_context context,
     /* [<][>][^][v][top][bottom][index][help] */
  77                     const krb5_keyblock *inblock,
  78                     krb5_keyblock **to)
  79 {
  80     krb5_keyblock *k;
  81 
  82     k = malloc (sizeof(*k));
  83     if (k == NULL) {
  84         krb5_set_error_message(context, ENOMEM, "malloc: out of memory");
  85         return ENOMEM;
  86     }
  87     *to = k;
  88     return krb5_copy_keyblock_contents (context, inblock, k);
  89 }
  90 
  91 krb5_enctype
  92 krb5_keyblock_get_enctype(const krb5_keyblock *block)
     /* [<][>][^][v][top][bottom][index][help] */
  93 {
  94     return block->keytype;
  95 }
  96 
  97 /*
  98  * Fill in `key' with key data of type `enctype' from `data' of length
  99  * `size'. Key should be freed using krb5_free_keyblock_contents.
 100  */
 101 
 102 krb5_error_code KRB5_LIB_FUNCTION
 103 krb5_keyblock_init(krb5_context context,
     /* [<][>][^][v][top][bottom][index][help] */
 104                    krb5_enctype type,
 105                    const void *data,
 106                    size_t size,
 107                    krb5_keyblock *key)
 108 {
 109     krb5_error_code ret;
 110     size_t len;
 111 
 112     memset(key, 0, sizeof(*key));
 113 
 114     ret = krb5_enctype_keysize(context, type, &len);
 115     if (ret)
 116         return ret;
 117 
 118     if (len != size) {
 119         krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
 120                                "Encryption key %d is %lu bytes "
 121                                "long, %lu was passed in",
 122                                type, (unsigned long)len, (unsigned long)size);
 123         return KRB5_PROG_ETYPE_NOSUPP;
 124     }
 125     ret = krb5_data_copy(&key->keyvalue, data, len);
 126     if(ret) {
 127         krb5_set_error_message(context, ret, N_("malloc: out of memory", ""));
 128         return ret;
 129     }
 130     key->keytype = type;
 131 
 132     return 0;
 133 }

/* [<][>][^][v][top][bottom][index][help] */