1*0451f6ceSbeck /* $OpenBSD: modes.h,v 1.6 2023/07/08 14:55:36 beck Exp $ */ 2f1535dc8Sdjm /* ==================================================================== 3f1535dc8Sdjm * Copyright (c) 2008 The OpenSSL Project. All rights reserved. 4f1535dc8Sdjm * 5f1535dc8Sdjm * Rights for redistribution and usage in source and binary 6f1535dc8Sdjm * forms are granted according to the OpenSSL license. 7f1535dc8Sdjm */ 8f1535dc8Sdjm 9f1535dc8Sdjm #include <stddef.h> 10f1535dc8Sdjm 11981266b4Sbcook #ifdef __cplusplus 12981266b4Sbcook extern "C" { 13981266b4Sbcook #endif 14981266b4Sbcook 15f1535dc8Sdjm typedef void (*block128_f)(const unsigned char in[16], 16f1535dc8Sdjm unsigned char out[16], 17f1535dc8Sdjm const void *key); 18f1535dc8Sdjm 19f1535dc8Sdjm typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out, 20f1535dc8Sdjm size_t len, const void *key, 21f1535dc8Sdjm unsigned char ivec[16], int enc); 22f1535dc8Sdjm 23ec07fdf1Sdjm typedef void (*ctr128_f)(const unsigned char *in, unsigned char *out, 24ec07fdf1Sdjm size_t blocks, const void *key, 25ec07fdf1Sdjm const unsigned char ivec[16]); 26ec07fdf1Sdjm 27ec07fdf1Sdjm typedef void (*ccm128_f)(const unsigned char *in, unsigned char *out, 28ec07fdf1Sdjm size_t blocks, const void *key, 29ec07fdf1Sdjm const unsigned char ivec[16], unsigned char cmac[16]); 30ec07fdf1Sdjm 31f1535dc8Sdjm void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, 32f1535dc8Sdjm size_t len, const void *key, 33f1535dc8Sdjm unsigned char ivec[16], block128_f block); 34f1535dc8Sdjm void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, 35f1535dc8Sdjm size_t len, const void *key, 36f1535dc8Sdjm unsigned char ivec[16], block128_f block); 37f1535dc8Sdjm 38f1535dc8Sdjm void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, 39f1535dc8Sdjm size_t len, const void *key, 40f1535dc8Sdjm unsigned char ivec[16], unsigned char ecount_buf[16], 41f1535dc8Sdjm unsigned int *num, block128_f block); 42f1535dc8Sdjm 43ec07fdf1Sdjm void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, 44ec07fdf1Sdjm size_t len, const void *key, 45ec07fdf1Sdjm unsigned char ivec[16], unsigned char ecount_buf[16], 46ec07fdf1Sdjm unsigned int *num, ctr128_f ctr); 47ec07fdf1Sdjm 48f1535dc8Sdjm void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, 49f1535dc8Sdjm size_t len, const void *key, 50f1535dc8Sdjm unsigned char ivec[16], int *num, 51f1535dc8Sdjm block128_f block); 52f1535dc8Sdjm 53f1535dc8Sdjm void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, 54f1535dc8Sdjm size_t len, const void *key, 55f1535dc8Sdjm unsigned char ivec[16], int *num, 56f1535dc8Sdjm int enc, block128_f block); 57f1535dc8Sdjm void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, 58f1535dc8Sdjm size_t length, const void *key, 59f1535dc8Sdjm unsigned char ivec[16], int *num, 60f1535dc8Sdjm int enc, block128_f block); 61f1535dc8Sdjm void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, 62f1535dc8Sdjm size_t bits, const void *key, 63f1535dc8Sdjm unsigned char ivec[16], int *num, 64f1535dc8Sdjm int enc, block128_f block); 65f1535dc8Sdjm 66ec07fdf1Sdjm typedef struct gcm128_context GCM128_CONTEXT; 67ec07fdf1Sdjm 68ec07fdf1Sdjm GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); 69ec07fdf1Sdjm void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); 70ec07fdf1Sdjm void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, 71ec07fdf1Sdjm size_t len); 72ec07fdf1Sdjm int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, 73ec07fdf1Sdjm size_t len); 74ec07fdf1Sdjm int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, 75ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 76ec07fdf1Sdjm size_t len); 77ec07fdf1Sdjm int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, 78ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 79ec07fdf1Sdjm size_t len); 80ec07fdf1Sdjm int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, 81ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 82ec07fdf1Sdjm size_t len, ctr128_f stream); 83ec07fdf1Sdjm int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, 84ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 85ec07fdf1Sdjm size_t len, ctr128_f stream); 86ec07fdf1Sdjm int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, 87ec07fdf1Sdjm size_t len); 88ec07fdf1Sdjm void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 89ec07fdf1Sdjm void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); 90ec07fdf1Sdjm 91ec07fdf1Sdjm typedef struct ccm128_context CCM128_CONTEXT; 92ec07fdf1Sdjm 93ec07fdf1Sdjm void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, 94ec07fdf1Sdjm unsigned int M, unsigned int L, void *key, block128_f block); 95ec07fdf1Sdjm int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, 96ec07fdf1Sdjm const unsigned char *nonce, size_t nlen, size_t mlen); 97ec07fdf1Sdjm void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, 98ec07fdf1Sdjm const unsigned char *aad, size_t alen); 99ec07fdf1Sdjm int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, 100ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len); 101ec07fdf1Sdjm int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, 102ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len); 103ec07fdf1Sdjm int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, 104ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, 105ec07fdf1Sdjm ccm128_f stream); 106ec07fdf1Sdjm int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, 107ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, 108ec07fdf1Sdjm ccm128_f stream); 109ec07fdf1Sdjm size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 110ec07fdf1Sdjm 111ec07fdf1Sdjm typedef struct xts128_context XTS128_CONTEXT; 112ec07fdf1Sdjm 113ec07fdf1Sdjm int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], 114ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, int enc); 115981266b4Sbcook 116981266b4Sbcook #ifdef __cplusplus 117981266b4Sbcook } 118981266b4Sbcook #endif 119