netwerk/srtp/src/crypto/cipher/null_cipher.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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  */
    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  */
    47 #include "datatypes.h"
    48 #include "null_cipher.h"
    49 #include "alloc.h"
    51 /* the null_cipher uses the cipher debug module  */
    53 extern debug_module_t mod_cipher;
    55 err_status_t
    56 null_cipher_alloc(cipher_t **c, int key_len) {
    57   extern cipher_type_t null_cipher;
    58   uint8_t *pointer;
    60   debug_print(mod_cipher, 
    61 	      "allocating cipher with key length %d", key_len);
    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;
    68   /* set pointers */
    69   *c = (cipher_t *)pointer;
    70   (*c)->type = &null_cipher;
    71   (*c)->state = pointer + sizeof(cipher_t);
    73   /* set key size */
    74   (*c)->key_len = key_len;
    76   /* increment ref_count */
    77   null_cipher.ref_count++;
    79   return err_status_ok;
    81 }
    83 err_status_t
    84 null_cipher_dealloc(cipher_t *c) {
    85   extern cipher_type_t null_cipher;
    87   /* zeroize entire state*/
    88   octet_string_set_to_zero((uint8_t *)c, 
    89 			   sizeof(null_cipher_ctx_t) + sizeof(cipher_t));
    91   /* free memory of type null_cipher */
    92   crypto_free(c);
    94   /* decrement reference count */
    95   null_cipher.ref_count--;
    97   return err_status_ok;
    99 }
   101 err_status_t
   102 null_cipher_init(null_cipher_ctx_t *ctx, const uint8_t *key, int key_len) {
   104   debug_print(mod_cipher, "initializing null cipher", NULL);
   106   return err_status_ok;
   107 }
   109 err_status_t
   110 null_cipher_set_iv(null_cipher_ctx_t *c, void *iv) { 
   111   return err_status_ok;
   112 }
   114 err_status_t
   115 null_cipher_encrypt(null_cipher_ctx_t *c,
   116 		    unsigned char *buf, unsigned int *bytes_to_encr) {
   117   return err_status_ok;
   118 }
   120 char 
   121 null_cipher_description[] = "null cipher";
   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 };
   136 /*
   137  * note: the decrypt function is idential to the encrypt function
   138  */
   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   (cipher_type_id_t)            NULL_CIPHER
   152 };

mercurial