1 /* 2 * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #include "include/crypto/chacha.h" 11 #include "prov/ciphercommon.h" 12 13 typedef struct { 14 PROV_CIPHER_CTX base; /* must be first */ 15 union { 16 OSSL_UNION_ALIGN; 17 unsigned int d[CHACHA_KEY_SIZE / 4]; 18 } key; 19 unsigned int counter[CHACHA_CTR_SIZE / 4]; 20 unsigned char buf[CHACHA_BLK_SIZE]; 21 unsigned int partial_len; 22 } PROV_CHACHA20_CTX; 23 24 typedef struct prov_cipher_hw_chacha20_st { 25 PROV_CIPHER_HW base; /* must be first */ 26 int (*initiv)(PROV_CIPHER_CTX *ctx); 27 28 } PROV_CIPHER_HW_CHACHA20; 29 30 const PROV_CIPHER_HW *ossl_prov_cipher_hw_chacha20(size_t keybits); 31 32 OSSL_FUNC_cipher_encrypt_init_fn ossl_chacha20_einit; 33 OSSL_FUNC_cipher_decrypt_init_fn ossl_chacha20_dinit; 34 void ossl_chacha20_initctx(PROV_CHACHA20_CTX *ctx); 35