summaryrefslogtreecommitdiff
path: root/cipher/asm-inline-s390x.h
Commit message (Collapse)AuthorAgeFilesLines
* ec: add zSeries/s390x accelerated scalar multiplicationJussi Kivilinna2021-07-021-0/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/asm-inline-s390x.h (PCC_FUNCTION_*): New. (pcc_query, pcc_scalar_multiply): New. * mpi/Makefile.am: Add 'ec-hw-s390x.c'. * mpi/ec-hw-s390x.c: New. * mpi/ec-internal.h (_gcry_s390x_ec_hw_mul_point) (mpi_ec_hw_mul_point): New. * mpi/ec.c (_gcry_mpi_ec_mul_point): Call 'mpi_ec_hw_mul_point'. * src/g10lib.h (HWF_S390X_MSA_9): New. * src/hwf-s390x.c (s390x_features): Add MSA9. * src/hwfeatures.c (hwflist): Add 's390x-msa-9'. -- Patch adds ECC scalar multiplication acceleration using s390x's PCC instruction. Following curves are supported: - Ed25519 - Ed448 - X25519 - X448 - NIST curves P-256, P-384 and P-521 Benchmark on z15 (5.2Ghz): Before: Ed25519 | nanosecs/iter cycles/iter mult | 389791 2026916 keygen | 572017 2974487 sign | 636603 3310336 verify | 1189097 6183305 = X25519 | nanosecs/iter cycles/iter mult | 296805 1543385 = Ed448 | nanosecs/iter cycles/iter mult | 1693373 8805541 keygen | 2382473 12388858 sign | 2609562 13569725 verify | 5177606 26923552 = X448 | nanosecs/iter cycles/iter mult | 1136178 5908127 = NIST-P256 | nanosecs/iter cycles/iter mult | 792620 4121625 keygen | 4627835 24064740 sign | 1528268 7946991 verify | 1678205 8726664 = NIST-P384 | nanosecs/iter cycles/iter mult | 1766418 9185373 keygen | 10158485 52824123 sign | 3341172 17374095 verify | 3694750 19212700 = NIST-P521 | nanosecs/iter cycles/iter mult | 3172566 16497346 keygen | 18184747 94560683 sign | 6039956 31407771 verify | 6480882 33700588 After: Ed25519 | nanosecs/iter cycles/iter speed-up mult | 25913 134746 15x keygen | 44447 231124 12x sign | 106928 556028 6x verify | 164681 856341 7x = X25519 | nanosecs/iter cycles/iter speed-up mult | 17761 92358 16x = Ed448 | nanosecs/iter cycles/iter speed-up mult | 50808 264199 33x keygen | 68644 356951 34x sign | 317446 1650720 8x verify | 457115 2376997 11x = X448 | nanosecs/iter cycles/iter speed-up mult | 35637 185313 31x = NIST-P256 | nanosecs/iter cycles/iter speed-up mult | 30678 159528 25x keygen | 323722 1683356 14x sign | 114176 593713 13x verify | 169901 883487 9x = NIST-P384 | nanosecs/iter cycles/iter speed-up mult | 59966 311822 29x keygen | 607778 3160445 16x sign | 209832 1091128 16x verify | 329506 1713431 11x = NIST-P521 | nanosecs/iter cycles/iter speed-up mult | 98230 510797 32x keygen | 1131686 5884765 16x sign | 397777 2068442 15x verify | 623076 3239998 10x Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add s390x/zSeries acceleration for SHA3Jussi Kivilinna2020-12-181-2/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/asm-inline-s390x.h (KLMD_PADDING_STATE): New. (kimd_execute): Change 'reg0' from read-only to read/write. (klmd_shake_execute): New. * cipher/keccak.c (USE_S390X_CRYPTO): New. (KECCAK_CONTEXT) [USE_S390X_CRYPTO]: New members. [USE_S390X_CRYPTO] (keccak_bwrite_s390x, keccak_final_s390x) (keccak_bextract_s390x, keccak_write_s390x, keccak_extract_s390x): New. (keccak_write) [USE_S390X_CRYPTO]: Use accelerated function if enabled. (keccak_final) [USE_S390X_CRYPTO]: Likewise. (keccak_extract) [USE_S390X_CRYPTO]: Likewise. (keccak_init) [USE_S390X_CRYPTO]: Detect and setup zSeries acceleration. -- Benchmark (z15, 5.2Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA3-224 | 3.71 ns/B 256.9 MiB/s 19.31 c/B SHA3-256 | 3.92 ns/B 243.0 MiB/s 20.41 c/B SHA3-384 | 5.12 ns/B 186.2 MiB/s 26.63 c/B SHA3-512 | 7.39 ns/B 129.0 MiB/s 38.43 c/B SHAKE128 | 3.19 ns/B 299.4 MiB/s 16.57 c/B SHAKE256 | 3.93 ns/B 242.9 MiB/s 20.42 c/B After: | nanosecs/byte mebibytes/sec cycles/byte SHA3-224 | 0.115 ns/B 8320 MiB/s 0.596 c/B SHA3-256 | 0.118 ns/B 8088 MiB/s 0.613 c/B SHA3-384 | 0.139 ns/B 6868 MiB/s 0.722 c/B SHA3-512 | 0.179 ns/B 5329 MiB/s 0.931 c/B SHAKE128 | 0.107 ns/B 8950 MiB/s 0.554 c/B SHAKE256 | 0.118 ns/B 8075 MiB/s 0.614 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add s390x/zSeries acceleration for SHA1Jussi Kivilinna2020-12-181-5/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/asm-inline-s390x.h (ALWAYS_INLINE): New. (klmd_query): New. (km_function_to_mask, kimd_execute, klmd_execute): Mark as always inline. * cipher/rijndael-s390x.c (ALWAYS_INLINE): Remove. * cipher/sha1.c (do_sha1_transform_s390x, do_sha1_final_s390x): New. (sha1_init) [SHA1_USE_S390X_CRYPTO]: Detect and setup s390x/zSeries acceleration. (sha1_final) [SHA1_USE_S390X_CRYPTO]: Use accelerated final function. * cipher/sha1.h (SHA1_USE_S390X_CRYPTO): New. (SHA1_CONTEXT) [SHA1_USE_S390X_CRYPTO]: New. -- Benchmark (z15, 5.2Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA1 | 2.48 ns/B 384.1 MiB/s 12.91 c/B After: | nanosecs/byte mebibytes/sec cycles/byte SHA1 | 0.513 ns/B 1861 MiB/s 2.67 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add bulk AES-GCM acceleration for s390x/zSeriesJussi Kivilinna2020-12-181-0/+114
* cipher/Makefile.am: Add 'asm-inline-s390x.h'. * cipher/asm-inline-s390x.h: New. * cipher/cipher-gcm.c [GCM_USE_S390X_CRYPTO] (ghash_s390x_kimd): New. (setupM) [GCM_USE_S390X_CRYPTO]: Add setup for s390x GHASH function. * cipher/cipher-internal.h (GCM_USE_S390X_CRYPTO): New. * cipher/rijndael-s390x.c (u128_t, km_functions_e): Move to 'asm-inline-s390x.h'. (aes_s390x_gcm_crypt): New. (_gcry_aes_s390x_setup_acceleration): Use 'km_function_to_mask'; Add setup for GCM bulk function. -- This patch adds zSeries acceleration for GHASH and AES-GCM. Benchmarks (z15, 5.2Ghz): Before: AES | nanosecs/byte mebibytes/sec cycles/byte GCM enc | 2.64 ns/B 361.6 MiB/s 13.71 c/B GCM dec | 2.64 ns/B 361.3 MiB/s 13.72 c/B GCM auth | 2.58 ns/B 370.1 MiB/s 13.40 c/B After: AES | nanosecs/byte mebibytes/sec cycles/byte GCM enc | 0.059 ns/B 16066 MiB/s 0.309 c/B GCM dec | 0.059 ns/B 16114 MiB/s 0.308 c/B GCM auth | 0.057 ns/B 16747 MiB/s 0.296 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>