crypto: af_alg - add user space interface for AEAD
authorStephan Mueller <smueller@chronox.de>
Wed, 3 Dec 2014 19:55:42 +0000 (20:55 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 5 Dec 2014 15:56:55 +0000 (23:56 +0800)
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>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/af_alg.c
include/crypto/if_alg.h
include/uapi/linux/if_alg.h

index 6a3ad801158531435848a40936a9bd74a7a522e6..68ff1137dd70059e893a08a1f8f57099bff337e4 100644 (file)
@@ -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;
                }
index d61c11170213f22dd95467959aed5596b1edc5a5..cd62bf4289e9573301b25c5559ac91b412883dc6 100644 (file)
@@ -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 {
index 0f9acce5b1ff196b5e7869f55d6716410d7d75da..f2acd2fde1f3abb93b1be11a54005ce10a57e54e 100644 (file)
@@ -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