1*72c33676SMaxim Ag /* $OpenBSD: modes.h,v 1.3 2018/07/24 10:47:19 bcook Exp $ */ 2f5b1c8a1SJohn Marino /* ==================================================================== 3f5b1c8a1SJohn Marino * Copyright (c) 2008 The OpenSSL Project. All rights reserved. 4f5b1c8a1SJohn Marino * 5f5b1c8a1SJohn Marino * Rights for redistribution and usage in source and binary 6f5b1c8a1SJohn Marino * forms are granted according to the OpenSSL license. 7f5b1c8a1SJohn Marino */ 8f5b1c8a1SJohn Marino 9f5b1c8a1SJohn Marino #include <stddef.h> 10f5b1c8a1SJohn Marino 11*72c33676SMaxim Ag #ifdef __cplusplus 12*72c33676SMaxim Ag extern "C" { 13*72c33676SMaxim Ag #endif 14*72c33676SMaxim Ag 15f5b1c8a1SJohn Marino typedef void (*block128_f)(const unsigned char in[16], 16f5b1c8a1SJohn Marino unsigned char out[16], 17f5b1c8a1SJohn Marino const void *key); 18f5b1c8a1SJohn Marino 19f5b1c8a1SJohn Marino typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out, 20f5b1c8a1SJohn Marino size_t len, const void *key, 21f5b1c8a1SJohn Marino unsigned char ivec[16], int enc); 22f5b1c8a1SJohn Marino 23f5b1c8a1SJohn Marino typedef void (*ctr128_f)(const unsigned char *in, unsigned char *out, 24f5b1c8a1SJohn Marino size_t blocks, const void *key, 25f5b1c8a1SJohn Marino const unsigned char ivec[16]); 26f5b1c8a1SJohn Marino 27f5b1c8a1SJohn Marino typedef void (*ccm128_f)(const unsigned char *in, unsigned char *out, 28f5b1c8a1SJohn Marino size_t blocks, const void *key, 29f5b1c8a1SJohn Marino const unsigned char ivec[16],unsigned char cmac[16]); 30f5b1c8a1SJohn Marino 31f5b1c8a1SJohn Marino void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, 32f5b1c8a1SJohn Marino size_t len, const void *key, 33f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 34f5b1c8a1SJohn Marino void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, 35f5b1c8a1SJohn Marino size_t len, const void *key, 36f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 37f5b1c8a1SJohn Marino 38f5b1c8a1SJohn Marino void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, 39f5b1c8a1SJohn Marino size_t len, const void *key, 40f5b1c8a1SJohn Marino unsigned char ivec[16], unsigned char ecount_buf[16], 41f5b1c8a1SJohn Marino unsigned int *num, block128_f block); 42f5b1c8a1SJohn Marino 43f5b1c8a1SJohn Marino void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, 44f5b1c8a1SJohn Marino size_t len, const void *key, 45f5b1c8a1SJohn Marino unsigned char ivec[16], unsigned char ecount_buf[16], 46f5b1c8a1SJohn Marino unsigned int *num, ctr128_f ctr); 47f5b1c8a1SJohn Marino 48f5b1c8a1SJohn Marino void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, 49f5b1c8a1SJohn Marino size_t len, const void *key, 50f5b1c8a1SJohn Marino unsigned char ivec[16], int *num, 51f5b1c8a1SJohn Marino block128_f block); 52f5b1c8a1SJohn Marino 53f5b1c8a1SJohn Marino void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, 54f5b1c8a1SJohn Marino size_t len, const void *key, 55f5b1c8a1SJohn Marino unsigned char ivec[16], int *num, 56f5b1c8a1SJohn Marino int enc, block128_f block); 57f5b1c8a1SJohn Marino void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, 58f5b1c8a1SJohn Marino size_t length, const void *key, 59f5b1c8a1SJohn Marino unsigned char ivec[16], int *num, 60f5b1c8a1SJohn Marino int enc, block128_f block); 61f5b1c8a1SJohn Marino void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, 62f5b1c8a1SJohn Marino size_t bits, const void *key, 63f5b1c8a1SJohn Marino unsigned char ivec[16], int *num, 64f5b1c8a1SJohn Marino int enc, block128_f block); 65f5b1c8a1SJohn Marino 66f5b1c8a1SJohn Marino size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, unsigned char *out, 67f5b1c8a1SJohn Marino size_t len, const void *key, 68f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 69f5b1c8a1SJohn Marino size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, 70f5b1c8a1SJohn Marino size_t len, const void *key, 71f5b1c8a1SJohn Marino unsigned char ivec[16], cbc128_f cbc); 72f5b1c8a1SJohn Marino size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out, 73f5b1c8a1SJohn Marino size_t len, const void *key, 74f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 75f5b1c8a1SJohn Marino size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, 76f5b1c8a1SJohn Marino size_t len, const void *key, 77f5b1c8a1SJohn Marino unsigned char ivec[16], cbc128_f cbc); 78f5b1c8a1SJohn Marino 79f5b1c8a1SJohn Marino size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, unsigned char *out, 80f5b1c8a1SJohn Marino size_t len, const void *key, 81f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 82f5b1c8a1SJohn Marino size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, 83f5b1c8a1SJohn Marino size_t len, const void *key, 84f5b1c8a1SJohn Marino unsigned char ivec[16], cbc128_f cbc); 85f5b1c8a1SJohn Marino size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, unsigned char *out, 86f5b1c8a1SJohn Marino size_t len, const void *key, 87f5b1c8a1SJohn Marino unsigned char ivec[16], block128_f block); 88f5b1c8a1SJohn Marino size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, 89f5b1c8a1SJohn Marino size_t len, const void *key, 90f5b1c8a1SJohn Marino unsigned char ivec[16], cbc128_f cbc); 91f5b1c8a1SJohn Marino 92f5b1c8a1SJohn Marino typedef struct gcm128_context GCM128_CONTEXT; 93f5b1c8a1SJohn Marino 94f5b1c8a1SJohn Marino GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); 95f5b1c8a1SJohn Marino void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx,void *key,block128_f block); 96f5b1c8a1SJohn Marino void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, 97f5b1c8a1SJohn Marino size_t len); 98f5b1c8a1SJohn Marino int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, 99f5b1c8a1SJohn Marino size_t len); 100f5b1c8a1SJohn Marino int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, 101f5b1c8a1SJohn Marino const unsigned char *in, unsigned char *out, 102f5b1c8a1SJohn Marino size_t len); 103f5b1c8a1SJohn Marino int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, 104f5b1c8a1SJohn Marino const unsigned char *in, unsigned char *out, 105f5b1c8a1SJohn Marino size_t len); 106f5b1c8a1SJohn Marino int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, 107f5b1c8a1SJohn Marino const unsigned char *in, unsigned char *out, 108f5b1c8a1SJohn Marino size_t len, ctr128_f stream); 109f5b1c8a1SJohn Marino int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, 110f5b1c8a1SJohn Marino const unsigned char *in, unsigned char *out, 111f5b1c8a1SJohn Marino size_t len, ctr128_f stream); 112f5b1c8a1SJohn Marino int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag, 113f5b1c8a1SJohn Marino size_t len); 114f5b1c8a1SJohn Marino void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 115f5b1c8a1SJohn Marino void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); 116f5b1c8a1SJohn Marino 117f5b1c8a1SJohn Marino typedef struct ccm128_context CCM128_CONTEXT; 118f5b1c8a1SJohn Marino 119f5b1c8a1SJohn Marino void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, 120f5b1c8a1SJohn Marino unsigned int M, unsigned int L, void *key,block128_f block); 121f5b1c8a1SJohn Marino int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, 122f5b1c8a1SJohn Marino const unsigned char *nonce, size_t nlen, size_t mlen); 123f5b1c8a1SJohn Marino void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, 124f5b1c8a1SJohn Marino const unsigned char *aad, size_t alen); 125f5b1c8a1SJohn Marino int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, 126f5b1c8a1SJohn Marino const unsigned char *inp, unsigned char *out, size_t len); 127f5b1c8a1SJohn Marino int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, 128f5b1c8a1SJohn Marino const unsigned char *inp, unsigned char *out, size_t len); 129f5b1c8a1SJohn Marino int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, 130f5b1c8a1SJohn Marino const unsigned char *inp, unsigned char *out, size_t len, 131f5b1c8a1SJohn Marino ccm128_f stream); 132f5b1c8a1SJohn Marino int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, 133f5b1c8a1SJohn Marino const unsigned char *inp, unsigned char *out, size_t len, 134f5b1c8a1SJohn Marino ccm128_f stream); 135f5b1c8a1SJohn Marino size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 136f5b1c8a1SJohn Marino 137f5b1c8a1SJohn Marino typedef struct xts128_context XTS128_CONTEXT; 138f5b1c8a1SJohn Marino 139f5b1c8a1SJohn Marino int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], 140f5b1c8a1SJohn Marino const unsigned char *inp, unsigned char *out, size_t len, int enc); 141*72c33676SMaxim Ag 142*72c33676SMaxim Ag #ifdef __cplusplus 143*72c33676SMaxim Ag } 144*72c33676SMaxim Ag #endif 145