1 /* $OpenBSD: chacha.h,v 1.9 2025/01/25 17:59:44 tb Exp $ */ 2 /* 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef HEADER_CHACHA_H 19 #define HEADER_CHACHA_H 20 21 #include <openssl/opensslconf.h> 22 23 #include <stddef.h> 24 #include <stdint.h> 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 typedef struct { 31 unsigned int input[16]; 32 unsigned char ks[64]; 33 unsigned char unused; 34 } ChaCha_ctx; 35 36 void ChaCha_set_key(ChaCha_ctx *ctx, const unsigned char *key, 37 unsigned int keybits); 38 void ChaCha_set_iv(ChaCha_ctx *ctx, const unsigned char *iv, 39 const unsigned char *counter); 40 void ChaCha(ChaCha_ctx *ctx, unsigned char *out, const unsigned char *in, 41 size_t len); 42 43 void CRYPTO_chacha_20(unsigned char *out, const unsigned char *in, size_t len, 44 const unsigned char key[32], const unsigned char iv[8], uint64_t counter); 45 void CRYPTO_xchacha_20(unsigned char *out, const unsigned char *in, size_t len, 46 const unsigned char key[32], const unsigned char iv[24]); 47 void CRYPTO_hchacha_20(unsigned char out[32], 48 const unsigned char key[32], const unsigned char iv[16]); 49 50 #ifdef __cplusplus 51 } 52 #endif 53 54 #endif /* HEADER_CHACHA_H */ 55