Please note as of Wednesday, August 15th, 2018 this wiki has been set to read only. If you are a TI Employee and require Edit ability please contact x0211426 from the company directory.

Installing AM387x C6A814x DM814x Crypto Support

From Texas Instruments Wiki
Jump to: navigation, search

Introduction

The DM814x Crypto API Driver is a set of Linux drivers that provide access to the hardware cryptographic accelerators available on DM814x/C6A814x/AM387x devices. These drivers are available in the form of a patch which must be applied to the Linux kernel source code for DM814x/C6A814x/AM387x.

In addition to the driver patch, an Open Cryptographic Framework (OCF) patch can be installed to allow access from user space. OCF allows access to the driver from user space applications such as OpenSSL via the /dev/crypto device.

The driver has been tested with the Linux source code from the Linux EZSDK Release 5.03.01.15 for DM814x/C6A814x/AM387x.

Assumptions

Hardware:

  • The examples here have been tested with a TI DM814x/387x EVM DDR3 PG2.0 Rev C.
  • Host development system running Ubuntu with standard software development tools installed (see EZ SDK documentation for more information).

Software:

Installing the Crypto API drivers

Before attempting to patch the kernel, first install the EZSDK distribution and build the kernel following the instructions in the EZSDK documentation.

After the kernel has been built once, the kernel configuration information will be set in the file ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/.config.

Patching the kernel

To patch the kernel:

1. Download the patch file into the local file system of your development host

2. Unzip the patch file to the file ~/NSS-Crypto-driver-software-beta-0.9.patch.

3. Change to the PSP source directory and use the patch file

host $ cd ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/
host $ patch -p1 < ~/NSS-Crypto-driver-software-beta-0.9.patch
patching file arch/arm/mach-omap2/devices.c
Hunk #1 succeeded at 645 (offset 18 lines).
Hunk #2 succeeded at 726 (offset 18 lines).
Hunk #3 succeeded at 2704 with fuzz 2 (offset 641 lines).
patching file arch/arm/plat-omap/include/plat/ti81xx.h
patching file drivers/char/hw_random/Kconfig
Hunk #1 succeeded at 152 (offset 26 lines).
patching file drivers/char/hw_random/Makefile
patching file drivers/char/hw_random/nss-rng.c
patching file drivers/crypto/Kconfig
patching file drivers/crypto/Makefile
patching file drivers/crypto/nss-aes.c
patching file drivers/crypto/nss-cdma.c
patching file drivers/crypto/nss-cdma.h
patching file drivers/crypto/nss-des.c
patching file drivers/crypto/nss-sham.c
patching file drivers/crypto/nss.h

4. The files drivers/crypto/nss-sham.c and drivers/char/hw_random/nss-rng.c need additional patching. Load the patch files NSS-sham-driver-beta-0.91.patch.gz, NSS-sham-driver-beta-0.92.patch.gz, and NSS-rng-driver-beta-0.91.patch.gz and use these for these additional patches.

host $ zcat NSS-sham-driver-beta-0.91.patch.gz | patch -p1
patching file drivers/crypto/nss-sham.c
host $ zcat NSS-sham-driver-beta-0.92.patch.gz | patch -p1
patching file drivers/crypto/nss-sham.c
host $ zcat NSS-rng-driver-beta-0.91.patch.gz | patch -p1
patching file drivers/char/hw_random/nss-rng.c
host $

Configuring the kernel

Use menuconfig to configure the kernel for crypto and hardware random number support.

1. Move to the PSP source directory

host $ cd ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/

2. Start up menuconfig

host $ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm menuconfig

3. Move to the Character devices configuration, and select Hardware Random Number Generator Core support and Netra Random Number Generator support. Note that the latter doesn't appear until Hardware Random Number Generator Core support has been selected.

      Device Drivers  --->
      Character devices  ---> 
  <*> Hardware Random Number Generator Core support
  < >   Timer IOMEM HW Random Number Generator support (NEW)
  <*>   Netra Random Number Generator support (NEW)

4. Exit back to the main configuration screen, and move to the Cryptographic API selection. On the Cryptographic API screen select the options as shown below. Note that the Disable run-time self tests that pops up after selecting the Cryptographic algorithm manager, has been de-selected. Note that the Testing module has been selected as a module to allow for quick and dirty testing of the Crypto API layer.

  --- Cryptographic API
  <*>   Cryptographic algorithm manager
  [ ]   Disable run-time self tests        
  <M>   Testing module
  <*>   Sequence Number IV Generator
        *** Block modes ***
  <*>   CBC support
  <*>   CTR support
  <*>   ECB support
  <*>   HMAC support
  <*>   MD5 digest algorithm
  <*>   SHA1 digest algorithm
  <*>   SHA224 and SHA256 digest algorithm
  <*>   AES cipher algorithms
  <*>   DES and Triple DES EDE cipher algorithms
  [*]   Hardware crypto devices  --->

