summaryrefslogtreecommitdiff
path: root/src/g10lib.h
Commit message (Collapse)AuthorAgeFilesLines
* fips: Explicitly allow only some PK flags.Jakub Jelen2023-03-141-0/+1
| | | | | | | | | | | | * src/fips.c (_gcry_fips_indicator_pk_flags): New function for explicit FIPS indicator for public key algorithm flags. * src/g10lib.h (_gcry_fips_indicator_pk_flags): New. * src/gcrypt.h.in (GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS): New. * src/global.c (_gcry_vcontrol): Handle the new option. * doc/gcrypt.texi: Document new options. -- Signed-off-by: Jakub Jelen <jjelen@redhat.com>
* fips: Add explicit indicators for md and mac algorithms.Tobias Heider2023-03-081-0/+2
| | | | | | | | | | | | | | | | | | * src/fips.c (_gcry_fips_indicator_mac): New function indicating non-approved mac algorithms. (_gcry_fips_indicator_md): new functions indicating non-approved message digest algorithms. * src/g10lib.h (_gcry_fips_indicator_mac): New function. (_gcry_fips_indicator_md): Ditto. * src/gcrypt.h.in (enum gcry_ctl_cmds): New symbols, GCRYCTL_FIPS_SERVICE_INDICATOR_MAC and GCRYCTL_FIPS_SERVICE_INDICATOR_MD. * src/global.c (_gcry_vcontrol): Handle new FIPS indicators. -- GnuPG-bug-id: 6376 Signed-off-by: Tobias Heider <tobias.heider@canonical.com>
* Fix use of noreturn.NIIBE Yutaka2022-09-161-2/+2
| | | | | | | | | | * doc/yat2m.c: Use __noreturn__. * src/g10lib.h: Likewise. -- GnuPG-bug-id: 4002 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
* fips: Add function-name based FIPS indicator.Jakub Jelen2022-08-231-0/+1
| | | | | | | | | | | | | * doc/gcrypt.texi: Document the new function-based fips indicator GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION * src/fips.c (_gcry_fips_indicator_function): New function indicating non-approved functions. * src/gcrypt.h.in (enum gcry_ctl_cmds): New symbol GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION * src/global.c (_gcry_vcontrol): Handle new FIPS indicator. -- Signed-off-by: Jakub Jelen <jjelen@redhat.com>
* Add ARMv9 SVE2 and optional Crypto Extension HW featuresTianjia Zhang2022-07-211-0/+5
| | | | | | | | | | | | | | | | * configure.ac (sve2support, gcry_cv_gcc_inline_asm_aarch64_sve2) (ENABLE_SVE2_SUPPORT): New. * doc/gcrypt.texi: Add "sve2, sveaes, svepmull, svesha3, svesm4" to ARM hardware features list. * src/g10lib.h (HWF_ARM_SVE2, HWF_ARM_SVEAES, HWF_ARM_SVEPMULL) (HWF_ARM_SVESHA3, HWF_ARM_SVESM4): New. * src/hwf-arm.c (arm_features): Add "sve2, sveaes, svepmull, svesha3, svesm4". * src/hwfeatures.c (hwflist): Add "arm-sve2, arm-sveaes, arm-svepmull, arm-svesha3, arm-svesm4". -- Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
* Add detection for HW feature "ARMv8 SVE"Tianjia Zhang2022-07-211-0/+1
| | | | | | | | | | | | * configure.ac (svesupport, gcry_cv_gcc_inline_asm_aarch64_sve) (ENABLE_SVE_SUPPORT): New. * doc/gcrypt.texi: Add "arm-sve" to HW features list. * src/g10lib.h (HWF_ARM_SVE): New. * src/hwf-arm.c (arm_features): Add "sve". * src/hwfeatures.c (hwflist): Add "arm-sve". -- Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
* Add detection for HW feature "intel-gfni"Jussi Kivilinna2022-04-241-0/+1
| | | | | | | | | | | | * configure.ac (gfnisupport, gcry_cv_gcc_inline_asm_gfni) (ENABLE_GFNI_SUPPORT): New. * src/g10lib.h (HWF_INTEL_GFNI): New. * src/hwf-x86.c (detect_x86_gnuc): Add GFNI detection. * src/hwfeatures.c (hwflist): Add "intel-gfni". * doc/gcrypt.texi: Add "intel-gfni" to HW features list. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add detection for HW feature "intel-avx512"Jussi Kivilinna2022-03-071-0/+1
| | | | | | | | | | | | * configure.ac (avx512support, gcry_cv_gcc_inline_asm_avx512) (ENABLE_AVX512_SUPPORT): New. * src/g10lib.h (HWF_INTEL_AVX512): New. * src/hwf-x86.c (detect_x86_gnuc): Add AVX512 detection. * src/hwfeatures.c (hwflist): Add "intel-avx512". * doc/gcrypt.texi: Add "intel-avx512" to HW features list. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf-arm: add ARMv8.2 optional crypto extension HW featuresTianjia Zhang2022-03-021-0/+4
| | | | | | | | | | * src/g10lib.h (HWF_ARM_SHA3, HWF_ARM_SM3, HWF_ARM_SM4) (HWF_ARM_SHA512): New. * src/hwf-arm.c (arm_features): Add sha3, sm3, sm4, sha512 HW features. * src/hwfeatures.c (hwflist): Add sha3, sm3, sm4, sha512 HW features. -- Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
* Clean up for removal of memory guard support.NIIBE Yutaka2022-02-101-1/+0
| | | | | | | | | | | | * mpi/mpiutil.c (_gcry_mpi_m_check): Remove. * src/g10lib.h (_gcry_check_heap): Remove. * src/global.c (_gcry_check_heap): Remove. * src/mpi.h (mpi_m_check): Remove. -- GnuPG-bug-id: 5822 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
* fips: Add support for KDF FIPS indicatorsJakub Jelen2022-01-171-1/+2
| | | | | | | | | | | | | | | | | * src/fips.c (_gcry_fips_indicator): rename to _gcry_fips_indicator_cipher(). (_gcry_fips_indicator_kdf): New function. * src/g10lib.h: Rename _gcry_fips_indicator to _gcry_fips_indicator_cipher() and add _gcry_fips_indicator_kdf() * src/gcrypt.h.in (enum gcry_ctl_cmds): Add GCRYCTL_FIPS_SERVICE_INDICATOR_CIPHER and GCRYCTL_FIPS_SERVICE_INDICATOR_KDF. * src/global.c (_gcry_vcontrol): Implement support for KDF FIPS Indicator separate from the cipher one. -- GnuPG-bug-id: 5512 Signed-off-by: Jakub Jelen <jjelen@redhat.com>
* AES-GCM: Bulk implementation of AES-GCM acceleration for ppc64leDanny Tsen2021-12-211-0/+1
| | | | | | | | | | | | | | | | | | | | | * configure.ac: Added p10 assembly implementation file and assiciated file. * cipher/Makefile.am: Added p10 assembly implementation file and associated file. * cipher/rijndael.c: Added p10 function. * cipher/rijndael-p10le.c: New wrapper file for AES-GCM call. * cipher/rijndael-gcm-p10le.s: New implementation of AES-GCM bulk function in Power Assembly. * src/g10lib.h: Added Power arch 3.1 definition for p10. * src/hwf-ppc.c: Added Power arch 3.1 definition for p10. * src/hwfeatures.c: Added Power arch 3.1 definition for p10. -- GnuPG-bug-id: 5700 Signed-off-by: Danny Tsen <dtsen@us.ibm.com> [jk: fixes for C coding style] [jk: prefix assembly functions with '_gcry_ppc10'] [jk: add assert check for gcm_table size] Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* fips: Add constructor to run selftests.NIIBE Yutaka2021-12-171-0/+1
| | | | | | | | | | | | | | | | * src/fips.c (_gcry_fips_to_activate): New. * src/g10lib.h (_gcry_fips_to_activate): New. * src/global.c [ENABLE_HMAC_BINARY_CHECK] (_gcry_global_constructor): New. -- Note: constructor is non-portable feature of GCC. This behavior of running selftests just after the load of the library is specific to the build with ENABLE_HMAC_BINARY_CHECK. GnuPG-bug-id: 5636 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
* Implement explicit FIPS indicators for cipher modesJakub Jelen2021-11-301-0/+2
| | | | | | | | | | | | | | | | | | * src/fips.c (_gcry_fips_indicator): New. * src/g10lib.h (_gcry_fips_indicator): New declaration. * src/gcrypt.h.in (gcry_ctl_cmds): New GCRYCTL_FIPS_SERVICE_INDICATOR * src/global.c (_gcry_vcontrol): Handle GCRYCTL_FIPS_SERVICE_INDICATOR * tests/basic.c (do_check_ocb_cipher): Check excplicit FIPS indicator (check_ocb_cipher_largebuf_split): Ditto. (check_ocb_cipher_checksum): Ditto. (check_ocb_cipher_splitaad): Ditto. (check_bulk_cipher_modes): Ditto. -- Add GCRYCTL_FIPS_SERVICE_INDICATOR to handle explicit FIPS indicators for cipher modes. GnuPG-bug-id: 5512 Signed-off-by: Jakub Jelen <jjelen@redhat.com>
* Remove the forced fips modeJakub Jelen2021-09-201-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | * cipher/rsa.c (generate_fips): Drop reference to enforced fips mode and use normal FIPS mode check * doc/gcrypt.texi: Drop references to enforced FIPS mode * src/fips.c (enforced_fips_mode): Removed (_gcry_initialize_fips_mode): Remove reading of the FIPS_FORCE_FILE to enforce FIPS mode (_gcry_enforced_fips_mode): Remove (_gcry_set_enforced_fips_mode): Remove * src/g10lib.h (_gcry_enforced_fips_mode): Remove declaration (_gcry_set_enforced_fips_mode): Remova declaration * src/global.c (print_config): Remove the forced fips flag (_gcry_vcontrol): Deprecate GCRYCTL_SET_ENFORCED_FIPS_FLAG (get_no_secure_memory): Ignore the option in FIPS mode -- Signed-off-by: Jakub Jelen <jjelen@redhat.com> (_gcry_vcontrol): Simply ignore GCRYCTL_SET_ENFORCED_FIPS_FLAG. Signed-off-by: Werner Koch <wk@gnupg.org> GnuPG-bug-id: 5244
* Remove a way to inactive FIPS modeJakub Jelen2021-09-201-3/+0
| | | | | | | | | | | | | | | | * cipher/md.c (_gcry_md_hash_buffer): Remove inactivation of FIPS mode when MD5 is used (_gcry_md_hash_buffers_extract): Ditto. * src/fips.c (gcry_is_fips_mode_inactive): Removed (_gcry_inactivate_fips_mode): Removed (_gcry_is_fips_mode_inactive): Removed * src/g10lib.h (_gcry_inactivate_fips_mode): Remove declaration (_gcry_is_fips_mode_inactive): Remove declaration * global.c (_gcry_vcontrol): Update the GCRYCTL_FIPS_MODE_P (_gcry_set_allocation_handler): Silently ignore custom alocation handlers in FIPS mode -- Signed-off-by: Jakub Jelen <jjelen@redhat.com>
* ec: add zSeries/s390x accelerated scalar multiplicationJussi Kivilinna2021-07-021-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* Use memset for constant length wipememory2Jussi Kivilinna2021-04-261-42/+20
| | | | | | | | | | | | | | | | | | * src/g10lib.h (fast_wipememory2_inline): New. (wipememory2): Use 'fast_wipememory2_inline', remove 'fast_wipememory2' use; Use _gcry_fast_wipememory* when _len or _set is not constant. (fast_wipememory_s, fast_wipememory2): Remove. -- Use of memset allows better code generation by compiler - for example, use of vector registers for memory clearing. Dead store elimination of memset by compiler optimization is avoided by using assembly block after memset: memset(ptr_mem_wipe, 0, constant_mem_len); asm volatile ("\n" :: "r" (ptr_mem_wipe) : "memory"); Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf-x86: add "intel-vaes-vpclmul" HW featureJussi Kivilinna2021-02-281-0/+1
| | | | | | | | | | | | | | * configure.ac (HAVE_GCC_INLINE_ASM_VAES_VPCLMUL): New. * src/g10lib.h (HWF_INTEL_VAES_VPCLMUL): New. * src/hwf-x86.c (detect_x86_gnuc): Check for VAES and VPCLMUL. * src/hwfeatures.c (hwflist): Add "intel-vaes-vpclmul". -- Detect support for VAES and VPCLMUL instruction sets, which allow use of AES and PCLMUL instruction with 256-bit and 512-bit vector registers. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Define HW-feature flags per architectureJussi Kivilinna2021-01-261-12/+22
| | | | | | | | | | | | | | | | | * random/rand-internal.h (_gcry_rndhw_poll_slow): Add requested length parameter. * random/rndhw.c (_gcry_rndhw_poll_slow): Limit accounted bytes to 50% (or 25% for RDRAND) - this code is moved from caller side. * random/rndlinux.c (_gcry_rndlinux_gather_random): Move HWF_INTEL_RDRAND check to _gcry_rndhw_poll_slow. * src/g10lib.h (HWF_PADLOCK_*, HWF_INTEL_*): Define only if HAVE_CPU_ARCH_X86. (HWF_ARM_*): Define only if HAVE_CPU_ARCH_ARM. (HWF_PPC_*): Define only if HAVE_CPU_ARCH_PPC. (HWF_S390X_*): Define only if HAVE_CPU_ARCH_S390X. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf-s390x: add VX vector instruction set detectionJussi Kivilinna2020-12-301-0/+1
| | | | | | | | | | | * configure.ac (gcry_cv_gcc_inline_asm_s390x_vx): New check. * src/g10lib.h (HWF_S390X_VX): New. * src/hwf-s390x.c (HWCAP_S390_VXRS): New. (s390x_features) [HAVE_GCC_INLINE_ASM_S390X_VX]: Add VX feature check. * src/hwfeatures.c (hwlist): Add "s390x-vx". -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf: add detection of s390x/zSeries hardware featuresJussi Kivilinna2020-12-181-0/+4
| | | | | | | | | | | | | | * configure.ac (gcry_cv_gcc_inline_asm_s390x) (HAVE_CPU_ARCH_S390X): Add s390x detection support. * mpi/config.links: Add setup for s390x links. * src/Makefile.am: Add 'hwf-s390x.c'. * src/g10lib.h (HWF_S390X_MSA, HWF_S390X_MSA_4, HWF_S390X_8): New. * src/hwf_common.h (_gcry_hwf_detect_s390x): New. * src/hwf-s390x.c: New. * src/hwfeatures.c: Add "s390x-msa", "s390x-msa-4" and "s390x-msa-8". -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Prevent link-time optimization from inlining __gcry_burn_stackJussi Kivilinna2020-12-031-0/+6
| | | | | | | | | | | | | | * src/g10lib.h (NOINLINE_FUNC): New attribute macro. * src/misc.c (__gcry_burn_stack): Add NOINLINE_FUNC attribute. -- LTO can cause inline of __gcry_burn_stack and result tail-call to _gcry_fast_wipememory and defeat tail-call prevention in _gcry_burn_stack macro. Mark __gcry_burn_stack with 'noinline' attribute to prevent unwanted inlining of this function in LTO builds. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add PowerPC vector implementation of ChaCha20Jussi Kivilinna2019-09-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'chacha20-ppc.c'. * cipher/chacha20-ppc.c: New. * cipher/chacha20.c (USE_PPC_VEC, _gcry_chacha20_ppc8_blocks4) (_gcry_chacha20_ppc8_blocks1, USE_PPC_VEC_POLY1305) (_gcry_chacha20_poly1305_ppc8_blocks4): New. (CHACHA20_context_t): Add 'use_ppc'. (chacha20_blocks, chacha20_keysetup) (do_chacha20_encrypt_stream_tail): Add USE_PPC_VEC code. (_gcry_chacha20_poly1305_encrypt, _gcry_chacha20_poly1305_decrypt): Add USE_PPC_VEC_POLY1305 code. * configure.ac: Add 'chacha20-ppc.lo'. * src/g10lib.h (HWF_PPC_ARCH_2_07): New. * src/hwf-ppc.c (PPC_FEATURE2_ARCH_2_07): New. (ppc_features): Add HWF_PPC_ARCH_2_07. * src/hwfeatures.c (hwflist): Add 'ppc-arch_2_07'. -- This patch adds 1-way, 2-way and 4-way ChaCha20 vector implementations and 4-way stitched ChaCha20+Poly1305 implementation for PowerPC. Benchmark on POWER8 (ppc64le, ~3.8Ghz): Before: CHACHA20 | nanosecs/byte mebibytes/sec cycles/byte STREAM enc | 2.60 ns/B 366.2 MiB/s 9.90 c/B STREAM dec | 2.61 ns/B 366.1 MiB/s 9.90 c/B POLY1305 enc | 3.11 ns/B 307.1 MiB/s 11.80 c/B POLY1305 dec | 3.11 ns/B 307.0 MiB/s 11.80 c/B POLY1305 auth | 0.502 ns/B 1900 MiB/s 1.91 c/B After (~4x faster): CHACHA20 | nanosecs/byte mebibytes/sec cycles/byte STREAM enc | 0.619 ns/B 1540 MiB/s 2.35 c/B STREAM dec | 0.619 ns/B 1541 MiB/s 2.35 c/B POLY1305 enc | 0.785 ns/B 1215 MiB/s 2.98 c/B POLY1305 dec | 0.769 ns/B 1240 MiB/s 2.92 c/B POLY1305 auth | 0.502 ns/B 1901 MiB/s 1.91 c/B Benchmark on POWER9 (ppc64le, ~3.8Ghz): Before: CHACHA20 | nanosecs/byte mebibytes/sec cycles/byte STREAM enc | 2.27 ns/B 419.9 MiB/s 8.63 c/B STREAM dec | 2.27 ns/B 419.8 MiB/s 8.63 c/B POLY1305 enc | 2.73 ns/B 349.1 MiB/s 10.38 c/B POLY1305 dec | 2.73 ns/B 349.3 MiB/s 10.37 c/B POLY1305 auth | 0.459 ns/B 2076 MiB/s 1.75 c/B After (chacha20 ~3x faster, chacha20+poly1305 ~2.5x faster): CHACHA20 | nanosecs/byte mebibytes/sec cycles/byte STREAM enc | 0.690 ns/B 1381 MiB/s 2.62 c/B STREAM dec | 0.690 ns/B 1382 MiB/s 2.62 c/B POLY1305 enc | 1.09 ns/B 878.2 MiB/s 4.13 c/B POLY1305 dec | 1.07 ns/B 887.8 MiB/s 4.08 c/B POLY1305 auth | 0.459 ns/B 2076 MiB/s 1.75 c/B GnuPG-bug-id: 4460 Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf-ppc: add detection for PowerISA 3.00Jussi Kivilinna2019-08-261-0/+1
| | | | | | | | | | | | * src/g10lib.h (HWF_PPC_ARCH_3_00): New. * src/hwf-ppc.c (feature_map_s): Remove unused 'feature_match'. (PPC_FEATURE2_ARCH_3_00): New. (ppc_features, get_hwcap): Add PowerISA 3.00. * src/hwfeatures.c (hwflist): Rename "ppc-crypto" to "ppc-vcrypto"; Add "ppc-arch_3_00". -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf: add detection of PowerPC hardware featuresShawn Landden2019-08-261-1/+1
| | | | | | | | | | | | | | | | * src/Makefile.am: PowerPC hardware detection. * src/g10lib.h: Likewise. * src/hwf-common.h: Likewise. * src/hwf-ppc.c: Likewise. * src/hwfeatures.c: Likewise. * configure.ac: Likewise. -- GnuPG-bug-id: 4529 [jk: split PowerPC HW features to separate patch, from https://lists.gnupg.org/pipermail/gcrypt-devel/2019-July/004769.html] [jk: disable __builtin_cpu_supports usage for now] Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Use explicit_bzero for wipememoryJussi Kivilinna2018-11-201-4/+8
| | | | | | | | | | | | | | | | | | * configure.ac (AC_CHECK_FUNCS): Check for 'explicit_bzero'. * src/g10lib.h (wipememory2): Use _gcry_fast_wipememory if _SET is zero. (_gcry_fast_wipememory): New. (_gcry_wipememory2): Rename to... (_gcry_fast_wipememory2): ...this. * src/misc.c (_gcry_wipememory): New. (_gcry_wipememory2): Rename to... (_gcry_fast_wipememory2): ...this. (_gcry_fast_wipememory2) [HAVE_EXPLICIT_BZERO]: Use explicit_bzero if SET is zero. (_gcry_burn_stack): Use _gcry_fast_wipememory. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* wipememory: use memset for non-constant length or large buffer wipesJussi Kivilinna2018-11-051-47/+39
| | | | | | | | | | | | | | | * src/g10lib.h (CONSTANT_P): New. (_gcry_wipememory2): New prototype. (wipememory2): Use _gcry_wipememory2 if _len not constant expression or lenght is larger than 64 bytes. (FASTWIPE_T, FASTWIPE_MULT, fast_wipememory2_unaligned_head): Remove. (fast_wipememory2): Always handle buffer as unaligned. * src/misc.c (__gcry_burn_stack): Move memset_ptr variable to... (memset_ptr): ... here. New. (_gcry_wipememory2): New. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Change remaining users of _gcry_fips_mode to use fips_modeJussi Kivilinna2018-11-051-2/+0
| | | | | | | | | | * src/fips.c (_gcry_fips_mode): Remove. (_gcry_enforced_fips_mode, _gcry_inactivate_fips_mode) (_gcry_is_fips_mode_inactive): Use fips_mode. * src/g10lib.h (_gcry_fips_mode): Remove. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Fix missing global initialization in fips_is_operationalJussi Kivilinna2018-10-271-1/+4
| | | | | | | | | | | | | | | | | | | * src/g10lib.h (_gcry_global_any_init_done): New extern. (fips_is_operational): Check for _gcry_global_any_init_done and call _gcry_global_is_operational. * src/global.c (any_init_done): Rename to ... (_gcry_global_any_init_done): ... this and make externally available. -- Commit b6e6ace324440f564df664e27f8276ef01f76795 "Add fast path for _gcry_fips_is_operational" inadvertently replaced function call to _gcry_global_is_operational with call to _gcry_fips_is_operational in fips_is_operational macro. This can cause libgcrypt to miss initialization. This patch restores _gcry_global_is_operational functionality to fips_is_operational macro while keeping fast-path to reduce call-overhead to gcry_* functions. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add fast path for _gcry_fips_is_operationalJussi Kivilinna2018-06-191-2/+16
| | | | | | | | | | | | | | | | * src/fips.c (no_fips_mode_required): Rename to... (_gcry_no_fips_mode_required): ...this and make externally available. * src/g10lib.h (_gcry_no_fips_mode_required): New extern. (fips_mode): Inline _gcry_fips_mode to macro, use _gcry_no_fips_mode_required directly. (fips_is_operational): Inline fips_mode check from _gcry_fips_in_operational. -- Add fast path to reduce call overhead in src/visibility.c where fips_is_operational is called before cipher/md/etc operations. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add Intel SHA Extensions accelerated SHA1 implementationJussi Kivilinna2018-02-161-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha1-intel-shaext.c'. * cipher/sha1-intel-shaext.c: New. * cipher/sha1.c (USE_SHAEXT, _gcry_sha1_transform_intel_shaext): New. (sha1_init) [USE_SHAEXT]: Use shaext implementation is supported. (transform) [USE_SHAEXT]: Use shaext if enabled. (transform): Only add ASM_EXTRA_STACK if returned burn length is not zero. * cipher/sha1.h (SHA1_CONTEXT): Add 'use_shaext'. * configure.ac: Add 'sha1-intel-shaext.lo'. (shaextsupport, gcry_cv_gcc_inline_asm_shaext): New. * src/g10lib.h: Add HWF_INTEL_SHAEXT and reorder HWF flags. * src/hwf-x86.c (detect_x86_gnuc): Detect SHA Extensions. * src/hwfeatures.c (hwflist): Add 'intel-shaext'. -- Benchmark on Intel Celeron J3455 (1500 Mhz, no turbo): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA1 | 4.50 ns/B 211.7 MiB/s 6.76 c/B After (4.0x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA1 | 1.11 ns/B 858.1 MiB/s 1.67 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* api: New function gcry_get_config.Werner Koch2017-06-211-2/+3
| | | | | | | | | | | | | | | | | | * src/misc.c (_gcry_log_info_with_dummy_fp): Remove. * src/global.c (print_config): New arg WHAT. Remove arg FNC and use gpgrt_fprintf directly. (_gcry_get_config): New. (_gcry_vcontrol) <GCRYCTL_PRINT_CONFIG>: Use _gcry_get_config instead of print_config. * src/gcrypt.h.in (gcry_get_config): New. * src/libgcrypt.def, src/libgcrypt.vers: Add new function. * src/visibility.c (gcry_get_config): New. * src/visibility.h: Mark new function. * tests/version.c (test_get_config): New. (main): Call new test. Signed-off-by: Werner Koch <wk@gnupg.org>
* Implement global config file /etc/gcrypt/random.confWerner Koch2017-06-161-0/+3
| | | | | | | | | | | | | | | * src/hwfeatures.c (my_isascii): Move macro to ... * src/g10lib.h: here. * tests/random.c (main): Dump random stats. * random/random.c (RANDOM_CONF_FILE): New. (_gcry_random_read_conf): New. (_gcry_random_dump_stats): Call rndjent stats. * random/rndjent.c (jent_rng_totalcalls, jent_rng_totalbytes): New. (_gcry_rndjent_poll): Take care of config option disable-jent. Wipe buffer. Bump counters. (_gcry_rndjent_dump_stats): New. Signed-off-by: Werner Koch <wk@gnupg.org>
* New hardware feature flag HWF_INTEL_RDTSC.Werner Koch2017-06-141-0/+3
| | | | | | | | * src/g10lib.h (HWF_INTEL_RDTSC): New. * src/hwfeatures.c (hwflist): Add "intel-rdtsc". * src/hwf-x86.c (detect_x86_gnuc): Get EDX features and test for TSC. Signed-off-by: Werner Koch <wk@gnupg.org>
* Add UNLIKELY and LIKELY macrosJussi Kivilinna2017-02-041-4/+12
| | | | | | | | | | | | * src/g10lib.h (LIKELY, UNLIKELY): New. (gcry_assert): Use LIKELY for assert check. (fast_wipememory2_unaligned_head): Use UNLIKELY for unaligned branching. * cipher/bufhelp.h (buf_cpy, buf_xor, buf_xor_1, buf_xor_2dst) (buf_xor_n_copy_2): Ditto. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* bufhelp: use 'may_alias' attribute unaligned pointer typesJussi Kivilinna2017-01-231-1/+2
| | | | | | | | | | | | | | | | | | | | * configure.ac (gcry_cv_gcc_attribute_may_alias) (HAVE_GCC_ATTRIBUTE_MAY_ALIAS): New check for 'may_alias' attribute. * cipher/bufhelp.h (BUFHELP_FAST_UNALIGNED_ACCESS): Enable only if HAVE_GCC_ATTRIBUTE_MAY_ALIAS is defined. [BUFHELP_FAST_UNALIGNED_ACCESS] (bufhelp_int_t, bufhelp_u32_t) (bufhelp_u64_t): Add 'may_alias' attribute. * src/g10lib.h (fast_wipememory_t): Add HAVE_GCC_ATTRIBUTE_MAY_ALIAS defined check; Add 'may_alias' attribute. -- Attribute 'may_alias' was missing from bufhelp unaligned memory access pointer types, and was causing problems with newer GCC versions (with more aggressive optimization). This patch fixes broken Camellia-CFB with '-O3 -flto' flags with GCC-6 on x86-64 and generic GCM with default '-O2' on x32. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add AVX2/vpgather bulk implementation of TwofishJussi Kivilinna2017-01-061-21/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'twofish-avx2-amd64.S'. * cipher/twofish-avx2-amd64.S: New. * cipher/twofish.c (USE_AVX2): New. (TWOFISH_context) [USE_AVX2]: Add 'use_avx2' member. (ASM_FUNC_ABI): New. (twofish_setkey): Add check for AVX2 and fast VPGATHER HW features. (_gcry_twofish_avx2_ctr_enc, _gcry_twofish_avx2_cbc_dec) (_gcry_twofish_avx2_cfb_dec, _gcry_twofish_avx2_ocb_enc) (_gcry_twofish_avx2_ocb_dec, _gcry_twofish_avx2_ocb_auth): New. (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec, _gcry_twofish_cfb_dec) (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Add AVX2 bulk handling. (selftest_ctr, selftest_cbc, selftest_cfb): Increase nblocks from 3+X to 16+X. * configure.ac: Add 'twofish-avx2-amd64.lo'. * src/g10lib.h (HWF_INTEL_FAST_VPGATHER): New. * src/hwf-x86.c (detect_x86_gnuc): Add detection for HWF_INTEL_FAST_VPGATHER. * src/hwfeatures.c (HWF_INTEL_FAST_VPGATHER): Add "intel-fast-vpgather" for HWF_INTEL_FAST_VPGATHER. -- Benchmark on Intel Core i3-6100 (3.7 Ghz): Before: TWOFISH | nanosecs/byte mebibytes/sec cycles/byte ECB enc | 4.25 ns/B 224.5 MiB/s 15.71 c/B ECB dec | 4.16 ns/B 229.5 MiB/s 15.38 c/B CBC enc | 4.53 ns/B 210.4 MiB/s 16.77 c/B CBC dec | 2.71 ns/B 351.6 MiB/s 10.04 c/B CFB enc | 4.60 ns/B 207.3 MiB/s 17.02 c/B CFB dec | 2.70 ns/B 353.5 MiB/s 9.98 c/B OFB enc | 4.25 ns/B 224.2 MiB/s 15.74 c/B OFB dec | 4.24 ns/B 225.0 MiB/s 15.68 c/B CTR enc | 2.72 ns/B 350.6 MiB/s 10.06 c/B CTR dec | 2.72 ns/B 350.7 MiB/s 10.06 c/B CCM enc | 7.25 ns/B 131.5 MiB/s 26.83 c/B CCM dec | 7.25 ns/B 131.5 MiB/s 26.83 c/B CCM auth | 4.57 ns/B 208.9 MiB/s 16.89 c/B GCM enc | 3.02 ns/B 315.3 MiB/s 11.19 c/B GCM dec | 3.02 ns/B 315.6 MiB/s 11.18 c/B GCM auth | 0.297 ns/B 3208.4 MiB/s 1.10 c/B OCB enc | 2.73 ns/B 349.7 MiB/s 10.09 c/B OCB dec | 2.82 ns/B 338.3 MiB/s 10.43 c/B OCB auth | 2.77 ns/B 343.7 MiB/s 10.27 c/B After (CBC-dec & CFB-dec & CTR & OCB, ~1.5x faster): TWOFISH | nanosecs/byte mebibytes/sec cycles/byte ECB enc | 4.25 ns/B 224.2 MiB/s 15.74 c/B ECB dec | 4.15 ns/B 229.5 MiB/s 15.37 c/B CBC enc | 4.61 ns/B 206.8 MiB/s 17.06 c/B CBC dec | 1.75 ns/B 544.0 MiB/s 6.49 c/B CFB enc | 4.52 ns/B 211.0 MiB/s 16.72 c/B CFB dec | 1.72 ns/B 554.1 MiB/s 6.37 c/B OFB enc | 4.27 ns/B 223.3 MiB/s 15.80 c/B OFB dec | 4.28 ns/B 222.7 MiB/s 15.84 c/B CTR enc | 1.73 ns/B 549.9 MiB/s 6.42 c/B CTR dec | 1.75 ns/B 545.1 MiB/s 6.47 c/B CCM enc | 6.31 ns/B 151.2 MiB/s 23.34 c/B CCM dec | 6.42 ns/B 148.5 MiB/s 23.76 c/B CCM auth | 4.56 ns/B 208.9 MiB/s 16.89 c/B GCM enc | 1.90 ns/B 502.8 MiB/s 7.02 c/B GCM dec | 2.00 ns/B 477.8 MiB/s 7.38 c/B GCM auth | 0.300 ns/B 3178.6 MiB/s 1.11 c/B OCB enc | 1.76 ns/B 542.2 MiB/s 6.51 c/B OCB dec | 1.76 ns/B 540.7 MiB/s 6.53 c/B OCB auth | 1.76 ns/B 542.8 MiB/s 6.50 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Give the secmem allocators a hint when a xmalloc calls them.Werner Koch2016-12-071-0/+1
| | | | | | | | | | | | | | | | | | | | | | * src/secmem.c (_gcry_secmem_malloc): New not yet used arg XHINT. (_gcry_secmem_realloc): Ditto. * src/stdmem.c (_gcry_private_malloc_secure): New arg XHINT to be passed to the secmem functions. (_gcry_private_realloc): Ditto. * src/g10lib.h (GCRY_ALLOC_FLAG_XHINT): New. * src/global.c (do_malloc): Pass this flag as XHINT to the private allocator. (_gcry_malloc_secure): Factor code out to ... (_gcry_malloc_secure_core): this. Add arg XHINT. (_gcry_realloc): Factor code out to ... (_gcry_realloc_core): here. Add arg XHINT. (_gcry_strdup): Factor code out to ... (_gcry_strdup_core): here. Add arg XHINT. (_gcry_xrealloc): Use the core function and pass true for XHINT. (_gcry_xmalloc_secure): Ditto. (_gcry_xstrdup): Ditto. Signed-off-by: Werner Koch <wk@gnupg.org>
* Put blocking calls into Libgpg-error's system call clamp.Werner Koch2016-11-121-1/+3
| | | | | | | | | | | | | | | * src/gcrypt.h.in (GCRYCTL_REINIT_SYSCALL_CLAMP): New. * configure.ac: Require Libgpg-error 1.25. Set version number to 1.8.0. * src/gcrypt-int.h: Remove error code emulation. * src/global.c (pre_syscall_func, post_syscall_func): New. (global_init): Call gpgrt_get_syscall_clamp. (_gcry_vcontrol) <GCRYCTL_REINIT_SYSCALL_CLAMP>: Ditto. (_gcry_pre_syscall, _gcry_post_syscall): New. * random/rndlinux.c (_gcry_rndlinux_gather_random): Use the new functions. Signed-off-by: Werner Koch <wk@gnupg.org>
* Add HW feature check for ARMv8 AArch64 and crypto extensionsJussi Kivilinna2016-07-141-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac: Add '--disable-arm-crypto-support'; enable hwf-arm module on 64-bit ARM. (armcryptosupport, gcry_cv_gcc_inline_aarch32_crypto) (gcry_cv_inline_asm_aarch64_neon) (gcry_cv_gcc_inline_asm_aarch64_crypto): New. * src/g10lib.h (HWF_ARM_AES, HWF_ARM_SHA1, HWF_ARM_SHA2) (HWF_ARM_PMULL): New. * src/hwf-arm.c [__aarch64__]: Enable building in AArch64 mode. (feature_map_s): New. [__arm__] (AT_HWCAP, AT_HWCAP2, HWCAP2_AES, HWCAP2_PMULL) (HWCAP2_SHA1, HWCAP2_SHA2, arm_features): New. [__aarch64__] (AT_HWCAP, AT_HWCAP2, HWCAP_ASIMD, HWCAP_AES) (HWCAP_PMULL, HWCAP_SHA1, HWCAP_SHA2, arm_features): New. (get_hwcap): Add reading of 'AT_HWCAP2'; Change auxv use 'unsigned long'. (detect_arm_at_hwcap): Add mapping of HWCAP/HWCAP2 to HWF flags. (detect_arm_proc_cpuinfo): Add mapping of CPU features to HWF flags. (_gcry_hwf_detect_arm): Use __ARM_NEON instead of legacy __ARM_NEON__. * src/hwfeatures.c (hwflist): Add 'arm-aes', 'arm-sha1', 'arm-sha2' and 'arm-pmull'. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* rsa: Add FIPS 186-4 compliant RSA probable prime key generator.Tomáš Mráz2016-03-221-0/+3
| | | | | | | | | | | | | | | | | | | | * cipher/primegen.c (_gcry_fips186_4_prime_check): New. * cipher/rsa.c (generate_fips): New. (rsa_generate): Use new function in fips mode or with test-parms. * tests/keygen.c (check_rsa_keys): Add test using e=65539. -- Signed-off-by: Tomáš Mráz <tmraz@redhat.com> Tomáš's patch war originally for libgcrypt 1.6.3 and has been ported to master (1.7) by wk. Further changes: - ChangeLog entries. - Some re-indentation - Use an extra test case instead of changing an existing one. Signed-off-by: Werner Koch <wk@gnupg.org>
* Always require a 64 bit integer typeWerner Koch2016-03-181-7/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac (available_digests_64): Merge with available_digests. (available_kdfs_64): Merge with available_kdfs. <64 bit datatype test>: Bail out if no such type is available. * src/types.h: Emit #error if no u64 can be defined. (PROPERLY_ALIGNED_TYPE): Always add u64 type. * cipher/bithelp.h: Remove all code paths which handle the case of !HAVE_U64_TYPEDEF. * cipher/bufhelp.h: Ditto. * cipher/cipher-ccm.c: Ditto. * cipher/cipher-gcm.c: Ditto. * cipher/cipher-internal.h: Ditto. * cipher/cipher.c: Ditto. * cipher/hash-common.h: Ditto. * cipher/md.c: Ditto. * cipher/poly1305.c: Ditto. * cipher/scrypt.c: Ditto. * cipher/tiger.c: Ditto. * src/g10lib.h: Ditto. * tests/basic.c: Ditto. * tests/bench-slope.c: Ditto. * tests/benchmark.c: Ditto. -- Given that SHA-2 and some other algorithms require a 64 bit type it does not make anymore sense to conditionally compile some part when the platform does not provide such a type. GnuPG-bug-id: 1815. Signed-off-by: Werner Koch <wk@gnupg.org>
* Disable non-allowed algorithms in FIPS modeVitezslav Cizek2016-03-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | * cipher/cipher.c (_gcry_cipher_init), * cipher/mac.c (_gcry_mac_init), * cipher/md.c (_gcry_md_init), * cipher/pubkey.c (_gcry_pk_init): In the FIPS mode, disable all the non-allowed ciphers. * cipher/md5.c: Mark MD5 as not allowed in FIPS. * src/g10lib.h (_gcry_mac_init): New. * src/global.c (global_init): Call the new _gcry_mac_init. * tests/basic.c (check_ciphers): Fix a typo. -- When running in the FIPS mode, disable all the ciphers that don't have the fips flag set. Skip the non-allowed algos during testing in the FIPS mode. Thanks to Ludwig Nussel. Signed-off-by: Vitezslav Cizek <vcizek@suse.com> Signed-off-by: Vitezslav Cizek <vcizek@suse.com>
* Add Intel PCLMUL implementations of CRC algorithmsJussi Kivilinna2016-03-121-17/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'crc-intel-pclmul.c'. * cipher/crc-intel-pclmul.c: New. * cipher/crc.c (USE_INTEL_PCLMUL): New macro. (CRC_CONTEXT) [USE_INTEL_PCLMUL]: Add 'use_pclmul'. [USE_INTEL_PCLMUL] (_gcry_crc32_intel_pclmul) (gcry_crc24rfc2440_intel_pclmul): New. (crc32_init, crc32rfc1510_init, crc24rfc2440_init) [USE_INTEL_PCLMUL]: Select PCLMUL implementation if SSE4.1 and PCLMUL HW features detected. (crc32_write, crc24rfc2440_write) [USE_INTEL_PCLMUL]: Use PCLMUL implementation if enabled. (crc24_init): Document storage format of 24-bit CRC. (crc24_next4): Use only 'data' for last table look-up. * configure.ac: Add 'crc-intel-pclmul.lo'. * src/g10lib.h (HWF_*, HWF_INTEL_SSE4_1): Update HWF flags to include Intel SSE4.1. * src/hwf-x86.c (detect_x86_gnuc): Add SSE4.1 detection. * src/hwfeatures.c (hwflist): Add 'intel-sse4.1'. * tests/basic.c (fillbuf_count): New. (check_one_md): Add "?" check (million byte data-set with byte pattern 0x00,0x01,0x02,...); Test all buffer sizes 1 to 1000, for "!" and "?" checks. (check_one_md_multi): Skip "?". (check_digests): Add "?" test-vectors for MD5, SHA1, SHA224, SHA256, SHA384, SHA512, SHA3_224, SHA3_256, SHA3_384, SHA3_512, RIPEMD160, CRC32, CRC32_RFC1510, CRC24_RFC2440, TIGER1 and WHIRLPOOL; Add "!" test-vectors for CRC32_RFC1510 and CRC24_RFC2440. -- Add Intel PCLMUL accelerated implmentations of CRC algorithms. CRC performance is improved ~11x on x86_64 and i386 on Intel Haswell, and ~2.7x on Intel Sandy-bridge. Benchmark on Intel Core i5-4570 (x86_64, 3.2 Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 0.865 ns/B 1103.0 MiB/s 2.77 c/B CRC32RFC1510 | 0.865 ns/B 1102.7 MiB/s 2.77 c/B CRC24RFC2440 | 0.865 ns/B 1103.0 MiB/s 2.77 c/B After: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 0.079 ns/B 12051.7 MiB/s 0.253 c/B CRC32RFC1510 | 0.079 ns/B 12050.6 MiB/s 0.253 c/B CRC24RFC2440 | 0.079 ns/B 12100.0 MiB/s 0.252 c/B Benchmark on Intel Core i5-4570 (i386, 3.2 Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 0.860 ns/B 1109.0 MiB/s 2.75 c/B CRC32RFC1510 | 0.861 ns/B 1108.3 MiB/s 2.75 c/B CRC24RFC2440 | 0.860 ns/B 1108.6 MiB/s 2.75 c/B After: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 0.078 ns/B 12207.0 MiB/s 0.250 c/B CRC32RFC1510 | 0.078 ns/B 12207.0 MiB/s 0.250 c/B CRC24RFC2440 | 0.080 ns/B 11925.6 MiB/s 0.256 c/B Benchmark on Intel Core i5-2450M (x86_64, 2.5 Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 1.25 ns/B 762.3 MiB/s 3.13 c/B CRC32RFC1510 | 1.26 ns/B 759.1 MiB/s 3.14 c/B CRC24RFC2440 | 1.25 ns/B 764.9 MiB/s 3.12 c/B After: | nanosecs/byte mebibytes/sec cycles/byte CRC32 | 0.451 ns/B 2114.3 MiB/s 1.13 c/B CRC32RFC1510 | 0.451 ns/B 2114.6 MiB/s 1.13 c/B CRC24RFC2440 | 0.457 ns/B 2085.0 MiB/s 1.14 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add helper function _gcry_strtokenize.Werner Koch2016-02-191-0/+3
| | | | | | | | | | * src/misc.c (_gcry_strtokenize): New. -- The code has been taken from GnuPG and re-licensed to LPGLv2+ by me as its original author. Minor changes for use in Libgcrypt. Signed-off-by: Werner Koch <wk@gnupg.org>
* hwf-x86: add detection for Intel CPUs with fast SHLD instructionJussi Kivilinna2015-10-281-10/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/sha1.c (sha1_init): Use HWF_INTEL_FAST_SHLD instead of HWF_INTEL_CPU. * cipher/sha256.c (sha256_init, sha224_init): Ditto. * cipher/sha512.c (sha512_init, sha384_init): Ditto. * src/g10lib.h (HWF_INTEL_FAST_SHLD): New. (HWF_INTEL_BMI2, HWF_INTEL_SSSE3, HWF_INTEL_PCLMUL, HWF_INTEL_AESNI) (HWF_INTEL_RDRAND, HWF_INTEL_AVX, HWF_INTEL_AVX2) (HWF_ARM_NEON): Update. * src/hwf-x86.c (detect_x86_gnuc): Add detection of Intel Core CPUs with fast SHLD/SHRD instruction. * src/hwfeatures.c (hwflist): Add "intel-fast-shld". -- Intel Core CPUs since codename sandy-bridge have been able to execute SHLD/SHRD instructions faster than rotate instructions ROL/ROR. Since SHLD/SHRD can be used to do rotation, some optimized implementations (SHA1/SHA256/SHA512) use SHLD/SHRD instructions in-place of ROL/ROR. This patch provides more accurate detection of CPUs with fast SHLD implementation. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Fix declaration of return type.NIIBE Yutaka2015-10-131-1/+1
| | | | | | | | | | | * src/gcrypt-int.h (_gcry_sexp_extract_param): Return gpg_error_t. * cipher/dsa.c (dsa_generate): Fix call to _gcry_sexp_extract_param. * src/g10lib.h (_gcry_vcontrol): Return gcry_err_code_t. * src/visibility.c (gcry_mpi_snatch): Fix call to _gcry_mpi_snatch. -- GnuPG-bug-id: 2074
* wipememory: use one-byte aligned type for unaligned memory accessesJussi Kivilinna2015-03-211-6/+17
| | | | | | | | | | | * src/g10lib.h (fast_wipememory2_unaligned_head): Enable unaligned access only when HAVE_GCC_ATTRIBUTE_PACKED and HAVE_GCC_ATTRIBUTE_ALIGNED defined. (fast_wipememory_t): New. (fast_wipememory2): Use 'fast_wipememory_t'. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* cipher: Fix possible NULL deref in call to prime generator.Werner Koch2014-08-211-3/+6
| | | | | | | | | | | | | | | | * cipher/primegen.c (_gcry_generate_elg_prime): Change to return an error code. * cipher/dsa.c (generate): Take care of new return code. * cipher/elgamal.c (generate): Change to return an error code. Take care of _gcry_generate_elg_prime return code. (generate_using_x): Take care of _gcry_generate_elg_prime return code. (elg_generate): Propagate return code from generate. -- GnuPG-bug-id: 1699, 1700 Reported-by: S.K. Gupta Note that the NULL deref may have only happened on malloc failure.