summaryrefslogtreecommitdiff
path: root/cipher/sha256.c
Commit message (Collapse)AuthorAgeFilesLines
* hash: Add more OIDs.Werner Koch2022-03-281-0/+4
| | | | | * cipher/sha256.c: Add X9.62 OID. * cipher/sha512.c: Ditto.
* cipher: Use const for *_spec_t, if possible.NIIBE Yutaka2022-01-041-6/+6
| | | | | | | | | | | | | | | | | | | | * cipher/blake2.c: Use const. * cipher/camellia-glue.c, cipher/cipher.c, cipher/crc.c: Likewise. * cipher/des.c, cipher/gost28147.c, cipher/gostr3411-94.c: Likewise. * cipher/keccak.c, cipher/mac-cmac.c, cipher/mac-gmac.c: Likewise. * cipher/mac-hmac.c, cipher/mac-internal.h: Likewise. * cipher/mac-poly1305.c, cipher/mac.c, cipher/md.c: Likewise. * cipher/md.c, cipher/md2.c, cipher/md4.c, cipher/md5.c: Likewise. * cipher/pubkey.c, cipher/rfc2268.c, cipher/rijndael.c: Likewise. * cipher/rmd160.c, cipher/seed.c, cipher/serpent.c: Likewise. * cipher/sha1.c, cipher/sha256.c, cipher/sha512.c: Likewise. * cipher/sm3.c, cipher/sm4.c, cipher/stribog.c: Likewise. * cipher/pubkey.c, cipher/rfc2268.c, cipher/rijndael.c: Likewise. * src/cipher-proto.h, src/cipher.h: Likewise. -- Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
* cipher/sha256: fix 'accessing 32 bytes in a region of size 4' warningsJussi Kivilinna2021-10-081-46/+46
| | | | | | | | | | | | | | | | * cipher/sha256.c (SHA256_CONTEXT): Replace h0-h7 with h[8]. (do_sha256_transform_amd64_ssse3, do_sha256_transform_amd64_avx) (do_sha256_transform_amd64_avx2, do_sha256_transform_intel_shaext) (do_sha256_transform_armv8_ce, do_sha256_transform_ppc8) (do_sha256_transform_ppc9, do_sha256_transform_s390x) (do_sha256_final_s390x, sha256_init, sha224_init) (do_transform_generic, sha256_final): Convert use of h0-h7 to h[0]-h[7]. -- GCC-11 gives following warning on sha256.c: warning: 'func' accessing 32 bytes in a region of size 4 Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hash_buffers: add output length param for XOF supportJussi Kivilinna2021-04-261-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | * src/cipher-proto.h (gcry_md_hash_buffers_t): Add nbytes parameter for outbuf size for XOF algorithms. * cipher/md.c (_gcry_md_hash_buffer) (_gcry_md_hash_buffers_extract): Adjust for spec->hash_buffers parameter change. * cipher/keccak.c (_gcry_sha3_hash_buffers): Add nbytes parameter and handling for XOF output. * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Add nbytes parameter for hash_buffers. * cipher/rmd160.c (_gcry_rmd160_hash_buffers): Add nbytes parameter. * cipher/sha1.c (_gcry_sha1_hash_buffers): Add nbytes parameter. (_gcry_sha1_hash_buffer): Pass nbytes to _gcry_sha1_hash_buffers. * cipher/sha256.c (_gcry_sha256_hash_buffers) (_gcry_sha224_hash_buffers): Add nbytes parameter. * cipher/sha512.c (_gcry_sha512_hash_buffers) (_gcry_sha384_hash_buffers, _gcry_sha512_256_hash_buffers) (_gcry_sha512_224_hash_buffers): Add nbytes parameter. * cipher/sm3.c (_gcry_sm3_hash_buffers): Add nbytes parameter. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: remove hash_buffer function from algorithmsJussi Kivilinna2021-04-261-31/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/md.c (_gcry_md_hash_buffer): Remove used of 'spec->hash_buffer'. * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Remove *_hash_buffer. * cipher/crc.c: Remove spec hash_buffer NULL pointers. * cipher/gostr3411-94.c: Remove spec hash_buffer NULL pointers. * cipher/keccak.c (_gcry_sha3_hash_buffer (_gcry_sha3_224_hash_buffer, _gcry_sha3_256_hash_buffer): Remove. (_gcry_sha3_384_hash_buffer, _gcry_sha3_512_hash_buffer): Remove. * cipher/md2.c: Remove spec hash_buffer NULL pointers. * cipher/md4.c: Remove spec hash_buffer NULL pointers. * cipher/md5.c: Remove spec hash_buffer NULL pointers. * cipher/rmd160.c (_gcry_rmd160_hash_buffer): Remove. * cipher/sha1.c (_gcry_sha1_hash_buffer): Rewrite using _gcry_sha1_hash_buffers. (_gcry_sha1_hash_buffers): Make static. (_gcry_digest_spec_sha1): Remove hash_buffer pointer. * cipher/sha256.c (_gcry_sha256_hash_buffer) (_gcry_sha224_hash_buffer): Remove. (_gcry_sha256_hash_buffers): Make static. * cipher/sha512.c (_gcry_sha512_hash_buffer) (_gcry_sha384_hash_buffer, _gcry_sha512_256_hash_buffer) (_gcry_sha512_224_hash_buffer): Remove. (_gcry_sha512_hash_buffers): Make static. * cipher/sm3.c (_gcry_sm3_hash_buffer): Remove. (_gcry_sm3_hash_buffers): Make static. * cipher/stribog.c: Remove spec hash_buffer NULL pointers. * cipher/tiger.c: Remove spec hash_buffer NULL pointers. * cipher/whirlpool.c: Remove spec hash_buffer NULL pointers. * src/cipher-proto.h (gcry_md_hash_buffer_t): Remove. (gcry_md_spec_t): Remove 'hash_buffer'. * src/cipher.h (_gcry_rmd160_hash_buffer, _gcry_sha1_hash_buffers) (_gcry_sha256_hash_buffer, _gcry_sha256_hash_buffers) (_gcry_sha512_hash_buffer, _gcry_sha512_hash_buffers) (_gcry_sm3_hash_buffer, _gcry_sm3_hash_buffers): Remove. -- Patch removes hash_buffer functions and uses hash_buffers instead for code deduplication. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: clear bctx.count at final functionJussi Kivilinna2021-02-031-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/md4.c (md4_final): Set bctx.count zero after finalizing. * cipher/md5.c (md5_final): Ditto. * cipher/rmd160.c (rmd160_final): Ditto. * cipher/sha1.c (sha1_final): Ditto. * cipher/sha256.c (sha256_final): Ditto. * cipher/sha512.c (sha512_final): Ditto. * cipher/sm3.c (sm3_final): Ditto. * cipher/stribog.c (stribog_final): Ditto. * cipher/tiger.c (tiger_final): Ditto. -- Final functions used to use _gcry_md_block_write for passing final blocks to transform function and thus set bctx.count to zero in _gcry_md_block_write. Final functions were then changed to use transform functions directly, but bctx.count was not set zero after this change. Then later optimization to final functions to pass two blocks to transform functions in one call also changed values set to bctx.count, causing bctx.count getting value larger than block-size of digest algorithm. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add s390x/zSeries acceleration for SHA256Jussi Kivilinna2020-12-181-1/+65
| | | | | | | | | | | | | | | | | | | | | | * cipher/sha256.c (USE_S390X_CRYPTO): New. (SHA256_CONTEXT) [USE_S390X_CRYPTO]: New members. (do_sha256_transform_s390x, do_sha256_final_s390x): New. (sha256_common_init) [USE_S390X_CRYPTO]: Detect and setup s390x/zSeries acceleration. (sha256_final) [USE_S390X_CRYPTO]: Use accelerated final function. -- Benchmark (z15, 5.2Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 3.75 ns/B 254.5 MiB/s 19.48 c/B After: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 0.422 ns/B 2257 MiB/s 2.20 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hash-common: avoid integer division to reduce call overheadJussi Kivilinna2019-10-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | * cipher/hash-common.h (gcry_md_block_ctx): Replace 'blocksize' with 'blocksize_shift'. * cipher/hash-common.c (_gcry_md_block_write): Use bit-level operations instead of division to get number of blocks. * cipher/gostr2411-94.c (gost3411_init): Initialize 'blocksize_shift' instead of 'blocksize'. * cipher/md2.c (md2_init): Ditto. * cipher/md4.c (md4_init): Ditto. * cipher/md5.c (md5_init): Ditto. * cipher/rmd160.c (rmd160_init): Ditto. * cipher/sha1.c (sha1_init): Ditto. * cipher/sha256.c (sha256_common_init): Ditto. * cipher/sha512.c (sha512_init_common): Ditto. * cipher/sm3.c (sm3_init): Ditto. * cipher/stribog.c (stribog_init_512): Ditto. * cipher/tiger.c (do_init): Ditto. * cipher/whirlpool.c (whirlpool_init): Ditto. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add SHA-256 implementations for POWER8 and POWER9Jussi Kivilinna2019-08-311-46/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha256-ppc.c'; Add extra CFLAG handling for 'sha256-ppc.c'. * cipher/sha256-ppc.c: New. * cipher/sha256.c (USE_PPC_CRYPTO, _gcry_sha256_transform_ppc8) (_gcry_sha256_transform_ppc9, do_sha256_transform_ppc8) (do_sha256_transform_ppc9): New. (sha256_init, sha224_init): Split common part to new function named... (sha256_common_init): ...this; Add PowerPC HW feature detection and implementation selection. * configure.ac: Add 'vshasigmaw' instruction to PowerPC assembly support check; Add 'sha256-ppc.lo'. -- Benchmark on POWER8 ~3.8Ghz: Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 4.17 ns/B 228.6 MiB/s 15.85 c/B After (~1.63x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 2.55 ns/B 373.9 MiB/s 9.69 c/B For comparison, OpenSSL 1.1.1b (~2.4% slower): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 2.61 ns/B 364.8 MiB/s 9.93 c/B Benchmark on POWER9 ~3.8Ghz: Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 3.23 ns/B 295.6 MiB/s 12.26 c/B After (~1.04x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 3.10 ns/B 307.7 MiB/s 11.78 c/B For comparison, OpenSSL 1.1.1b (~6.4% faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 2.91 ns/B 327.5 MiB/s 11.07 c/B GnuPG-bug-id: T4530 Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Remove extra buffer flush at begining of digest final functionsJussi Kivilinna2019-04-051-2/+0
| | | | | | | | | | | | | | | | | * cipher/md2.c (md2_final): Remove _gcry_md_block_write flush call from entry. * cipher/md4.c (md4_final): Ditto. * cipher/md5.c (md5_final): Ditto. * cipher/rmd160.c (rmd160_final): Ditto. * cipher/sha1.c (sha1_final): Ditto. * cipher/sha256.c (sha256_final): Ditto. * cipher/sha512.c (sha512_final): Ditto. * cipher/sm3.c (sm3_final): Ditto. * cipher/stribog.c (stribog_final): Ditto. * cipher/tiger.c (tiger_final): Ditto. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Optimizations for digest final functionsJussi Kivilinna2019-04-051-15/+22
| | | | | | | | | | | | | | | | | * cipher/md4.c (md4_final): Avoid byte-by-byte buffer setting when padding; Merge extra and last block processing. * cipher/md5.c (md5_final): Ditto. * cipher/rmd160.c (rmd160_final): Ditto. * cipher/sha1.c (sha1_final): Ditto. * cipher/sha256.c (sha256_final): Ditto. * cipher/sm3.c (sm3_final): Ditto. * cipher/tiger.c (tiger_final): Ditto. * cipher/sha512.c (sha512_final): Avoid byte-by-byte buffer setting when padding. * cipher/stribog.c (stribog_final): Ditto. * cipher/whirlpool.c (whirlpool_final): Ditto. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Clean-up implementation selection for SHA1 and SHA2Jussi Kivilinna2018-06-191-227/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/sha1.c (ASM_EXTRA_STACK): Increase by sizeof(void*)*4. (do_sha1_transform_amd64_ssse3, do_sha1_transform_amd64_avx) (do_sha1_transform_amd64_avx_bmi2, do_sha1_transform_intel_shaext) (do_sha1_transform_armv7_neon, do_sha1_transform_armv8_ce): New. (transform_blk, transform): Merge to ... (do_transform_generic): ... this and remove calls to assembly implementations. (sha1_init): Select hd->bctx.bwrite based on HW features. (_gcry_sha1_mixblock, sha1_final): Call hd->bctx.bwrite instead of transform. * cipher/sha1.h (SHA1_CONTEXT): Remove implementation selection bits. * cipher/sha256.h (SHA256_CONTEXT): Remove implementation selection bits. (ASM_EXTRA_STACK): Increase by sizeof(void*)*4. (do_sha256_transform_amd64_ssse3, do_sha256_transform_amd64_avx) (do_sha256_transform_amd64_avx2, do_sha256_transform_intel_shaext) (do_sha256_transform_armv8_ce): New. (transform_blk, transform): Merge to ... (do_transform_generic): ... this and remove calls to assembly implementations. (sha256_init, sha224_init): Select hd->bctx.bwrite based on HW features. (sha256_final): Call hd->bctx.bwrite instead of transform. * cipher/sha512-armv7-neon.S (_gcry_sha512_transform_armv7_neon): Return zero. * cipher/sha512.h (SHA512_CONTEXT): Remove implementation selection bits. (ASM_EXTRA_STACK): Increase by sizeof(void*)*4. (do_sha512_transform_armv7_neon, do_sha512_transform_amd64_ssse3) (do_sha512_transform_amd64_avx, do_sha512_transform_amd64_avx2): New. [USE_ARM_ASM] (do_transform_generic): New. (transform_blk, transform): Merge to ... [!USE_ARM_ASM] (do_transform_generic): ... this and remove calls to assembly implementations. (sha512_init, sha384_init): Select hd->bctx.bwrite based on HW features. (sha512_final): Call hd->bctx.bwrite instead of transform. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add hash_buffer and hash_buffers for SHA-224, SHA-385, SHA3 and BLAKE2Jussi Kivilinna2018-06-191-1/+30
| | | | | | | | | | | | | | | | | * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Add hash_buffer and hash_buffers functions for BLAKE2 variants. * cipher/keccak.c (_gcry_sha3_hash_buffer, _gcry_sha3_hash_buffers) (_gcry_sha3_224_hash_buffer, _gcry_sha3_224_hash_buffers) (_gcry_sha3_256_hash_buffer, _gcry_sha3_256_hash_buffers) (_gcry_sha3_384_hash_buffer, _gcry_sha3_384_hash_buffers) (_gcry_sha3_512_hash_buffer, _gcry_sha3_512_hash_buffers): New. * cipher/sha256.c (_gcry_sha224_hash_buffer) (_gcry_sha224_hash_buffers): New. * cipher/sha512.c (_gcry_sha384_hash_buffer) (_gcry_sha384_hash_buffers): New. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add hash_buffer and hash_buffers pointers to message digest specJussi Kivilinna2018-06-191-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/cipher-proto.h (gcry_md_hash_buffer_t) (gcry_md_hash_buffers_t): New. (gcry_md_spec): Add hash_buffer and hash_buffers. * cipher/md.c (_gcry_md_hash_buffer, _gcry_md_hash_buffers): Use hash_buffer/hash_buffers from MD spec instead of hard-coding supported algorithms. * cipher/blake2.c: Add NULL to MD spec hash_buffer and hash_buffers pointers. * cipher/crc.c: Ditto. * cipher/gostr3411-94.c: Ditto. * cipher/keccak.c: Ditto. * cipher/md2.c: Ditto. * cipher/md4.c: Ditto. * cipher/md5.c: Ditto. * cipher/stribog.c: Ditto. * cipher/tiger.c: Ditto. * cipher/whirlpool.c: Ditto. * cipher/rmd160.c (_gcry_rmd160_hash_buffers): New. (_gcry_digest_spec_rmd160): Add hash_buffer and hash_buffers functions. * cipher/sha1.c (_gcry_digest_spec_sha1): Add hash_buffer and hash_buffers functions. * cipher/sha256.c (_gcry_digest_spec_sha256): Add hash_buffer and hash_buffers functions. (_gcry_digest_spec_sha224): Add NULL pointers for hash_buffer and hash_buffers. * cipher/sha512.c (_gcry_digest_spec_sha1): Add hash_buffer and hash_buffers functions. (_gcry_digest_spec_sha384): Add NULL pointers for hash_buffer and hash_buffers. * cipher/sm3.c (_gcry_digest_spec_sha1): Add hash_buffer and hash_buffers functions. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add Intel SHA Extensions accelerated SHA256 implementationJussi Kivilinna2018-02-161-8/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha256-intel-shaext.c'. * cipher/sha256-intel-shaext.c: New. * cipher/sha256.c (USE_SHAEXT) (_gcry_sha256_transform_intel_shaext): New. (SHA256_CONTEXT): Add 'use_shaext'. (sha256_init, sha224_init) [USE_SHAEXT]: Use shaext if supported. (transform) [USE_SHAEXT]: Use shaext if enabled. (transform): Only add ASM_EXTRA_STACK if returned burn length is not zero. * configure.ac: Add 'sha256-intel-shaext.lo'. -- Benchmark on Intel Celeron J3455 (1500 Mhz, no turbo): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 10.07 ns/B 94.72 MiB/s 15.10 c/B After (3.7x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 2.70 ns/B 353.8 MiB/s 4.04 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: Optimize gcry_md_hash_buffers for SHA-256 and SHA-512.Werner Koch2017-06-161-0/+29
| | | | | | | | | | | * cipher/sha256.c (_gcry_sha256_hash_buffer): New. (_gcry_sha256_hash_buffers): New. * cipher/sha512.c (_gcry_sha512_hash_buffer): New. (_gcry_sha512_hash_buffers): New. * cipher/md.c (_gcry_md_hash_buffer): Optimize for SHA246 and SHA512. (_gcry_md_hash_buffers): Ditto. Signed-off-by: Werner Koch <wk@gnupg.org>
* Add ARMv8/AArch64 Crypto Extension implementation of SHA-256Jussi Kivilinna2016-09-051-0/+4
| | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha256-armv8-aarch64-ce.S'. * cipher/sha256-armv8-aarch64-ce.S: New. * cipher/sha256-armv8-aarch32-ce.S: Move round macros to correct section. * cipher/sha256.c (USE_ARM_CE): Enable on ARMv8/AArch64. * configure.ac: Add 'sha256-armv8-aarch64-ce.lo'; Swap places for 'sha512-arm.lo' and 'sha256-armv8-aarch32-ce.lo'. -- Benchmark on Cortex-A53 (1152 Mhz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 13.34 ns/B 71.51 MiB/s 15.36 c/B After (7.2x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 1.85 ns/B 516.3 MiB/s 2.13 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add ARMv8/AArch32 Crypto Extension implemenation of SHA-256Jussi Kivilinna2016-07-141-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha256-armv8-aarch32-ce.S'. * cipher/sha256-armv8-aarch32-ce.S: New. * cipher/sha256.c (USE_ARM_CE): New. (sha256_init, sha224_init): Check features for HWF_ARM_SHA1. [USE_ARM_CE] (_gcry_sha256_transform_armv8_ce): New. (transform) [USE_ARM_CE]: Use ARMv8 CE implementation if HW supports. (SHA256_CONTEXT): Add 'use_arm_ce'. * configure.ac: Add 'sha256-armv8-aarch32-ce.lo'. -- Benchmark on Cortex-A53 (1152 Mhz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 17.38 ns/B 54.88 MiB/s 20.02 c/B After (~9.3x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 1.85 ns/B 515.7 MiB/s 2.13 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Improve performance of generic SHA256 implementationJussi Kivilinna2016-01-291-87/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/sha256.c (R): Let caller do variable shuffling. (Chro, Maj, Sum0, Sum1): Convert from inline functions to macros. (W, I): New. (transform_blk): Unroll round loop; inline message expansion to rounds to make message expansion buffer smaller. -- Benchmark on Cortex-A8 (armv6, 1008 Mhz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 27.63 ns/B 34.52 MiB/s 27.85 c/B After (1.31x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 20.97 ns/B 45.48 MiB/s 21.13 c/B Benchmark on Cortex-A8 (armv7, 1008 Mhz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 24.18 ns/B 39.43 MiB/s 24.38 c/B After (1.13x faster): | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 21.28 ns/B 44.82 MiB/s 21.45 c/B Benchmark on Intel Core i5-4570 (i386, 3.2 Ghz): Before: | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 5.78 ns/B 164.9 MiB/s 18.51 c/B After (1.06x faster) | nanosecs/byte mebibytes/sec cycles/byte SHA256 | 5.41 ns/B 176.1 MiB/s 17.33 c/B Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: add variable length output interfaceJussi Kivilinna2015-10-281-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/crc.c (_gcry_digest_spec_crc32) (_gcry_digest_spec_crc32_rfc1510, _gcry_digest_spec_crc24_rfc2440): Set 'extract' NULL. * cipher/gostr3411-94.c (_gcry_digest_spec_gost3411_94) (_gcry_digest_spec_gost3411_cp): Ditto. * cipher/keccak.c (_gcry_digest_spec_sha3_224) (_gcry_digest_spec_sha3_256, _gcry_digest_spec_sha3_384) (_gcry_digest_spec_sha3_512): Ditto. * cipher/md2.c (_gcry_digest_spec_md2): Ditto. * cipher/md4.c (_gcry_digest_spec_md4): Ditto. * cipher/md5.c (_gcry_digest_spec_md5): Ditto. * cipher/rmd160.c (_gcry_digest_spec_rmd160): Ditto. * cipher/sha1.c (_gcry_digest_spec_sha1): Ditto. * cipher/sha256.c (_gcry_digest_spec_sha224) (_gcry_digest_spec_sha256): Ditto. * cipher/sha512.c (_gcry_digest_spec_sha384) (_gcry_digest_spec_sha512): Ditto. * cipher/stribog.c (_gcry_digest_spec_stribog_256) (_gcry_digest_spec_stribog_512): Ditto. * cipher/tiger.c (_gcry_digest_spec_tiger) (_gcry_digest_spec_tiger1, _gcry_digest_spec_tiger2): Ditto. * cipher/whirlpool.c (_gcry_digest_spec_whirlpool): Ditto. * cipher/md.c (md_enable): Do not allow combination of HMAC and 'expandable-output function'. (md_final): Check if spec->read is NULL before calling. (md_read): Ditto. (md_extract, _gcry_md_extract): New. * doc/gcrypt.texi: Add SHA3 algorithms and gcry_md_extract. * src/cipher-proto.h (gcry_md_extract_t): New. (gcry_md_spec_t): Add 'extract'. * src/gcrypt-int.g (_gcry_md_extract): New. * src/gcrypt.h.in (gcry_md_extract): New. * src/libgcrypt.def: Add gcry_md_extract. * src/libgcrypt.vers: Add gcry_md_extract. * src/visibility.c (gcry_md_extract): New. * src/visibility.h (gcry_md_extract): New. -- Patch adds new interface for reading output from 'expandable-output function' MD algorithms that can give variable length output (ie. SHAKE algorithms from FIPS-202). New function to read output is gpg_error_t gcry_md_extract(gcry_md_hd_t md, int algo, void *buffer, size_t length); Function implicitly finalizes algorithm so that no new input can be given. Subsequents calls of the function return more output bytes from the algorithm. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hwf-x86: add detection for Intel CPUs with fast SHLD instructionJussi Kivilinna2015-10-281-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* Enable AMD64 SHA256 implementations for WIN64Jussi Kivilinna2015-05-021-15/+45
| | | | | | | | | | | | | | | | | | * cipher/sha256-avx-amd64.S: Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. (ELF): New macro to mask lines with ELF specific commands. * cipher/sha256-avx2-bmi2-amd64.S: Ditto. * cipher/sha256-ssse3-amd64.S: Ditto. * cipher/sha256.c (USE_SSSE3, USE_AVX, USE_AVX2): Enable when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined. [USE_SSSE3 || USE_AVX || USE_AVX2] (ASM_FUNC_ABI) (ASM_EXTRA_STACK): New. (_gcry_sha256_transform_amd64_ssse3, _gcry_sha256_transform_amd64_avx) (_gcry_sha256_transform_amd64_avx2): Add ASM_FUNC_ABI to prototypes. (transform): Add ASM_EXTRA_STACK to stack burn value. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* hash: fix compiler warning on ARMJussi Kivilinna2014-12-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/md.c (md_open, md_copy): Cast 'char *' to ctx through 'void *'. * cipher/md4.c (md4_final): Use buf_put_* helper instead of converting 'char *' to 'u32 *'. * cipher/md5.c (md5_final): Ditto. * cipher/rmd160.c (_gcry_rmd160_mixblock, rmd160_final): Ditto. * cipher/sha1.c (sha1_final): Ditto. * cipher/sha256.c (sha256_final): Ditto. * cipher/sha512.c (sha512_final): Ditto. * cipher/tiger.c (tiger_final): Ditto. -- Patch fixes 'cast increases required alignment' warnings seen on GCC: md.c: In function 'md_open': md.c:318:23: warning: cast increases required alignment of target type [-Wcast-align] hd->ctx = ctx = (struct gcry_md_context *) ((char *) hd + n); ^ md.c: In function 'md_copy': md.c:491:22: warning: cast increases required alignment of target type [-Wcast-align] bhd->ctx = b = (struct gcry_md_context *) ((char *) bhd + n); ^ md4.c: In function 'md4_final': md4.c:258:20: warning: cast increases required alignment of target type [-Wcast-align] #define X(a) do { *(u32*)p = le_bswap32((*hd).a) ; p += 4; } while(0) ^ md4.c:259:3: note: in expansion of macro 'X' X(A); ^ md4.c:258:20: warning: cast increases required alignment of target type [-Wcast-align] #define X(a) do { *(u32*)p = le_bswap32((*hd).a) ; p += 4; } while(0) ^ md4.c:260:3: note: in expansion of macro 'X' X(B); ^ [removed the rest] Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: Add Whirlpool bug emulation feature.Werner Koch2014-01-191-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/gcrypt.h.in (GCRY_MD_FLAG_BUGEMU1): New. * src/cipher-proto.h (gcry_md_init_t): Add arg FLAGS. Change all code to implement that flag. * cipher/md.c (gcry_md_context): Replace SECURE and FINALIZED by bit field FLAGS. Add flag BUGEMU1. Change all users. (md_open): Replace args SECURE and HMAC by FLAGS. Init flags.bugemu1. (_gcry_md_open): Add for GCRY_MD_FLAG_BUGEMU1. (md_enable): Pass bugemu1 flag to the hash init function. (_gcry_md_reset): Ditto. -- This problem is for example exhibited in the Linux cryptsetup tool. See https://bbs.archlinux.org/viewtopic.php?id=175737 . It has be been tracked down by Milan Broz. The suggested way of using the flag is: if (whirlpool_bug_assumed) { #if GCRYPT_VERSION_NUMBER >= 0x010601 err = gcry_md_open (&hd, GCRY_MD_WHIRLPOOL, GCRY_MD_FLAG_BUGEMU1) if (gpg_err_code (err) == GPG_ERR_INV_ARG) error ("Need at least Libggcrypt 1.6.1 for the fix"); else { do_hash (hd); gcry_md_close (hd); } #endif } Signed-off-by: Werner Koch <wk@gnupg.org>
* Add AVX and AVX2/BMI implementations for SHA-256Jussi Kivilinna2013-12-181-2/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * LICENSES: Add 'cipher/sha256-avx-amd64.S' and 'cipher/sha256-avx2-bmi2-amd64.S'. * cipher/Makefile.am: Add 'sha256-avx-amd64.S' and 'sha256-avx2-bmi2-amd64.S'. * cipher/sha256-avx-amd64.S: New. * cipher/sha256-avx2-bmi2-amd64.S: New. * cipher/sha256-ssse3-amd64.S: Use 'lea' instead of 'add' in few places for tiny speed improvement. * cipher/sha256.c (USE_AVX, USE_AVX2): New. (SHA256_CONTEXT) [USE_AVX, USE_AVX2]: Add 'use_avx' and 'use_avx2'. (sha256_init, sha224_init) [USE_AVX, USE_AVX2]: Initialize above new context members. [USE_AVX] (_gcry_sha256_transform_amd64_avx): New. [USE_AVX2] (_gcry_sha256_transform_amd64_avx2): New. (transform) [USE_AVX2]: Use AVX2 assembly if enabled. (transform) [USE_AVX]: Use AVX assembly if enabled. * configure.ac: Add 'sha256-avx-amd64.lo' and 'sha256-avx2-bmi2-amd64.lo'. -- Patch adds fast AVX and AVX2/BMI2 implementations of SHA-256 by Intel Corporation. The assembly source is licensed under 3-clause BSD license, thus compatible with LGPL2.1+. Original source can be accessed at: http://www.intel.com/p/en_US/embedded/hwsw/technology/packet-processing#docs Implementation is described in white paper "Fast SHA - 256 Implementations on Intel® Architecture Processors" http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/sha-256-implementations-paper.html Note: AVX implementation uses SHLD instruction to emulate RORQ, since it's faster on Intel Sandy-Bridge. However, on non-Intel CPUs SHLD is much slower than RORQ, so therefore AVX implementation is (for now) limited to Intel CPUs. Note: AVX2 implementation also uses BMI2 instruction rorx, thus additional HWF flag. Benchmarks: cpu C-lang SSSE3 AVX/AVX2 C vs AVX/AVX2 vs SSSE3 Intel i5-4570 13.86 c/B 10.27 c/B 8.70 c/B 1.59x 1.18x Intel i5-2450M 17.25 c/B 12.36 c/B 10.31 c/B 1.67x 1.19x Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Add bulk processing for hash transform functionsJussi Kivilinna2013-12-171-6/+14
| | | | | | | | | | | | | | | | | | | | | | | | * cipher/hash-common.c (_gcry_md_block_write): Preload 'hd->blocksize' to stack, pass number of blocks to 'hd->bwrite'. * cipher/hash-common.c (_gcry_md_block_write_t): Add 'nblks'. * cipher/gostr3411-94.c: Rename 'transform' function to 'transform_blk', add new 'transform' function with 'nblks' as additional input. * cipher/md4.c: Ditto. * cipher/md5.c: Ditto. * cipher/md4.c: Ditto. * cipher/rmd160.c: Ditto. * cipher/sha1.c: Ditto. * cipher/sha256.c: Ditto. * cipher/sha512.c: Ditto. * cipher/stribog.c: Ditto. * cipher/tiger.c: Ditto. * cipher/whirlpool.c: Ditto. -- Pass number of blocks to algorithm for futher optimizations. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* SHA-256: Add SSSE3 implementation for x86-64Jussi Kivilinna2013-12-121-1/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/Makefile.am: Add 'sha256-ssse3-amd64.S'. * cipher/sha256-ssse3-amd64.S: New. * cipher/sha256.c (USE_SSSE3): New. (SHA256_CONTEXT) [USE_SSSE3]: Add 'use_ssse3'. (sha256_init, sha224_init) [USE_SSSE3]: Initialize 'use_ssse3'. (transform): Rename to... (_transform): This. [USE_SSSE3] (_gcry_sha256_transform_amd64_ssse3): New. (transform): New. * configure.ac (HAVE_INTEL_SYNTAX_PLATFORM_AS): New check. (sha256): Add 'sha256-ssse3-amd64.lo'. * doc/gcrypt.texi: Document 'intel-ssse3'. * src/g10lib.h (HWF_INTEL_SSSE3): New. * src/hwfeatures.c (hwflist): Add "intel-ssse3". * src/hwf-x86.c (detect_x86_gnuc): Test for SSSE3. -- Patch adds fast SSSE3 implementation of SHA-256 by Intel Corporation. The assembly source is licensed under 3-clause BSD license, thus compatible with LGPL2.1+. Original source can be accessed at: http://www.intel.com/p/en_US/embedded/hwsw/technology/packet-processing#docs Implementation is described in white paper "Fast SHA - 256 Implementations on Intel® Architecture Processors" http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/sha-256-implementations-paper.html Benchmarks: cpu Old New Diff Intel i5-4570 13.99 c/B 10.66 c/B 1.31x Intel i5-2450M 21.53 c/B 15.79 c/B 1.36x Intel Core2 T8100 20.84 c/B 15.07 c/B 1.38x Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* md: Fix hashing for data >= 256 GBWerner Koch2013-11-141-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/hash-common.h (gcry_md_block_ctx): Add "nblocks_high". * cipher/hash-common.c (_gcry_md_block_write): Bump NBLOCKS_HIGH. * cipher/md4.c (md4_init, md4_final): Take care of NBLOCKS_HIGH. * cipher/md5.c (md5_init, md5_final): Ditto. * cipher/rmd160.c (_gcry_rmd160_init, rmd160_final): Ditto. * cipher/sha1.c (sha1_init, sha1_final): Ditto. * cipher/sha256.c (sha256_init, sha224_init, sha256_final): Ditto. * cipher/sha512.c (sha512_init, sha384_init, sha512_final): Ditto. * cipher/tiger.c (do_init, tiger_final): Ditto. * cipher/whirlpool.c (whirlpool_final): Ditto. * cipher/md.c (gcry_md_algo_info): Add GCRYCTL_SELFTEST. (_gcry_md_selftest): Return "not implemented" as required. * tests/hashtest.c: New. * tests/genhashdata.c: New. * tests/Makefile.am (TESTS): Add hashtest. (noinst_PROGRAMS): Add genhashdata -- Problem found by Denis Corbin and analyzed by Yuriy Kaminskiy. sha512 and whirlpool should not have this problem because they use 64 bit types for counting the blocks. However, a similar fix has been employed to allow for really huge sizes - despite that it will be very hard to test them. The test vectors have been produced by sha{1,224,256}sum and the genhashdata tool. A sequence of 'a' is used for them because a test using one million 'a' is commonly used for test vectors. More test vectors are required. Running the large tests needs to be done manual for now: ./hashtest --gigs 256 tests all algorithms, ./hashtest --gigs 256 sha1 sha224 sha256 only the given ones. A configure option to include these test in the standard regression suite will be useful. The tests will take looong. Signed-off-by: Werner Koch <wk@gnupg.org>
* md: Simplify the message digest dispatcher md.c.Werner Koch2013-10-021-8/+4
| | | | | | | | | | * src/gcrypt-module.h (gcry_md_spec_t): Move to ... * src/cipher-proto.h: here. Merge with md_extra_spec_t. Add fields ALGO and FLAGS. Set these fields in all digest modules. * cipher/md.c: Change most code to replace the former module system by a simpler system to gain information about the algorithms. Signed-off-by: Werner Koch <wk@gnupg.org>
* Optimize and cleanup 32-bit and 64-bit endianess transformsJussi Kivilinna2013-09-211-32/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/bithelp.h (bswap32, bswap64, le_bswap32, be_bswap32) (le_bswap64, be_bswap64): New. * cipher/bufhelp.h (buf_get_be32, buf_get_le32, buf_put_le32) (buf_put_be32, buf_get_be64, buf_get_le64, buf_put_be64) (buf_put_le64): New. * cipher/blowfish.c (do_encrypt_block, do_decrypt_block): Use new endian conversion helpers. (do_bf_setkey): Turn endian specific code to generic. * cipher/camellia.c (GETU32, PUTU32): Use new endian conversion helpers. * cipher/cast5.c (rol): Remove, use rol from bithelp. (F1, F2, F3): Fix to use rol from bithelp. (do_encrypt_block, do_decrypt_block, do_cast_setkey): Use new endian conversion helpers. * cipher/des.c (READ_64BIT_DATA, WRITE_64BIT_DATA): Ditto. * cipher/md4.c (transform, md4_final): Ditto. * cipher/md5.c (transform, md5_final): Ditto. * cipher/rmd160.c (transform, rmd160_final): Ditto. * cipher/salsa20.c (LE_SWAP32, LE_READ_UINT32): Ditto. * cipher/scrypt.c (READ_UINT64, LE_READ_UINT64, LE_SWAP32): Ditto. * cipher/seed.c (GETU32, PUTU32): Ditto. * cipher/serpent.c (byte_swap_32): Remove. (serpent_key_prepare, serpent_encrypt_internal) (serpent_decrypt_internal): Use new endian conversion helpers. * cipher/sha1.c (transform, sha1_final): Ditto. * cipher/sha256.c (transform, sha256_final): Ditto. * cipher/sha512.c (__transform, sha512_final): Ditto. * cipher/stribog.c (transform, stribog_final): Ditto. * cipher/tiger.c (transform, tiger_final): Ditto. * cipher/twofish.c (INPACK, OUTUNPACK): Ditto. * cipher/whirlpool.c (buffer_to_block, block_to_buffer): Ditto. * configure.ac (gcry_cv_have_builtin_bswap32): Check for compiler provided __builtin_bswap32. (gcry_cv_have_builtin_bswap64): Check for compiler provided __builtin_bswap64. -- Patch add helper functions that provide conversions to/from integers and buffers of different endianess. Benefits are code cleanup and optimization for architectures that have byte-swaping instructions and/or can do fast unaligned memory accesses. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Use hash transform function return type for passing burn stack depthJussi Kivilinna2013-09-211-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * cipher/gostr4311-94.c (transform): Return stack burn depth. * cipher/hash-common.c (_gcry_md_block_write): Use stack burn depth returned by 'hd->bwrite'. * cipher/hash-common.h (_gcry_md_block_write_t): Change return type to 'unsigned int'. (gry_md_block_ctx_t): Remove 'stack_burn'. * cipher/md4.c (transform): Return stack burn depth. (md4_final): Use stack burn depth from transform. * cipher/md5.c (transform): Return stack burn depth. (md5_final): Use stack burn depth from transform. * cipher/rmd160.c (transform): Return stack burn depth. (rmd160_final): Use stack burn depth from transform. * cipher/sha1.c (transform): Return stack burn depth. (sha1_final): Use stack burn depth from transform. * cipher/sha256.c (transform): Return stack burn depth. (sha256_final): Use stack burn depth from transform. * cipher/sha512.c (__transform, transform): Return stack burn depth. (sha512_final): Use stack burn depth from transform. * cipher/stribog.c (transform64): Return stack burn depth. * cipher/tiger.c (transform): Return stack burn depth. (tiger_final): Use stack burn depth from transform. -- Transform function might want different depth of stack burn depending on detected CPU features (like in SHA-512 on ARM with NEON). So return stack burn depth from transform functions as a request or a hint to calling function. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
* Separate common md block codeDmitry Eremin-Solenikov2013-09-181-73/+40
| | | | | | | | | | | | | | | | | | | | * cipher/hash-common.c (_gcry_md_block_write): New function to handle block md operations. The current implementation is limited to 64 byte buffer and u32 block counter. * cipher/md4.c, cipher/md5.c, cipher/rmd.h, cipher/rmd160.c *cipher/sha1.c, cipher/sha256.c, cipher/tiger.c: Convert to use _gcry_md_block_write. -- Whirlpool and SHA512 are left as before, as SHA512 uses 128 bytes buffer and u64 blocks counter and Whirlpool does not have trivial block handling structure. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Indentation changes, minor edits and adjustment of _gcry_sha1_hash_buffers by wk.
* Nuked almost all trailing whitespace.post-nuke-of-trailing-wsWerner Koch2011-02-041-26/+26
| | | | Check and install the standard git pre-commit hook.
* Add an identifier for ECDH.Werner Koch2010-01-211-1/+1
| | | | | | Fixed some NEWS entries. Updated copyright lines.
* Boost performance of SHA-512 and SHA-256.Werner Koch2009-12-111-10/+78
|
* Portability fixes.Werner Koch2009-02-161-1/+0
|
* Only run required tests during power-up self-test.Werner Koch2008-09-121-39/+47
| | | | | Enter error state after a failed key generation tests.
* Add more selftests.Werner Koch2008-09-091-6/+47
|
* A whole bunch of changes to eventually support Werner Koch2008-08-191-3/+85
| | | | | | | FIPS restricted mode. Also some documentation improvements and other minor enhancements. See the ChangeLogs. Stay tuned.
* Manual and comment fixes.Werner Koch2008-01-081-1/+1
| | | | | Fixed a entropy wasting bug.
* Fixed SHA-224 DER template.Werner Koch2007-11-281-2/+2
|
* A lot of cleanups as well as minor API changes.Werner Koch2007-02-211-2/+3
| | | | | Ported some changes from 1.2 to here.
* Added OIDs from pkcs#1Werner Koch2007-01-301-0/+3
|
* Applied pacthes from Brad Hards.Werner Koch2006-03-101-6/+48
| | | | | Note, that the HMAC tests for SHA-384 and SHA-512 are failing.
* 2004-08-23 Moritz Schulte <moritz@g10code.com>Moritz Schulte2004-08-231-1/+1
| | | | | | | | | | | | | | | * ac.c: Do not include <assert.h>. * rndegd.c: Likewise. * sha1.c: Likewise. * rndunix.c: Likewise. * rndlinux.c: Likewise. * rmd160.c: Likewise. * md5.c: Likewise. * md4.c: Likewise. * cipher.c: Likewise. * crc.c: Likewise. * blowfish.c: Likewise.
* Mostly indendation changes. Completed the Manifest.Werner Koch2003-12-111-4/+6
|
* * configure.ac: Give a hint on where libgpg-error is available.Werner Koch2003-10-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reformatted long lines. Don't include gcrypt-defs.h. * ac.c (ac_key_identifiers): Made static. * random.c (getfnc_gather_random,getfnc_fast_random_poll): Move prototypes to .. * rand-internal.h: .. here * random.c (getfnc_gather_random): Include rndw32 gatherer. * rndunix.c, rndw32.c, rndegd.c: Include them here. * rndlinux.c (_gcry_rndlinux_gather_random): Prepend the _gcry_ prefix. Changed all callers. * rndegd.c (_gcry_rndegd_gather_random): Likewise. (_gcry_rndegd_connect_socket): Likewise. * rndunix.c (_gcry_rndunix_gather_random): Likewise. (waitpid): Made static. * rndw32.c: Removed the old and unused winseed.dll cruft. (_gcry_rndw32_gather_random_fast): Renamed from gather_random_fast. (_gcry_rndw32_gather_random): Renamed from gather_random. Note, that the changes 2003-04-08 somehow got lost. * sha512.c (sha512_init, sha384_init): Made static. * cipher.c (do_ctr_decrypt): Removed "return" from this void function. * gcrypt.h (gcry_pk_testkey): Doc fix. * libgcrypt.def: Manually wrote this file. * build-def: This file should not be used anymore.
* 2003-07-21 Moritz Schulte <moritz@g10code.com>Moritz Schulte2003-07-211-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * pubkey.c (gcry_pk_lookup_func_name): Use new member name `aliases' instead of `sexp_names'. * ac.c (gcry_ac_key_data_get): New function. * cipher.c (gcry_cipher_lookup_func_name): Fix return value. 2003-07-20 Moritz Schulte <moritz@g10code.com> * blowfish.c: Adjusted for new gcry_cipher_spec_t structure. * cast5.c: Likewise. * twofish.c: Likewise. * arcfour.c: Likewise. * rijndael.c (rijndael_oids, rijndael192_oids, rijndael256_oids): New variables, adjust for new gcry_cipher_spec_t structure. * des.c (oids_tripledes): New variable, adjust for new gcry_cipher_spec_t structure. * md.c (oid_table): Removed. * tiger.c (oid_spec_tiger): New variable. (digest_spec_tiger): Adjusted for new gry_md_spec_t structure. * sha512.c (oid_spec_sha512): New variable. (digest_spec_sha512): Adjusted for new gry_md_spec_t structure. * sha512.c (oid_spec_sha384): New variable. (digest_spec_sha384): Adjusted for new gry_md_spec_t structure. * sha256.c (oid_spec_sha256): New variable. (digest_spec_sha256): Adjusted for new gry_md_spec_t structure. * sha1.c (oid_spec_sha1): New variable. (digest_spec_sha1): Adjusted for new gry_md_spec_t structure. * rmd160.c (oid_spec_rmd160): New variable. (digest_spec_rnd160): Adjusted for new gry_md_spec_t structure. * md5.c (oid_spec_md5): New variable. (digest_spec_md5): Adjusted for new gry_md_spec_t structure. * md4.c (oid_spec_md4): New variable. (digest_spec_md4): Adjusted for new gry_md_spec_t structure. * crc.c (digest_spec_crc32, digest_spec_crc32_rfc1510, digest_spec_crc32_rfc2440): Adjusted for new gry_md_spec_t structure. 2003-07-19 Moritz Schulte <moritz@g10code.com> * md.c (gcry_md_lookup_func_oid): New function. (search_oid): New function, copied from cipher.c. (gcry_md_map_name): Adjust for new search_oid_interface. * cipher.c (oid_table): Removed table. (gcry_cipher_lookup_func_oid): New function. (search_oid): Rewritten to use the module functions. (gcry_cipher_map_name): Adjust for new search_oid interface. (gcry_cipher_mode_from_oid): Likewise.
* 2003-07-07 Moritz Schulte <moritz@g10code.com>Moritz Schulte2003-07-071-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * ac.c (gcry_ac_data_set): Only release old MPI value if it is different from the new value. * pubkey.c (gcry_pk_list): New function. * md.c (gcry_md_list): New function. * ac.c (gcry_ac_key_pair_generate): Fix calculation of format string size. 2003-07-05 Moritz Schulte <moritz@g10code.com> * md.c: Named struct of digest_table `digest_table_entry'. (digest_table_entry): New member: algorithm; filled in. (digest_table_entry): Removed unused member: flags. (gcry_md_register): New argument: algorithm_id, filled in. (gcry_md_register_default): Used algorithm ID from module structure. (gcry_md_map_name): Likewise. (md_enable): Likewise. (md_read): Likewise. (gcry_md_info): Likewise. * pubkey.c: Named truct for pubkey_table `pubkey_table_entry'. (pubkey_table_entry): New member: algorithm; filled in. (gcry_pk_register_default): Used algorithm ID from pubkey_table. (gcry_pk_register): New argument: algorithm_id, filled in. (gcry_pk_map_name): Used algorithm ID from module structure. (gcry_pk_decrypt): Likewise. (gcry_pk_encrypt): Likewise. (gcry_pk_verify): Likewise. (gcry_pk_sign): Likewise. (gcry_pk_testkey): Likewise. (gcry_pk_genkey): Likewise. (gcry_pk_get_nbits): Likewise. (sexp_to_key): Removed unused variable: algo. (sexp_to_sig): Likewise. * cipher.c: Named struct for cipher_table `cipher_table_entry'. (cipher_table_entry): New member: algorithm; filled in. (gcry_cipher_register_default): Used algorithm ID from cipher_table. (gcry_cipher_register): New argument: algorithm_id, filled in. (gcry_cipher_map_name): Used algorithm ID from module structure. * arcfour.c (cipher_spec_arcfour): Removed algorithm ID. * blowfish.c (cipher_spec_blowfish): Likewise. * cast5.c (cipher_spec_cast5): Likewise. * crc.c (digest_spec_crc32): Likewise. * crc.c (digest_spec_crc32_rfc1510): Likewise. * crc.c (digest_spec_crc32_rfc2440): Likewise. * des.c (cipher_spec_des): Likewise. * des.c (cipher_spec_tripledes): Likewise. * dsa.c (pubkey_spec_dsa): Likewise. * elgamal.c (pubkey_spec_elg): Likewise. * md4.c (digest_spec_md4): Likewise. * md5.c (digest_spec_md5): Likewise. * aes.c (cipher_spec_aes): Likewise. * aes.c (cipher_spec_aes192): Likewise. * aes.c (cipher_spec_aes256): Likewise. * rsa.c (pubkey_spec_rsa): Likewise. * sha1.c (digest_spec_sha1): Likewise. * sha256.c (digest_spec_sha256): Likewise. * sha512.c (digest_spec_sha512): Likewise. * tiger.c (digest_spec_tiger): Likewise. * twofish.c (cipher_spec_twofish): Likewise. * twofish.c (cipher_spec_twofish128): Likewise. * Makefile.am (EXTRA_libcipher_la_SOURCES): Fix list of source files; reported by Simon Josefsson <jas@extundo.com>. * pubkey.c: Replaced all occurences of `id' with `algorithm', since `id' is a keyword in obj-c. * md.c: Likewise. * cipher.c: Likewise. * crc.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, tiger.c: Replaced all occurences of gcry_digest_spec_t with gcry_md_spec_t. * dsa.c, rsa.c, elgamal.c: Replaced all occurencens of gcry_pubkey_spec_t with gcry_pk_spec_t. * md.c: Replaced all occurences of gcry_digest_spec_t with gcry_md_spec_t. (gcry_digest_register_default): Renamed to ... (gcry_md_register_default): ... this; adjusted callers. (gcry_digest_lookup_func_name): Renamed to ... (gcry_md_lookup_func_name): ... this; adjusted callers. (gcry_digest_lookup_name): Renamed to ... (gcry_md_lookup_name): ... this; adjusted callers. (gcry_digest_register): Renamed to ... (gcry_md_register): ... this. (gcry_digest_unregister): Renamed to ... (gcry_md_unregister): ... this. * pubkey.c (gcry_pubkey_register): Renamed to ... (gcry_pk_register): ... this. (gcry_pubkey_unregister): Renamed to ... (gcry_pk_unregister): ... this. Replaced all occurences of gcry_pubkey_spec_t with gcry_pk_spec_t. (gcry_pubkey_register_default): Renamed to ... (gcry_pk_register_default): ... this; adjusted callers. (gcry_pubkey_lookup_func_name): Renamed to ... (gcry_pk_lookup_func_name): ... this; adjusted callers. (gcry_pubkey_lookup_name): Renamed to ... (gcry_pk_lookup_name): ... this; adjusted callers. * md.c (gcry_md_hash_buffer): Fix error checking. Thanks to Simon Josefsson <jas@extunde.com>. 2003-07-04 Moritz Schulte <moritz@g10code.com> * cipher.c (gcry_cipher_list): New function.
* 2003-06-18 Moritz Schulte <moritz@g10code.com>Moritz Schulte2003-06-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * arcfour.c, cipher.c, blowfish.c, md.c, cast5.c, pubkey.c, crc.c, des.c, dsa.c, elgamal.c, md4.c, md5.c, random.c, rijndael.c, rmd160.c, rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: Replaced older types GcryDigestSpec, GcryCipherSpec and GcryPubkeySpec with newer types: gcry_digest_spec_t, gcry_cipher_spec_t and gcry_pubkey_spec_t. * md.c (gcry_digest_id_new): Removed function. (gcry_digest_register): Removed code for generating a new module ID. * pubkey.c (gcry_pubkey_id_new): Removed function. (gcry_pubkey_register): Removed code for generating a new module ID. * cipher.c, md.c, pubkey.c: Replace old type GcryModule with newer one: gcry_module_t. (gcry_cipher_id_new): Removed function. (gcry_cipher_register): Removed code for generating a new module ID. * cipher.c (gcry_cipher_register): Adjust call to _gcry_module_add. (gcry_cipher_register_default): Likewise. * pubkey.c (gcry_pubkey_register_default): Likewise. (gcry_pubkey_register): Likewise. * md.c (gcry_digest_register_default): Likewise. (gcry_digest_register): Likewise. * md.c (gcry_digest_lookup_func_id): Removed function. (gcry_digest_lookup_id): Likewise. (gcry_digest_id_new): Use _gcry_module_lookup_id instead of gcry_digest_lookup_id. (digest_algo_to_string): Likewise. (check_digest_algo): Likewise. (md_enable): Likewise. (md_digest_length): Likewise. (md_asn_oid): Likewise. * pubkey.c (gcry_pubkey_lookup_id): Removed function. (gcry_pubkey_lookup_func_id): Likewise. (gcry_pubkey_id_new): Use _gcry_module_lookup_id instead of gcry_pubkey_id_new. (gcry_pk_algo_name): Likewise. (disable_pubkey_algo): Likewise. (check_pubkey_algo): Likewise. (pubkey_get_npkey): Likewise. (pubkey_get_nskey): Likewise. (pubkey_get_nsig): Likewise. (pubkey_get_nenc): Likewise. (pubkey_generate): Likewise. (pubkey_check_secret_key): Likewise. (pubkey_encrypt): Likewise. (pubkey_decrypt): Likewise. (pubkey_sign): Likewise. (pubkey_verify): Likewise. (gcry_pk_algo_info): Likewise. * cipher.c (gcry_cipher_lookup_func_id): Removed function. (gcry_cipher_lookup_id): Likewise. (cipher_algo_to_string): use _gcry_module_lookup_id instead of gcry_cipher_lookup_id. (disable_cipher_algo): Likewise. (check_cipher_algo): Likewise. (cipher_get_blocksize): Likewise. (gcry_cipher_open): Likewise. (gcry_cipher_id_new): Likewise.