linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Corentin Labbe <clabbe@baylibre.com>
To: davem@davemloft.net, herbert@gondor.apana.org.au,
	nhorman@tuxdriver.com, smueller@chronox.de
Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
	Corentin Labbe <clabbe@baylibre.com>
Subject: [PATCH 0/2] crypto: Implement generic crypto statistics
Date: Thu, 11 Jan 2018 19:56:55 +0000	[thread overview]
Message-ID: <1515700617-3513-1-git-send-email-clabbe@baylibre.com> (raw)

Hello

This patch is a try to implement a generic crypto driver statistics.
The goal is to have an "ifconfig" for crypto device.

Some driver tried to implement this via a debugfs interface.
This serie do it directly in the crypto API and give access to stats
via the crypto_user(netlink) API.
Then an userspace tool will collect information via netlink.
Note that this userspace tool is heavily copied from libkcapi and if
Stephan Mueller agree, I will made a PR for adding getstat to it.

Example of output:
gcc getstat.c -o getstat && ./getstat 
authenc(hmac(sha512-generic),cbc-des3_ede-asm)	AEAD
	Encrypt: 6 bytes: 768
	Decrypt: 0 bytes: 0
authenc(hmac(sha512-generic),cbc(des-generic))	AEAD
	Encrypt: 8 bytes: 1024
	Decrypt: 0 bytes: 0
authenc(hmac(sha384-generic),cbc-des3_ede-asm)	AEAD
	Encrypt: 6 bytes: 768
	Decrypt: 0 bytes: 0
authenc(hmac(sha384-generic),cbc(des-generic))	AEAD
	Encrypt: 8 bytes: 1024
	Decrypt: 0 bytes: 0
authenc(hmac(sha256-generic),cbc-des3_ede-asm)	AEAD
	Encrypt: 6 bytes: 768
	Decrypt: 0 bytes: 0
authenc(hmac(sha256-generic),cbc(des-generic))	AEAD
	Encrypt: 8 bytes: 1024
	Decrypt: 0 bytes: 0
authenc(hmac(sha224-generic),cbc-des3_ede-asm)	AEAD
	Encrypt: 6 bytes: 768
	Decrypt: 0 bytes: 0
authenc(hmac(sha224-generic),cbc(des-generic))	AEAD
	Encrypt: 8 bytes: 1024
	Decrypt: 0 bytes: 0
authenc(hmac(sha1-generic),cbc-des3_ede-asm)	AEAD
	Encrypt: 6 bytes: 768
	Decrypt: 0 bytes: 0
authenc(hmac(sha1-generic),cbc(des-generic))	AEAD
	Encrypt: 8 bytes: 1024
	Decrypt: 0 bytes: 0
authenc(hmac(sha1-generic),ecb-cipher_null)	AEAD
	Encrypt: 12 bytes: 366
	Decrypt: 12 bytes: 606
authenc(hmac(md5-generic),ecb-cipher_null)	AEAD
	Encrypt: 12 bytes: 366
	Decrypt: 12 bytes: 558
authenc(hmac(sha1-generic),virtio_crypto_aes_cbc)	AEAD
	Encrypt: 42 bytes: 2208
	Decrypt: 0 bytes: 0
cmac(des3_ede-asm)
	Hash: 32 bytes: 480
cmac(aes-asm)
	Hash: 48 bytes: 1472
rfc4543(gcm_base(ctr(aes-asm),ghash-generic))	AEAD
	Encrypt: 6 bytes: 312
	Decrypt: 12 bytes: 816
rfc4106(gcm_base(ctr(aes-asm),ghash-generic))	AEAD
	Encrypt: 138 bytes: 6864
	Decrypt: 138 bytes: 9072
crc32-generic
	Hash: 56 bytes: 10850
vmac(aes-asm)
	Hash: 88 bytes: 8328
xcbc(aes-asm)
	Hash: 64 bytes: 936
hmac(sha224-generic)
	Hash: 46 bytes: 3868
hmac(sha512-generic)
	Hash: 46 bytes: 3868
hmac(sha384-generic)
	Hash: 46 bytes: 3868
hmac(sha1-generic)
	Hash: 136 bytes: 7884
hmac(md5-generic)
	Hash: 80 bytes: 2940
