BearSSL
3 years agoFixed comment.
Thomas Pornin [Wed, 27 Jan 2021 14:34:56 +0000 (09:34 -0500)]
Fixed comment.

3 years agoFixed carry propagation bug in m64 impl for P-256.
Thomas Pornin [Wed, 18 Nov 2020 14:53:11 +0000 (09:53 -0500)]
Fixed carry propagation bug in m64 impl for P-256.

3 years agoHarmonized behaviour when point length is invalid.
Thomas Pornin [Fri, 24 Apr 2020 13:18:58 +0000 (15:18 +0200)]
Harmonized behaviour when point length is invalid.

4 years agoTypo fix in comment.
Thomas Pornin [Thu, 30 Jan 2020 23:17:23 +0000 (00:17 +0100)]
Typo fix in comment.

4 years agoAdded discard of unread appdata on explicit close.
Thomas Pornin [Thu, 30 Jan 2020 17:02:44 +0000 (18:02 +0100)]
Added discard of unread appdata on explicit close.

4 years agoFixed carry propagation bug in P-256 'm62' implementation (found by Auke Zeilstra...
Thomas Pornin [Sat, 14 Dec 2019 15:53:30 +0000 (16:53 +0100)]
Fixed carry propagation bug in P-256 'm62' implementation (found by Auke Zeilstra; consequences unclear, possibly some invalid curve attacks in static ECDH contexts).

4 years agoTypo fix in comment.
Thomas Pornin [Sat, 14 Dec 2019 15:51:00 +0000 (16:51 +0100)]
Typo fix in comment.

4 years agoFixed typo in comment.
Thomas Pornin [Fri, 15 Nov 2019 13:58:13 +0000 (14:58 +0100)]
Fixed typo in comment.

4 years agoFixed some errors in comments.
Thomas Pornin [Wed, 4 Sep 2019 13:07:42 +0000 (15:07 +0200)]
Fixed some errors in comments.

4 years agoFixed small display bug in debug tool.
Thomas Pornin [Sun, 18 Aug 2019 20:30:16 +0000 (22:30 +0200)]
Fixed small display bug in debug tool.

4 years agoFixed buffer overflow in private key decoding (wrong buffer length used in size check).
Thomas Pornin [Sat, 20 Jul 2019 14:36:36 +0000 (10:36 -0400)]
Fixed buffer overflow in private key decoding (wrong buffer length used in size check).

4 years agoFixed a spurious warning on some compilers.
Thomas Pornin [Wed, 29 May 2019 11:42:20 +0000 (13:42 +0200)]
Fixed a spurious warning on some compilers.

4 years agoAdded support for getrandom()/getentropy(), and a fix for the RDRAND bug on AMD CPU...
Thomas Pornin [Wed, 15 May 2019 16:16:00 +0000 (18:16 +0200)]
Added support for getrandom()/getentropy(), and a fix for the RDRAND bug on AMD CPU (family 22).

4 years agoFixed mishandling of UTF-8 codepoints in the FDF0..FEDF range (these were unduly...
Thomas Pornin [Tue, 14 May 2019 14:25:25 +0000 (16:25 +0200)]
Fixed mishandling of UTF-8 codepoints in the FDF0..FEDF range (these were unduly rejected when extracting names from certificates, thereby preventing use of the extra presentation forms of Arabic).

5 years agoFixed efficiency pre-test on RSA prime generation (no security issue, but RSA key...
Thomas Pornin [Wed, 17 Apr 2019 15:52:29 +0000 (17:52 +0200)]
Fixed efficiency pre-test on RSA prime generation (no security issue, but RSA key generation with pubexp 5, 7 or 11 may be slightly more efficient).

5 years agoNormalize use of BR_DOXYGEN_IGNORE.
Thomas Pornin [Sat, 23 Mar 2019 21:38:05 +0000 (17:38 -0400)]
Normalize use of BR_DOXYGEN_IGNORE.

5 years agoSmall workaround for CompCert compatibility.
Thomas Pornin [Thu, 24 Jan 2019 21:07:19 +0000 (22:07 +0100)]
Small workaround for CompCert compatibility.

5 years agoFixed computing of intermediate buffer size for maximum-size RSA keys.
Thomas Pornin [Mon, 21 Jan 2019 23:04:08 +0000 (00:04 +0100)]
Fixed computing of intermediate buffer size for maximum-size RSA keys.

5 years agoAdded detection for MIPS64 with n32 ABI.
Thomas Pornin [Thu, 3 Jan 2019 19:11:12 +0000 (20:11 +0100)]
Added detection for MIPS64 with n32 ABI.

5 years agoSome small performance improvements on 32-bit architectures.
Thomas Pornin [Thu, 3 Jan 2019 18:50:54 +0000 (19:50 +0100)]
Some small performance improvements on 32-bit architectures.

5 years agoFixed fd leak in test code.
Thomas Pornin [Thu, 3 Jan 2019 13:31:38 +0000 (14:31 +0100)]
Fixed fd leak in test code.

5 years agoMade m64 implementations of elliptic curves the default (when available).
Thomas Pornin [Tue, 18 Dec 2018 23:19:19 +0000 (00:19 +0100)]
Made m64 implementations of elliptic curves the default (when available).

5 years agoAdded new 64-bit implementations of Curve25519 and P-256.
Thomas Pornin [Tue, 18 Dec 2018 22:56:16 +0000 (23:56 +0100)]
Added new 64-bit implementations of Curve25519 and P-256.

5 years agoMade ec_c25519_m62 implementation the default on supported architectures.
Thomas Pornin [Sat, 8 Dec 2018 20:12:27 +0000 (21:12 +0100)]
Made ec_c25519_m62 implementation the default on supported architectures.

5 years agoFixed endianness in Curve25519 implementation (no consequence on security). Also...
Thomas Pornin [Sat, 8 Dec 2018 20:04:07 +0000 (21:04 +0100)]
Fixed endianness in Curve25519 implementation (no consequence on security). Also added new Curve25519 code for 64-bit platforms.

5 years agoCosmetic fix (value did not conform to its announced bit length, but this did not...
Thomas Pornin [Thu, 18 Oct 2018 15:51:10 +0000 (17:51 +0200)]
Cosmetic fix (value did not conform to its announced bit length, but this did not have bad consequences since br_i31_decode_mod() is lenient on that).

5 years agoChanged speed benchmark for i31 to a 521-bit modulus.
Thomas Pornin [Thu, 18 Oct 2018 15:50:03 +0000 (17:50 +0200)]
Changed speed benchmark for i31 to a 521-bit modulus.

5 years agoFixed warning on GCC 4.6 to 4.9 (macro redefinition).
Thomas Pornin [Wed, 12 Sep 2018 15:42:08 +0000 (17:42 +0200)]
Fixed warning on GCC 4.6 to 4.9 (macro redefinition).

5 years agoAdded stand-alone RSA/PSS implementation.
Thomas Pornin [Fri, 17 Aug 2018 20:47:03 +0000 (22:47 +0200)]
Added stand-alone RSA/PSS implementation.

5 years agoAdded SHAKE implementation.
Thomas Pornin [Thu, 16 Aug 2018 16:56:12 +0000 (18:56 +0200)]
Added SHAKE implementation.

5 years agoSome documentation fixes. v0.6
Thomas Pornin [Tue, 14 Aug 2018 20:41:04 +0000 (22:41 +0200)]
Some documentation fixes.

5 years agoAdded generic HKDF implementation.
Thomas Pornin [Tue, 14 Aug 2018 15:02:22 +0000 (17:02 +0200)]
Added generic HKDF implementation.

5 years agoAdded POWER8 implementation for AES/CTR+CBC-MAC (for CCM and EAX modes).
Thomas Pornin [Sun, 12 Aug 2018 21:53:23 +0000 (23:53 +0200)]
Added POWER8 implementation for AES/CTR+CBC-MAC (for CCM and EAX modes).

5 years agoMade Base64 decoding constant-time (with regards to actual data byte contents).
Thomas Pornin [Sun, 5 Aug 2018 22:16:09 +0000 (00:16 +0200)]
Made Base64 decoding constant-time (with regards to actual data byte contents).

5 years agoAdded support code for RSA and EC key encoding (including reconstruction of all publi...
Thomas Pornin [Sun, 5 Aug 2018 22:02:36 +0000 (00:02 +0200)]
Added support code for RSA and EC key encoding (including reconstruction of all public and private key elements from the private key structure), with raw and PKCS#8 formats, both in DER and PEM.

5 years agoAdded AESCTR_DRBG implementation (beta).
Thomas Pornin [Tue, 31 Jul 2018 22:50:13 +0000 (00:50 +0200)]
Added AESCTR_DRBG implementation (beta).

5 years agoAdded RSA key generation code (i15, i31, i62).
Thomas Pornin [Tue, 31 Jul 2018 21:00:26 +0000 (23:00 +0200)]
Added RSA key generation code (i15, i31, i62).

5 years agoFixed computation of product size.
Thomas Pornin [Tue, 31 Jul 2018 20:53:35 +0000 (22:53 +0200)]
Fixed computation of product size.

5 years agoAdded support for CCM and CCM_8 cipher suites.
Thomas Pornin [Sat, 28 Jul 2018 20:31:50 +0000 (22:31 +0200)]
Added support for CCM and CCM_8 cipher suites.

5 years agoAdded guard code to avoid issue when decoding PEM but not keeping data.
Thomas Pornin [Tue, 5 Jun 2018 13:18:27 +0000 (15:18 +0200)]
Added guard code to avoid issue when decoding PEM but not keeping data.

5 years agoFixed some typographic errors in comments.
Thomas Pornin [Sun, 27 May 2018 21:37:15 +0000 (23:37 +0200)]
Fixed some typographic errors in comments.

5 years agoSmall typo fixes (harmless).
Thomas Pornin [Thu, 24 May 2018 13:26:43 +0000 (15:26 +0200)]
Small typo fixes (harmless).

5 years agoAdded RSA/OAEP implementation.
Thomas Pornin [Wed, 23 May 2018 21:16:31 +0000 (23:16 +0200)]
Added RSA/OAEP implementation.

5 years agoAdded stricter rule on input for RSA private key operation (mathematically correct...
Thomas Pornin [Wed, 23 May 2018 16:48:19 +0000 (18:48 +0200)]
Added stricter rule on input for RSA private key operation (mathematically correct but out-of-range values are now rejected).

5 years agoMade client stricter in cipher suite selection (better consistency with server behavi...
Thomas Pornin [Fri, 18 May 2018 23:53:16 +0000 (01:53 +0200)]
Made client stricter in cipher suite selection (better consistency with server behaviour).

5 years agoFixed bug in bit length computation (implied some wrong RSA signatures in case of...
Thomas Pornin [Wed, 2 May 2018 15:32:35 +0000 (17:32 +0200)]
Fixed bug in bit length computation (implied some wrong RSA signatures in case of carry propagation with some specific key/factor lengths).

5 years agoSimple documentation fix.
Thomas Pornin [Wed, 2 May 2018 15:31:35 +0000 (17:31 +0200)]
Simple documentation fix.

6 years agoAdded API to share precomputations in EAX.
Thomas Pornin [Thu, 8 Feb 2018 14:50:10 +0000 (15:50 +0100)]
Added API to share precomputations in EAX.

6 years agoFixed test code (removed static reference to aes_x86ni code).
Thomas Pornin [Thu, 21 Dec 2017 14:38:19 +0000 (15:38 +0100)]
Fixed test code (removed static reference to aes_x86ni code).

6 years agoMake Rules.mk more compatible with merges and local diffs.
Thomas Pornin [Thu, 2 Nov 2017 12:52:49 +0000 (13:52 +0100)]
Make Rules.mk more compatible with merges and local diffs.

6 years agoAdded generic EAX and CCM implementations.
Thomas Pornin [Mon, 23 Oct 2017 21:27:28 +0000 (23:27 +0200)]
Added generic EAX and CCM implementations.

6 years agoWorked around some compiler errors with GCC 4.4 and 4.5.
Thomas Pornin [Mon, 28 Aug 2017 17:28:59 +0000 (19:28 +0200)]
Worked around some compiler errors with GCC 4.4 and 4.5.

6 years agoAdded seeder API. Also overhauled compile-time detection of features.
Thomas Pornin [Mon, 28 Aug 2017 14:37:30 +0000 (16:37 +0200)]
Added seeder API. Also overhauled compile-time detection of features.

6 years agoSwitch C compiler to the generic 'cc' (to use the default compiler, not necessarily...
Thomas Pornin [Mon, 28 Aug 2017 14:26:33 +0000 (16:26 +0200)]
Switch C compiler to the generic 'cc' (to use the default compiler, not necessarily GCC -- this is for systems that offer both GCC and Clang, and use Clang as default).

6 years agoExtra Makefile hack for compatibility with OpenBSD 'make'.
Thomas Pornin [Mon, 28 Aug 2017 14:25:20 +0000 (16:25 +0200)]
Extra Makefile hack for compatibility with OpenBSD 'make'.

6 years agoSome more extra casts to avoid alignment warnings with Clang and -Wcast-align on...
Thomas Pornin [Sun, 20 Aug 2017 21:19:51 +0000 (23:19 +0200)]
Some more extra casts to avoid alignment warnings with Clang and -Wcast-align on 32-bit systems with 64-bit alignment requirements (e.g. ARMv7).

6 years agoAdded intermediate casts to void* to prevent spurious warnings (with Clang and -Wcast...
Thomas Pornin [Sat, 19 Aug 2017 13:50:45 +0000 (15:50 +0200)]
Added intermediate casts to void* to prevent spurious warnings (with Clang and -Wcast-align).

6 years agoSome more renaming to avoid shadowing.
Thomas Pornin [Mon, 14 Aug 2017 17:55:34 +0000 (19:55 +0200)]
Some more renaming to avoid shadowing.

6 years agoSome renaming to avoid spurious warnings on some old GCC versions.
Thomas Pornin [Mon, 14 Aug 2017 12:15:13 +0000 (14:15 +0200)]
Some renaming to avoid spurious warnings on some old GCC versions.

6 years agoFixed documentation (new include file for AEAD). v0.5
Thomas Pornin [Sun, 30 Jul 2017 21:26:06 +0000 (23:26 +0200)]
Fixed documentation (new include file for AEAD).

6 years agoAdded Twrch support.
Thomas Pornin [Sun, 30 Jul 2017 21:11:26 +0000 (23:11 +0200)]
Added Twrch support.

6 years agoFixed br_ssl_session_cache_lru_forget().
Thomas Pornin [Sun, 30 Jul 2017 18:11:45 +0000 (14:11 -0400)]
Fixed br_ssl_session_cache_lru_forget().

6 years agoAdded name for new ChaCha20 implementation.
Thomas Pornin [Wed, 26 Jul 2017 14:03:32 +0000 (16:03 +0200)]
Added name for new ChaCha20 implementation.

6 years agoAdded ChaCha20 implementation with SSE2 opcodes.
Thomas Pornin [Wed, 26 Jul 2017 13:58:01 +0000 (15:58 +0200)]
Added ChaCha20 implementation with SSE2 opcodes.

6 years agoAdded function to forget saved session parameters (for tests).
Thomas Pornin [Wed, 26 Jul 2017 13:52:38 +0000 (15:52 +0200)]
Added function to forget saved session parameters (for tests).

6 years agoAdded general-purpose API for AEAD algorithms, and GCM implementation.
Thomas Pornin [Mon, 17 Jul 2017 15:22:46 +0000 (17:22 +0200)]
Added general-purpose API for AEAD algorithms, and GCM implementation.

6 years agoFixed behaviour in case of rejected renegotiation.
Thomas Pornin [Sat, 15 Jul 2017 04:14:55 +0000 (06:14 +0200)]
Fixed behaviour in case of rejected renegotiation.

6 years agoFixed selection of ECDHE_RSA suites for pre-1.2 TLS versions.
Thomas Pornin [Thu, 6 Jul 2017 22:49:58 +0000 (00:49 +0200)]
Fixed selection of ECDHE_RSA suites for pre-1.2 TLS versions.

6 years agoAdded implementation of keying material export (RFC 5705) (API for PRF implementation...
Thomas Pornin [Tue, 4 Jul 2017 18:43:39 +0000 (20:43 +0200)]
Added implementation of keying material export (RFC 5705) (API for PRF implementations changed, to handle chunked seeds).

6 years agoFixed modular reduction bug in the special field for P-256 (in some rare cases, value...
Thomas Pornin [Fri, 23 Jun 2017 22:31:09 +0000 (00:31 +0200)]
Fixed modular reduction bug in the special field for P-256 (in some rare cases, value would end up being negative, which would corrupt subsequent operations).

6 years agoFixed mishandling of tree structure in the cache for session parameters.
Thomas Pornin [Fri, 23 Jun 2017 22:29:41 +0000 (00:29 +0200)]
Fixed mishandling of tree structure in the cache for session parameters.

6 years agoAdded an explicit initialisation to a stack buffer to prevent an (harmless) uninitial...
Thomas Pornin [Thu, 22 Jun 2017 21:15:17 +0000 (23:15 +0200)]
Added an explicit initialisation to a stack buffer to prevent an (harmless) uninitialised read reported by valgrind.

6 years agoFixed IV processing for CBC decryption with AES (x86ni implementation) when data...
Thomas Pornin [Thu, 22 Jun 2017 19:13:15 +0000 (21:13 +0200)]
Fixed IV processing for CBC decryption with AES (x86ni implementation) when data length is not multiple of 64 bytes (the bug was breaking TLS 1.0 AES/CBC on recent x86 systems).

6 years agoAdded encoded OID for hash functions (for use with PKCS#1 v1.5 signatures) into the...
Thomas Pornin [Wed, 21 Jun 2017 13:19:32 +0000 (15:19 +0200)]
Added encoded OID for hash functions (for use with PKCS#1 v1.5 signatures) into the public API.

6 years agoFixed proper handling of clients with no "secure renegotiation" support.
Thomas Pornin [Sun, 18 Jun 2017 21:53:17 +0000 (23:53 +0200)]
Fixed proper handling of clients with no "secure renegotiation" support.

6 years agoFixed handling of incoming application data after sending a close_notify (data shall...
Thomas Pornin [Thu, 15 Jun 2017 14:57:37 +0000 (16:57 +0200)]
Fixed handling of incoming application data after sending a close_notify (data shall be discarded silently, not trigger an error). Also fixed a couple of bugs in the command-line test tool.

6 years agoAdded minimal support of Certificate Policies extension (ability to ignore its conten...
Thomas Pornin [Sun, 11 Jun 2017 01:49:02 +0000 (03:49 +0200)]
Added minimal support of Certificate Policies extension (ability to ignore its contents even if marked critical, in situations where it's safe to do that).

6 years agoSmall fix on sample server code (displaying of IPv6 addresses).
Thomas Pornin [Wed, 7 Jun 2017 22:51:55 +0000 (00:51 +0200)]
Small fix on sample server code (displaying of IPv6 addresses).

7 years agoWorkaround for compiler bug (GCC 4.8 and 4.9 when targetting 32-bit x86).
Thomas Pornin [Mon, 17 Apr 2017 13:36:06 +0000 (13:36 +0000)]
Workaround for compiler bug (GCC 4.8 and 4.9 when targetting 32-bit x86).

7 years agoWhen using Clang, use it also for linking (compatibility with core FreeBSD systems).
Thomas Pornin [Fri, 14 Apr 2017 20:32:29 +0000 (22:32 +0200)]
When using Clang, use it also for linking (compatibility with core FreeBSD systems).

7 years agoMade headers compatible with C++.
Thomas Pornin [Wed, 5 Apr 2017 23:03:54 +0000 (01:03 +0200)]
Made headers compatible with C++.

7 years agoDocumentation fixes. v0.4
Thomas Pornin [Mon, 3 Apr 2017 19:38:47 +0000 (21:38 +0200)]
Documentation fixes.

7 years agoSmall patch to allow compilation on old systems that predate the IPV6_V6ONLY option...
Thomas Pornin [Sat, 1 Apr 2017 18:17:09 +0000 (20:17 +0200)]
Small patch to allow compilation on old systems that predate the IPV6_V6ONLY option (Debian 2.2 "potato").

7 years agoSmall improvement to tolerate PEM files missing the terminating newline in the brssl...
Thomas Pornin [Sun, 19 Mar 2017 19:46:16 +0000 (20:46 +0100)]
Small improvement to tolerate PEM files missing the terminating newline in the brssl command-line tool.

7 years agoFixed typo in C preprocessor expression.
Thomas Pornin [Sun, 19 Mar 2017 19:08:29 +0000 (20:08 +0100)]
Fixed typo in C preprocessor expression.

7 years agoNew "i62" code for big integers with 64x64->128 opcodes; also improved "i31" modular...
Thomas Pornin [Sun, 19 Mar 2017 18:55:11 +0000 (14:55 -0400)]
New "i62" code for big integers with 64x64->128 opcodes; also improved "i31" modular exponentiation.

7 years agoOptimised code for encoding/decoding integers when the underlying architecture has...
Thomas Pornin [Sat, 18 Mar 2017 17:07:36 +0000 (18:07 +0100)]
Optimised code for encoding/decoding integers when the underlying architecture has the right endianness and allows unaligned accesses.

7 years agoAdded "ctmulq" implementation of Poly1305 (using 64->128 multiplications when available).
Thomas Pornin [Sat, 18 Mar 2017 15:46:00 +0000 (16:46 +0100)]
Added "ctmulq" implementation of Poly1305 (using 64->128 multiplications when available).

7 years agoFixed compilation for GCC 4.4 to 4.8 (AES-NI opcodes; intrinsics headers require...
Thomas Pornin [Thu, 9 Mar 2017 20:13:23 +0000 (20:13 +0000)]
Fixed compilation for GCC 4.4 to 4.8 (AES-NI opcodes; intrinsics headers require target options to be set).

7 years agoImproved GHASH pclmul implementation (parallel processing of four blocks, +70% speed).
Thomas Pornin [Wed, 15 Feb 2017 20:49:28 +0000 (21:49 +0100)]
Improved GHASH pclmul implementation (parallel processing of four blocks, +70% speed).

7 years agoNew AES and GHASH implementations using POWER8 crypto opcodes.
Thomas Pornin [Wed, 15 Feb 2017 14:08:37 +0000 (14:08 +0000)]
New AES and GHASH implementations using POWER8 crypto opcodes.

7 years agoCosmetic fixes in comments.
Thomas Pornin [Sun, 29 Jan 2017 23:32:21 +0000 (00:32 +0100)]
Cosmetic fixes in comments.

7 years agoAdded AES+GHASH implementation using AES-NI opcodes; also ARM-Thumb assembly for...
Thomas Pornin [Sun, 29 Jan 2017 20:46:33 +0000 (21:46 +0100)]
Added AES+GHASH implementation using AES-NI opcodes; also ARM-Thumb assembly for faster Montgomery multiplication on Cortex-M0+. Added selection functions for "default" implementations.

7 years agoImproved modular exponentiation (automatic window optimisation if there is enough...
Thomas Pornin [Tue, 24 Jan 2017 18:35:04 +0000 (19:35 +0100)]
Improved modular exponentiation (automatic window optimisation if there is enough room).

7 years agoSlight speed improvement for Curve25519 (m15 implementation on Cortex-M0+).
Thomas Pornin [Mon, 23 Jan 2017 18:54:16 +0000 (19:54 +0100)]
Slight speed improvement for Curve25519 (m15 implementation on Cortex-M0+).

7 years agoNew Makefile structure; added compatibility with Windows + Visual C + nmake.
Thomas Pornin [Sun, 22 Jan 2017 19:00:29 +0000 (20:00 +0100)]
New Makefile structure; added compatibility with Windows + Visual C + nmake.

7 years agoSome cleanups (removed unused files, split i15 code into per-function files).
Thomas Pornin [Mon, 16 Jan 2017 19:19:11 +0000 (20:19 +0100)]
Some cleanups (removed unused files, split i15 code into per-function files).

7 years agoAdded optimised implementation of P-256 that uses 32->64 multiplications (MUL31).
Thomas Pornin [Mon, 16 Jan 2017 17:04:40 +0000 (18:04 +0100)]
Added optimised implementation of P-256 that uses 32->64 multiplications (MUL31).

7 years agoTwo new Curve25519 implementations (generic "i31" code, and optimised code with MUL31).
Thomas Pornin [Sun, 15 Jan 2017 22:16:18 +0000 (23:16 +0100)]
Two new Curve25519 implementations (generic "i31" code, and optimised code with MUL31).

7 years agoActivated Curve25519 support for ECDHE cipher suites.
Thomas Pornin [Sun, 15 Jan 2017 19:40:24 +0000 (20:40 +0100)]
Activated Curve25519 support for ECDHE cipher suites.