netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Crypto v5 00/12] Chelsio Inline TLS
@ 2018-02-15  6:54 Atul Gupta
  2018-02-15  6:54 ` [Crypto v5 01/12] tls: tls_device struct to register TLS drivers Atul Gupta
                   ` (11 more replies)
  0 siblings, 12 replies; 17+ messages in thread
From: Atul Gupta @ 2018-02-15  6:54 UTC (permalink / raw)
  To: davejwatson, davem, herbert; +Cc: sd, linux-crypto, netdev, ganeshgr

Series for Chelsio Inline TLS driver (chtls.ko)

Driver use the ULP infrastructure to register chtls as Inline TLS ULP.
Chtls use TCP Sockets to transmit and receive TLS record. TCP proto_ops
is extended to offload TLS record.

T6 adapter provides the following features:
        -TLS record offload, TLS header, encrypt, digest and transmit
        -TLS record receive and decrypt
        -TLS keys store
        -TCP/IP engine
        -TLS engine
        -GCM crypto engine [support CBC also]

TLS provides security at the transport layer. It uses TCP to provide
reliable end-to-end transport of application data. It relies on TCP
for any retransmission. TLS session comprises of three parts:
a. TCP/IP connection
b. TLS handshake
c. Record layer processing

TLS handshake state machine is executed in host (refer standard
implementation eg. OpenSSL).  Setsockopt [SOL_TCP, TCP_ULP] initialize
TCP proto-ops for Chelsio inline tls support. setsockopt(sock, SOL_TCP,
TCP_ULP, "tls", sizeof("tls"));

Tx and Rx Keys are decided during handshake and programmed onto the chip
after CCS is exchanged.
struct tls12_crypto_info_aes_gcm_128 crypto_info
setsockopt(sock, SOL_TLS, TLS_TX, &crypto_info, sizeof(crypto_info))
Finish is the first encrypted/decrypted message tx/rx inline.

On the Tx path TLS engine receive plain text from openssl, insert IV,
fetches the tx key, create cipher text records and generate MAC. TLS
header is added to cipher text and forward to TCP/IP engine for transport
layer processing and transmission on wire.
TX:
Application--openssl--chtls---TLS engine---encrypt/auth---TCP/IP
engine---wire.

On the Rx side, data received is PDU aligned at record
boundaries. TLS processes only the complete record. If rx key is programmed
on CCS receive, data is decrypted and plain text is posted to host.
RX:
Wire--cipher-text--TCP/IP engine [PDU align]---TLS engine---
decrypt/auth---plain-text--chtls--openssl--application

v5: set TLS_FULL_HW for registered inline tls drivers
   -set TLS_FULL_HW prot for offload connection else move
    to TLS_SW_TX
   -Case handled for interface with same IP [David Miller]
   -Removed Specific IP and INADDR_ANY handling [v4]

v4: removed chtls ULP type, retained tls ULP
   -registered chtls with net tls
   -defined struct tls_device to register the Inline drivers
   -ethtool interface tls-inline to enable Inline TLS for interface
   -prot update to support inline TLS

v3: fixed the kbuild test issues
   -made few funtions static
   -initialized few variables

v2: fixed the following based on the review comments of Stephan Mueller,
    Stefano Brivio and Hannes Frederic
    -Added more details in cover letter
    -Fixed indentation and formating issues
    -Using aes instead of aes-generic
    -memset key info after programing the key on chip
    -reordered the patch sequence

