git: 898d513ab1c5 - stable/15 - tools: Drop cryptotest
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 23 Sep 2025 12:57:54 UTC
The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=898d513ab1c53b07a3b19738df332b7da51b95d1 commit 898d513ab1c53b07a3b19738df332b7da51b95d1 Author: Dag-Erling Smørgrav <des@FreeBSD.org> AuthorDate: 2025-09-12 15:29:40 +0000 Commit: Dag-Erling Smørgrav <des@FreeBSD.org> CommitDate: 2025-09-23 12:57:30 +0000 tools: Drop cryptotest This has been supplanted by cryptocheck and has bitrotted to the point where it no longer builds. PR: 289325 Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D52399 (cherry picked from commit 4c6cf6107b824f7ba4a3fe66db8e0a36c8dd8b04) --- tools/tools/crypto/Makefile | 5 +- tools/tools/crypto/cryptorun.sh | 31 -- tools/tools/crypto/cryptotest.c | 658 ---------------------------------------- 3 files changed, 1 insertion(+), 693 deletions(-) diff --git a/tools/tools/crypto/Makefile b/tools/tools/crypto/Makefile index d1aa55526248..5186a0d697e6 100644 --- a/tools/tools/crypto/Makefile +++ b/tools/tools/crypto/Makefile @@ -25,8 +25,7 @@ # SUCH DAMAGE. # -PROGS= cryptocheck cryptotest cryptostats \ - hifnstats ipsecstats safestats +PROGS= cryptocheck cryptostats hifnstats ipsecstats safestats MAN= BINDIR?= /usr/local/bin @@ -38,6 +37,4 @@ LIBADD.cryptocheck+= crypto util # safestats: statistics kept by the SafeNet driver # ipsecstats: print statistics kept by fast ipsec -CLEANFILES+= core a.out - .include <bsd.progs.mk> diff --git a/tools/tools/crypto/cryptorun.sh b/tools/tools/crypto/cryptorun.sh deleted file mode 100755 index 8761b16c4d96..000000000000 --- a/tools/tools/crypto/cryptorun.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# -# A simple test runner for cryptotest -# -# Althought cryptotest itself has a -z mode to test all algorithms at -# a variety of sizes, this script allows us to be more selective. -# Threads and buffer sizes move in powers of two from 1, for threads, -# and 256 for buffer sizes. -# -# e.g. cryptorun.sh aes 4 512 -# -# Test aes with 1, 2 and 4 processes, and at sizes of 256 and 512 bytes. -# -# - -threads=1 -size=256 -iterations=1000000 -crypto="/tank/users/gnn/Repos/svn/FreeBSD.HEAD/tools/tools/crypto/cryptotest" -max_threads=$2 -max_size=$3 - -while [ "$threads" -le "$max_threads" ]; do - echo "Testing with $threads processes." - while [ "$size" -le "$max_size" ]; do - $crypto -t $threads -a $1 $iterations $size - size=$(($size * 2)) - done - size=256 - threads=$(($threads * 2)) -done diff --git a/tools/tools/crypto/cryptotest.c b/tools/tools/crypto/cryptotest.c deleted file mode 100644 index 7845c3994d0c..000000000000 --- a/tools/tools/crypto/cryptotest.c +++ /dev/null @@ -1,658 +0,0 @@ -/*- - * Copyright (c) 2004 Sam Leffler, Errno Consulting - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO WARRANTY - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGES. - */ - -/* - * Simple tool for testing hardware/system crypto support. - * - * cryptotest [-czsbv] [-a algorithm] [count] [size ...] - * - * Run count iterations of a crypt+decrypt or mac operation on a buffer of - * size bytes. A random key and iv are used. Options: - * -c check the results - * -d dev pin work on device dev - * -z run all available algorithms on a variety of buffer sizes - * -v be verbose - * -b mark operations for batching - * -p profile kernel crypto operations (must be root) - * -t n fork n threads and run tests concurrently - * Known algorithms are: - * null null cbc - * des des cbc - * 3des 3des cbc - * blf blowfish cbc - * cast cast cbc - * skj skipjack cbc - * aes rijndael/aes 128-bit cbc - * aes192 rijndael/aes 192-bit cbc - * aes256 rijndael/aes 256-bit cbc - * chacha20 Chacha20 stream cipher - * blake2b Blake2b - * blake2s Blake2s - * md5 md5 hmac - * sha1 sha1 hmac - * sha256 256-bit sha2 hmac - * sha384 384-bit sha2 hmac - * sha512 512--bit sha2 hmac - * - * For a test of how fast a crypto card is, use something like: - * cryptotest -z 1024 - * This will run a series of tests using the available crypto/cipher - * algorithms over a variety of buffer sizes. The 1024 says to do 1024 - * iterations. Extra arguments can be used to specify one or more buffer - * sizes to use in doing tests. - * - * To fork multiple processes all doing the same work, specify -t X on the - * command line to get X "threads" running simultaneously. No effort is made - * to synchronize the threads or otherwise maximize load. - * - * If the kernel crypto code is built with CRYPTO_TIMING and you run as root, - * then you can specify the -p option to get a "profile" of the time spent - * processing crypto operations. At present this data is only meaningful for - * symmetric operations. To get meaningful numbers you must run on an idle - * machine. - * - * Expect ~400 Mb/s for a Broadcom 582x for 8K buffers on a reasonable CPU - * (64-bit PCI helps). Hifn 7811 parts top out at ~110 Mb/s. - */ - -#include <sys/param.h> -#include <sys/cpuset.h> -#include <sys/ioctl.h> -#include <sys/mman.h> -#include <sys/sysctl.h> -#include <sys/time.h> -#include <sys/wait.h> - -#include <err.h> -#include <fcntl.h> -#include <paths.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sysexits.h> -#include <unistd.h> - -#include <crypto/cryptodev.h> - -#define CHUNK 64 /* how much to display */ -#define streq(a,b) (strcasecmp(a,b) == 0) - -void hexdump(char *, int); - -int verbose = 0; -int opflags = 0; -int verify = 0; -int crid = CRYPTO_FLAG_HARDWARE; - -struct alg { - const char* name; - int ishash; - int blocksize; - int minkeylen; - int maxkeylen; - int code; -} algorithms[] = { -#ifdef CRYPTO_NULL_CBC - { "null", 0, 8, 1, 256, CRYPTO_NULL_CBC }, -#endif - { "des", 0, 8, 8, 8, CRYPTO_DES_CBC }, - { "3des", 0, 8, 24, 24, CRYPTO_3DES_CBC }, - { "blf", 0, 8, 5, 56, CRYPTO_BLF_CBC }, - { "cast", 0, 8, 5, 16, CRYPTO_CAST_CBC }, - { "skj", 0, 8, 10, 10, CRYPTO_SKIPJACK_CBC }, - { "rij", 0, 16, 16, 16, CRYPTO_RIJNDAEL128_CBC}, - { "aes", 0, 16, 16, 16, CRYPTO_AES_CBC}, - { "aes192", 0, 16, 24, 24, CRYPTO_AES_CBC}, - { "aes256", 0, 16, 32, 32, CRYPTO_AES_CBC}, - { "chacha20", 0, 1, 32, 32, CRYPTO_CHACHA20}, - { "blake2b", 1, 128, 64, 64, CRYPTO_BLAKE2B }, - { "blake2s", 1, 64, 32, 32, CRYPTO_BLAKE2S }, - { "md5", 1, 8, 16, 16, CRYPTO_MD5_HMAC }, - { "sha1", 1, 8, 20, 20, CRYPTO_SHA1_HMAC }, - { "sha256", 1, 8, 32, 32, CRYPTO_SHA2_256_HMAC }, - { "sha384", 1, 8, 48, 48, CRYPTO_SHA2_384_HMAC }, - { "sha512", 1, 8, 64, 64, CRYPTO_SHA2_512_HMAC }, -}; - -void -usage(const char* cmd) -{ - printf("usage: %s [-czsbv] [-d dev] [-a algorithm] [count] [size ...]\n", - cmd); - printf("where algorithm is one of:\n"); - printf(" null des 3des (default) blowfish cast skipjack rij\n"); - printf(" aes aes192 aes256 chacha20 md5 sha1 sha256 sha384 sha512\n"); - printf(" blake2b blake2s\n"); - printf(" or an encryption algorithm concatented with authentication\n"); - printf(" algorithm with '+' in the middle, e.g., aes+sha1.\n"); - printf("count is the number of encrypt/decrypt ops to do\n"); - printf("size is the number of bytes of text to encrypt+decrypt\n"); - printf("\n"); - printf("-c check the results (slows timing)\n"); - printf("-d use specific device, specify 'soft' for testing software implementations\n"); - printf("\tNOTE: to use software you must set:\n\t sysctl kern.cryptodevallowsoft=1\n"); - printf("-z run all available algorithms on a variety of sizes\n"); - printf("-v be verbose\n"); - printf("-b mark operations for batching\n"); - printf("-p profile kernel crypto operation (must be root)\n"); - printf("-t n for n threads and run tests concurrently\n"); - exit(-1); -} - -struct alg* -getalgbycode(int cipher) -{ - int i; - - for (i = 0; i < nitems(algorithms); i++) - if (cipher == algorithms[i].code) - return &algorithms[i]; - return NULL; -} - -struct alg* -getalgbyname(const char* name) -{ - int i; - - for (i = 0; i < nitems(algorithms); i++) - if (streq(name, algorithms[i].name)) - return &algorithms[i]; - return NULL; -} - -int -devcrypto(void) -{ - int fd = -1; - - if (fd < 0) { - fd = open(_PATH_DEV "crypto", O_RDWR, 0); - if (fd < 0) - err(1, _PATH_DEV "crypto"); - if (fcntl(fd, F_SETFD, 1) == -1) - err(1, "fcntl(F_SETFD) (devcrypto)"); - } - return fd; -} - -int -crlookup(const char *devname) -{ - struct crypt_find_op find; - - if (strncmp(devname, "soft", 4) == 0) - return CRYPTO_FLAG_SOFTWARE; - - find.crid = -1; - strlcpy(find.name, devname, sizeof(find.name)); - if (ioctl(devcrypto(), CIOCFINDDEV, &find) == -1) - err(1, "ioctl(CIOCFINDDEV)"); - return find.crid; -} - -const char * -crfind(int crid) -{ - static struct crypt_find_op find; - - bzero(&find, sizeof(find)); - find.crid = crid; - if (ioctl(devcrypto(), CIOCFINDDEV, &find) == -1) - err(1, "ioctl(CIOCFINDDEV): crid %d", crid); - return find.name; -} - -char -rdigit(void) -{ - const char a[] = { - 0x10,0x54,0x11,0x48,0x45,0x12,0x4f,0x13,0x49,0x53,0x14,0x41, - 0x15,0x16,0x4e,0x55,0x54,0x17,0x18,0x4a,0x4f,0x42,0x19,0x01 - }; - return 0x20+a[random()%nitems(a)]; -} - -void -runtest(struct alg *ealg, struct alg *alg, int count, int size, u_long cmd, struct timeval *tv) -{ - int i, fd = devcrypto(); - struct timeval start, stop, dt; - char *cleartext, *ciphertext, *originaltext, *key; - struct session2_op sop; - struct crypt_op cop; - char iv[EALG_MAX_BLOCK_LEN]; - char digest[512/8]; - - /* Canonicalize 'ealg' to crypt alg and 'alg' to authentication alg. */ - if (ealg == NULL && !alg->ishash) { - ealg = alg; - alg = NULL; - } - - bzero(&sop, sizeof(sop)); - if (ealg != NULL) { - sop.keylen = (ealg->minkeylen + ealg->maxkeylen)/2; - key = (char *) malloc(sop.keylen); - if (key == NULL) - err(1, "malloc (key)"); - for (i = 0; i < sop.keylen; i++) - key[i] = rdigit(); - sop.key = key; - sop.cipher = ealg->code; - } - if (alg != NULL) { - sop.mackeylen = (alg->minkeylen + alg->maxkeylen)/2; - key = (char *) malloc(sop.mackeylen); - if (key == NULL) - err(1, "malloc (mac)"); - for (i = 0; i < sop.mackeylen; i++) - key[i] = rdigit(); - sop.mackey = key; - sop.mac = alg->code; - } - - sop.crid = crid; - if (ioctl(fd, cmd, &sop) < 0) { - if (cmd == CIOCGSESSION || cmd == CIOCGSESSION2) { - close(fd); - if (verbose) { - printf("cipher %s%s%s", ealg? ealg->name : "", - (ealg && alg) ? "+" : "", - alg? alg->name : ""); - - if (alg->ishash) - printf(" mackeylen %u\n", sop.mackeylen); - else - printf(" keylen %u\n", sop.keylen); - perror("CIOCGSESSION"); - } - /* hardware doesn't support algorithm; skip it */ - return; - } - printf("cipher %s%s%s keylen %u mackeylen %u\n", - ealg? ealg->name : "", (ealg && alg) ? "+" : "", - alg? alg->name : "", sop.keylen, sop.mackeylen); - err(1, "CIOCGSESSION"); - } - - originaltext = malloc(3*size); - if (originaltext == NULL) - err(1, "malloc (text)"); - cleartext = originaltext+size; - ciphertext = cleartext+size; - for (i = 0; i < size; i++) - cleartext[i] = rdigit(); - memcpy(originaltext, cleartext, size); - for (i = 0; i < nitems(iv); i++) - iv[i] = rdigit(); - - if (verbose) { - printf("session = 0x%x\n", sop.ses); - printf("device = %s\n", crfind(sop.crid)); - printf("count = %d, size = %d\n", count, size); - if (ealg) { - printf("iv:"); - hexdump(iv, sizeof iv); - } - printf("cleartext:"); - hexdump(cleartext, MIN(size, CHUNK)); - } - - gettimeofday(&start, NULL); - if (ealg) { - for (i = 0; i < count; i++) { - cop.ses = sop.ses; - cop.op = COP_ENCRYPT; - cop.flags = opflags | COP_F_CIPHER_FIRST; - cop.len = size; - cop.src = cleartext; - cop.dst = ciphertext; - if (alg) - cop.mac = digest; - else - cop.mac = 0; - cop.iv = iv; - - if (ioctl(fd, CIOCCRYPT, &cop) < 0) - err(1, "ioctl(CIOCCRYPT)"); - - if (verify && bcmp(ciphertext, cleartext, size) == 0) { - printf("cipher text unchanged:"); - hexdump(ciphertext, size); - } - - memset(cleartext, 'x', MIN(size, CHUNK)); - cop.ses = sop.ses; - cop.op = COP_DECRYPT; - cop.flags = opflags; - cop.len = size; - cop.src = ciphertext; - cop.dst = cleartext; - if (alg) - cop.mac = digest; - else - cop.mac = 0; - cop.iv = iv; - - if (ioctl(fd, CIOCCRYPT, &cop) < 0) - err(1, "ioctl(CIOCCRYPT)"); - - if (verify && bcmp(cleartext, originaltext, size) != 0) { - printf("decrypt mismatch:\n"); - printf("original:"); - hexdump(originaltext, size); - printf("cleartext:"); - hexdump(cleartext, size); - } - } - } else { - for (i = 0; i < count; i++) { - cop.ses = sop.ses; - cop.op = 0; - cop.flags = opflags; - cop.len = size; - cop.src = cleartext; - cop.dst = 0; - cop.mac = ciphertext; - cop.iv = 0; - - if (ioctl(fd, CIOCCRYPT, &cop) < 0) - err(1, "ioctl(CIOCCRYPT)"); - } - } - gettimeofday(&stop, NULL); - - if (ioctl(fd, CIOCFSESSION, &sop.ses) < 0) - perror("ioctl(CIOCFSESSION)"); - - if (verbose) { - printf("cleartext:"); - hexdump(cleartext, MIN(size, CHUNK)); - } - timersub(&stop, &start, tv); - - free(originaltext); - - close(fd); -} - -#ifdef __FreeBSD__ -void -resetstats() -{ - struct cryptostats stats; - size_t slen; - - slen = sizeof (stats); - if (sysctlbyname("kern.crypto_stats", &stats, &slen, NULL, 0) < 0) { - perror("kern.crypto_stats"); - return; - } - bzero(&stats.cs_invoke, sizeof (stats.cs_invoke)); - bzero(&stats.cs_done, sizeof (stats.cs_done)); - bzero(&stats.cs_cb, sizeof (stats.cs_cb)); - bzero(&stats.cs_finis, sizeof (stats.cs_finis)); - stats.cs_invoke.min.tv_sec = 10000; - stats.cs_done.min.tv_sec = 10000; - stats.cs_cb.min.tv_sec = 10000; - stats.cs_finis.min.tv_sec = 10000; - if (sysctlbyname("kern.crypto_stats", NULL, NULL, &stats, sizeof (stats)) < 0) - perror("kern.cryptostats"); -} - -void -printt(const char* tag, struct cryptotstat *ts) -{ - uint64_t avg, min, max; - - if (ts->count == 0) - return; - avg = (1000000000LL*ts->acc.tv_sec + ts->acc.tv_nsec) / ts->count; - min = 1000000000LL*ts->min.tv_sec + ts->min.tv_nsec; - max = 1000000000LL*ts->max.tv_sec + ts->max.tv_nsec; - printf("%16.16s: avg %6llu ns : min %6llu ns : max %7llu ns [%u samps]\n", - tag, avg, min, max, ts->count); -} -#endif - -void -runtests(struct alg *ealg, struct alg *alg, int count, int size, u_long cmd, int threads, int profile) -{ - int i, status; - double t; - void *region; - struct timeval *tvp; - struct timeval total; - int otiming; - - if (size % alg->blocksize || (ealg && size % ealg->blocksize)) { - if (verbose) - printf("skipping blocksize %u 'cuz not a multiple of " - "%s blocksize %u (or %s blocksize %u)\n", - size, alg->name, alg->blocksize, - ealg ? ealg->name : "n/a", - ealg ? ealg->blocksize : 0); - return; - } - - region = mmap(NULL, threads * sizeof (struct timeval), - PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0); - if (region == MAP_FAILED) { - perror("mmap"); - return; - } - tvp = (struct timeval *) region; -#ifdef __FreeBSD__ - if (profile) { - size_t tlen = sizeof (otiming); - int timing = 1; - - resetstats(); - if (sysctlbyname("debug.crypto_timing", &otiming, &tlen, - &timing, sizeof (timing)) < 0) - perror("debug.crypto_timing"); - } -#endif - - if (threads > 1) { - for (i = 0; i < threads; i++) - if (fork() == 0) { - cpuset_t mask; - CPU_ZERO(&mask); - CPU_SET(i, &mask); - cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, - -1, sizeof(mask), &mask); - runtest(ealg, alg, count, size, cmd, &tvp[i]); - exit(0); - } - while (waitpid(WAIT_MYPGRP, &status, 0) != -1) - ; - } else - runtest(ealg, alg, count, size, cmd, tvp); - - t = 0; - for (i = 0; i < threads; i++) - t += (((double)tvp[i].tv_sec * 1000000 + tvp[i].tv_usec) / 1000000); - if (t) { - int nops = alg->ishash ? count : 2*count; - - nops *= threads; - printf("%8.3lf sec, %7d %6s%s%6s crypts, %7d bytes, %8.0lf byte/sec, %7.1lf Mb/sec\n", - t, nops, alg->name, ealg? "+" : "", ealg? ealg->name : "", - size, (double)nops*size / t, - (double)nops*size / t * 8 / 1024 / 1024); - } -#ifdef __FreeBSD__ - if (profile) { - struct cryptostats stats; - size_t slen = sizeof (stats); - - if (sysctlbyname("debug.crypto_timing", NULL, NULL, - &otiming, sizeof (otiming)) < 0) - perror("debug.crypto_timing"); - if (sysctlbyname("kern.crypto_stats", &stats, &slen, NULL, 0) < 0) - perror("kern.cryptostats"); - if (stats.cs_invoke.count) { - printt("dispatch->invoke", &stats.cs_invoke); - printt("invoke->done", &stats.cs_done); - printt("done->cb", &stats.cs_cb); - printt("cb->finis", &stats.cs_finis); - } - } -#endif - fflush(stdout); -} - -int -main(int argc, char **argv) -{ - struct alg *alg = NULL, *ealg = NULL; - char *tmp; - int count = 1; - int sizes[128], nsizes = 0; - u_long cmd = CIOCGSESSION2; - int testall = 0; - int maxthreads = 1; - int profile = 0; - int i, ch; - - while ((ch = getopt(argc, argv, "cpzsva:bd:t:")) != -1) { - switch (ch) { -#ifdef CIOCGSSESSION - case 's': - cmd = CIOCGSSESSION; - break; -#endif - case 'v': - verbose++; - break; - case 'a': - tmp = strchr(optarg, '+'); - if (tmp != NULL) { - *tmp = '\0'; - ealg = getalgbyname(optarg); - if (ealg == NULL || ealg->ishash) - usage(argv[0]); - optarg = tmp + 1; - } - - alg = getalgbyname(optarg); - if (alg == NULL) { - if (streq(optarg, "rijndael")) - alg = getalgbyname("aes"); - else - usage(argv[0]); - } else if (ealg != NULL && !alg->ishash) - usage(argv[0]); - break; - case 'd': - crid = crlookup(optarg); - break; - case 't': - maxthreads = atoi(optarg); - break; - case 'z': - testall = 1; - break; - case 'p': - profile = 1; - break; - case 'b': - opflags |= COP_F_BATCH; - break; - case 'c': - verify = 1; - break; - default: - usage(argv[0]); - } - } - argc -= optind, argv += optind; - if (argc > 0) - count = atoi(argv[0]); - while (argc > 1) { - int s = atoi(argv[1]); - if (nsizes < nitems(sizes)) { - sizes[nsizes++] = s; - } else { - printf("Too many sizes, ignoring %u\n", s); - } - argc--, argv++; - } - if (maxthreads > CPU_SETSIZE) - errx(EX_USAGE, "Too many threads, %d, choose fewer.", maxthreads); - - if (nsizes == 0) { - if (alg) - sizes[nsizes++] = alg->blocksize; - else - sizes[nsizes++] = 8; - if (testall) { - while (sizes[nsizes-1] < 8*1024) { - sizes[nsizes] = sizes[nsizes-1]<<1; - nsizes++; - } - } - } - - if (testall) { - for (i = 0; i < nitems(algorithms); i++) { - int j; - alg = &algorithms[i]; - for (j = 0; j < nsizes; j++) - runtests(ealg, alg, count, sizes[j], cmd, maxthreads, profile); - } - } else { - if (alg == NULL) - alg = getalgbycode(CRYPTO_3DES_CBC); - for (i = 0; i < nsizes; i++) - runtests(ealg, alg, count, sizes[i], cmd, maxthreads, profile); - } - - return (0); -} - -void -hexdump(char *p, int n) -{ - int i, off; - - for (off = 0; n > 0; off += 16, n -= 16) { - printf("%s%04x:", off == 0 ? "\n" : "", off); - i = (n >= 16 ? 16 : n); - do { - printf(" %02x", *p++ & 0xff); - } while (--i); - printf("\n"); - } -}