5. After selecting the Hardware crypto devices option, enter the Hardware crypto devices configuration screen, and select all three Netra support options, as shown below.

  --- Hardware crypto devices
  < >   Driver HIFN 795x crypto accelerator chips (NEW)
  <*>   Support for Netra AES hw engine (NEW)
  <*>   Support for Netra DES hw engine (NEW)
  <*>   Support for Netra SHA/MD5 hw engine (NEW)

6. Exit back to the main configuration screen, and finally exit the configuration utility. Select Yes when asked to save the new configuration. The utility will indicate the configuration written to .config.

7. Next, rebuild the kernel with the new configuration.

host $ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage

8. Copy the generated uImage to the tftpserver directory

host $ sudo cp -r arch/arm/boot/uImage /tftpboot/uImage-dm814x-evm.bin

9. Finally, restart the EVM with the newly generated uImage file. After the boot completes, you can verify that the crypto support has been installed by executing the following commands on the target:

root@dm814x-evm:~# dmesg | grep nss
nss_rng nss_rng: NSS Random Number Generator ver. 2.0
nss_aes_mod_init: loading NSS AES driver
nss-aes nss-aes: NSS AES hw accel rev: 3.2 (context 0 @0x41140000)
nss-aes nss-aes: NSS AES hw accel rev: 3.2 (context 1 @0x41141000)
nss-aes nss-aes: NSS AES hw accel rev: 3.2 (context 2 @0x411a0000)
nss-aes nss-aes: NSS AES hw accel rev: 3.2 (context 3 @0x411a1000)
nss_aes_probe: probe() done
nss_des_mod_init: loading NSS DES driver
nss-des nss-des: NSS DES hw accel rev: 2.2 (context 0 @0x41160000)
nss-des nss-des: NSS DES hw accel rev: 2.2 (context 1 @0x41161000)
nss_des_probe: probe() done
nss_sham_mod_init: loading NSS SHA/MD5 driver
nss-sham nss-sham: NSS SHA/MD5 hw accel rev: 4.3 (context 0 @0x41100000)
nss-sham nss-sham: NSS SHA/MD5 hw accel rev: 4.3 (context 1 @0x41101000)
nss-sham nss-sham: NSS SHA/MD5 hw accel rev: 4.3 (context 2 @0x411c0000)
nss-sham nss-sham: NSS SHA/MD5 hw accel rev: 4.3 (context 3 @0x411c1000)
nss_sham_probe: probe() done
root@dm814x-evm:~# ls -l /dev/hwrng
crw-rw----    1 root     root      10, 183 Jan  1  2000 /dev/hwrng

Note: the (NEW) indicators in the configuration utility only show up the first time after configuration (Kconfig) files have been modified.

Installing the Open Crypto Framework (OCF)

The Linux Crypto API is purely a kernel mode environment. To enable user mode access, you need to install the Linux Open Crypto Framework (OCF).

1. Download OCF distribution ocf-linux-20120127.tar.gz from the OCF project site on sourceforge

2. Unpack the distribution to a suitable location (named OCF in following steps)

tar zxvf ocf-linux-20120127.tar.gz

3. Create the patch files

host $ cd ${OCF}/ocf
host $ make patch

4. Apply patch file to Linux kernel source

host $ cd ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/
host $ patch -p1 <${OCF}/ocf/ocf-linux-26.patch

5. Install cryptodev.h from the ocf directory to an include directory for the target platform.

host $ cp ${OCF}/ocf/cryptodev.h ${EZSDK}/linux-devkit/arm-none-linux-gnueabi/usr/include/crypto/

6. Start up menuconfig

host $ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm menuconfig

7. Move to the OCF Configuration configuration, and select OCF (Open Cryptograhic Framework) (sic), cryptodev (user space support) and cryptosoft (software crypto engine).

  OCF Configuration  --->
  <*> OCF (Open Cryptograhic Framework)
  <*>   cryptodev (user space support)
  <*>   cryptosoft (software crypto engine)

8. Exit menuconfig and save the new configuration. Then rebuild the kernel.

host $ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage

9. Finally, restart the target with the newly generated kernel image, and make sure /dev/crypto is available for user space access to OCF.

root@dm814x-evm:~# ls -l /dev/crypto
crw-rw----    1 root     root      10,  70 Jan  1  2000 /dev/crypto

