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 09/10] crypto: AF_ALG: user space interface for hash info
Date: Sun, 16 Nov 2014 03:28:52 +0100 [thread overview]
Message-ID: <1907032.lnybFlp3cC@tachyon.chronox.de> (raw)
In-Reply-To: <5365136.g8vbXlhRyC@tachyon.chronox.de>
The AF_ALG interface allows normal cipher (hash, encrypt, decrypt).
However, it does not allow user space to obtain the following generic
information about the currently active hash:
* digestsize
The patch adds a getsockopt interface for the hash ciphers to
answer such information requests from user space.
The kernel crypto API function calls are used to obtain the real data.
As all data are simple integer values, the getsockopt handler function
uses put_user() to return the integer value to user space in the
*optval parameter of getsockopt.
A fully working example using the digestsize interface is provided at
http://www.chronox.de/libkcapi.html
Signed-off-by: Stephan Mueller <smueller@chronox.de>
---
crypto/algif_hash.c | 35 ++++++++++++++++++++++++++++++++++-
include/uapi/linux/if_alg.h | 1 +
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
index f75db4c..68ae34c 100644
--- a/crypto/algif_hash.c
+++ b/crypto/algif_hash.c
@@ -216,6 +216,39 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags)
return err;
}
+static int hash_getsockopt(struct socket *sock, int level, int optname,
+ char __user *optval, int __user *optlen)
+{
+ struct sock *sk = sock->sk;
+ struct alg_sock *ask = alg_sk(sk);
+ struct hash_ctx *ctx = ask->private;
+ const struct af_alg_type *type;
+ int len = 0;
+ int err = -EOPNOTSUPP;
+
+ lock_sock(sk);
+ type = ask->type;
+
+ if (level != SOL_ALG || !type)
+ goto unlock;
+
+ switch (optname) {
+ case ALG_GET_DIGESTSIZE:
+ len = crypto_ahash_digestsize(crypto_ahash_reqtfm(&ctx->req));
+ err = 0;
+ break;
+ default:
+ break;
+ }
+
+unlock:
+ release_sock(sk);
+ if (err >= 0)
+ err = put_user(len, optlen);
+
+ return err;
+}
+
static struct proto_ops algif_hash_ops = {
.family = PF_ALG,
@@ -225,7 +258,6 @@ static struct proto_ops algif_hash_ops = {
.ioctl = sock_no_ioctl,
.listen = sock_no_listen,
.shutdown = sock_no_shutdown,
- .getsockopt = sock_no_getsockopt,
.mmap = sock_no_mmap,
.bind = sock_no_bind,
.setsockopt = sock_no_setsockopt,
@@ -236,6 +268,7 @@ static struct proto_ops algif_hash_ops = {
.sendpage = hash_sendpage,
.recvmsg = hash_recvmsg,
.accept = hash_accept,
+ .getsockopt = hash_getsockopt,
};
static void *hash_bind(const char *name, u32 type, u32 mask)
diff --git a/include/uapi/linux/if_alg.h b/include/uapi/linux/if_alg.h
index b8fb714..3759d3c 100644
--- a/include/uapi/linux/if_alg.h
+++ b/include/uapi/linux/if_alg.h
@@ -44,6 +44,7 @@ struct af_alg_aead_assoc {
#define ALG_GET_BLOCKSIZE 1
#define ALG_GET_IVSIZE 2
#define ALG_GET_AEAD_AUTHSIZE 3
+#define ALG_GET_DIGESTSIZE 4
/* Operations */
#define ALG_OP_DECRYPT 0
--
2.1.0
next prev parent reply other threads:[~2014-11-16 2:48 UTC|newest]
Thread overview: 41+ 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 ` [PATCH v2 01/10] crypto: AF_ALG: add user space interface for AEAD Stephan Mueller
2014-11-18 14:06 ` Herbert Xu
2014-11-19 0:34 ` Stephan Mueller
2014-11-19 4:20 ` Stephan Mueller
2014-11-19 4:27 ` Herbert Xu
2014-11-19 6:30 ` Stephan Mueller
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
2014-11-20 4:03 ` Stephan Mueller
2014-11-20 4:07 ` Herbert Xu
2014-11-20 4:14 ` Stephan Mueller
2014-11-20 4:18 ` Herbert Xu
2014-11-20 4:23 ` Stephan Mueller
2014-11-20 4:46 ` crypto: user - Allow get request with empty driver name Herbert Xu
2014-11-20 7:11 ` Steffen Klassert
2014-11-20 7:45 ` Herbert Xu
2014-11-20 8:04 ` Steffen Klassert
2014-11-20 13:07 ` Stephan Mueller
2014-11-20 13:02 ` Stephan Mueller
2014-11-20 13:10 ` Stephan Mueller
2014-11-20 13:40 ` Herbert Xu
2014-11-20 16:08 ` Stephan Mueller
2014-11-21 2:31 ` Herbert Xu
2014-11-21 2:42 ` Stephan Mueller
2014-11-21 4:40 ` Stephan Mueller
2014-11-20 6:32 ` [PATCH v2 02/10] crypto: AF_ALG: user space interface for cipher info 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:26 ` [PATCH v2 06/10] crypto: AF_ALG: make setkey optional Stephan Mueller
2014-11-18 14:10 ` Herbert Xu
2014-11-19 2:36 ` Stephan Mueller
2014-11-16 2:27 ` [PATCH v2 07/10] crypto: AF_ALG: add random number generator support 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 [this message]
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=1907032.lnybFlp3cC@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome