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