aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch')
-rw-r--r--recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch190
1 files changed, 190 insertions, 0 deletions
diff --git a/recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch b/recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch
new file mode 100644
index 00000000..eff6ed9f
--- /dev/null
+++ b/recipes-kernel/cryptodev/sdk_patches/0037-rewrite-sha_speed.c-to-reduce-code-duplication.patch
@@ -0,0 +1,190 @@
+From 344a0243e31f8fc467253404a548eedbb72b35d0 Mon Sep 17 00:00:00 2001
+From: Cristian Stoica <cristian.stoica@nxp.com>
+Date: Wed, 20 Jan 2016 17:11:49 +0200
+Subject: [PATCH 37/38] rewrite sha_speed.c to reduce code duplication
+
+Signed-off-by: Cristian Stoica <cristian.stoica@nxp.com>
+---
+ tests/sha_speed.c | 131 ++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 84 insertions(+), 47 deletions(-)
+
+diff --git a/tests/sha_speed.c b/tests/sha_speed.c
+index e1dc54b..5f694bd 100644
+--- a/tests/sha_speed.c
++++ b/tests/sha_speed.c
+@@ -28,6 +28,13 @@
+
+ #include <crypto/cryptodev.h>
+
++/* Sizes of buffers to be hashed */
++int buffer_lengths[] = {256, 512, 1024, 2048, 4096, 8192, 65536, 0};
++
++/* Time in seconds allocated for each tested buffer lengths */
++#define BUFFER_TEST_TIME 10
++
++
+ static double udifftimeval(struct timeval start, struct timeval end)
+ {
+ return (double)(end.tv_usec - start.tv_usec) +
+@@ -97,7 +104,7 @@ int hash_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+ memset(buffer, val++, chunksize);
+
+ must_finish = 0;
+- alarm(5);
++ alarm(BUFFER_TEST_TIME);
+
+ gettimeofday(&start, NULL);
+ do {
+@@ -126,73 +133,103 @@ int hash_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+ return 0;
+ }
+
+-int main(void)
+-{
+- int fd, i, fdc = -1, alignmask = 0;
+- struct session_op sess;
+- char keybuf[32];
++
+ #ifdef CIOCGSESSINFO
++int get_alignmask(struct session_op *sess, int fdc)
++{
+ struct session_info_op siop;
++
++ siop.ses = sess->ses;
++ if (ioctl(fdc, CIOCGSESSINFO, &siop) < 0) {
++ perror("ioctl(CIOCGSESSINFO)");
++ /* continue test ignoring CIOCGSESSINFO error */
++ return 0;
++ }
++
++ printf("using algorithm %s with driver %s\n",
++ siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
++
++ return siop.alignmask;
++}
+ #endif
+
+- signal(SIGALRM, alarm_handler);
+
+- if ((fd = open("/dev/crypto", O_RDWR, 0)) < 0) {
+- perror("open()");
+- return 1;
+- }
+- if (ioctl(fd, CRIOGET, &fdc)) {
+- perror("ioctl(CRIOGET)");
+- return 1;
+- }
++int hash_session(struct session_op *sess, int fdc)
++{
++ int i;
++ int err;
++ int alignmask;
+
+- fprintf(stderr, "Testing SHA1 Hash: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.mac = CRYPTO_SHA1;
+- if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ if (ioctl(fdc, CIOCGSESSION, sess)) {
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
++
+ #ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSINFO)");
+- return 1;
+- }
+- printf("requested hash CRYPTO_SHA1, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
++ alignmask = get_alignmask(sess, fdc);
++#else
++ alignmask = 0;
+ #endif
+
+- for (i = 256; i <= (64 * 1024); i *= 4) {
+- if (hash_data(&sess, fdc, i, alignmask))
+- break;
++ err = 0;
++ for(i = 0; (err == 0) && (buffer_lengths[i] != 0); i++) {
++ err = hash_data(sess, fdc, buffer_lengths[i], alignmask);
+ }
+
+- fprintf(stderr, "\nTesting SHA256 Hash: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.mac = CRYPTO_SHA2_256;
+- if (ioctl(fdc, CIOCGSESSION, &sess)) {
+- perror("ioctl(CIOCGSESSION)");
++ if (ioctl(fdc, CIOCFSESSION, sess)) {
++ perror("ioctl(CIOCFSESSION)");
+ return 1;
+ }
+-#ifdef CIOCGSESSINFO
+- siop.ses = sess.ses;
+- if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
+- perror("ioctl(CIOCGSESSINFO)");
++
++ return err;
++}
++
++int test_sha1(struct session_op *sess, int fdc)
++{
++ fprintf(stderr, "Testing SHA1 Hash: \n");
++ memset(sess, 0, sizeof(sess));
++ sess->mac = CRYPTO_SHA1;
++ return hash_session(sess, fdc);
++}
++
++
++int test_sha256(struct session_op *sess, int fdc)
++{
++ fprintf(stderr, "Testing SHA256 Hash: \n");
++ memset(sess, 0, sizeof(sess));
++ sess->mac = CRYPTO_SHA2_256;
++ return hash_session(sess, fdc);
++}
++
++
++int main(void)
++{
++ int fd;
++ int fdc;
++ int err;
++ int i;
++ struct session_op sess;
++
++ signal(SIGALRM, alarm_handler);
++
++ fd = open("/dev/crypto", O_RDWR, 0);
++ if (fd < 0) {
++ perror("open()");
+ return 1;
+ }
+- printf("requested hash CRYPTO_SHA2_256, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
+-#endif
+
+- for (i = 256; i <= (64 * 1024); i *= 4) {
+- if (hash_data(&sess, fdc, i, alignmask))
+- break;
++ err = ioctl(fd, CRIOGET, &fdc);
++ if (err != 0) {
++ perror("ioctl(CRIOGET)");
++ close(fd);
++ return 1;
+ }
+
++ /* run all tests but return an eventual error */
++ err |= test_sha1(&sess, fdc);
++ err |= test_sha256(&sess, fdc);
++
+ close(fdc);
+ close(fd);
+- return 0;
++ return err;
+ }
+--
+2.7.0
+