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