netwerk/srtp/src/crypto/include/xfm.h

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  * xfm.h
     3  *
     4  * interface for abstract crypto transform
     5  * 
     6  * David A. McGrew
     7  * Cisco Systems, Inc.
     8  */
     9 /*
    10  *	
    11  * Copyright (c) 2001-2006, Cisco Systems, Inc.
    12  * All rights reserved.
    13  * 
    14  * Redistribution and use in source and binary forms, with or without
    15  * modification, are permitted provided that the following conditions
    16  * are met:
    17  * 
    18  *   Redistributions of source code must retain the above copyright
    19  *   notice, this list of conditions and the following disclaimer.
    20  * 
    21  *   Redistributions in binary form must reproduce the above
    22  *   copyright notice, this list of conditions and the following
    23  *   disclaimer in the documentation and/or other materials provided
    24  *   with the distribution.
    25  * 
    26  *   Neither the name of the Cisco Systems, Inc. nor the names of its
    27  *   contributors may be used to endorse or promote products derived
    28  *   from this software without specific prior written permission.
    29  * 
    30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    31  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    32  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    33  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    34  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
    35  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    36  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    37  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    40  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    41  * OF THE POSSIBILITY OF SUCH DAMAGE.
    42  *
    43  */
    45 #ifndef XFM_H
    46 #define XFM_H
    48 #include "crypto_kernel.h"
    49 #include "err.h"
    51 /**
    52  * @defgroup Crypto Cryptography
    53  *
    54  * A simple interface to an abstract cryptographic transform that
    55  * provides both confidentiality and message authentication.
    56  *
    57  * @{
    58  */
    60 /**
    61  * @brief applies a crypto transform
    62  *
    63  * The function pointer xfm_func_t points to a function that
    64  * implements a crypto transform, and provides a uniform API for
    65  * accessing crypto mechanisms.
    66  * 
    67  * @param key       location of secret key                  
    68  *
    69  * @param clear     data to be authenticated only           
    70  *
    71  * @param clear_len length of data to be authenticated only 
    72  *
    73  * @param iv        location to write the Initialization Vector (IV)
    74  *
    75  * @param protect   location of the data to be encrypted and
    76  * authenticated (before the function call), and the ciphertext
    77  * and authentication tag (after the call)
    78  *
    79  * @param protected_len location of the length of the data to be
    80  * encrypted and authenticated (before the function call), and the
    81  * length of the ciphertext (after the call)
    82  *
    83  * @param auth_tag   location to write auth tag              
    84  */
    86 typedef err_status_t (*xfm_func_t) 
    87      (void *key,            
    88       void *clear,          
    89       unsigned clear_len,   
    90       void *iv,             
    91       void *protect,         
    92       unsigned *protected_len, 
    93       void *auth_tag        
    94       );
    96 typedef 
    97 err_status_t (*xfm_inv_t)
    98      (void *key,            /* location of secret key                  */
    99       void *clear,          /* data to be authenticated only           */
   100       unsigned clear_len,   /* length of data to be authenticated only */
   101       void *iv,             /* location of iv                          */
   102       void *opaque,         /* data to be decrypted and authenticated  */
   103       unsigned *opaque_len, /* location of the length of data to be
   104 			     * decrypted and authd (before and after) 
   105 			     */
   106       void *auth_tag        /* location of auth tag                    */
   107       );
   109 typedef struct xfm_ctx_t {
   110   xfm_func_t func;
   111   xfm_inv_t  inv;
   112   unsigned key_len;
   113   unsigned iv_len;
   114   unsigned auth_tag_len;
   115 } xfm_ctx_t;
   117 typedef xfm_ctx_t *xfm_t;
   119 #define xfm_get_key_len(xfm) ((xfm)->key_len)
   121 #define xfm_get_iv_len(xfm) ((xfm)->iv_len)
   123 #define xfm_get_auth_tag_len(xfm) ((xfm)->auth_tag_len)
   126 /* cryptoalgo - 5/28 */
   128 typedef err_status_t (*cryptoalg_func_t) 
   129      (void *key,            
   130       void *clear,          
   131       unsigned clear_len,   
   132       void *iv,             
   133       void *opaque,         
   134       unsigned *opaque_len
   135       );
   137 typedef 
   138 err_status_t (*cryptoalg_inv_t)
   139      (void *key,            /* location of secret key                  */
   140       void *clear,          /* data to be authenticated only           */
   141       unsigned clear_len,   /* length of data to be authenticated only */
   142       void *iv,             /* location of iv                          */
   143       void *opaque,         /* data to be decrypted and authenticated  */
   144       unsigned *opaque_len  /* location of the length of data to be
   145 			     * decrypted and authd (before and after) 
   146 			     */
   147       );
   149 typedef struct cryptoalg_ctx_t {
   150   cryptoalg_func_t enc;
   151   cryptoalg_inv_t  dec;
   152   unsigned key_len;
   153   unsigned iv_len;
   154   unsigned auth_tag_len;
   155   unsigned max_expansion; 
   156 } cryptoalg_ctx_t;
   158 typedef cryptoalg_ctx_t *cryptoalg_t;
   160 #define cryptoalg_get_key_len(cryptoalg) ((cryptoalg)->key_len)
   162 #define cryptoalg_get_iv_len(cryptoalg) ((cryptoalg)->iv_len)
   164 #define cryptoalg_get_auth_tag_len(cryptoalg) ((cryptoalg)->auth_tag_len)
   168 /**
   169  * @}
   170  */
   172 #endif /* XFM_H */

mercurial