1*981266b4Sbcook /* $OpenBSD: modes.h,v 1.3 2018/07/24 10:47:19 bcook 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 11*981266b4Sbcook #ifdef __cplusplus 12*981266b4Sbcook extern "C" { 13*981266b4Sbcook #endif 14*981266b4Sbcook 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 66f1535dc8Sdjm size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, unsigned char *out, 67f1535dc8Sdjm size_t len, const void *key, 68f1535dc8Sdjm unsigned char ivec[16], block128_f block); 69f1535dc8Sdjm size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, 70f1535dc8Sdjm size_t len, const void *key, 71f1535dc8Sdjm unsigned char ivec[16], cbc128_f cbc); 72f1535dc8Sdjm size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out, 73f1535dc8Sdjm size_t len, const void *key, 74f1535dc8Sdjm unsigned char ivec[16], block128_f block); 75f1535dc8Sdjm size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, 76f1535dc8Sdjm size_t len, const void *key, 77f1535dc8Sdjm unsigned char ivec[16], cbc128_f cbc); 78ec07fdf1Sdjm 79ec07fdf1Sdjm size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, unsigned char *out, 80ec07fdf1Sdjm size_t len, const void *key, 81ec07fdf1Sdjm unsigned char ivec[16], block128_f block); 82ec07fdf1Sdjm size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, 83ec07fdf1Sdjm size_t len, const void *key, 84ec07fdf1Sdjm unsigned char ivec[16], cbc128_f cbc); 85ec07fdf1Sdjm size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, unsigned char *out, 86ec07fdf1Sdjm size_t len, const void *key, 87ec07fdf1Sdjm unsigned char ivec[16], block128_f block); 88ec07fdf1Sdjm size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, 89ec07fdf1Sdjm size_t len, const void *key, 90ec07fdf1Sdjm unsigned char ivec[16], cbc128_f cbc); 91ec07fdf1Sdjm 92ec07fdf1Sdjm typedef struct gcm128_context GCM128_CONTEXT; 93ec07fdf1Sdjm 94ec07fdf1Sdjm GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); 95ec07fdf1Sdjm void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx,void *key,block128_f block); 96ec07fdf1Sdjm void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, 97ec07fdf1Sdjm size_t len); 98ec07fdf1Sdjm int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, 99ec07fdf1Sdjm size_t len); 100ec07fdf1Sdjm int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, 101ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 102ec07fdf1Sdjm size_t len); 103ec07fdf1Sdjm int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, 104ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 105ec07fdf1Sdjm size_t len); 106ec07fdf1Sdjm int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, 107ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 108ec07fdf1Sdjm size_t len, ctr128_f stream); 109ec07fdf1Sdjm int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, 110ec07fdf1Sdjm const unsigned char *in, unsigned char *out, 111ec07fdf1Sdjm size_t len, ctr128_f stream); 112ec07fdf1Sdjm int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag, 113ec07fdf1Sdjm size_t len); 114ec07fdf1Sdjm void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 115ec07fdf1Sdjm void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); 116ec07fdf1Sdjm 117ec07fdf1Sdjm typedef struct ccm128_context CCM128_CONTEXT; 118ec07fdf1Sdjm 119ec07fdf1Sdjm void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, 120ec07fdf1Sdjm unsigned int M, unsigned int L, void *key,block128_f block); 121ec07fdf1Sdjm int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, 122ec07fdf1Sdjm const unsigned char *nonce, size_t nlen, size_t mlen); 123ec07fdf1Sdjm void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, 124ec07fdf1Sdjm const unsigned char *aad, size_t alen); 125ec07fdf1Sdjm int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, 126ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len); 127ec07fdf1Sdjm int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, 128ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len); 129ec07fdf1Sdjm int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, 130ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, 131ec07fdf1Sdjm ccm128_f stream); 132ec07fdf1Sdjm int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, 133ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, 134ec07fdf1Sdjm ccm128_f stream); 135ec07fdf1Sdjm size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); 136ec07fdf1Sdjm 137ec07fdf1Sdjm typedef struct xts128_context XTS128_CONTEXT; 138ec07fdf1Sdjm 139ec07fdf1Sdjm int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], 140ec07fdf1Sdjm const unsigned char *inp, unsigned char *out, size_t len, int enc); 141*981266b4Sbcook 142*981266b4Sbcook #ifdef __cplusplus 143*981266b4Sbcook } 144*981266b4Sbcook #endif 145