Imported Upstream version 1.10.2
[platform/upstream/krb5.git] / src / lib / crypto / krb / default_state.c
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright (C) 2001 by the Massachusetts Institute of Technology.
4  * All rights reserved.
5  *
6  * Export of this software from the United States of America may
7  *   require a specific license from the United States Government.
8  *   It is the responsibility of any person or organization contemplating
9  *   export to obtain such a license before exporting.
10  *
11  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
12  * distribute this software and its documentation for any purpose and
13  * without fee is hereby granted, provided that the above copyright
14  * notice appear in all copies and that both that copyright notice and
15  * this permission notice appear in supporting documentation, and that
16  * the name of M.I.T. not be used in advertising or publicity pertaining
17  * to distribution of the software without specific, written prior
18  * permission.  Furthermore if you modify this software you must label
19  * your software as modified software and not distribute it in such a
20  * fashion that it might be confused with the original M.I.T. software.
21  * M.I.T. makes no representations about the suitability of
22  * this software for any purpose.  It is provided "as is" without express
23  * or implied warranty.
24  *
25  * Section 6 (Encryption) of the Kerberos revisions document defines
26  * cipher states to be used to chain encryptions and decryptions
27  * together.  Examples of cipher states include initialization vectors
28  * for CBC encription.  Most Kerberos encryption systems can share
29  * code for initializing and freeing cipher states.  This file
30  * contains that default code.
31  */
32
33 #include "crypto_int.h"
34
35 krb5_error_code
36 krb5int_des_init_state(const krb5_keyblock *key, krb5_keyusage usage,
37                        krb5_data *new_state)
38 {
39     new_state->length = 8;
40     new_state->data = (void *) malloc(8);
41     if (new_state->data) {
42         memset (new_state->data, 0, new_state->length);
43         /* We need to copy in the key for des-cbc-cr--ick, but that's how it works*/
44         if (key->enctype == ENCTYPE_DES_CBC_CRC) {
45             memcpy (new_state->data, key->contents, new_state->length);
46         }
47     } else {
48         return ENOMEM;
49     }
50     return 0;
51 }
52
53 void
54 krb5int_default_free_state(krb5_data *state)
55 {
56     if (state->data) {
57         free (state->data);
58         state-> data = NULL;
59         state->length = 0;
60     }
61 }