Atul Gupta (12):
  tls: tls_device struct to register TLS drivers
  ethtool: feature for Inline TLS in HW
  support for inline tls
  chtls: structure and macro definiton
  cxgb4: Inline TLS FW Interface
  cxgb4: LLD driver changes to enable TLS
  chcr: Key Macro
  chtls: Key program
  chtls: CPL handler definition
  chtls: Inline crypto request Tx/Rx
  chtls: Register the chtls Inline TLS with net tls
  Makefile Kconfig

 drivers/crypto/chelsio/Kconfig                     |   11 +
 drivers/crypto/chelsio/Makefile                    |    1 +
 drivers/crypto/chelsio/chcr_algo.h                 |   42 +
 drivers/crypto/chelsio/chcr_core.h                 |   55 +-
 drivers/crypto/chelsio/chtls/Makefile              |    4 +
 drivers/crypto/chelsio/chtls/chtls.h               |  487 +++++
 drivers/crypto/chelsio/chtls/chtls_cm.c            | 2046 ++++++++++++++++++++
 drivers/crypto/chelsio/chtls/chtls_cm.h            |  203 ++
 drivers/crypto/chelsio/chtls/chtls_hw.c            |  394 ++++
 drivers/crypto/chelsio/chtls/chtls_io.c            | 1867 ++++++++++++++++++
 drivers/crypto/chelsio/chtls/chtls_main.c          |  574 ++++++
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c |   18 +-
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c    |   32 +-
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h     |    7 +
 drivers/net/ethernet/chelsio/cxgb4/sge.c           |   98 +-
 drivers/net/ethernet/chelsio/cxgb4/t4_msg.h        |  121 +-
 drivers/net/ethernet/chelsio/cxgb4/t4_regs.h       |    2 +
 drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h      |  165 +-
 include/linux/netdev_features.h                    |    2 +
 include/net/tls.h                                  |   24 +
 include/uapi/linux/tls.h                           |    1 +
 net/core/ethtool.c                                 |    1 +
 net/ipv4/tcp_minisocks.c                           |    1 +
 net/tls/tls_main.c                                 |  124 +-
 24 files changed, 6254 insertions(+), 26 deletions(-)
 create mode 100644 drivers/crypto/chelsio/chtls/Makefile
 create mode 100644 drivers/crypto/chelsio/chtls/chtls.h
 create mode 100644 drivers/crypto/chelsio/chtls/chtls_cm.c
 create mode 100644 drivers/crypto/chelsio/chtls/chtls_cm.h
 create mode 100644 drivers/crypto/chelsio/chtls/chtls_hw.c
 create mode 100644 drivers/crypto/chelsio/chtls/chtls_io.c
 create mode 100644 drivers/crypto/chelsio/chtls/chtls_main.c

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2018-02-15 16:31 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-15  6:54 [Crypto v5 00/12] Chelsio Inline TLS Atul Gupta
2018-02-15  6:54 ` [Crypto v5 01/12] tls: tls_device struct to register TLS drivers Atul Gupta
2018-02-15  6:54 ` [Crypto v5 02/12] ethtool: feature for Inline TLS in HW Atul Gupta
2018-02-15  6:54 ` [Crypto v5 03/12] support for inline tls Atul Gupta
2018-02-15 15:51   ` Dave Watson
2018-02-15 16:10     ` Atul Gupta
2018-02-15 16:26       ` Dave Watson
2018-02-15 16:31         ` Atul Gupta
2018-02-15  6:54 ` [Crypto v5 04/12] chtls: structure and macro definiton Atul Gupta
2018-02-15  6:54 ` [Crypto v5 05/12] cxgb4: Inline TLS FW Interface Atul Gupta
2018-02-15  6:54 ` [Crypto v5 06/12] cxgb4: LLD driver changes to enable TLS Atul Gupta
2018-02-15  6:54 ` [Crypto v5 07/12] chcr: Key Macro Atul Gupta
2018-02-15  6:54 ` [Crypto v5 08/12] chtls: Key program Atul Gupta
2018-02-15  6:54 ` [Crypto v5 09/12] chtls: CPL handler definition Atul Gupta
2018-02-15  6:54 ` [Crypto v5 10/12] chtls: Inline crypto request Tx/Rx Atul Gupta
2018-02-15  6:54 ` [Crypto v5 11/12] chtls: Register the chtls Inline TLS with net tls Atul Gupta
2018-02-15  6:54 ` [Crypto v5 12/12] Makefile Kconfig Atul Gupta

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).