Home | History | Annotate | Line # | Download | only in openssl
      1 /*
      2  * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the OpenSSL license (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #ifndef HEADER_MODES_H
     11 # define HEADER_MODES_H
     12 
     13 # include <stddef.h>
     14 
     15 # ifdef  __cplusplus
     16 extern "C" {
     17 # endif
     18 typedef void (*block128_f) (const unsigned char in[16],
     19                             unsigned char out[16], const void *key);
     20 
     21 typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,
     22                           size_t len, const void *key,
     23                           unsigned char ivec[16], int enc);
     24 
     25 typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,
     26                           size_t blocks, const void *key,
     27                           const unsigned char ivec[16]);
     28 
     29 typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,
     30                           size_t blocks, const void *key,
     31                           const unsigned char ivec[16],
     32                           unsigned char cmac[16]);
     33 
     34 void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
     35                            size_t len, const void *key,
     36                            unsigned char ivec[16], block128_f block);
     37 void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
     38                            size_t len, const void *key,
     39                            unsigned char ivec[16], block128_f block);
     40 
     41 void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
     42                            size_t len, const void *key,
     43                            unsigned char ivec[16],
     44                            unsigned char ecount_buf[16], unsigned int *num,
     45                            block128_f block);
     46 
     47 void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
     48                                  size_t len, const void *key,
     49                                  unsigned char ivec[16],
     50                                  unsigned char ecount_buf[16],
     51                                  unsigned int *num, ctr128_f ctr);
     52 
     53 void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
     54                            size_t len, const void *key,
     55                            unsigned char ivec[16], int *num,
     56                            block128_f block);
     57 
     58 void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
     59                            size_t len, const void *key,
     60                            unsigned char ivec[16], int *num,
     61                            int enc, block128_f block);
     62 void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
     63                              size_t length, const void *key,
     64                              unsigned char ivec[16], int *num,
     65                              int enc, block128_f block);
     66 void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
     67                              size_t bits, const void *key,
     68                              unsigned char ivec[16], int *num,
     69                              int enc, block128_f block);
     70 
     71 size_t CRYPTO_cts128_encrypt_block(const unsigned char *in,
     72                                    unsigned char *out, size_t len,
     73                                    const void *key, unsigned char ivec[16],
     74                                    block128_f block);
     75 size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
     76                              size_t len, const void *key,
     77                              unsigned char ivec[16], cbc128_f cbc);
     78 size_t CRYPTO_cts128_decrypt_block(const unsigned char *in,
     79                                    unsigned char *out, size_t len,
     80                                    const void *key, unsigned char ivec[16],
     81                                    block128_f block);
     82 size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
     83                              size_t len, const void *key,
     84                              unsigned char ivec[16], cbc128_f cbc);
     85 
     86 size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in,
     87                                        unsigned char *out, size_t len,
     88                                        const void *key,
     89                                        unsigned char ivec[16],
     90                                        block128_f block);
     91 size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out,
     92                                  size_t len, const void *key,
     93                                  unsigned char ivec[16], cbc128_f cbc);
     94 size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in,
     95                                        unsigned char *out, size_t len,
     96                                        const void *key,
     97                                        unsigned char ivec[16],
     98                                        block128_f block);
     99 size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,
    100                                  size_t len, const void *key,
    101                                  unsigned char ivec[16], cbc128_f cbc);
    102 
    103 typedef struct gcm128_context GCM128_CONTEXT;
    104 
    105 GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
    106 void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);
    107 void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
    108                          size_t len);
    109 int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
    110                       size_t len);
    111 int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
    112                           const unsigned char *in, unsigned char *out,
    113                           size_t len);
    114 int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
    115                           const unsigned char *in, unsigned char *out,
    116                           size_t len);
    117 int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
    118                                 const unsigned char *in, unsigned char *out,
    119                                 size_t len, ctr128_f stream);
    120 int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
    121                                 const unsigned char *in, unsigned char *out,
    122                                 size_t len, ctr128_f stream);
    123 int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
    124                          size_t len);
    125 void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
    126 void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
    127 
    128 typedef struct ccm128_context CCM128_CONTEXT;
    129 
    130 void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
    131                         unsigned int M, unsigned int L, void *key,
    132                         block128_f block);
    133 int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce,
    134                         size_t nlen, size_t mlen);
    135 void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad,
    136                        size_t alen);
    137 int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
    138                           unsigned char *out, size_t len);
    139 int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
    140                           unsigned char *out, size_t len);
    141 int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
    142                                 unsigned char *out, size_t len,
    143                                 ccm128_f stream);
    144 int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
    145                                 unsigned char *out, size_t len,
    146                                 ccm128_f stream);
    147 size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
    148 
    149 typedef struct xts128_context XTS128_CONTEXT;
    150 
    151 int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
    152                           const unsigned char iv[16],
    153                           const unsigned char *inp, unsigned char *out,
    154                           size_t len, int enc);
    155 
    156 size_t CRYPTO_128_wrap(void *key, const unsigned char *iv,
    157                        unsigned char *out,
    158                        const unsigned char *in, size_t inlen,
    159                        block128_f block);
    160 
    161 size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,
    162                          unsigned char *out,
    163                          const unsigned char *in, size_t inlen,
    164                          block128_f block);
    165 size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv,
    166                            unsigned char *out, const unsigned char *in,
    167                            size_t inlen, block128_f block);
    168 size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv,
    169                              unsigned char *out, const unsigned char *in,
    170                              size_t inlen, block128_f block);
    171 
    172 # ifndef OPENSSL_NO_OCB
    173 typedef struct ocb128_context OCB128_CONTEXT;
    174 
    175 typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out,
    176                           size_t blocks, const void *key,
    177                           size_t start_block_num,
    178                           unsigned char offset_i[16],
    179                           const unsigned char L_[][16],
    180                           unsigned char checksum[16]);
    181 
    182 OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec,
    183                                   block128_f encrypt, block128_f decrypt,
    184                                   ocb128_f stream);
    185 int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec,
    186                        block128_f encrypt, block128_f decrypt,
    187                        ocb128_f stream);
    188 int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src,
    189                            void *keyenc, void *keydec);
    190 int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv,
    191                         size_t len, size_t taglen);
    192 int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad,
    193                       size_t len);
    194 int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in,
    195                           unsigned char *out, size_t len);
    196 int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in,
    197                           unsigned char *out, size_t len);
    198 int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag,
    199                          size_t len);
    200 int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len);
    201 void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx);
    202 # endif                          /* OPENSSL_NO_OCB */
    203 
    204 # ifdef  __cplusplus
    205 }
    206 # endif
    207 
    208 #endif
    209