1238384Sjkim/* ====================================================================
2238384Sjkim * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
3238384Sjkim *
4238384Sjkim * Rights for redistribution and usage in source and binary
5238384Sjkim * forms are granted according to the OpenSSL license.
6238384Sjkim */
7238384Sjkim
8238384Sjkim#include <stddef.h>
9238384Sjkim
10273399Sdelphij#ifdef  __cplusplus
11273399Sdelphijextern "C" {
12273399Sdelphij#endif
13296341Sdelphijtypedef void (*block128_f) (const unsigned char in[16],
14296341Sdelphij                            unsigned char out[16], const void *key);
15238384Sjkim
16296341Sdelphijtypedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,
17296341Sdelphij                          size_t len, const void *key,
18296341Sdelphij                          unsigned char ivec[16], int enc);
19238384Sjkim
20296341Sdelphijtypedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,
21296341Sdelphij                          size_t blocks, const void *key,
22296341Sdelphij                          const unsigned char ivec[16]);
23238384Sjkim
24296341Sdelphijtypedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,
25296341Sdelphij                          size_t blocks, const void *key,
26296341Sdelphij                          const unsigned char ivec[16],
27296341Sdelphij                          unsigned char cmac[16]);
28238384Sjkim
29238384Sjkimvoid CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
30296341Sdelphij                           size_t len, const void *key,
31296341Sdelphij                           unsigned char ivec[16], block128_f block);
32238384Sjkimvoid CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
33296341Sdelphij                           size_t len, const void *key,
34296341Sdelphij                           unsigned char ivec[16], block128_f block);
35238384Sjkim
36238384Sjkimvoid CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
37296341Sdelphij                           size_t len, const void *key,
38296341Sdelphij                           unsigned char ivec[16],
39296341Sdelphij                           unsigned char ecount_buf[16], unsigned int *num,
40296341Sdelphij                           block128_f block);
41238384Sjkim
42238384Sjkimvoid CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
43296341Sdelphij                                 size_t len, const void *key,
44296341Sdelphij                                 unsigned char ivec[16],
45296341Sdelphij                                 unsigned char ecount_buf[16],
46296341Sdelphij                                 unsigned int *num, ctr128_f ctr);
47238384Sjkim
48238384Sjkimvoid CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
49296341Sdelphij                           size_t len, const void *key,
50296341Sdelphij                           unsigned char ivec[16], int *num,
51296341Sdelphij                           block128_f block);
52238384Sjkim
53238384Sjkimvoid CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
54296341Sdelphij                           size_t len, const void *key,
55296341Sdelphij                           unsigned char ivec[16], int *num,
56296341Sdelphij                           int enc, block128_f block);
57238384Sjkimvoid CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
58296341Sdelphij                             size_t length, const void *key,
59296341Sdelphij                             unsigned char ivec[16], int *num,
60296341Sdelphij                             int enc, block128_f block);
61238384Sjkimvoid CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
62296341Sdelphij                             size_t bits, const void *key,
63296341Sdelphij                             unsigned char ivec[16], int *num,
64296341Sdelphij                             int enc, block128_f block);
65238384Sjkim
66296341Sdelphijsize_t CRYPTO_cts128_encrypt_block(const unsigned char *in,
67296341Sdelphij                                   unsigned char *out, size_t len,
68296341Sdelphij                                   const void *key, unsigned char ivec[16],
69296341Sdelphij                                   block128_f block);
70238384Sjkimsize_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
71296341Sdelphij                             size_t len, const void *key,
72296341Sdelphij                             unsigned char ivec[16], cbc128_f cbc);
73296341Sdelphijsize_t CRYPTO_cts128_decrypt_block(const unsigned char *in,
74296341Sdelphij                                   unsigned char *out, size_t len,
75296341Sdelphij                                   const void *key, unsigned char ivec[16],
76296341Sdelphij                                   block128_f block);
77238384Sjkimsize_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
78296341Sdelphij                             size_t len, const void *key,
79296341Sdelphij                             unsigned char ivec[16], cbc128_f cbc);
80238384Sjkim
81296341Sdelphijsize_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in,
82296341Sdelphij                                       unsigned char *out, size_t len,
83296341Sdelphij                                       const void *key,
84296341Sdelphij                                       unsigned char ivec[16],
85296341Sdelphij                                       block128_f block);
86238384Sjkimsize_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out,
87296341Sdelphij                                 size_t len, const void *key,
88296341Sdelphij                                 unsigned char ivec[16], cbc128_f cbc);
89296341Sdelphijsize_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in,
90296341Sdelphij                                       unsigned char *out, size_t len,
91296341Sdelphij                                       const void *key,
92296341Sdelphij                                       unsigned char ivec[16],
93296341Sdelphij                                       block128_f block);
94238384Sjkimsize_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,
95296341Sdelphij                                 size_t len, const void *key,
96296341Sdelphij                                 unsigned char ivec[16], cbc128_f cbc);
97238384Sjkim
98238384Sjkimtypedef struct gcm128_context GCM128_CONTEXT;
99238384Sjkim
100238384SjkimGCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);
101296341Sdelphijvoid CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);
102238384Sjkimvoid CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,
103296341Sdelphij                         size_t len);
104238384Sjkimint CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,
105296341Sdelphij                      size_t len);
106238384Sjkimint CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
107296341Sdelphij                          const unsigned char *in, unsigned char *out,
108296341Sdelphij                          size_t len);
109238384Sjkimint CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
110296341Sdelphij                          const unsigned char *in, unsigned char *out,
111296341Sdelphij                          size_t len);
112238384Sjkimint CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
113296341Sdelphij                                const unsigned char *in, unsigned char *out,
114296341Sdelphij                                size_t len, ctr128_f stream);
115238384Sjkimint CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
116296341Sdelphij                                const unsigned char *in, unsigned char *out,
117296341Sdelphij                                size_t len, ctr128_f stream);
118296341Sdelphijint CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
119296341Sdelphij                         size_t len);
120238384Sjkimvoid CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
121238384Sjkimvoid CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);
122238384Sjkim
123238384Sjkimtypedef struct ccm128_context CCM128_CONTEXT;
124238384Sjkim
125238384Sjkimvoid CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
126296341Sdelphij                        unsigned int M, unsigned int L, void *key,
127296341Sdelphij                        block128_f block);
128296341Sdelphijint CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce,
129296341Sdelphij                        size_t nlen, size_t mlen);
130296341Sdelphijvoid CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad,
131296341Sdelphij                       size_t alen);
132296341Sdelphijint CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
133296341Sdelphij                          unsigned char *out, size_t len);
134296341Sdelphijint CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,
135296341Sdelphij                          unsigned char *out, size_t len);
136296341Sdelphijint CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
137296341Sdelphij                                unsigned char *out, size_t len,
138296341Sdelphij                                ccm128_f stream);
139296341Sdelphijint CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,
140296341Sdelphij                                unsigned char *out, size_t len,
141296341Sdelphij                                ccm128_f stream);
142238384Sjkimsize_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);
143238384Sjkim
144238384Sjkimtypedef struct xts128_context XTS128_CONTEXT;
145238384Sjkim
146296341Sdelphijint CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
147296341Sdelphij                          const unsigned char iv[16],
148296341Sdelphij                          const unsigned char *inp, unsigned char *out,
149296341Sdelphij                          size_t len, int enc);
150296341Sdelphij
151273399Sdelphij#ifdef  __cplusplus
152273399Sdelphij}
153273399Sdelphij#endif
154