crct10dif-generic
	Hash: 40 bytes: 4492
rfc4309(ccm_base(ctr(aes-asm),cbcmac(aes-asm)))	AEAD
	Encrypt: 138 bytes: 6864
	Decrypt: 138 bytes: 9072
ccm_base(ctr(aes-asm),cbcmac(aes-asm))	AEAD
	Encrypt: 222 bytes: 8946
	Decrypt: 240 bytes: 12246
cbcmac(aes-asm)
	Hash: 478 bytes: 21034
gcm_base(ctr(aes-asm),ghash-generic)	AEAD
	Encrypt: 196 bytes: 8424
	Decrypt: 196 bytes: 12304
rfc3686(ctr(aes-asm))	Cipher
	Encrypt: 40 bytes: 17264
	Decrypt: 36 bytes: 864
ctr(aes-asm)	Cipher
	Encrypt: 924 bytes: 59560
	Decrypt: 474 bytes: 36192
xts(ecb(aes-asm))	Cipher
	Encrypt: 44 bytes: 11008
	Decrypt: 44 bytes: 11008
lrw(ecb(aes-asm))	Cipher
	Encrypt: 68 bytes: 7040
	Decrypt: 68 bytes: 7040
ecb(aes-asm)	Cipher
	Encrypt: 140 bytes: 23296
	Decrypt: 140 bytes: 23296
ctr(des-generic)	Cipher
	Encrypt: 24 bytes: 5940
	Decrypt: 24 bytes: 5940
cbc(des-generic)	Cipher
	Encrypt: 88 bytes: 8576
	Decrypt: 40 bytes: 3200
ecb(des-generic)	Cipher
	Encrypt: 64 bytes: 3744
	Decrypt: 36 bytes: 3232
pkcs1pad(rsa-generic,sha1)	Akcipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
	Sign: 0
	Verify: 13
virtio_crypto_aes_cbc	Cipher
	Encrypt: 82 bytes: 8320
	Decrypt: 38 bytes: 6080
ecdh-generic	KPP
	Setsecret: 4
	Generate public key: 3
	Compute_shared_secret: 4
ghash-generic
	Hash: 440 bytes: 10728
jitterentropy_rng	RNG
	Seed: 0
	Generate: 0 bytes: 0
drbg_nopr_hmac_sha256	RNG
	Seed: 5
	Generate: 9 bytes: 1056
drbg_nopr_hmac_sha512	RNG
	Seed: 0
	Generate: 0 bytes: 0
drbg_nopr_hmac_sha384	RNG
	Seed: 0
	Generate: 0 bytes: 0
drbg_nopr_hmac_sha1	RNG
	Seed: 0
	Generate: 0 bytes: 0
hmac(sha256-generic)
	Hash: 94 bytes: 5592
drbg_pr_hmac_sha256	RNG
	Seed: 4
	Generate: 8 bytes: 1024
drbg_pr_hmac_sha512	RNG
	Seed: 0
	Generate: 0 bytes: 0
drbg_pr_hmac_sha384	RNG
	Seed: 0
	Generate: 0 bytes: 0
drbg_pr_hmac_sha1	RNG
	Seed: 0
	Generate: 0 bytes: 0
lzo-scomp	Compress
	Compress: 2 bytes: 229
	Decompress: 4 bytes: 367
lzo-generic	Compress
	Compress: 0 bytes: 0
	Decompress: 0 bytes: 0
crc32c-generic
	Hash: 176 bytes: 31652
zlib-deflate-scomp	Compress
	Compress: 2 bytes: 261
	Decompress: 4 bytes: 345
deflate-scomp	Compress
	Compress: 2 bytes: 261
	Decompress: 4 bytes: 320
deflate-generic	Compress
	Compress: 0 bytes: 0
	Decompress: 0 bytes: 0
poly1305-generic
	Hash: 66 bytes: 9294
chacha20-generic	Cipher
	Encrypt: 16 bytes: 8853
	Decrypt: 16 bytes: 8853
ecb(arc4)-generic	Cipher
	Encrypt: 42 bytes: 540
	Decrypt: 42 bytes: 540
