# HG changeset patch # User Sergey Kandaurov # Date 1583856912 -10800 # Node ID ec0c44aa28811511c16e1f5d11f07a434bf4fd7d # Parent a4ed2305ad2c598bcb86ea9941356baf49b30151 Chacha20 header protection support with BoringSSL. BoringSSL lacks EVP for Chacha20. Here we use CRYPTO_chacha_20() instead. diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h --- a/src/event/ngx_event_openssl.h +++ b/src/event/ngx_event_openssl.h @@ -25,6 +25,7 @@ #include #ifdef OPENSSL_IS_BORINGSSL #include +#include #else #include #endif diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -2053,6 +2053,17 @@ ngx_quic_tls_hp(ngx_connection_t *c, con EVP_CIPHER_CTX *ctx; u_char zero[5] = {0}; +#ifdef OPENSSL_IS_BORINGSSL + uint32_t counter; + + ngx_memcpy(&counter, in, sizeof(uint32_t)); + + if (cipher == (const EVP_CIPHER *) EVP_aead_chacha20_poly1305()) { + CRYPTO_chacha_20(out, zero, 5, s->hp.data, &in[4], counter); + return NGX_OK; + } +#endif + ctx = EVP_CIPHER_CTX_new(); if (ctx == NULL) { return NGX_ERROR; @@ -2129,7 +2140,9 @@ ngx_quic_ciphers(ngx_connection_t *c, ng #else ciphers->c = EVP_chacha20_poly1305(); #endif -#ifndef OPENSSL_IS_BORINGSSL +#ifdef OPENSSL_IS_BORINGSSL + ciphers->hp = (const EVP_CIPHER *) EVP_aead_chacha20_poly1305(); +#else ciphers->hp = EVP_chacha20(); #endif ciphers->d = EVP_sha256();