LTKCPP-- LLRP Toolkit C Plus Plus Library
modes.h
00001 /* ====================================================================
00002  * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
00003  *
00004  * Rights for redistribution and usage in source and binary
00005  * forms are granted according to the OpenSSL license.
00006  */
00007 
00008 #include <stddef.h>
00009 
00010 #ifdef  __cplusplus
00011 extern "C" {
00012 #endif
00013 typedef void (*block128_f) (const unsigned char in[16],
00014                             unsigned char out[16], const void *key);
00015 
00016 typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,
00017                           size_t len, const void *key,
00018                           unsigned char ivec[16], int enc);
00019 
00020 typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,
00021                           size_t blocks, const void *key,
00022                           const unsigned char ivec[16]);
00023 
00024 typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,
00025                           size_t blocks, const void *key,
00026                           const unsigned char ivec[16],
00027                           unsigned char cmac[16]);
00028 
00029 void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
00030                            size_t len, const void *key,
00031                            unsigned char ivec[16], block128_f block);
00032 void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
00033                            size_t len, const void *key,
00034                            unsigned char ivec[16], block128_f block);
00035 
00036 void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
00037                            size_t len, const void *key,
00038                            unsigned char ivec[16],
00039                            unsigned char ecount_buf[16], unsigned int *num,
00040                            block128_f block);
00041 
00042 void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
00043                                  size_t len, const void *key,
00044                                  unsigned char ivec[16],
00045                                  unsigned char ecount_buf[16],
00046                                  unsigned int *num, ctr128_f ctr);
00047 
00048 void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
00049                            size_t len, const void *key,
00050                            unsigned char ivec[16], int *num,
00051                            block128_f block);
00052 
00053 void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
00054                            size_t len, const void *key,
00055                            unsigned char ivec[16], int *num,
00056                            int enc, block128_f block);
00057 void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
00058                              size_t length, const void *key,
00059                              unsigned char ivec[16], int *num,
00060                              int enc, block128_f block);
00061 void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
00062                              size_t bits, const void *key,
00063                              unsigned char ivec[16], int *num,
00064                              int enc, block128_f block);
00065 
00066 size_t CRYPTO_cts128_encrypt_block(const unsigned char *in,
00067                                    unsigned char *out, size_t len,
00068                                    const void *key, unsigned char ivec[16],
00069                                    block128_f block);
00070 size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
00071                              size_t len, const void *key,
00072                              unsigned char ivec[16], cbc128_f cbc);
00073 size_t CRYPTO_cts128_decrypt_block(const unsigned char *in,
00074                                    unsigned char *out, size_t len,
00075                                    const void *key, unsigned char ivec[16],
00076                                    block128_f block);
00077 size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
00078                              size_t len, const void *key,
00079                              unsigned char ivec[16], cbc128_f cbc);
00080 
00081 size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in,
00082                                        unsigned char *out, size_t len,
00083                                        const void *key,
00084                                        unsigned char ivec[16],
00085                                        block128_f block);
00086 size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out,
00087                                  size_t len, const void *key,
00088                                  unsigned char ivec[16], cbc128_f cbc);
00089 size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in,
00090                                        unsigned char *out, size_t len,
00091                                        const void *key,
00092                                        unsigned char ivec[16],
00093                                        block128_f block);
00094 size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,
00095                                  size_t len, const void *key,
00096                                  unsigned char ivec[16], cbc128_f cbc);
00097 
00098 typedef struct gcm128_context GCM128_CONTEXT;
00099 
00100 GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
00101 void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);
00102 void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
00103                          size_t len);
00104 int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
00105                       size_t len);
00106 int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
00107                           const unsigned char *in, unsigned char *out,
00108                           size_t len);
00109 int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
00110                           const unsigned char *in, unsigned char *out,
00111                           size_t len);
00112 int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
00113                                 const unsigned char *in, unsigned char *out,
00114                                 size_t len, ctr128_f stream);
00115 int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
00116                                 const unsigned char *in, unsigned char *out,
00117                                 size_t len, ctr128_f stream);
00118 int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
00119                          size_t len);
00120 void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
00121 void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
00122 
00123 typedef struct ccm128_context CCM128_CONTEXT;
00124 
00125 void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
00126                         unsigned int M, unsigned int L, void *key,
00127                         block128_f block);
00128 int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce,
00129                         size_t nlen, size_t mlen);
00130 void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad,
00131                        size_t alen);
00132 int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
00133                           unsigned char *out, size_t len);
00134 int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
00135                           unsigned char *out, size_t len);
00136 int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
00137                                 unsigned char *out, size_t len,
00138                                 ccm128_f stream);
00139 int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
00140                                 unsigned char *out, size_t len,
00141                                 ccm128_f stream);
00142 size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
00143 
00144 typedef struct xts128_context XTS128_CONTEXT;
00145 
00146 int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
00147                           const unsigned char iv[16],
00148                           const unsigned char *inp, unsigned char *out,
00149                           size_t len, int enc);
00150 
00151 size_t CRYPTO_128_wrap(void *key, const unsigned char *iv,
00152                        unsigned char *out,
00153                        const unsigned char *in, size_t inlen,
00154                        block128_f block);
00155 
00156 size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,
00157                          unsigned char *out,
00158                          const unsigned char *in, size_t inlen,
00159                          block128_f block);
00160 
00161 #ifdef  __cplusplus
00162 }
00163 #endif