• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * null_cipher.c
3  *
4  * A null cipher implementation.  This cipher leaves the plaintext
5  * unchanged.
6  *
7  * David A. McGrew
8  * Cisco Systems, Inc.
9  */
10 
11 /*
12  *
13  * Copyright (c) 2001-2006, Cisco Systems, Inc.
14  * All rights reserved.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  *
20  *   Redistributions of source code must retain the above copyright
21  *   notice, this list of conditions and the following disclaimer.
22  *
23  *   Redistributions in binary form must reproduce the above
24  *   copyright notice, this list of conditions and the following
25  *   disclaimer in the documentation and/or other materials provided
26  *   with the distribution.
27  *
28  *   Neither the name of the Cisco Systems, Inc. nor the names of its
29  *   contributors may be used to endorse or promote products derived
30  *   from this software without specific prior written permission.
31  *
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
35  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
36  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
37  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
38  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
39  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
41  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
42  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
43  * OF THE POSSIBILITY OF SUCH DAMAGE.
44  *
45  */
46 
47 #include "datatypes.h"
48 #include "null_cipher.h"
49 #include "alloc.h"
50 
51 /* the null_cipher uses the cipher debug module  */
52 
53 extern debug_module_t mod_cipher;
54 
55 err_status_t
null_cipher_alloc(cipher_t ** c,int key_len)56 null_cipher_alloc(cipher_t **c, int key_len) {
57   extern cipher_type_t null_cipher;
58   uint8_t *pointer;
59 
60   debug_print(mod_cipher,
61 	      "allocating cipher with key length %d", key_len);
62 
63   /* allocate memory a cipher of type null_cipher */
64   pointer = (uint8_t*)crypto_alloc(sizeof(null_cipher_ctx_t) + sizeof(cipher_t));
65   if (pointer == NULL)
66     return err_status_alloc_fail;
67 
68   /* set pointers */
69   *c = (cipher_t *)pointer;
70   (*c)->type = &null_cipher;
71   (*c)->state = pointer + sizeof(cipher_t);
72 
73   /* set key size */
74   (*c)->key_len = key_len;
75 
76   /* increment ref_count */
77   null_cipher.ref_count++;
78 
79   return err_status_ok;
80 
81 }
82 
83 err_status_t
null_cipher_dealloc(cipher_t * c)84 null_cipher_dealloc(cipher_t *c) {
85   extern cipher_type_t null_cipher;
86 
87   /* zeroize entire state*/
88   octet_string_set_to_zero((uint8_t *)c,
89 			   sizeof(null_cipher_ctx_t) + sizeof(cipher_t));
90 
91   /* free memory of type null_cipher */
92   crypto_free(c);
93 
94   /* decrement reference count */
95   null_cipher.ref_count--;
96 
97   return err_status_ok;
98 
99 }
100 
101 err_status_t
null_cipher_init(null_cipher_ctx_t * ctx,const uint8_t * key)102 null_cipher_init(null_cipher_ctx_t *ctx, const uint8_t *key) {
103 
104   debug_print(mod_cipher, "initializing null cipher", NULL);
105 
106   return err_status_ok;
107 }
108 
109 err_status_t
null_cipher_set_iv(null_cipher_ctx_t * c,void * iv)110 null_cipher_set_iv(null_cipher_ctx_t *c, void *iv) {
111   return err_status_ok;
112 }
113 
114 err_status_t
null_cipher_encrypt(null_cipher_ctx_t * c,unsigned char * buf,unsigned int * bytes_to_encr)115 null_cipher_encrypt(null_cipher_ctx_t *c,
116 		    unsigned char *buf, unsigned int *bytes_to_encr) {
117   return err_status_ok;
118 }
119 
120 char
121 null_cipher_description[] = "null cipher";
122 
123 cipher_test_case_t
124 null_cipher_test_0 = {
125   0,                 /* octets in key            */
126   NULL,              /* key                      */
127   0,                 /* packet index             */
128   0,                 /* octets in plaintext      */
129   NULL,              /* plaintext                */
130   0,                 /* octets in plaintext      */
131   NULL,              /* ciphertext               */
132   NULL               /* pointer to next testcase */
133 };
134 
135 
136 /*
137  * note: the decrypt function is idential to the encrypt function
138  */
139 
140 cipher_type_t null_cipher = {
141   (cipher_alloc_func_t)         null_cipher_alloc,
142   (cipher_dealloc_func_t)       null_cipher_dealloc,
143   (cipher_init_func_t)          null_cipher_init,
144   (cipher_encrypt_func_t)       null_cipher_encrypt,
145   (cipher_decrypt_func_t)       null_cipher_encrypt,
146   (cipher_set_iv_func_t)        null_cipher_set_iv,
147   (char *)                      null_cipher_description,
148   (int)                         0,
149   (cipher_test_case_t *)       &null_cipher_test_0,
150   (debug_module_t *)            NULL
151 };
152 
153