diff options
author | Vadim Fedorenko <vadimjunk@gmail.com> | 2020-11-22 11:02:31 +0100 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2021-01-20 18:05:41 +0100 |
commit | 3aa7212e0a4fd1533c8a28b8587dd8b022f3a66f (patch) | |
tree | 6527a5d4aae27f171133a1e5562d274ac2ab2dc8 /ssl | |
parent | Ensure SRP BN_mod_exp follows the constant time path (diff) | |
download | openssl-3aa7212e0a4fd1533c8a28b8587dd8b022f3a66f.tar.xz openssl-3aa7212e0a4fd1533c8a28b8587dd8b022f3a66f.zip |
ktls: Initial support for ChaCha20-Poly1305
Linux kernel is going to support ChaCha20-Poly1305 in TLS offload.
Add support for this cipher.
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13475)
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/ktls.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/ssl/ktls.c b/ssl/ktls.c index dc5bb2bbc3..da42084928 100644 --- a/ssl/ktls.c +++ b/ssl/ktls.c @@ -126,7 +126,9 @@ int ktls_check_supported_cipher(const SSL *s, const EVP_CIPHER *c, return 0; } - /* check that cipher is AES_GCM_128, AES_GCM_256, AES_CCM_128 */ + /* check that cipher is AES_GCM_128, AES_GCM_256, AES_CCM_128 + * or Chacha20-Poly1305 + */ switch (EVP_CIPHER_nid(c)) { # ifdef OPENSSL_KTLS_AES_CCM_128 @@ -140,6 +142,9 @@ int ktls_check_supported_cipher(const SSL *s, const EVP_CIPHER *c, # ifdef OPENSSL_KTLS_AES_GCM_256 case NID_aes_256_gcm: # endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + case NID_chacha20_poly1305: +# endif return 1; default: return 0; @@ -213,6 +218,20 @@ int ktls_configure_crypto(const SSL *s, const EVP_CIPHER *c, EVP_CIPHER_CTX *dd, *rec_seq = crypto_info->ccm128.rec_seq; return 1; # endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + case NID_chacha20_poly1305: + crypto_info->chacha20poly1305.info.cipher_type = TLS_CIPHER_CHACHA20_POLY1305; + crypto_info->chacha20poly1305.info.version = s->version; + crypto_info->tls_crypto_info_len = sizeof(crypto_info->chacha20poly1305); + memcpy(crypto_info->chacha20poly1305.iv, iiv, + TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE); + memcpy(crypto_info->chacha20poly1305.key, key, EVP_CIPHER_key_length(c)); + memcpy(crypto_info->chacha20poly1305.rec_seq, rl_sequence, + TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE); + if (rec_seq != NULL) + *rec_seq = crypto_info->chacha20poly1305.rec_seq; + return 1; +# endif default: return 0; } |