net/tls: add CHACHA20-POLY1305 configuration
authorVadim Fedorenko <vfedorenko@novek.ru>
Tue, 24 Nov 2020 15:24:49 +0000 (18:24 +0300)
committerJakub Kicinski <kuba@kernel.org>
Fri, 27 Nov 2020 22:32:37 +0000 (14:32 -0800)
Add ChaCha-Poly specific configuration code.

Signed-off-by: Vadim Fedorenko <vfedorenko@novek.ru>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/tls/tls_main.c
net/tls/tls_sw.c

index 8d93cea..47b7c53 100644 (file)
@@ -521,6 +521,9 @@ static int do_tls_setsockopt_conf(struct sock *sk, sockptr_t optval,
        case TLS_CIPHER_AES_CCM_128:
                optsize = sizeof(struct tls12_crypto_info_aes_ccm_128);
                break;
+       case TLS_CIPHER_CHACHA20_POLY1305:
+               optsize = sizeof(struct tls12_crypto_info_chacha20_poly1305);
+               break;
        default:
                rc = -EINVAL;
                goto err_crypto_info;
index b4eefdb..53106f0 100644 (file)
@@ -2290,6 +2290,7 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx)
        struct tls12_crypto_info_aes_gcm_128 *gcm_128_info;
        struct tls12_crypto_info_aes_gcm_256 *gcm_256_info;
        struct tls12_crypto_info_aes_ccm_128 *ccm_128_info;
+       struct tls12_crypto_info_chacha20_poly1305 *chacha20_poly1305_info;
        struct tls_sw_context_tx *sw_ctx_tx = NULL;
        struct tls_sw_context_rx *sw_ctx_rx = NULL;
        struct cipher_context *cctx;
@@ -2402,6 +2403,21 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx)
                cipher_name = "ccm(aes)";
                break;
        }
+       case TLS_CIPHER_CHACHA20_POLY1305: {
+               chacha20_poly1305_info = (void *)crypto_info;
+               nonce_size = 0;
+               tag_size = TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE;
+               iv_size = TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE;
+               iv = chacha20_poly1305_info->iv;
+               rec_seq_size = TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE;
+               rec_seq = chacha20_poly1305_info->rec_seq;
+               keysize = TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE;
+               key = chacha20_poly1305_info->key;
+               salt = chacha20_poly1305_info->salt;
+               salt_size = TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE;
+               cipher_name = "rfc7539(chacha20,poly1305)";
+               break;
+       }
        default:
                rc = -EINVAL;
                goto free_priv;