diff mbox

[v5,1/8] crypto: AF_ALG: add user space interface for AEAD

Message ID 2166020.BKWmrnVj2j@tachyon.chronox.de (mailing list archive)
State Not Applicable
Delegated to: Herbert Xu
Headers show

Commit Message

Stephan Mueller Dec. 7, 2014, 10:21 p.m. UTC
AEAD requires the caller to specify the following information separate
from the data stream. This information allows the AEAD interface handler
to identify the AAD, ciphertext/plaintext and the authentication tag:

        * Associated authentication data of arbitrary length and
          length

        * Length of authentication tag for encryption

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

Comments

Stephan Mueller Dec. 8, 2014, 6:50 a.m. UTC | #1
Am Sonntag, 7. Dezember 2014, 23:21:09 schrieb Stephan Mueller:

Hi Herbert,

FYI: you mentioned that you applied that patch already. However, I do not see 
it in the cryptodev-2.6 tree. Therefore I resent it. In case it was applied, 
please disregard this patch.

> AEAD requires the caller to specify the following information separate
> from the data stream. This information allows the AEAD interface handler
> to identify the AAD, ciphertext/plaintext and the authentication tag:
> 
>         * Associated authentication data of arbitrary length and
>           length
> 
>         * Length of authentication tag for encryption
> 
> Signed-off-by: Stephan Mueller <smueller@chronox.de>
> ---
>  crypto/af_alg.c             | 6 ++++++
>  include/crypto/if_alg.h     | 1 +
>  include/uapi/linux/if_alg.h | 2 ++
>  3 files changed, 9 insertions(+)
> 
> diff --git a/crypto/af_alg.c b/crypto/af_alg.c
> index 6a3ad80..68ff113 100644
> --- a/crypto/af_alg.c
> +++ b/crypto/af_alg.c
> @@ -421,6 +421,12 @@ int af_alg_cmsg_send(struct msghdr *msg, struct
> af_alg_control *con) con->op = *(u32 *)CMSG_DATA(cmsg);
>  			break;
> 
> +		case ALG_SET_AEAD_ASSOCLEN:
> +			if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
> +				return -EINVAL;
> +			con->aead_assoclen = *(u32 *)CMSG_DATA(cmsg);
> +			break;
> +
>  		default:
>  			return -EINVAL;
>  		}
> diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
> index d61c111..cd62bf4 100644
> --- a/include/crypto/if_alg.h
> +++ b/include/crypto/if_alg.h
> @@ -42,6 +42,7 @@ struct af_alg_completion {
>  struct af_alg_control {
>  	struct af_alg_iv *iv;
>  	int op;
> +	unsigned int aead_assoclen;
>  };
> 
>  struct af_alg_type {
> diff --git a/include/uapi/linux/if_alg.h b/include/uapi/linux/if_alg.h
> index 0f9acce..f2acd2f 100644
> --- a/include/uapi/linux/if_alg.h
> +++ b/include/uapi/linux/if_alg.h
> @@ -32,6 +32,8 @@ struct af_alg_iv {
>  #define ALG_SET_KEY			1
>  #define ALG_SET_IV			2
>  #define ALG_SET_OP			3
> +#define ALG_SET_AEAD_ASSOCLEN		4
> +#define ALG_SET_AEAD_AUTHSIZE		5
> 
>  /* Operations */
>  #define ALG_OP_DECRYPT			0
diff mbox

Patch

diff --git a/crypto/af_alg.c b/crypto/af_alg.c
index 6a3ad80..68ff113 100644
--- a/crypto/af_alg.c
+++ b/crypto/af_alg.c
@@ -421,6 +421,12 @@  int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
 			con->op = *(u32 *)CMSG_DATA(cmsg);
 			break;
 
+		case ALG_SET_AEAD_ASSOCLEN:
+			if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
+				return -EINVAL;
+			con->aead_assoclen = *(u32 *)CMSG_DATA(cmsg);
+			break;
+
 		default:
 			return -EINVAL;
 		}
diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
index d61c111..cd62bf4 100644
--- a/include/crypto/if_alg.h
+++ b/include/crypto/if_alg.h
@@ -42,6 +42,7 @@  struct af_alg_completion {
 struct af_alg_control {
 	struct af_alg_iv *iv;
 	int op;
+	unsigned int aead_assoclen;
 };
 
 struct af_alg_type {
diff --git a/include/uapi/linux/if_alg.h b/include/uapi/linux/if_alg.h
index 0f9acce..f2acd2f 100644
--- a/include/uapi/linux/if_alg.h
+++ b/include/uapi/linux/if_alg.h
@@ -32,6 +32,8 @@  struct af_alg_iv {
 #define ALG_SET_KEY			1
 #define ALG_SET_IV			2
 #define ALG_SET_OP			3
+#define ALG_SET_AEAD_ASSOCLEN		4
+#define ALG_SET_AEAD_AUTHSIZE		5
 
 /* Operations */
 #define ALG_OP_DECRYPT			0