LCOV - code coverage report
Current view: top level - third_party/heimdal/lib/hcrypto - evp-hcrypto.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 62 135 45.9 %
Date: 2024-04-21 15:09:00 Functions: 15 34 44.1 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2006 - 2008 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 <config.h>
      35             : #include <roken.h>
      36             : 
      37             : #define HC_DEPRECATED
      38             : 
      39             : #include <assert.h>
      40             : 
      41             : #include <evp.h>
      42             : #include <evp-hcrypto.h>
      43             : 
      44             : #include <krb5-types.h>
      45             : 
      46             : #include <des.h>
      47             : #include "camellia.h"
      48             : #include <aes.h>
      49             : 
      50             : #include <rc2.h>
      51             : #include <rc4.h>
      52             : 
      53             : #include <sha.h>
      54             : #include <md4.h>
      55             : #include <md5.h>
      56             : 
      57             : /*
      58             :  *
      59             :  */
      60             : 
      61             : static int
      62    12028951 : aes_init(EVP_CIPHER_CTX *ctx,
      63             :          const unsigned char * key,
      64             :          const unsigned char * iv,
      65             :          int encp)
      66             : {
      67    12028951 :     AES_KEY *k = ctx->cipher_data;
      68    12028951 :     if (ctx->encrypt || EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_CFB8_MODE)
      69     6367756 :         AES_set_encrypt_key(key, ctx->cipher->key_len * 8, k);
      70             :     else
      71     5661195 :         AES_set_decrypt_key(key, ctx->cipher->key_len * 8, k);
      72    12028951 :     return 1;
      73             : }
      74             : 
      75             : static int
      76    19327398 : aes_do_cipher(EVP_CIPHER_CTX *ctx,
      77             :               unsigned char *out,
      78             :               const unsigned char *in,
      79             :               unsigned int size)
      80             : {
      81    19327398 :     AES_KEY *k = ctx->cipher_data;
      82    19327398 :     if (EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_CFB8_MODE)
      83           0 :         AES_cfb8_encrypt(in, out, size, k, ctx->iv, ctx->encrypt);
      84             :     else
      85    19327398 :         AES_cbc_encrypt(in, out, size, k, ctx->iv, ctx->encrypt);
      86    19327398 :     return 1;
      87             : }
      88             : 
      89             : /**
      90             :  * The AES-128 cipher type (hcrypto)
      91             :  *
      92             :  * @return the AES-128 EVP_CIPHER pointer.
      93             :  *
      94             :  * @ingroup hcrypto_evp
      95             :  */
      96             : 
      97             : const EVP_CIPHER *
      98       29761 : EVP_hcrypto_aes_128_cbc(void)
      99             : {
     100         225 :     static const EVP_CIPHER aes_128_cbc = {
     101             :         0,
     102             :         16,
     103             :         16,
     104             :         16,
     105             :         EVP_CIPH_CBC_MODE,
     106             :         aes_init,
     107             :         aes_do_cipher,
     108             :         NULL,
     109             :         sizeof(AES_KEY),
     110             :         NULL,
     111             :         NULL,
     112             :         NULL,
     113             :         NULL
     114             :     };
     115             : 
     116       29761 :     return &aes_128_cbc;
     117             : }
     118             : 
     119             : /**
     120             :  * The AES-192 cipher type (hcrypto)
     121             :  *
     122             :  * @return the AES-192 EVP_CIPHER pointer.
     123             :  *
     124             :  * @ingroup hcrypto_evp
     125             :  */
     126             : 
     127             : const EVP_CIPHER *
     128           0 : EVP_hcrypto_aes_192_cbc(void)
     129             : {
     130           0 :     static const EVP_CIPHER aes_192_cbc = {
     131             :         0,
     132             :         16,
     133             :         24,
     134             :         16,
     135             :         EVP_CIPH_CBC_MODE,
     136             :         aes_init,
     137             :         aes_do_cipher,
     138             :         NULL,
     139             :         sizeof(AES_KEY),
     140             :         NULL,
     141             :         NULL,
     142             :         NULL,
     143             :         NULL
     144             :     };
     145           0 :     return &aes_192_cbc;
     146             : }
     147             : 
     148             : /**
     149             :  * The AES-256 cipher type (hcrypto)
     150             :  *
     151             :  * @return the AES-256 EVP_CIPHER pointer.
     152             :  *
     153             :  * @ingroup hcrypto_evp
     154             :  */
     155             : 
     156             : const EVP_CIPHER *
     157     6337995 : EVP_hcrypto_aes_256_cbc(void)
     158             : {
     159      205582 :     static const EVP_CIPHER aes_256_cbc = {
     160             :         0,
     161             :         16,
     162             :         32,
     163             :         16,
     164             :         EVP_CIPH_CBC_MODE,
     165             :         aes_init,
     166             :         aes_do_cipher,
     167             :         NULL,
     168             :         sizeof(AES_KEY),
     169             :         NULL,
     170             :         NULL,
     171             :         NULL,
     172             :         NULL
     173             :     };
     174     6337995 :     return &aes_256_cbc;
     175             : }
     176             : 
     177             : /**
     178             :  * The AES-128 CFB8 cipher type (hcrypto)
     179             :  *
     180             :  * @return the AES-128 EVP_CIPHER pointer.
     181             :  *
     182             :  * @ingroup hcrypto_evp
     183             :  */
     184             : 
     185             : const EVP_CIPHER *
     186           0 : EVP_hcrypto_aes_128_cfb8(void)
     187             : {
     188           0 :     static const EVP_CIPHER aes_128_cfb8 = {
     189             :         0,
     190             :         1,
     191             :         16,
     192             :         16,
     193             :         EVP_CIPH_CFB8_MODE,
     194             :         aes_init,
     195             :         aes_do_cipher,
     196             :         NULL,
     197             :         sizeof(AES_KEY),
     198             :         NULL,
     199             :         NULL,
     200             :         NULL,
     201             :         NULL
     202             :     };
     203             : 
     204           0 :     return &aes_128_cfb8;
     205             : }
     206             : 
     207             : /**
     208             :  * The AES-192 CFB8 cipher type (hcrypto)
     209             :  *
     210             :  * @return the AES-192 EVP_CIPHER pointer.
     211             :  *
     212             :  * @ingroup hcrypto_evp
     213             :  */
     214             : 
     215             : const EVP_CIPHER *
     216           0 : EVP_hcrypto_aes_192_cfb8(void)
     217             : {
     218           0 :     static const EVP_CIPHER aes_192_cfb8 = {
     219             :         0,
     220             :         1,
     221             :         24,
     222             :         16,
     223             :         EVP_CIPH_CFB8_MODE,
     224             :         aes_init,
     225             :         aes_do_cipher,
     226             :         NULL,
     227             :         sizeof(AES_KEY),
     228             :         NULL,
     229             :         NULL,
     230             :         NULL,
     231             :         NULL
     232             :     };
     233           0 :     return &aes_192_cfb8;
     234             : }
     235             : 
     236             : /**
     237             :  * The AES-256 CFB8 cipher type (hcrypto)
     238             :  *
     239             :  * @return the AES-256 EVP_CIPHER pointer.
     240             :  *
     241             :  * @ingroup hcrypto_evp
     242             :  */
     243             : 
     244             : const EVP_CIPHER *
     245           0 : EVP_hcrypto_aes_256_cfb8(void)
     246             : {
     247           0 :     static const EVP_CIPHER aes_256_cfb8 = {
     248             :         0,
     249             :         1,
     250             :         32,
     251             :         16,
     252             :         EVP_CIPH_CFB8_MODE,
     253             :         aes_init,
     254             :         aes_do_cipher,
     255             :         NULL,
     256             :         sizeof(AES_KEY),
     257             :         NULL,
     258             :         NULL,
     259             :         NULL,
     260             :         NULL
     261             :     };
     262           0 :     return &aes_256_cfb8;
     263             : }
     264             : 
     265             : /**
     266             :  * The message digest SHA256 - hcrypto
     267             :  *
     268             :  * @return the message digest type.
     269             :  *
     270             :  * @ingroup hcrypto_evp
     271             :  */
     272             : 
     273             : const EVP_MD *
     274         356 : EVP_hcrypto_sha256(void)
     275             : {
     276           0 :     static const struct hc_evp_md sha256 = {
     277             :         32,
     278             :         64,
     279             :         sizeof(SHA256_CTX),
     280             :         (hc_evp_md_init)SHA256_Init,
     281             :         (hc_evp_md_update)SHA256_Update,
     282             :         (hc_evp_md_final)SHA256_Final,
     283             :         NULL
     284             :     };
     285         356 :     return &sha256;
     286             : }
     287             : 
     288             : /**
     289             :  * The message digest SHA384 - hcrypto
     290             :  *
     291             :  * @return the message digest type.
     292             :  *
     293             :  * @ingroup hcrypto_evp
     294             :  */
     295             : 
     296             : const EVP_MD *
     297           0 : EVP_hcrypto_sha384(void)
     298             : {
     299           0 :     static const struct hc_evp_md sha384 = {
     300             :         48,
     301             :         128,
     302             :         sizeof(SHA384_CTX),
     303             :         (hc_evp_md_init)SHA384_Init,
     304             :         (hc_evp_md_update)SHA384_Update,
     305             :         (hc_evp_md_final)SHA384_Final,
     306             :         NULL
     307             :     };
     308           0 :     return &sha384;
     309             : }
     310             : 
     311             : /**
     312             :  * The message digest SHA512 - hcrypto
     313             :  *
     314             :  * @return the message digest type.
     315             :  *
     316             :  * @ingroup hcrypto_evp
     317             :  */
     318             : 
     319             : const EVP_MD *
     320         300 : EVP_hcrypto_sha512(void)
     321             : {
     322           0 :     static const struct hc_evp_md sha512 = {
     323             :         64,
     324             :         128,
     325             :         sizeof(SHA512_CTX),
     326             :         (hc_evp_md_init)SHA512_Init,
     327             :         (hc_evp_md_update)SHA512_Update,
     328             :         (hc_evp_md_final)SHA512_Final,
     329             :         NULL
     330             :     };
     331         300 :     return &sha512;
     332             : }
     333             : 
     334             : /**
     335             :  * The message digest SHA1 - hcrypto
     336             :  *
     337             :  * @return the message digest type.
     338             :  *
     339             :  * @ingroup hcrypto_evp
     340             :  */
     341             : 
     342             : const EVP_MD *
     343     5648254 : EVP_hcrypto_sha1(void)
     344             : {
     345       81146 :     static const struct hc_evp_md sha1 = {
     346             :         20,
     347             :         64,
     348             :         sizeof(SHA_CTX),
     349             :         (hc_evp_md_init)SHA1_Init,
     350             :         (hc_evp_md_update)SHA1_Update,
     351             :         (hc_evp_md_final)SHA1_Final,
     352             :         NULL
     353             :     };
     354     5648254 :     return &sha1;
     355             : }
     356             : 
     357             : /**
     358             :  * The message digest MD5 - hcrypto
     359             :  *
     360             :  * @return the message digest type.
     361             :  *
     362             :  * @ingroup hcrypto_evp
     363             :  */
     364             : 
     365             : const EVP_MD *
     366     2447172 : EVP_hcrypto_md5(void)
     367             : {
     368         436 :     static const struct hc_evp_md md5 = {
     369             :         16,
     370             :         64,
     371             :         sizeof(MD5_CTX),
     372             :         (hc_evp_md_init)MD5_Init,
     373             :         (hc_evp_md_update)MD5_Update,
     374             :         (hc_evp_md_final)MD5_Final,
     375             :         NULL
     376             :     };
     377     2447172 :     return &md5;
     378             : }
     379             : 
     380             : /**
     381             :  * The message digest MD4 - hcrypto
     382             :  *
     383             :  * @return the message digest type.
     384             :  *
     385             :  * @ingroup hcrypto_evp
     386             :  */
     387             : 
     388             : const EVP_MD *
     389        1182 : EVP_hcrypto_md4(void)
     390             : {
     391           6 :     static const struct hc_evp_md md4 = {
     392             :         16,
     393             :         64,
     394             :         sizeof(MD4_CTX),
     395             :         (hc_evp_md_init)MD4_Init,
     396             :         (hc_evp_md_update)MD4_Update,
     397             :         (hc_evp_md_final)MD4_Final,
     398             :         NULL
     399             :     };
     400        1182 :     return &md4;
     401             : }
     402             : 
     403             : 
     404             : /*
     405             :  *
     406             :  */
     407             : 
     408             : static int
     409           0 : des_cbc_init(EVP_CIPHER_CTX *ctx,
     410             :              const unsigned char * key,
     411             :              const unsigned char * iv,
     412             :              int encp)
     413             : {
     414           0 :     DES_key_schedule *k = ctx->cipher_data;
     415           0 :     DES_cblock deskey;
     416           0 :     memcpy(&deskey, key, sizeof(deskey));
     417           0 :     DES_set_key_unchecked(&deskey, k);
     418           0 :     return 1;
     419             : }
     420             : 
     421             : static int
     422           0 : des_cbc_do_cipher(EVP_CIPHER_CTX *ctx,
     423             :                   unsigned char *out,
     424             :                   const unsigned char *in,
     425             :                   unsigned int size)
     426             : {
     427           0 :     DES_key_schedule *k = ctx->cipher_data;
     428           0 :     DES_cbc_encrypt(in, out, size,
     429           0 :                     k, (DES_cblock *)ctx->iv, ctx->encrypt);
     430           0 :     return 1;
     431             : }
     432             : 
     433             : /**
     434             :  * The DES cipher type
     435             :  *
     436             :  * @return the DES-CBC EVP_CIPHER pointer.
     437             :  *
     438             :  * @ingroup hcrypto_evp
     439             :  */
     440             : 
     441             : const EVP_CIPHER *
     442           0 : EVP_hcrypto_des_cbc(void)
     443             : {
     444           0 :     static const EVP_CIPHER des_cbc = {
     445             :         0,
     446             :         8,
     447             :         8,
     448             :         8,
     449             :         EVP_CIPH_CBC_MODE,
     450             :         des_cbc_init,
     451             :         des_cbc_do_cipher,
     452             :         NULL,
     453             :         sizeof(DES_key_schedule),
     454             :         NULL,
     455             :         NULL,
     456             :         NULL,
     457             :         NULL
     458             :     };
     459           0 :     return &des_cbc;
     460             : }
     461             : 
     462             : /*
     463             :  *
     464             :  */
     465             : 
     466             : struct des_ede3_cbc {
     467             :     DES_key_schedule ks[3];
     468             : };
     469             : 
     470             : static int
     471       29802 : des_ede3_cbc_init(EVP_CIPHER_CTX *ctx,
     472             :                   const unsigned char * key,
     473             :                   const unsigned char * iv,
     474             :                   int encp)
     475             : {
     476       29802 :     struct des_ede3_cbc *k = ctx->cipher_data;
     477        1510 :     DES_cblock deskey;
     478             : 
     479       29802 :     memcpy(&deskey, key, sizeof(deskey));
     480       29802 :     DES_set_odd_parity(&deskey);
     481       29802 :     DES_set_key_unchecked(&deskey, &k->ks[0]);
     482             : 
     483       29802 :     memcpy(&deskey, key + 8, sizeof(deskey));
     484       29802 :     DES_set_odd_parity(&deskey);
     485       29802 :     DES_set_key_unchecked(&deskey, &k->ks[1]);
     486             : 
     487       29802 :     memcpy(&deskey, key + 16, sizeof(deskey));
     488       29802 :     DES_set_odd_parity(&deskey);
     489       29802 :     DES_set_key_unchecked(&deskey, &k->ks[2]);
     490             : 
     491       29802 :     return 1;
     492             : }
     493             : 
     494             : static int
     495       29802 : des_ede3_cbc_do_cipher(EVP_CIPHER_CTX *ctx,
     496             :                        unsigned char *out,
     497             :                        const unsigned char *in,
     498             :                        unsigned int size)
     499             : {
     500       29802 :     struct des_ede3_cbc *k = ctx->cipher_data;
     501       29802 :     DES_ede3_cbc_encrypt(in, out, size,
     502             :                          &k->ks[0], &k->ks[1], &k->ks[2],
     503       29802 :                          (DES_cblock *)ctx->iv, ctx->encrypt);
     504       29802 :     return 1;
     505             : }
     506             : 
     507             : /**
     508             :  * The triple DES cipher type - hcrypto
     509             :  *
     510             :  * @return the DES-EDE3-CBC EVP_CIPHER pointer.
     511             :  *
     512             :  * @ingroup hcrypto_evp
     513             :  */
     514             : 
     515             : const EVP_CIPHER *
     516       14903 : EVP_hcrypto_des_ede3_cbc(void)
     517             : {
     518         755 :     static const EVP_CIPHER des_ede3_cbc = {
     519             :         0,
     520             :         8,
     521             :         24,
     522             :         8,
     523             :         EVP_CIPH_CBC_MODE,
     524             :         des_ede3_cbc_init,
     525             :         des_ede3_cbc_do_cipher,
     526             :         NULL,
     527             :         sizeof(struct des_ede3_cbc),
     528             :         NULL,
     529             :         NULL,
     530             :         NULL,
     531             :         NULL
     532             :     };
     533       14903 :     return &des_ede3_cbc;
     534             : }
     535             : 
     536             : /*
     537             :  *
     538             :  */
     539             : 
     540             : struct rc2_cbc {
     541             :     unsigned int maximum_effective_key;
     542             :     RC2_KEY key;
     543             : };
     544             : 
     545             : static int
     546           0 : rc2_init(EVP_CIPHER_CTX *ctx,
     547             :          const unsigned char * key,
     548             :          const unsigned char * iv,
     549             :          int encp)
     550             : {
     551           0 :     struct rc2_cbc *k = ctx->cipher_data;
     552           0 :     k->maximum_effective_key = EVP_CIPHER_CTX_key_length(ctx) * 8;
     553           0 :     RC2_set_key(&k->key,
     554           0 :                 EVP_CIPHER_CTX_key_length(ctx),
     555             :                 key,
     556           0 :                 k->maximum_effective_key);
     557           0 :     return 1;
     558             : }
     559             : 
     560             : static int
     561           0 : rc2_do_cipher(EVP_CIPHER_CTX *ctx,
     562             :               unsigned char *out,
     563             :               const unsigned char *in,
     564             :               unsigned int size)
     565             : {
     566           0 :     struct rc2_cbc *k = ctx->cipher_data;
     567           0 :     RC2_cbc_encrypt(in, out, size, &k->key, ctx->iv, ctx->encrypt);
     568           0 :     return 1;
     569             : }
     570             : 
     571             : /**
     572             :  * The RC2 cipher type - hcrypto
     573             :  *
     574             :  * @return the RC2 EVP_CIPHER pointer.
     575             :  *
     576             :  * @ingroup hcrypto_evp
     577             :  */
     578             : 
     579             : const EVP_CIPHER *
     580           0 : EVP_hcrypto_rc2_cbc(void)
     581             : {
     582           0 :     static const EVP_CIPHER rc2_cbc = {
     583             :         0,
     584             :         RC2_BLOCK_SIZE,
     585             :         RC2_KEY_LENGTH,
     586             :         RC2_BLOCK_SIZE,
     587             :         EVP_CIPH_CBC_MODE|EVP_CIPH_VARIABLE_LENGTH,
     588             :         rc2_init,
     589             :         rc2_do_cipher,
     590             :         NULL,
     591             :         sizeof(struct rc2_cbc),
     592             :         NULL,
     593             :         NULL,
     594             :         NULL,
     595             :         NULL
     596             :     };
     597           0 :     return &rc2_cbc;
     598             : }
     599             : 
     600             : /**
     601             :  * The RC2-40 cipher type
     602             :  *
     603             :  * @return the RC2-40 EVP_CIPHER pointer.
     604             :  *
     605             :  * @ingroup hcrypto_evp
     606             :  */
     607             : 
     608             : const EVP_CIPHER *
     609           0 : EVP_hcrypto_rc2_40_cbc(void)
     610             : {
     611           0 :     static const EVP_CIPHER rc2_40_cbc = {
     612             :         0,
     613             :         RC2_BLOCK_SIZE,
     614             :         5,
     615             :         RC2_BLOCK_SIZE,
     616             :         EVP_CIPH_CBC_MODE,
     617             :         rc2_init,
     618             :         rc2_do_cipher,
     619             :         NULL,
     620             :         sizeof(struct rc2_cbc),
     621             :         NULL,
     622             :         NULL,
     623             :         NULL,
     624             :         NULL
     625             :     };
     626           0 :     return &rc2_40_cbc;
     627             : }
     628             : 
     629             : /**
     630             :  * The RC2-64 cipher type
     631             :  *
     632             :  * @return the RC2-64 EVP_CIPHER pointer.
     633             :  *
     634             :  * @ingroup hcrypto_evp
     635             :  */
     636             : 
     637             : const EVP_CIPHER *
     638           0 : EVP_hcrypto_rc2_64_cbc(void)
     639             : {
     640           0 :     static const EVP_CIPHER rc2_64_cbc = {
     641             :         0,
     642             :         RC2_BLOCK_SIZE,
     643             :         8,
     644             :         RC2_BLOCK_SIZE,
     645             :         EVP_CIPH_CBC_MODE,
     646             :         rc2_init,
     647             :         rc2_do_cipher,
     648             :         NULL,
     649             :         sizeof(struct rc2_cbc),
     650             :         NULL,
     651             :         NULL,
     652             :         NULL,
     653             :         NULL
     654             :     };
     655           0 :     return &rc2_64_cbc;
     656             : }
     657             : 
     658             : static int
     659           0 : camellia_init(EVP_CIPHER_CTX *ctx,
     660             :          const unsigned char * key,
     661             :          const unsigned char * iv,
     662             :          int encp)
     663             : {
     664           0 :     CAMELLIA_KEY *k = ctx->cipher_data;
     665           0 :     k->bits = ctx->cipher->key_len * 8;
     666           0 :     CAMELLIA_set_key(key, ctx->cipher->key_len * 8, k);
     667           0 :     return 1;
     668             : }
     669             : 
     670             : static int
     671           0 : camellia_do_cipher(EVP_CIPHER_CTX *ctx,
     672             :               unsigned char *out,
     673             :               const unsigned char *in,
     674             :               unsigned int size)
     675             : {
     676           0 :     CAMELLIA_KEY *k = ctx->cipher_data;
     677           0 :     CAMELLIA_cbc_encrypt(in, out, size, k, ctx->iv, ctx->encrypt);
     678           0 :     return 1;
     679             : }
     680             : 
     681             : /**
     682             :  * The Camellia-128 cipher type - hcrypto
     683             :  *
     684             :  * @return the Camellia-128 EVP_CIPHER pointer.
     685             :  *
     686             :  * @ingroup hcrypto_evp
     687             :  */
     688             : 
     689             : const EVP_CIPHER *
     690           0 : EVP_hcrypto_camellia_128_cbc(void)
     691             : {
     692           0 :     static const EVP_CIPHER cipher = {
     693             :         0,
     694             :         16,
     695             :         16,
     696             :         16,
     697             :         EVP_CIPH_CBC_MODE,
     698             :         camellia_init,
     699             :         camellia_do_cipher,
     700             :         NULL,
     701             :         sizeof(CAMELLIA_KEY),
     702             :         NULL,
     703             :         NULL,
     704             :         NULL,
     705             :         NULL
     706             :     };
     707           0 :     return &cipher;
     708             : }
     709             : 
     710             : /**
     711             :  * The Camellia-198 cipher type - hcrypto
     712             :  *
     713             :  * @return the Camellia-198 EVP_CIPHER pointer.
     714             :  *
     715             :  * @ingroup hcrypto_evp
     716             :  */
     717             : 
     718             : const EVP_CIPHER *
     719           0 : EVP_hcrypto_camellia_192_cbc(void)
     720             : {
     721           0 :     static const EVP_CIPHER cipher = {
     722             :         0,
     723             :         16,
     724             :         24,
     725             :         16,
     726             :         EVP_CIPH_CBC_MODE,
     727             :         camellia_init,
     728             :         camellia_do_cipher,
     729             :         NULL,
     730             :         sizeof(CAMELLIA_KEY),
     731             :         NULL,
     732             :         NULL,
     733             :         NULL,
     734             :         NULL
     735             :     };
     736           0 :     return &cipher;
     737             : }
     738             : 
     739             : /**
     740             :  * The Camellia-256 cipher type - hcrypto
     741             :  *
     742             :  * @return the Camellia-256 EVP_CIPHER pointer.
     743             :  *
     744             :  * @ingroup hcrypto_evp
     745             :  */
     746             : 
     747             : const EVP_CIPHER *
     748           0 : EVP_hcrypto_camellia_256_cbc(void)
     749             : {
     750           0 :     static const EVP_CIPHER cipher = {
     751             :         0,
     752             :         16,
     753             :         32,
     754             :         16,
     755             :         EVP_CIPH_CBC_MODE,
     756             :         camellia_init,
     757             :         camellia_do_cipher,
     758             :         NULL,
     759             :         sizeof(CAMELLIA_KEY),
     760             :         NULL,
     761             :         NULL,
     762             :         NULL,
     763             :         NULL
     764             :     };
     765           0 :     return &cipher;
     766             : }
     767             : 
     768             : static int
     769      770455 : rc4_init(EVP_CIPHER_CTX *ctx,
     770             :          const unsigned char *key,
     771             :          const unsigned char *iv,
     772             :          int enc)
     773             : {
     774      770455 :     RC4_KEY *k = ctx->cipher_data;
     775      770455 :     RC4_set_key(k, ctx->key_len, key);
     776      770455 :     return 1;
     777             : }
     778             : 
     779             : static int
     780      513328 : rc4_do_cipher(EVP_CIPHER_CTX *ctx,
     781             :               unsigned char *out,
     782             :               const unsigned char *in,
     783             :               unsigned int size)
     784             : {
     785      513328 :     RC4_KEY *k = ctx->cipher_data;
     786      513328 :     RC4(k, size, in, out);
     787      513328 :     return 1;
     788             : }
     789             : 
     790             : const EVP_CIPHER *
     791      556726 : EVP_hcrypto_rc4(void)
     792             : {
     793        2345 :     static const EVP_CIPHER rc4 = {
     794             :         0,
     795             :         1,
     796             :         16,
     797             :         0,
     798             :         EVP_CIPH_STREAM_CIPHER|EVP_CIPH_VARIABLE_LENGTH,
     799             :         rc4_init,
     800             :         rc4_do_cipher,
     801             :         NULL,
     802             :         sizeof(RC4_KEY),
     803             :         NULL,
     804             :         NULL,
     805             :         NULL,
     806             :         NULL
     807             :     };
     808      556726 :     return &rc4;
     809             : }
     810             : 
     811             : 
     812             : const EVP_CIPHER *
     813           0 : EVP_hcrypto_rc4_40(void)
     814             : {
     815           0 :     static const EVP_CIPHER rc4_40 = {
     816             :         0,
     817             :         1,
     818             :         5,
     819             :         0,
     820             :         EVP_CIPH_STREAM_CIPHER|EVP_CIPH_VARIABLE_LENGTH,
     821             :         rc4_init,
     822             :         rc4_do_cipher,
     823             :         NULL,
     824             :         sizeof(RC4_KEY),
     825             :         NULL,
     826             :         NULL,
     827             :         NULL,
     828             :         NULL
     829             :     };
     830           0 :     return &rc4_40;
     831             : }

Generated by: LCOV version 1.14