Random Number Generator testing

Support tools for the hardware random number generator can be loaded from rng-tools on Sourceforge. The latest version at the time of this write-up is version 3.0, dated 2010-07-04.

1. We're still in the Linux-devkit environment. Download the file rng-tools-3.tar.gz, and untar in a suitable location.

2. Change to the directory that contains the rng-tools distribution, and configure the package:

host $ ./configure --prefix=/home/user/targetfs/TI814x-targetfs_5_03_01/usr \
 --exec-prefix=/home/user/targetfs/TI814x-targetfs_5_03_01/usr \
 --host --target=arm-linux

3. Next make the rngd and rngtest executables.

host $ make

4. Install the generated executables in the target filesystem.

host $ sudo bash -c \
 'source /home/user/ti-ezsdk_dm814x-evm_5_03_01_15/linux-devkit/environment-setup ; \
 make install-exec'

5. Test the random number generator on the target.

root@dm814x-evm:~# cat /dev/hwrng | rngtest -c 1000
rngtest 3
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 1
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=788.218; avg=4070.983; max=2790178.571)Kibits/s
rngtest: FIPS tests speed: (min=846.755; avg=15388.376; max=21920.595)Kibits/s
rngtest: Program run time: 6072670 microseconds

Note that the results may be slightly different on your system, since, after all, we're dealing with a random number generator. Any appreciable number of errors typically indicates a bad random number generator.

If you're satisfied the random number generator is working correctly, you can use rngd (the random number generator daemon) to feed the /dev/random entropy pool.

The tcrypt quick and dirty testing tool

Tcrypt is a quick and dirty testing module that is packaged as part of the Crypto API distribution. In the previous section we selected this module to be included in the configuration. In this section we'll show how to build the module, and how to use it.

1. We're still in the Linux-devkit environment, and the current directory is the root of the PSP distribution (${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/). First build the module(s)

host $ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm \
       INSTALL_MOD_PATH=/home/user/targetfs/TI814x-targetfs_5_03_01 modules

2. Next install the generated modules in the target filesystem

host $ sudo bash -c \
       'source /home/user/ti-ezsdk_dm814x-evm_5_03_01_15/linux-devkit/environment-setup ; \
       make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm \
       INSTALL_MOD_PATH=/home/user/targetfs/TI814x-targetfs_5_03_01 modules_install'

3. Remake the syslink and cmem components on the SDK top level, and copy the resulting .ko files to their proper location in the target filesystem.