arc4-generic	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
aes-generic	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
des3_ede-generic	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
des-generic	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
sha384-generic
	Hash: 48 bytes: 10072
sha512-generic
	Hash: 48 bytes: 10072
sha224-generic
	Hash: 40 bytes: 9056
sha256-generic
	Hash: 40 bytes: 9056
sha1-generic
	Hash: 48 bytes: 9728
md5-generic
	Hash: 56 bytes: 1436
md4-generic
	Hash: 56 bytes: 1436
digest_null-generic
	Hash: 0 bytes: 0
compress_null-generic	Compress
	Compress: 0 bytes: 0
	Decompress: 0 bytes: 0
ecb-cipher_null	Cipher
	Encrypt: 130 bytes: 2828
	Decrypt: 24 bytes: 732
cipher_null-generic	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
rsa-generic	Akcipher
	Encrypt: 7 bytes: 232
	Decrypt: 6 bytes: 1152
	Sign: 0
	Verify: 13
dh-generic	KPP
	Setsecret: 2
	Generate public key: 2
	Compute_shared_secret: 2
ctr-des3_ede-asm	Cipher
	Encrypt: 20 bytes: 9950
	Decrypt: 20 bytes: 9950
cbc-des3_ede-asm	Cipher
	Encrypt: 46 bytes: 9568
	Decrypt: 16 bytes: 5728
ecb-des3_ede-asm	Cipher
	Encrypt: 28 bytes: 5104
	Decrypt: 28 bytes: 5104
des3_ede-asm	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0
aes-asm	cipher
	Encrypt: 0 bytes: 0
	Decrypt: 0 bytes: 0

Futur possible additions:
- Add a "number of needed fallback" statistics.
- maximum request size

Regards

Changes since RFC:
- Use cryptouser(netlink) instead of /sys
- Use atomic_t instead of unsigned long
- moved stat code into dedicated inline function
- spelling fixes

Corentin Labbe (2):
  crypto: Implement a generic crypto statistics
  crypto: tools: Add cryptostat userspace

 crypto/Kconfig                  |  11 ++
 crypto/ablkcipher.c             |   9 ++
 crypto/acompress.c              |   9 ++
 crypto/aead.c                   |  10 ++
 crypto/ahash.c                  |   8 ++
 crypto/akcipher.c               |  13 ++
 crypto/algapi.c                 |   6 +
 crypto/blkcipher.c              |   9 ++
 crypto/crypto_user.c            |  28 ++++
 crypto/kpp.c                    |   7 +
 crypto/rng.c                    |   8 ++
 crypto/scompress.c              |   9 ++
 crypto/shash.c                  |   5 +
 crypto/skcipher.c               |   9 ++
 include/crypto/acompress.h      |  22 ++++
 include/crypto/aead.h           |  10 ++
 include/crypto/akcipher.h       |  42 ++++++
 include/crypto/hash.h           |  10 ++
 include/crypto/kpp.h            |  28 ++++
 include/crypto/rng.h            |  17 +++
 include/crypto/skcipher.h       |  22 ++++
 include/linux/crypto.h          |  56 ++++++++
 include/uapi/linux/cryptouser.h |  34 +++++
 tools/crypto/getstat.c          | 279 ++++++++++++++++++++++++++++++++++++++++
 24 files changed, 661 insertions(+)
 create mode 100644 tools/crypto/getstat.c

-- 
2.13.6

             reply	other threads:[~2018-01-11 20:01 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-11 19:56 Corentin Labbe [this message]
2018-01-11 19:56 ` [PATCH 1/2] crypto: Implement a generic crypto statistics Corentin Labbe
2018-01-12  6:49   ` Stephan Mueller
2018-01-12  9:07     ` LABBE Corentin
2018-01-12  9:11       ` Stephan Mueller
2018-01-18  8:58         ` LABBE Corentin
2018-01-26 15:43           ` Herbert Xu
2018-01-31  8:33             ` Steffen Klassert
2018-01-11 19:56 ` [PATCH 2/2] crypto: tools: Add cryptostat userspace Corentin Labbe

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=1515700617-3513-1-git-send-email-clabbe@baylibre.com \
    --to=clabbe@baylibre.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=smueller@chronox.de \
    /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;
as well as URLs for NNTP newsgroup(s).