aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch')
-rw-r--r--recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch718
1 files changed, 718 insertions, 0 deletions
diff --git a/recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch b/recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch
new file mode 100644
index 00000000..5e8893b6
--- /dev/null
+++ b/recipes-kernel/cryptodev/sdk_patches/0081-add-sync-speed-tests-with-the-same-format-as-async-o.patch
@@ -0,0 +1,718 @@
+From b13160357e683b9d42ba513433b4c09456a8332b Mon Sep 17 00:00:00 2001
+From: Alexe Radu <radu.alexe@nxp.com>
+Date: Fri, 28 Oct 2016 13:39:50 +0300
+Subject: [PATCH 081/104] add sync speed tests with the same format as async
+ ones
+
+The file speed.c was removed because has the same functionality
+as sync_speed.c
+
+Signed-off-by: Alexe Radu <radu.alexe@nxp.com>
+---
+ tests/Makefile | 4 +-
+ tests/speed.c | 265 -----------------------------------
+ tests/sync_speed.c | 399 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 401 insertions(+), 267 deletions(-)
+ delete mode 100644 tests/speed.c
+ create mode 100644 tests/sync_speed.c
+
+diff --git a/tests/Makefile b/tests/Makefile
+index 23d67f9..400fb7a 100644
+--- a/tests/Makefile
++++ b/tests/Makefile
+@@ -3,14 +3,14 @@ CFLAGS += -I.. $(CRYPTODEV_CFLAGS)
+
+ comp_progs := cipher_comp hash_comp hmac_comp
+
+-hostprogs := cipher cipher-aead hmac speed async_cipher async_hmac \
++hostprogs := cipher cipher-aead hmac sync_speed async_cipher async_hmac \
+ async_speed sha_speed hashcrypt_speed fullspeed cipher-gcm \
+ cipher-aead-srtp $(comp_progs)
+
+ example-cipher-objs := cipher.o
+ example-cipher-aead-objs := cipher-aead.o
+ example-hmac-objs := hmac.o
+-example-speed-objs := speed.c
++example-speed-objs := sync_speed.o
+ example-fullspeed-objs := fullspeed.c
+ example-sha-speed-objs := sha_speed.c
+ example-async-cipher-objs := async_cipher.o
+diff --git a/tests/speed.c b/tests/speed.c
+deleted file mode 100644
+index 0e2bbc3..0000000
+--- a/tests/speed.c
++++ /dev/null
+@@ -1,265 +0,0 @@
+-/* cryptodev_test - simple benchmark tool for cryptodev
+- *
+- * Copyright (C) 2010 by Phil Sutter <phil.sutter@viprinet.com>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+- */
+-#include <fcntl.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <sys/ioctl.h>
+-#include <sys/time.h>
+-#include <sys/types.h>
+-#include <signal.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-
+-#include <crypto/cryptodev.h>
+-
+-static int si = 1; /* SI by default */
+-
+-static double udifftimeval(struct timeval start, struct timeval end)
+-{
+- return (double)(end.tv_usec - start.tv_usec) +
+- (double)(end.tv_sec - start.tv_sec) * 1000 * 1000;
+-}
+-
+-static int must_finish = 0;
+-
+-static void alarm_handler(int signo)
+-{
+- must_finish = 1;
+-}
+-
+-static char *units[] = { "", "Ki", "Mi", "Gi", "Ti", 0};
+-static char *si_units[] = { "", "K", "M", "G", "T", 0};
+-
+-static void value2human(int si, double bytes, double time, double* data, double* speed,char* metric)
+-{
+- int unit = 0;
+-
+- *data = bytes;
+-
+- if (si) {
+- while (*data > 1000 && si_units[unit + 1]) {
+- *data /= 1000;
+- unit++;
+- }
+- *speed = *data / time;
+- sprintf(metric, "%sB", si_units[unit]);
+- } else {
+- while (*data > 1024 && units[unit + 1]) {
+- *data /= 1024;
+- unit++;
+- }
+- *speed = *data / time;
+- sprintf(metric, "%sB", units[unit]);
+- }
+-}
+-
+-#define MAX(x,y) ((x)>(y)?(x):(y))
+-
+-int encrypt_data(struct session_op *sess, int fdc, int chunksize, int alignmask)
+-{
+- struct crypt_op cop;
+- char *buffer, iv[32];
+- uint8_t mac[HASH_MAX_LEN];
+- static int val = 23;
+- struct timeval start, end;
+- double total = 0;
+- double secs, ddata, dspeed;
+- char metric[16];
+- int min_alignmask = sizeof(void*) - 1;
+-
+- if (alignmask) {
+- alignmask = ((alignmask < min_alignmask) ? min_alignmask : alignmask);
+- if (posix_memalign((void **)&buffer, MAX(alignmask + 1, sizeof(void*)), chunksize)) {
+- printf("posix_memalign() failed! (mask %x, size: %d)\n", alignmask+1, chunksize);
+- return 1;
+- }
+- } else {
+- if (!(buffer = malloc(chunksize))) {
+- perror("malloc()");
+- return 1;
+- }
+- }
+-
+- memset(iv, 0x23, 32);
+-
+- printf("\tEncrypting in chunks of %d bytes: ", chunksize);
+- fflush(stdout);
+-
+- memset(buffer, val++, chunksize);
+-
+- must_finish = 0;
+- alarm(5);
+-
+- gettimeofday(&start, NULL);
+- do {
+- memset(&cop, 0, sizeof(cop));
+- cop.ses = sess->ses;
+- cop.len = chunksize;
+- cop.iv = (unsigned char *)iv;
+- cop.op = COP_ENCRYPT;
+- cop.src = cop.dst = (unsigned char *)buffer;
+- cop.mac = mac;
+-
+- if (ioctl(fdc, CIOCCRYPT, &cop)) {
+- perror("ioctl(CIOCCRYPT)");
+- return 1;
+- }
+- total+=chunksize;
+- } while(must_finish==0);
+- gettimeofday(&end, NULL);
+-
+- secs = udifftimeval(start, end)/ 1000000.0;
+-
+- value2human(si, total, secs, &ddata, &dspeed, metric);
+- printf ("done. %.2f %s in %.2f secs: ", ddata, metric, secs);
+- printf ("%.2f %s/sec\n", dspeed, metric);
+-
+- free(buffer);
+- return 0;
+-}
+-
+-int main(int argc, char** argv)
+-{
+- int fd, i, fdc = -1, alignmask = 0;
+- struct session_op sess;
+-#ifdef CIOCGSESSINFO
+- struct session_info_op siop;
+-#endif
+- char keybuf[32];
+-
+- signal(SIGALRM, alarm_handler);
+-
+- if (argc > 1) {
+- if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) {
+- printf("Usage: speed [--kib]\n");
+- exit(0);
+- }
+- if (strcmp(argv[1], "--kib") == 0) {
+- si = 0;
+- }
+- }
+-
+- if ((fd = open("/dev/crypto", O_RDWR, 0)) < 0) {
+- perror("open()");
+- return 1;
+- }
+- if (ioctl(fd, CRIOGET, &fdc)) {
+- perror("ioctl(CRIOGET)");
+- return 1;
+- }
+-
+- fprintf(stderr, "Testing NULL cipher: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.cipher = CRYPTO_NULL;
+- sess.keylen = 0;
+- sess.key = (unsigned char *)keybuf;
+- 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;
+- }
+- alignmask = siop.alignmask;
+-#endif
+-
+- for (i = 512; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
+-
+- fprintf(stderr, "\nTesting AES-128-CBC cipher: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.cipher = CRYPTO_AES_CBC;
+- sess.keylen = 16;
+- memset(keybuf, 0x42, 16);
+- sess.key = (unsigned char *)keybuf;
+- 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;
+- }
+- alignmask = siop.alignmask;
+-#endif
+-
+- for (i = 512; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
+-
+- fprintf(stderr, "\nTesting AES-256-XTS cipher: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.cipher = CRYPTO_AES_XTS;
+- sess.keylen = 32;
+- memset(keybuf, 0x42, sess.keylen);
+- sess.key = (unsigned char *)keybuf;
+- 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;
+- }
+- alignmask = siop.alignmask;
+-#endif
+-
+- for (i = 512; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
+-
+- fprintf(stderr, "\nTesting CRC32C hash: \n");
+- memset(&sess, 0, sizeof(sess));
+- sess.mac = CRYPTO_CRC32C;
+- 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_CRC32C, got %s with driver %s\n",
+- siop.hash_info.cra_name, siop.hash_info.cra_driver_name);
+- alignmask = siop.alignmask;
+-#endif
+-
+- for (i = 512; i <= (64 * 1024); i *= 2) {
+- if (encrypt_data(&sess, fdc, i, alignmask))
+- break;
+- }
+-
+- close(fdc);
+- close(fd);
+- return 0;
+-}
+diff --git a/tests/sync_speed.c b/tests/sync_speed.c
+new file mode 100644
+index 0000000..b0cb9ad
+--- /dev/null
++++ b/tests/sync_speed.c
+@@ -0,0 +1,399 @@
++/* cryptodev_test - simple benchmark tool for cryptodev
++ *
++ * Copyright (C) 2010 by Phil Sutter <phil.sutter@viprinet.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ */
++#include <errno.h>
++#include <fcntl.h>
++#include <poll.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sys/ioctl.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <signal.h>
++#include <crypto/cryptodev.h>
++#include <stdbool.h>
++#include <unistd.h>
++
++struct test_params {
++ bool tflag;
++ bool nflag;
++ int tvalue;
++ int nvalue;
++};
++
++const char usage_str[] = "Usage: %s [OPTION]... <cipher>|<hash>\n"
++ "Run benchmark test for cipher or hash\n\n"
++ " -t <secs>\t" "time to run each test (default 10 secs)\n"
++ " -n <bytes>\t" "size of the test buffer\n"
++ " -h\t\t" "show this help\n"
++;
++
++int run_null(int fdc, struct test_params tp);
++int run_aes_cbc(int fdc, struct test_params tp);
++int run_aes_xts(int fdc, struct test_params tp);
++int run_crc32c(int fdc, struct test_params tp);
++int run_sha1(int fdc, struct test_params tp);
++int run_sha256(int fdc, struct test_params tp);
++int get_alignmask(int fdc, struct session_op *sess);
++
++#define ALG_COUNT 6
++struct {
++ char *name;
++ int (*func)(int, struct test_params);
++} ciphers[ALG_COUNT] = {
++ {"null", run_null},
++ {"aes-cbc", run_aes_cbc},
++ {"aes-xts", run_aes_xts},
++ {"crc32c", run_crc32c},
++ {"sha1", run_sha1},
++ {"sha256", run_sha256},
++};
++
++static double udifftimeval(struct timeval start, struct timeval end)
++{
++ return (double)(end.tv_usec - start.tv_usec) +
++ (double)(end.tv_sec - start.tv_sec) * 1000 * 1000;
++}
++
++static int must_finish = 0;
++static int must_exit = 0;
++
++static void alarm_handler(int signo)
++{
++ must_finish = 1;
++}
++
++static void exit_handler(int signo)
++{
++ must_exit = 1;
++ printf("\nexit requested by user through ctrl+c \n");
++}
++
++static char *units[] = { "", "Ki", "Mi", "Gi", "Ti", 0};
++
++static void value2human(double bytes, double time, double* data, double* speed,char* metric)
++{
++ int unit = 0;
++
++ *data = bytes;
++ while (*data > 1024 && units[unit + 1]) {
++ *data /= 1024;
++ unit++;
++ }
++ *speed = *data / time;
++ sprintf(metric, "%sB", units[unit]);
++}
++
++static int encrypt_data(int fdc, struct test_params tp, struct session_op *sess)
++{
++ struct crypt_op cop;
++ char *buffer, iv[32];
++ char mac[HASH_MAX_LEN];
++ static int val = 23;
++ struct timeval start, end;
++ double total = 0;
++ double secs, ddata, dspeed;
++ char metric[16];
++ int alignmask;
++ int min_alignmask = sizeof(void*) - 1;
++
++ memset(iv, 0x23, 32);
++
++ printf("\tEncrypting in chunks of %d bytes: ", tp.nvalue);
++ fflush(stdout);
++
++ alignmask = get_alignmask(fdc, sess);
++ if (alignmask) {
++ alignmask = ((alignmask < min_alignmask) ? min_alignmask : alignmask);
++ if (posix_memalign((void **)(&buffer), alignmask + 1, tp.nvalue)) {
++ printf("posix_memalign() failed!\n");
++ return 1;
++ }
++ } else {
++ if (!(buffer = malloc(tp.nvalue))) {
++ perror("malloc()");
++ return 1;
++ }
++ }
++ memset(buffer, val++, tp.nvalue);
++
++ must_finish = 0;
++ alarm(tp.tvalue);
++
++ gettimeofday(&start, NULL);
++ do {
++ memset(&cop, 0, sizeof(cop));
++ cop.ses = sess->ses;
++ cop.len = tp.nvalue;
++ cop.iv = (unsigned char *)iv;
++ cop.op = COP_ENCRYPT;
++ cop.src = cop.dst = (unsigned char *)buffer;
++ cop.mac = (unsigned char *)mac;
++
++ if (ioctl(fdc, CIOCCRYPT, &cop)) {
++ perror("ioctl(CIOCCRYPT)");
++ return 1;
++ }
++ total += cop.len;
++ } while(!must_finish);
++ gettimeofday(&end, NULL);
++
++ secs = udifftimeval(start, end)/ 1000000.0;
++
++ value2human(total, secs, &ddata, &dspeed, metric);
++ printf ("done. %.2f %s in %.2f secs: ", ddata, metric, secs);
++ printf ("%.2f %s/sec\n", dspeed, metric);
++
++ free(buffer);
++ return 0;
++}
++
++void usage(char *cmd_name)
++{
++ printf(usage_str, cmd_name);
++}
++
++int run_test(int id, struct test_params tp)
++{
++ int fd;
++ int fdc;
++
++ fd = open("/dev/crypto", O_RDWR, 0);
++ if (fd < 0) {
++ perror("open()");
++ return fd;
++ }
++ if (ioctl(fd, CRIOGET, &fdc)) {
++ perror("ioctl(CRIOGET)");
++ return -EINVAL;
++ }
++
++ ciphers[id].func(fdc, tp);
++
++ close(fdc);
++ close(fd);
++
++ return 0;
++}
++
++int get_alignmask(int fdc, struct session_op *sess)
++{
++ int alignmask;
++
++#ifdef CIOCGSESSINFO
++ struct session_info_op siop;
++
++ siop.ses = sess->ses;
++ if (ioctl(fdc, CIOCGSESSINFO, &siop)) {
++ perror("ioctl(CIOCGSESSINFO)");
++ return -EINVAL;
++ }
++ alignmask = siop.alignmask;
++#else
++ alignmask = 0;
++#endif
++
++ return alignmask;
++}
++
++void do_test_vectors(int fdc, struct test_params tp, struct session_op *sess)
++{
++ int i;
++
++ if (tp.nflag) {
++ encrypt_data(fdc, tp, sess);
++ } else {
++ for (i = 256; i <= (64 * 1024); i *= 2) {
++ if (must_exit)
++ break;
++
++ tp.nvalue = i;
++ if (encrypt_data(fdc, tp, sess)) {
++ break;
++ }
++ }
++ }
++}
++
++
++int run_null(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
++
++ fprintf(stderr, "Testing NULL cipher: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.cipher = CRYPTO_NULL;
++ sess.keylen = 0;
++ sess.key = (unsigned char *)keybuf;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return -EINVAL;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_aes_cbc(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
++
++ fprintf(stderr, "\nTesting AES-128-CBC cipher: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.cipher = CRYPTO_AES_CBC;
++ sess.keylen = 16;
++ memset(keybuf, 0x42, 16);
++ sess.key = (unsigned char *)keybuf;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return -EINVAL;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_aes_xts(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++ char keybuf[32];
++
++ fprintf(stderr, "\nTesting AES-256-XTS cipher: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.cipher = CRYPTO_AES_XTS;
++ sess.keylen = 32;
++ memset(keybuf, 0x42, sess.keylen);
++ sess.key = (unsigned char *)keybuf;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return -EINVAL;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_crc32c(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++
++ fprintf(stderr, "\nTesting CRC32C hash: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.mac = CRYPTO_CRC32C;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return 1;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_sha1(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++
++ fprintf(stderr, "\nTesting SHA-1 hash: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.mac = CRYPTO_SHA1;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return 1;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int run_sha256(int fdc, struct test_params tp)
++{
++ struct session_op sess;
++
++ fprintf(stderr, "\nTesting SHA2-256 hash: \n");
++ memset(&sess, 0, sizeof(sess));
++ sess.mac = CRYPTO_SHA2_256;
++ if (ioctl(fdc, CIOCGSESSION, &sess)) {
++ perror("ioctl(CIOCGSESSION)");
++ return 1;
++ }
++
++ do_test_vectors(fdc, tp, &sess);
++ return 0;
++}
++
++int main(int argc, char **argv)
++{
++ int i;
++ int c;
++ bool alg_flag;
++ char *alg_name;
++ struct test_params tp;
++
++ tp.tflag = false;
++ tp.nflag = false;
++ alg_flag = false;
++ opterr = 0;
++ while ((c = getopt(argc, argv, "hn:t:")) != -1) {
++ switch (c) {
++ case 'n':
++ tp.nvalue = atoi(optarg);
++ tp.nflag = true;
++ break;
++ case 't':
++ tp.tvalue = atoi(optarg);
++ tp.tflag = true;
++ break;
++ case 'h': /* no break */
++ default:
++ usage(argv[0]);
++ exit(1);
++ }
++ }
++
++ /* the name of a specific test asked on the command line */
++ if (optind < argc) {
++ alg_name = argv[optind];
++ alg_flag = true;
++ }
++
++ /* default test time */
++ if (!tp.tflag) {
++ tp.tvalue = 5;
++ }
++
++ signal(SIGALRM, alarm_handler);
++ signal(SIGINT, exit_handler);
++
++ for (i = 0; i < ALG_COUNT; i++) {
++ if (must_exit)
++ break;
++
++ if (alg_flag) {
++ if (strcmp(alg_name, ciphers[i].name) == 0) {
++ run_test(i, tp);
++ }
++ } else {
++ run_test(i, tp);
++ }
++ }
++
++ return 0;
++}
+--
+2.10.2
+