host $ cd ${EZSDK}
host $ make syslink_clean
host $ make syslink
host $ make syslink_install
host $ make cmem_clean
host $ make cmem
host $ make cmem_install
host $ cd ${HOME}/targetfs/TI814x-targetfs_5_03_01
host $ sudo mkdir lib/modules/2.6.37/kernel/drivers/dsp
host $ sudo cp -r home/root/dm814x-evm/lib/modules/2.6.37/kernel/drivers/dsp/* \
       lib/modules/2.6.37/kernel/drivers/dsp

4. Disable the startup routines in the target filesystem at /etc/init.d/load-hd-firmware.sh by putting an exit 0 command at the beginning of the file.

5. Reboot the EVM and regenerate the module dependency

 root@dm814x-evm:~# depmod -a

6. Undo the changes from step 4 (i.e. remove the early exit commands)

5. Reboot the EVM and test some crypto algorithms on the target

root@dm814x-evm:~# modprobe tcrypt sec=2 mode=402
 
testing speed of async md5
test  0 (   16 byte blocks,   16 bytes per update,   1 updates):  89133 opers/sec,   1426136 bytes/sec
test  1 (   64 byte blocks,   16 bytes per update,   4 updates):  54745 opers/sec,   3503680 bytes/sec
test  2 (   64 byte blocks,   64 bytes per update,   1 updates):  66364 opers/sec,   4247296 bytes/sec
test  3 (  256 byte blocks,   16 bytes per update,  16 updates):  32564 opers/sec,   8336512 bytes/sec
test  4 (  256 byte blocks,   64 bytes per update,   4 updates):  39010 opers/sec,   9986688 bytes/sec
test  5 (  256 byte blocks,  256 bytes per update,   1 updates):  40957 opers/sec,  10484992 bytes/sec
test  6 ( 1024 byte blocks,   16 bytes per update,  64 updates):  14083 opers/sec,  14420992 bytes/sec
test  7 ( 1024 byte blocks,  256 bytes per update,   4 updates):  21510 opers/sec,  22026240 bytes/sec
test  8 ( 1024 byte blocks, 1024 bytes per update,   1 updates):  21969 opers/sec,  22496768 bytes/sec
test  9 ( 2048 byte blocks,   16 bytes per update, 128 updates):   9908 opers/sec,  20291584 bytes/sec
test 10 ( 2048 byte blocks,  256 bytes per update,   8 updates):  19549 opers/sec,  40036352 bytes/sec
test 11 ( 2048 byte blocks, 1024 bytes per update,   2 updates):  20811 opers/sec,  42620928 bytes/sec
test 12 ( 2048 byte blocks, 2048 bytes per update,   1 updates):  21066 opers/sec,  43143168 bytes/sec
test 13 ( 4096 byte blocks,   16 bytes per update, 256 updates):   5630 opers/sec,  23062528 bytes/sec
test 14 ( 4096 byte blocks,  256 bytes per update,  16 updates):  13241 opers/sec,  54235136 bytes/sec
test 15 ( 4096 byte blocks, 1024 bytes per update,   4 updates):  13919 opers/sec,  57012224 bytes/sec
test 16 ( 4096 byte blocks, 4096 bytes per update,   1 updates):  16484 opers/sec,  67518464 bytes/sec
test 17 ( 8192 byte blocks,   16 bytes per update, 512 updates):   2745 opers/sec,  22487040 bytes/sec
test 18 ( 8192 byte blocks,  256 bytes per update,  32 updates):   6253 opers/sec,  51228672 bytes/sec
test 19 ( 8192 byte blocks, 1024 bytes per update,   8 updates):   6722 opers/sec,  55066624 bytes/sec
test 20 ( 8192 byte blocks, 4096 bytes per update,   2 updates):   7425 opers/sec,  60829696 bytes/sec
test 21 ( 8192 byte blocks, 8192 bytes per update,   1 updates):   9794 opers/sec,  80232448 bytes/sec
FATAL: Error inserting tcrypt (/lib/modules/2.6.37/kernel/crypto/tcrypt.ko): Resource temporarily unavailable

tcrypt module parameter details

tcrypt accepts two groups of optional module parameters:

  • alg, type and mask - can be used to verify whether a specific algorithm is supported. The definitions for legal type and mask values can be found in ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/include/linux/crypto.h.
  • mode, and sec - allow specific tests to be run for a specific duration. For more details on the tests specified by the various mode values, consult the source code at ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/crypto/tcrypt.c. sec specifies the length in seconds of speed tests. In general the mode values indicate the following
    • 0..150 are algorithm tests
    • 200..206 are cipher speed tests
    • 300..318 are synchronous hash speed tests
    • 400..417 are asynchronous hash speed tests
    • 1000 checks the available algorithms

Installing the OCF test software (optional)

Building cryptotest

cryptotest is part of the Open Crypto Framework package downloaded earlier. It can be found in the crypto-tools subdirectory of the OCF package.

1. Make sure that cryptodev.h from the ocf directory is installed as crypto/cryptodev.h in an include directory that is used for building applications for the target platform. In our case this would be ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/include/crypto. Also make sure you're in the linux-devkit environment, and that EZSDK has been set appropriately.

host $ mkdir ${EZSDK}/linux-devkit/arm-none-linux-gnueabi/usr/include/crypto
host $ cp -r ${EZSDK}/board-support/linux-2.6.37-psp04.01.00.06.patch2/crypto/ocf/cryptodev.h \
         ${EZSDK}/linux-devkit/arm-none-linux-gnueabi/usr/include/crypto

2. Compile the cryptotest application

host $ cd ${OCF}/crypto-tools
host $ make cryptotest

3. Copy the cryptotest application over to /home/root in the target filesystem.

host $ cp -r cryptotest /home/user/targetfs/TI814x-targetfs_5_03_01/home/root/

Running cryptotest

With the target booted with a kernel image that includes both the previously generated Crypto API drivers and OCF software, the cryptotest application can now be used to test the crypto performance. Note that the DES crypto performance is low compared to the 3DES performance, since there is currently no hardware driver support implemented for the DES crypto. This also skews the processor load somewhat, since DES will be performed completely in software.

root@dm814x-evm:~# time -v ./cryptotest -z 128
   0.003 sec,     256    des crypts,       8 bytes,   767041 byte/sec,     5.9 Mb/sec
   0.004 sec,     256    des crypts,      16 bytes,  1054854 byte/sec,     8.0 Mb/sec
   0.006 sec,     256    des crypts,      32 bytes,  1422716 byte/sec,    10.9 Mb/sec
   0.007 sec,     256    des crypts,      64 bytes,  2489970 byte/sec,    19.0 Mb/sec
   0.008 sec,     256    des crypts,     128 bytes,  3916338 byte/sec,    29.9 Mb/sec
   0.012 sec,     256    des crypts,     256 bytes,  5518821 byte/sec,    42.1 Mb/sec
   0.019 sec,     256    des crypts,     512 bytes,  6975997 byte/sec,    53.2 Mb/sec
   0.034 sec,     256    des crypts,    1024 bytes,  7766999 byte/sec,    59.3 Mb/sec
   0.064 sec,     256    des crypts,    2048 bytes,  8242356 byte/sec,    62.9 Mb/sec
   0.120 sec,     256    des crypts,    4096 bytes,  8763914 byte/sec,    66.9 Mb/sec
   0.235 sec,     256    des crypts,    8192 bytes,  8918965 byte/sec,    68.0 Mb/sec
   0.467 sec,     256    des crypts,   16384 bytes,  8984380 byte/sec,    68.5 Mb/sec
   0.931 sec,     256    des crypts,   32768 bytes,  9006122 byte/sec,    68.7 Mb/sec
   1.844 sec,     256    des crypts,   65280 bytes,  9060728 byte/sec,    69.1 Mb/sec
   0.008 sec,     256   3des crypts,       8 bytes,   244362 byte/sec,     1.9 Mb/sec
   0.009 sec,     256   3des crypts,      16 bytes,   476501 byte/sec,     3.6 Mb/sec
   0.008 sec,     256   3des crypts,      32 bytes,  1057851 byte/sec,     8.1 Mb/sec
   0.009 sec,     256   3des crypts,      64 bytes,  1859283 byte/sec,    14.2 Mb/sec
   0.010 sec,     256   3des crypts,     128 bytes,  3429050 byte/sec,    26.2 Mb/sec
   0.017 sec,     256   3des crypts,     256 bytes,  3965630 byte/sec,    30.3 Mb/sec
   0.017 sec,     256   3des crypts,     512 bytes,  7616480 byte/sec,    58.1 Mb/sec
   0.026 sec,     256   3des crypts,    1024 bytes,  9953072 byte/sec,    75.9 Mb/sec
   0.041 sec,     256   3des crypts,    2048 bytes, 12687559 byte/sec,    96.8 Mb/sec
   0.071 sec,     256   3des crypts,    4096 bytes, 14686761 byte/sec,   112.1 Mb/sec
   0.141 sec,     256   3des crypts,    8192 bytes, 14877428 byte/sec,   113.5 Mb/sec
   0.256 sec,     256   3des crypts,   16384 bytes, 16406816 byte/sec,   125.2 Mb/sec
   0.509 sec,     256   3des crypts,   32768 bytes, 16493041 byte/sec,   125.8 Mb/sec
   0.997 sec,     256   3des crypts,   65280 bytes, 16761327 byte/sec,   127.9 Mb/sec
   0.006 sec,     256    aes crypts,      16 bytes,   700051 byte/sec,     5.3 Mb/sec
   0.008 sec,     256    aes crypts,      32 bytes,  1090667 byte/sec,     8.3 Mb/sec
   0.009 sec,     256    aes crypts,      64 bytes,  1917603 byte/sec,    14.6 Mb/sec
   0.009 sec,     256    aes crypts,     128 bytes,  3593376 byte/sec,    27.4 Mb/sec
   0.010 sec,     256    aes crypts,     256 bytes,  6495787 byte/sec,    49.6 Mb/sec
   0.017 sec,     256    aes crypts,     512 bytes,  7641791 byte/sec,    58.3 Mb/sec
   0.018 sec,     256    aes crypts,    1024 bytes, 14420155 byte/sec,   110.0 Mb/sec
   0.030 sec,     256    aes crypts,    2048 bytes, 17719616 byte/sec,   135.2 Mb/sec
   0.046 sec,     256    aes crypts,    4096 bytes, 22881683 byte/sec,   174.6 Mb/sec
   0.085 sec,     256    aes crypts,    8192 bytes, 24596561 byte/sec,   187.7 Mb/sec
   0.154 sec,     256    aes crypts,   16384 bytes, 27273640 byte/sec,   208.1 Mb/sec
   0.301 sec,     256    aes crypts,   32768 bytes, 27886918 byte/sec,   212.8 Mb/sec
   0.585 sec,     256    aes crypts,   65280 bytes, 28580898 byte/sec,   218.1 Mb/sec
   0.009 sec,     256 aes192 crypts,      16 bytes,   479681 byte/sec,     3.7 Mb/sec
   0.008 sec,     256 aes192 crypts,      32 bytes,  1013360 byte/sec,     7.7 Mb/sec
   0.008 sec,     256 aes192 crypts,      64 bytes,  2011541 byte/sec,    15.3 Mb/sec
   0.009 sec,     256 aes192 crypts,     128 bytes,  3719832 byte/sec,    28.4 Mb/sec
   0.010 sec,     256 aes192 crypts,     256 bytes,  6479090 byte/sec,    49.4 Mb/sec
   0.014 sec,     256 aes192 crypts,     512 bytes,  9371657 byte/sec,    71.5 Mb/sec
   0.020 sec,     256 aes192 crypts,    1024 bytes, 12987713 byte/sec,    99.1 Mb/sec
   0.028 sec,     256 aes192 crypts,    2048 bytes, 18921217 byte/sec,   144.4 Mb/sec
   0.045 sec,     256 aes192 crypts,    4096 bytes, 23144818 byte/sec,   176.6 Mb/sec
   0.086 sec,     256 aes192 crypts,    8192 bytes, 24313960 byte/sec,   185.5 Mb/sec
   0.155 sec,     256 aes192 crypts,   16384 bytes, 27094112 byte/sec,   206.7 Mb/sec
   0.302 sec,     256 aes192 crypts,   32768 bytes, 27775192 byte/sec,   211.9 Mb/sec
   0.586 sec,     256 aes192 crypts,   65280 bytes, 28501883 byte/sec,   217.5 Mb/sec
   0.008 sec,     256 aes256 crypts,      16 bytes,   483932 byte/sec,     3.7 Mb/sec
   0.009 sec,     256 aes256 crypts,      32 bytes,   942476 byte/sec,     7.2 Mb/sec
   0.009 sec,     256 aes256 crypts,      64 bytes,  1911562 byte/sec,    14.6 Mb/sec
   0.009 sec,     256 aes256 crypts,     128 bytes,  3513241 byte/sec,    26.8 Mb/sec
   0.010 sec,     256 aes256 crypts,     256 bytes,  6463116 byte/sec,    49.3 Mb/sec
   0.018 sec,     256 aes256 crypts,     512 bytes,  7489829 byte/sec,    57.1 Mb/sec
   0.018 sec,     256 aes256 crypts,    1024 bytes, 14192962 byte/sec,   108.3 Mb/sec
   0.028 sec,     256 aes256 crypts,    2048 bytes, 18624796 byte/sec,   142.1 Mb/sec
   0.047 sec,     256 aes256 crypts,    4096 bytes, 22454890 byte/sec,   171.3 Mb/sec
   0.086 sec,     256 aes256 crypts,    8192 bytes, 24265010 byte/sec,   185.1 Mb/sec
   0.156 sec,     256 aes256 crypts,   16384 bytes, 26804261 byte/sec,   204.5 Mb/sec
   0.306 sec,     256 aes256 crypts,   32768 bytes, 27410437 byte/sec,   209.1 Mb/sec
   0.591 sec,     256 aes256 crypts,   65280 bytes, 28256157 byte/sec,   215.6 Mb/sec
   0.004 sec,     128    md5 crypts,       8 bytes,   234379 byte/sec,     1.8 Mb/sec
   0.003 sec,     128    md5 crypts,      16 bytes,   612990 byte/sec,     4.7 Mb/sec
   0.003 sec,     128    md5 crypts,      32 bytes,  1334202 byte/sec,    10.2 Mb/sec
   0.003 sec,     128    md5 crypts,      64 bytes,  2592405 byte/sec,    19.8 Mb/sec
   0.005 sec,     128    md5 crypts,     128 bytes,  3547856 byte/sec,    27.1 Mb/sec
   0.005 sec,     128    md5 crypts,     256 bytes,  6412524 byte/sec,    48.9 Mb/sec
   0.005 sec,     128    md5 crypts,     512 bytes, 12433314 byte/sec,    94.9 Mb/sec
   0.006 sec,     128    md5 crypts,    1024 bytes, 22129326 byte/sec,   168.8 Mb/sec
   0.009 sec,     128    md5 crypts,    2048 bytes, 28456795 byte/sec,   217.1 Mb/sec
   0.011 sec,     128    md5 crypts,    4096 bytes, 45673665 byte/sec,   348.5 Mb/sec
   0.016 sec,     128    md5 crypts,    8192 bytes, 65177524 byte/sec,   497.3 Mb/sec
   0.027 sec,     128    md5 crypts,   16384 bytes, 77408534 byte/sec,   590.6 Mb/sec
   0.046 sec,     128    md5 crypts,   32768 bytes, 91771048 byte/sec,   700.2 Mb/sec
   0.085 sec,     128    md5 crypts,   65280 bytes, 98251984 byte/sec,   749.6 Mb/sec
   0.005 sec,     128 md5_hmac crypts,       8 bytes,   218757 byte/sec,     1.7 Mb/sec
   0.005 sec,     128 md5_hmac crypts,      16 bytes,   442907 byte/sec,     3.4 Mb/sec
   0.004 sec,     128 md5_hmac crypts,      32 bytes,  1032779 byte/sec,     7.9 Mb/sec
   0.004 sec,     128 md5_hmac crypts,      64 bytes,  1979700 byte/sec,    15.1 Mb/sec
   0.005 sec,     128 md5_hmac crypts,     128 bytes,  3122546 byte/sec,    23.8 Mb/sec
   0.005 sec,     128 md5_hmac crypts,     256 bytes,  6080534 byte/sec,    46.4 Mb/sec
   0.006 sec,     128 md5_hmac crypts,     512 bytes, 11417422 byte/sec,    87.1 Mb/sec
   0.006 sec,     128 md5_hmac crypts,    1024 bytes, 21008495 byte/sec,   160.3 Mb/sec
   0.009 sec,     128 md5_hmac crypts,    2048 bytes, 28640227 byte/sec,   218.5 Mb/sec
   0.011 sec,     128 md5_hmac crypts,    4096 bytes, 48197095 byte/sec,   367.7 Mb/sec
   0.017 sec,     128 md5_hmac crypts,    8192 bytes, 62631466 byte/sec,   477.8 Mb/sec
   0.026 sec,     128 md5_hmac crypts,   16384 bytes, 79715372 byte/sec,   608.2 Mb/sec
   0.046 sec,     128 md5_hmac crypts,   32768 bytes, 91415021 byte/sec,   697.4 Mb/sec
   0.085 sec,     128 md5_hmac crypts,   65280 bytes, 98103177 byte/sec,   748.5 Mb/sec
   0.003 sec,     128   sha1 crypts,       8 bytes,   325700 byte/sec,     2.5 Mb/sec
   0.003 sec,     128   sha1 crypts,      16 bytes,   666667 byte/sec,     5.1 Mb/sec
   0.003 sec,     128   sha1 crypts,      32 bytes,  1320438 byte/sec,    10.1 Mb/sec
   0.004 sec,     128   sha1 crypts,      64 bytes,  1877177 byte/sec,    14.3 Mb/sec
   0.005 sec,     128   sha1 crypts,     128 bytes,  3301894 byte/sec,    25.2 Mb/sec
   0.005 sec,     128   sha1 crypts,     256 bytes,  6474610 byte/sec,    49.4 Mb/sec
   0.005 sec,     128   sha1 crypts,     512 bytes, 12258885 byte/sec,    93.5 Mb/sec
   0.006 sec,     128   sha1 crypts,    1024 bytes, 21497786 byte/sec,   164.0 Mb/sec
   0.009 sec,     128   sha1 crypts,    2048 bytes, 27905472 byte/sec,   212.9 Mb/sec
   0.011 sec,     128   sha1 crypts,    4096 bytes, 45657755 byte/sec,   348.3 Mb/sec
   0.016 sec,     128   sha1 crypts,    8192 bytes, 67147541 byte/sec,   512.3 Mb/sec
   0.026 sec,     128   sha1 crypts,   16384 bytes, 79470689 byte/sec,   606.3 Mb/sec
   0.046 sec,     128   sha1 crypts,   32768 bytes, 91357278 byte/sec,   697.0 Mb/sec
   0.085 sec,     128   sha1 crypts,   65280 bytes, 98013419 byte/sec,   747.8 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,       8 bytes,   217364 byte/sec,     1.7 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,      16 bytes,   436581 byte/sec,     3.3 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,      32 bytes,   883520 byte/sec,     6.7 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,      64 bytes,  1745951 byte/sec,    13.3 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,     128 bytes,  3071616 byte/sec,    23.4 Mb/sec
   0.005 sec,     128 sha1_hmac crypts,     256 bytes,  6217837 byte/sec,    47.4 Mb/sec
   0.006 sec,     128 sha1_hmac crypts,     512 bytes, 11409471 byte/sec,    87.0 Mb/sec
   0.006 sec,     128 sha1_hmac crypts,    1024 bytes, 21185065 byte/sec,   161.6 Mb/sec
   0.008 sec,     128 sha1_hmac crypts,    2048 bytes, 33432470 byte/sec,   255.1 Mb/sec
   0.012 sec,     128 sha1_hmac crypts,    4096 bytes, 44620255 byte/sec,   340.4 Mb/sec
   0.017 sec,     128 sha1_hmac crypts,    8192 bytes, 62567934 byte/sec,   477.4 Mb/sec
   0.026 sec,     128 sha1_hmac crypts,   16384 bytes, 80132666 byte/sec,   611.4 Mb/sec
   0.046 sec,     128 sha1_hmac crypts,   32768 bytes, 90961029 byte/sec,   694.0 Mb/sec
   0.088 sec,     128 sha1_hmac crypts,   65280 bytes, 95367794 byte/sec,   727.6 Mb/sec
   0.004 sec,     128 sha256 crypts,       8 bytes,   283657 byte/sec,     2.2 Mb/sec
   0.003 sec,     128 sha256 crypts,      16 bytes,   653061 byte/sec,     5.0 Mb/sec
   0.003 sec,     128 sha256 crypts,      32 bytes,  1322143 byte/sec,    10.1 Mb/sec
   0.004 sec,     128 sha256 crypts,      64 bytes,  2058291 byte/sec,    15.7 Mb/sec
   0.005 sec,     128 sha256 crypts,     128 bytes,  3261146 byte/sec,    24.9 Mb/sec
   0.005 sec,     128 sha256 crypts,     256 bytes,  6489998 byte/sec,    49.5 Mb/sec
   0.005 sec,     128 sha256 crypts,     512 bytes, 12018339 byte/sec,    91.7 Mb/sec
   0.006 sec,     128 sha256 crypts,    1024 bytes, 21951432 byte/sec,   167.5 Mb/sec
   0.009 sec,     128 sha256 crypts,    2048 bytes, 28287903 byte/sec,   215.8 Mb/sec
   0.011 sec,     128 sha256 crypts,    4096 bytes, 45817356 byte/sec,   349.6 Mb/sec
   0.016 sec,     128 sha256 crypts,    8192 bytes, 65852917 byte/sec,   502.4 Mb/sec
   0.026 sec,     128 sha256 crypts,   16384 bytes, 79449614 byte/sec,   606.2 Mb/sec
   0.046 sec,     128 sha256 crypts,   32768 bytes, 91586689 byte/sec,   698.8 Mb/sec
   0.085 sec,     128 sha256 crypts,   65280 bytes, 98209257 byte/sec,   749.3 Mb/sec
   0.005 sec,     128 sha256_hmac crypts,       8 bytes,   210051 byte/sec,     1.6 Mb/sec
   0.004 sec,     128 sha256_hmac crypts,      16 bytes,   488317 byte/sec,     3.7 Mb/sec
   0.004 sec,     128 sha256_hmac crypts,      32 bytes,  1077044 byte/sec,     8.2 Mb/sec
   0.004 sec,     128 sha256_hmac crypts,      64 bytes,  1968284 byte/sec,    15.0 Mb/sec
   0.005 sec,     128 sha256_hmac crypts,     128 bytes,  3059570 byte/sec,    23.3 Mb/sec
   0.005 sec,     128 sha256_hmac crypts,     256 bytes,  6097507 byte/sec,    46.5 Mb/sec
   0.006 sec,     128 sha256_hmac crypts,     512 bytes, 11373829 byte/sec,    86.8 Mb/sec
   0.006 sec,     128 sha256_hmac crypts,    1024 bytes, 20951407 byte/sec,   159.8 Mb/sec
   0.008 sec,     128 sha256_hmac crypts,    2048 bytes, 31522848 byte/sec,   240.5 Mb/sec
   0.011 sec,     128 sha256_hmac crypts,    4096 bytes, 46221282 byte/sec,   352.6 Mb/sec
   0.016 sec,     128 sha256_hmac crypts,    8192 bytes, 64515843 byte/sec,   492.2 Mb/sec
   0.026 sec,     128 sha256_hmac crypts,   16384 bytes, 79419526 byte/sec,   605.9 Mb/sec
   0.046 sec,     128 sha256_hmac crypts,   32768 bytes, 91216215 byte/sec,   695.9 Mb/sec
   0.086 sec,     128 sha256_hmac crypts,   65280 bytes, 97715408 byte/sec,   745.5 Mb/sec
        Command being timed: "./cryptotest -z 128"
        User time (seconds): 0.45
        System time (seconds): 4.89
        Percent of CPU this job got: 45%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0m 11.76s
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 3216
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 508
        Voluntary context switches: 16597
        Involuntary context switches: 8797
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0