All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephan Mueller <smueller@chronox.de>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Daniel Borkmann <dborkman@redhat.com>,
	quentin.gouchet@gmail.com, LKML <linux-kernel@vger.kernel.org>,
	linux-crypto@vger.kernel.org, ABI/API <linux-api@vger.kernel.org>
Subject: [PATCH v2 01/10] crypto: AF_ALG: add user space interface for AEAD
Date: Sun, 16 Nov 2014 03:23:50 +0100	[thread overview]
Message-ID: <11608519.pS4L9VjM2n@tachyon.chronox.de> (raw)
In-Reply-To: <5365136.g8vbXlhRyC@tachyon.chronox.de>

AEAD requires the following data in addition to normal symmetric
ciphers:

	* Associated authentication data of arbitrary length

	* Authentication tag for decryption

	* Length of authentication tag for encryption

The authentication tag data is communicated as part of the actual
ciphertext as mandated by the kernel crypto API. Therefore we only need
to provide a user space interface for the associated authentication data
as well as for the authentication tag length.

This patch adds both as a setsockopt interface that is identical to the
AF_ALG interface for setting an IV and for selecting the cipher
operation type (encrypt or decrypt).

Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
 crypto/af_alg.c             | 17 +++++++++++++++++
 include/crypto/if_alg.h     |  2 ++
 include/uapi/linux/if_alg.h |  7 +++++++
 3 files changed, 26 insertions(+)

diff --git a/crypto/af_alg.c b/crypto/af_alg.c
index 6a3ad80..635140b 100644
--- a/crypto/af_alg.c
+++ b/crypto/af_alg.c
@@ -421,6 +421,23 @@ int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
 			con->op = *(u32 *)CMSG_DATA(cmsg);
 			break;
 
+
+		case ALG_SET_AEAD_AUTHSIZE:
+			if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
+				return -EINVAL;
+			con->aead_authsize = *(u32 *)CMSG_DATA(cmsg);
+			break;
+
+		case ALG_SET_AEAD_ASSOC:
+			if (cmsg->cmsg_len < CMSG_LEN(sizeof(*con->aead_assoc)))
+				return -EINVAL;
+			con->aead_assoc = (void *)CMSG_DATA(cmsg);
+			if (cmsg->cmsg_len <
+				CMSG_LEN(con->aead_assoc->aead_assoclen +
+					 sizeof(*con->aead_assoc)))
+				return -EINVAL;
+			break;
+
 		default:
 			return -EINVAL;
 		}
diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
index d61c111..c741483 100644
--- a/include/crypto/if_alg.h
+++ b/include/crypto/if_alg.h
@@ -41,7 +41,9 @@ struct af_alg_completion {
 
 struct af_alg_control {
 	struct af_alg_iv *iv;
+	struct af_alg_aead_assoc *aead_assoc;
 	int op;
+	unsigned int aead_authsize;
 };
 
 struct af_alg_type {
diff --git a/include/uapi/linux/if_alg.h b/include/uapi/linux/if_alg.h
index 0f9acce..64e7008 100644
--- a/include/uapi/linux/if_alg.h
+++ b/include/uapi/linux/if_alg.h
@@ -28,10 +28,17 @@ struct af_alg_iv {
 	__u8	iv[0];
 };
 
+struct af_alg_aead_assoc {
+	__u32	aead_assoclen;
+	__u8	aead_assoc[0];
+};
+
 /* Socket options */
 #define ALG_SET_KEY			1
 #define ALG_SET_IV			2
 #define ALG_SET_OP			3
+#define ALG_SET_AEAD_ASSOC		4
+#define ALG_SET_AEAD_AUTHSIZE		5
 
 /* Operations */
 #define ALG_OP_DECRYPT			0
-- 
2.1.0

  reply	other threads:[~2014-11-16  2:23 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-16  2:23 [PATCH v2 00/10] crypto: AF_ALG: add AEAD and RNG support Stephan Mueller
2014-11-16  2:23 ` Stephan Mueller [this message]
2014-11-18 14:06   ` [PATCH v2 01/10] crypto: AF_ALG: add user space interface for AEAD Herbert Xu
     [not found]     ` <20141118140631.GA12100-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-19  0:34       ` Stephan Mueller
2014-11-19  0:34         ` Stephan Mueller
2014-11-19  4:20     ` Stephan Mueller
     [not found]       ` <2398701.sGeMzIcHaz-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-19  4:27         ` Herbert Xu
2014-11-19  4:27           ` Herbert Xu
     [not found]           ` <20141119042704.GA19258-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-19  6:30             ` Stephan Mueller
2014-11-19  6:30               ` Stephan Mueller
     [not found]               ` <12318471.ucMNmAKX0e-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-19  6:45                 ` Herbert Xu
2014-11-19  6:45                   ` Herbert Xu
2014-11-16  2:24 ` [PATCH v2 02/10] crypto: AF_ALG: user space interface for cipher info Stephan Mueller
2014-11-18 14:08   ` Herbert Xu
2014-11-19  1:02     ` Stephan Mueller
2014-11-19  1:05       ` Herbert Xu
     [not found]     ` <20141118140822.GB12100-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-20  4:03       ` Stephan Mueller
2014-11-20  4:03         ` Stephan Mueller
2014-11-20  6:32         ` Steffen Klassert
2014-11-20  6:32           ` Steffen Klassert
     [not found]         ` <16101836.sTaxopCThb-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-20  4:07           ` Herbert Xu
2014-11-20  4:07             ` Herbert Xu
     [not found]             ` <20141120040748.GB28420-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-20  4:14               ` Stephan Mueller
2014-11-20  4:14                 ` Stephan Mueller
     [not found]                 ` <1886827.KUDIsNtfuk-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-20  4:18                   ` Herbert Xu
2014-11-20  4:18                     ` Herbert Xu
     [not found]                     ` <20141120041824.GA28612-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-20  4:23                       ` Stephan Mueller
2014-11-20  4:23                         ` Stephan Mueller
     [not found]                         ` <3538055.XH2t7HNEVj-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-20  4:46                           ` crypto: user - Allow get request with empty driver name Herbert Xu
2014-11-20  4:46                             ` Herbert Xu
2014-11-20  7:11                             ` Steffen Klassert
2014-11-20  7:11                               ` Steffen Klassert
2014-11-20  7:45                               ` Herbert Xu
     [not found]                                 ` <20141120074526.GB29544-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-20  8:04                                   ` Steffen Klassert
2014-11-20  8:04                                     ` Steffen Klassert
2014-11-20  8:04                                     ` Steffen Klassert
     [not found]                                     ` <20141120080406.GV6390-opNxpl+3fjRBDgjK7y7TUQ@public.gmane.org>
2014-11-20 13:07                                       ` Stephan Mueller
2014-11-20 13:07                                         ` Stephan Mueller
     [not found]                             ` <20141120044650.GA28691-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-20 13:02                               ` Stephan Mueller
2014-11-20 13:02                                 ` Stephan Mueller
2014-11-20 13:10                                 ` Stephan Mueller
     [not found]                                   ` <2283056.kKnMJs7Bfg-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-20 13:40                                     ` Herbert Xu
2014-11-20 13:40                                       ` Herbert Xu
2014-11-20 16:08                                       ` Stephan Mueller
     [not found]                                         ` <6655976.jRkjMUZ19x-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-21  2:31                                           ` Herbert Xu
2014-11-21  2:31                                             ` Herbert Xu
     [not found]                                             ` <20141121023131.GA3873-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2014-11-21  2:42                                               ` Stephan Mueller
2014-11-21  2:42                                                 ` Stephan Mueller
2014-11-21  4:40                                 ` Stephan Mueller
2014-11-20  7:05           ` [PATCH v2 02/10] crypto: AF_ALG: user space interface for cipher info Steffen Klassert
2014-11-20  7:05             ` Steffen Klassert
2014-11-20  7:05             ` Steffen Klassert
2014-11-16  2:25 ` [PATCH v2 03/10] crypto: AF_ALG: extend data structuers for AEAD Stephan Mueller
2014-11-16  2:25 ` [PATCH v2 04/10] crypto: AF_ALG: crypto API calls to inline functions Stephan Mueller
2014-11-16  2:26 ` [PATCH v2 05/10] crypto: AF_ALG: add AEAD support Stephan Mueller
2014-11-16  2:27 ` [PATCH v2 07/10] crypto: AF_ALG: add random number generator support Stephan Mueller
     [not found] ` <5365136.g8vbXlhRyC-PJstQz4BMNNP20K/wil9xYQuADTiUCJX@public.gmane.org>
2014-11-16  2:26   ` [PATCH v2 06/10] crypto: AF_ALG: make setkey optional Stephan Mueller
2014-11-16  2:26     ` Stephan Mueller
2014-11-18 14:10     ` Herbert Xu
2014-11-19  2:36       ` Stephan Mueller
2014-11-16  2:28   ` [PATCH v2 08/10] crypto: AF_ALG: enable RNG interface compilation Stephan Mueller
2014-11-16  2:28     ` Stephan Mueller
2014-11-16  2:28 ` [PATCH v2 09/10] crypto: AF_ALG: user space interface for hash info Stephan Mueller
2014-11-16  2:29 ` [PATCH v2 10/10] crypto: AF_ALG: document the user space interface Stephan Mueller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11608519.pS4L9VjM2n@tachyon.chronox.de \
    --to=smueller@chronox.de \
    --cc=dborkman@redhat.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=quentin.gouchet@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.