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