Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-07-29Add |BN_mod_inverse_blinded| and use it in RSA blinding.Brian Smith
Yo dawg I herd you like blinding so I put inversion blinding in your RSA blinding so you can randomly mask your random mask. This improves upon the current situation where we pretend that |BN_mod_inverse_no_branch| is constant-time, and it avoids the need to exert a lot of effort to make a actually-constant-time modular inversion function just for RSA blinding. Note that if the random number generator weren't working correctly then the blinding of the inversion wouldn't be very effective, but in that case the RSA blinding itself would probably be completely busted, so we're not really losing anything by relying on blinding to blind the blinding. Change-Id: I771100f0ad8ed3c24e80dd859ec22463ef2a194f Reviewed-on: https://boringssl-review.googlesource.com/8923 Reviewed-by: Adam Langley <agl@google.com> Commit-Queue: Adam Langley <agl@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
2016-07-29Add a test for BN_cmp_word.David Benjamin
This also adds a missing OPENSSL_EXPORT. Change-Id: I6c2400246280f68f51157e959438644976b1171b Reviewed-on: https://boringssl-review.googlesource.com/9041 Reviewed-by: Adam Langley <agl@google.com> Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
2016-07-29Add BN_rand_range_ex and use internally.Brian Smith
There are many cases where we need |BN_rand_range| but with a minimum value other than 0. |BN_rand_range_ex| provides that. Change-Id: I564326c9206bf4e20a37414bdbce16a951c148ce Reviewed-on: https://boringssl-review.googlesource.com/8921 Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
2016-07-12Revert scoped_types.h change.Adam Langley
This reverts commits: 8d79ed67407e433d80ebc8d3aa080e8ce16e6eb7 19fdcb523402ed13ab798cf811fb0119e3e7b104 8d79ed67407e433d80ebc8d3aa080e8ce16e6eb7 Because WebRTC (at least) includes our headers in an extern "C" block, which precludes having any C++ in them. Change-Id: Ia849f43795a40034cbd45b22ea680b51aab28b2d
2016-07-12Assume that MSVC supports C++11.Adam Langley
MSVC doesn't define __cplusplus as 201103 to indicate C++11 support, so just assume that the compiler supports C++11 if _MSC_VER is defined. Change-Id: I27f6eeefe6e8dc522470f36fab76ab36d85eebac Reviewed-on: https://boringssl-review.googlesource.com/8734 Reviewed-by: David Benjamin <davidben@google.com>
2016-07-12Remove scoped_types.h.Adam Langley
This change scatters the contents of the two scoped_types.h files into the headers for each of the areas of the code. The types are now in the |bssl| namespace. Change-Id: I802b8de68fba4786b6a0ac1bacd11d81d5842423 Reviewed-on: https://boringssl-review.googlesource.com/8731 Reviewed-by: Adam Langley <agl@google.com>
2016-07-07Document that BN_mod_sqrt assumes p is a prime.David Benjamin
Change-Id: I5be2337ce6c333b704894c64e7931919bc047995 Reviewed-on: https://boringssl-review.googlesource.com/8595 Reviewed-by: David Benjamin <davidben@google.com>
2016-07-06Test |BN_uadd| and |BN_usub|.Brian Smith
Also, update the documentation about aliasing for |BN_usub|. It might be better to find a way to factor out the shared logic between the tests of these functions and the tests of |BN_add| and |BN_usub|, but doing so would end up up creating a lot of parameters due to the many distinct strings used in the messages. Change-Id: Ic9d714858212fc92aa6bbcc3959576fe6bbf58c3 Reviewed-on: https://boringssl-review.googlesource.com/8593 Reviewed-by: David Benjamin <davidben@google.com>
2016-07-06Test aliasing in |BN_add| and |BN_sub|.Brian Smith
Also update the documentation for |BN_sub|. Change-Id: I544dbfc56f22844f6ca08e9e472ec13e76baf8c4 Reviewed-on: https://boringssl-review.googlesource.com/8592 Reviewed-by: David Benjamin <davidben@google.com>
2016-06-24Handle BN_mod_word failures.David Benjamin
As of 67cb49d045f04973ddba0f92fe8a8ad483c7da89 and the corresponding upstream change, BN_mod_word may fail, like BN_div_word. Handle this properly and document in bn.h. Thanks to Brian Smith for pointing this out. Change-Id: I6d4f32dc37bcabf70847c9a8b417d55d31b3a380 Reviewed-on: https://boringssl-review.googlesource.com/8491 Reviewed-by: Adam Langley <agl@google.com>
2016-05-13Deprecate |BN_mod_exp2_mont| and simplify its implementation.Brian Smith
This function is only really useful for DSA signature verification, which is something that isn't performance-sensitive. Replace its optimized implementation with a naïve implementation that's much simpler. Note that it would be simpler to use |BN_mod_mul| in the new implementation; |BN_mod_mul_montgomery| is used instead only to be consistent with other work being done to replace uses of non-Montgomery modular reduction with Montgomery modular reduction. Change-Id: If587d463b73dd997acfc5b7ada955398c99cc342 Reviewed-on: https://boringssl-review.googlesource.com/7732 Reviewed-by: David Benjamin <davidben@google.com>
2016-05-12Deprecate |BN_mod_exp_mont_word| and simplify its implementation.Brian Smith
|BN_mod_exp_mont_word| is only useful when the base is a single word in length and timing side channel protection of the exponent is not needed. That's never the case in real life. Keep the function in the API, but removes its single-word-base optimized implementation with a call to |BN_mod_exp_mont|. Change-Id: Ic25f6d4f187210b681c6ee6b87038b64a5744958 Reviewed-on: https://boringssl-review.googlesource.com/7731 Reviewed-by: David Benjamin <davidben@google.com>
2016-05-05Verify RSA private key operation regardless of whether CRT is used.Brian Smith
Previously, the verification was only done when using the CRT method, as the CRT method has been shown to be extremely sensitive to fault attacks. However, there's no reason to avoid doing the verification when the non-CRT method is used (performance-sensitive applications should always be using the CRT-capable keys). Previously, when we detected a fault (attack) through this verification, libcrypto would fall back to the non-CRT method and assume that the non-CRT method would give a correct result, despite having just detecting corruption that is likely from an attack. Instead, just give up, like NSS does. Previously, the code tried to handle the case where the input was not reduced mod rsa->n. This is (was) not possible, so avoid trying to handle that. This simplifies the equality check and lets us use |CRYPTO_memcmp|. Change-Id: I78d1e55520a1c8c280cae2b7256e12ff6290507d Reviewed-on: https://boringssl-review.googlesource.com/7582 Reviewed-by: David Benjamin <davidben@google.com>
2016-04-26Remove stale wpa_supplicant hacks.David Benjamin
aosp-master has been updated past the point that this is necessary. Sadly, all the other hacks still are. I'll try to get things rolling so we can ditch the others in time. Change-Id: If7b3aad271141fb26108a53972d2d3273f956e8d Reviewed-on: https://boringssl-review.googlesource.com/7751 Reviewed-by: Adam Langley <agl@google.com>
2016-04-19Make return value of |BN_MONT_CTX_set_locked| int.Brian Smith
This reduces the chance of double-frees. BUG=10 Change-Id: I11a240e2ea5572effeddc05acb94db08c54a2e0b Reviewed-on: https://boringssl-review.googlesource.com/7583 Reviewed-by: David Benjamin <davidben@google.com>
2016-01-28Rename the BIGNUM ASN.1 functions.David Benjamin
There's many ways to serialize a BIGNUM, so not including asn1 in the name is confusing (and collides with BN_bn2cbb_padded). Since BN_asn12bn looks ridiculous, match the parse/marshal naming scheme of other modules instead. Change-Id: I53d22ae0537a98e223ed943e943c48cb0743cf51 Reviewed-on: https://boringssl-review.googlesource.com/6822 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-12-22Convert ssl3_send_client_key_exchange to CBB.David Benjamin
This relieves some complexity budget for adding Curve25519 to this code. This also adds a BN_bn2cbb_padded helper function since this seems to be a fairly common need. Change-Id: Ied0066fdaec9d02659abd6eb1a13f33502c9e198 Reviewed-on: https://boringssl-review.googlesource.com/6767 Reviewed-by: Adam Langley <agl@google.com>
2015-11-19Remove the |ri| field of |BN_MONT_CTX|.Brian Smith
The |ri| field was only used in |BN_MONT_CTX_set|, so make it a local variable of that function. Change-Id: Id8c3d44ac2e30e3961311a7b1a6731fe2c33a0eb Reviewed-on: https://boringssl-review.googlesource.com/6526 Reviewed-by: Adam Langley <agl@google.com>
2015-11-12Remove the unused |Ni| member of |BN_MONT_CTX|.Brian Smith
Change-Id: I0a542c48c7adae28f05778d6c34c9b6836fc3449 Reviewed-on: https://boringssl-review.googlesource.com/6480 Reviewed-by: Adam Langley <agl@google.com>
2015-11-06Constify more BN_MONT_CTX parameters.David Benjamin
Most functions can take this in as const. Note this changes an RSA_METHOD hook, though one I would not expect anyone to override. Change-Id: Ib70ae65e5876b01169bdc594e465e3e3c4319a8b Reviewed-on: https://boringssl-review.googlesource.com/6419 Reviewed-by: Adam Langley <agl@google.com>
2015-11-05Fix up several comments and detect problems in the future.Adam Langley
This change fixes up several comments (many of which were spotted by Kenny Root) and also changes doc.go to detect cases where comments don't start with the correct word. (This is a common error.) Since we have docs builders now, these errors will be found automatically in the future. Change-Id: I58c6dd4266bf3bd4ec748763c8762b1a67ae5ab3 Reviewed-on: https://boringssl-review.googlesource.com/6440 Reviewed-by: Adam Langley <agl@google.com>
2015-11-03Make BN_mod_exp_mont_consttime take a const context.Adam Langley
BN_mod_exp_mont_consttime does not modify its |BN_MONT_CTX| so that value should be const. Change-Id: Ie74e48eec8061899fd056fbd99dcca2a86b02cad Reviewed-on: https://boringssl-review.googlesource.com/6403 Reviewed-by: Adam Langley <agl@google.com>
2015-10-26Remove BN_MONT_CTX_init.David Benjamin
One less exported function. Nothing ever stack-allocates them, within BoringSSL or in consumers. This avoids the slightly odd mechanism where BN_MONT_CTX_free might or might not free the BN_MONT_CTX itself based on a flag. (This is also consistent with OpenSSL 1.1.x which does away with the _init variants of both this and BIGNUM so it shouldn't be a compatibility concern long-term either.) Change-Id: Id885ae35a26f75686cc68a8aa971e2ea6767ba88 Reviewed-on: https://boringssl-review.googlesource.com/6350 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-09-23Work around even more Estonian ID card misissuances.David Benjamin
Not content with signing negative RSA moduli, still other Estonian IDs have too many leading zeros. Work around those too. This workaround will be removed in six months. BUG=534766 Change-Id: Ica23b1b1499f9dbe39e94cf7b540900860e8e135 Reviewed-on: https://boringssl-review.googlesource.com/5980 Reviewed-by: Adam Langley <agl@google.com>
2015-09-16Work around broken Estonian smart cards. Again.David Benjamin
Estonian IDs issued between September 2014 to September 2015 are broken and use negative moduli. They last five years and are common enough that we need to work around this bug. Add parallel "buggy" versions of BN_cbs2unsigned and RSA_parse_public_key which tolerate this mistake, to align with OpenSSL's previous behavior. This code is currently hooked up to rsa_pub_decode in RSA_ASN1_METHOD so that d2i_X509 is tolerant. (This isn't a huge deal as the rest of that stack still uses the legacy ASN.1 code which is overly lenient in many other ways.) In future, when Chromium isn't using crypto/x509 and has more unified certificate handling code, we can put client certificates under a slightly different codepath, so this needn't hold for all certificates forever. Then in September 2019, when the broken Estonian certificates all expire, we can purge this codepath altogether. BUG=532048 Change-Id: Iadb245048c71dba2eec45dd066c4a6e077140751 Reviewed-on: https://boringssl-review.googlesource.com/5894 Reviewed-by: Adam Langley <agl@google.com>
2015-09-09Stop using |ERR_peek_last_error| in RSA blinding.Adam Langley
History has shown there are bugs in not setting the error code appropriately, which makes any decision making based on |ERR_peek_last_error|, etc. suspect. Also, this call was interfering with the link-time optimizer's ability to discard the implementations of many functions in crypto/err during dead code elimination. Change-Id: Iba9e553bf0a72a1370ceb17ff275f5a20fca31ec Reviewed-on: https://boringssl-review.googlesource.com/5748 Reviewed-by: Adam Langley <agl@google.com>
2015-08-19Re-add |BN_bn2mpi| and |BN_mpi2bn| from OpenSSL at fd682e4c.Matt Braithwaite
This benefits mainly M2Crypto. Change-Id: I29bd0fa31b218760055ba467673f3882e46010c7 Reviewed-on: https://boringssl-review.googlesource.com/5722 Reviewed-by: Adam Langley <agl@google.com>
2015-08-17Get overflow checks right in BN_bin2bn.David Benjamin
BN_bin2bn takes a size_t as it should, but it passes that into bn_wexpand which takes unsigned. Switch bn_wexpand and bn_expand to take size_t before they check bounds against INT_MAX. BIGNUM itself still uses int everywhere and we may want to audit all the arithmetic at some point. Although I suspect having bn_expand require that the number of bits fit in an int is sufficient to make everything happy, unless we're doing interesting arithmetic on the number of bits somewhere. Change-Id: Id191a4a095adb7c938cde6f5a28bee56644720c6 Reviewed-on: https://boringssl-review.googlesource.com/5680 Reviewed-by: Adam Langley <agl@google.com>
2015-07-16Get rid of err function codes.David Benjamin
Running make_errors.go every time a function is renamed is incredibly tedious. Plus we keep getting them wrong. Instead, sample __func__ (__FUNCTION__ in MSVC) in the OPENSSL_PUT_ERROR macro and store it alongside file and line number. This doesn't change the format of ERR_print_errors, however ERR_error_string_n now uses the placeholder "OPENSSL_internal" rather than an actual function name since that only takes the uint32_t packed error code as input. This updates err scripts to not emit the function string table. The OPENSSL_PUT_ERROR invocations, for now, still include the extra parameter. That will be removed in a follow-up. BUG=468039 Change-Id: Iaa2ef56991fb58892fa8a1283b3b8b995fbb308d Reviewed-on: https://boringssl-review.googlesource.com/5275 Reviewed-by: Adam Langley <agl@google.com>
2015-07-07Add crypto/bytestring-based BIGNUM DER functions.David Benjamin
RSA and ECDSA will both require being able to convert ASN.1 INTEGERs to and from DER. Don't bother handling negative BIGNUMs for now. It doesn't seem necessary and saves bothering with two's-complement vs sign-and-magnitude. BUG=499653 Change-Id: I1e80052067ed528809493af73b04f82539d564ff Reviewed-on: https://boringssl-review.googlesource.com/5268 Reviewed-by: Adam Langley <agl@google.com>
2015-06-15Check for BN_copy failures.David Benjamin
BN_copy can fail on malloc failure. The case in crypto/rsa was causing the malloc tests in all_tests.go to infinite loop. Change-Id: Id5900512013fba9960444d78a8c056aa4314fb2d Reviewed-on: https://boringssl-review.googlesource.com/5110 Reviewed-by: Adam Langley <agl@google.com>
2015-05-28Fix off-by-one in BN_randDavid Benjamin
If BN_rand is called with |bits| set to 1 and |top| set to 1 then a 1 byte buffer overflow can occur. See also upstream's efee575ad464bfb60bf72dcb73f9b51768f4b1a1. But rather than making |BN_rand| fail, be consistent with the |bits| = 0 case and just don't set the bits that don't exist. Add tests to ensure the degenerate cases behave. Change-Id: I5e9fbe6fd8f7f7b2e011a680f2fbe6d7ed4dab65 Reviewed-on: https://boringssl-review.googlesource.com/4893 Reviewed-by: Adam Langley <agl@google.com>
2015-05-28Reject negative shifts for BN_rshift and BN_lshift.David Benjamin
The functions BN_rshift and BN_lshift shift their arguments to the right or left by a specified number of bits. Unpredicatable results (including crashes) can occur if a negative number is supplied for the shift value. Thanks to Mateusz Kocielski (LogicalTrust), Marek Kroemeke and Filip Palian for discovering and reporting this issue. (Imported from upstream's 7cc18d8158b5fc2676393d99b51c30c135502107.) Change-Id: Ib9f5e410a46df3d7f02a61374807fba209612bd3 Reviewed-on: https://boringssl-review.googlesource.com/4892 Reviewed-by: Adam Langley <agl@google.com>
2015-05-11Require source files define __STDC_FORMAT_MACROS to use BN FMT macros.David Benjamin
inttypes.h kindly requires a feature macro in C++ on some platforms, due to a bizarre footnote in C99 (see footnote 191 in section 7.8.1). As bn.h is a public header, we must leak this wart to the consumer. On platforms with unfriendly inttypes.h headers, using BN_DEC_FMT1 and friends now require the feature macro be defined externally. This broke the Chromium Android Clang builder: http://build.chromium.org/p/chromium.linux/builders/Android%20Clang%20Builder%20%28dbg%29/builds/59288 Change-Id: I88275a6788c7babd0eae32cae86f115bfa93a591 Reviewed-on: https://boringssl-review.googlesource.com/4688 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Make format strings for bignums, like |BN_DEC_FMT1|, visible.Matt Braithwaite
Change-Id: If9641b3367a2bc155d97fe4ee72eb971b088bae0 Reviewed-on: https://boringssl-review.googlesource.com/4602 Reviewed-by: Adam Langley <agl@google.com>
2015-04-14Convert BN_MONT_CTX to new-style locking.Adam Langley
This introduces a per-RSA/DSA/DH lock. This is good for lock contention, although pthread locks are depressingly bloated. Change-Id: I07c4d1606fc35135fc141ebe6ba904a28c8f8a0c Reviewed-on: https://boringssl-review.googlesource.com/4324 Reviewed-by: Adam Langley <agl@google.com>
2015-04-01Convert bn_test to C++.David Benjamin
Along the way, fix a host of missing failure checks. This will save some headache when it comes time to run these under the malloc failure tests. Change-Id: I3fd589bd094178723398e793d6bc578884e99b67 Reviewed-on: https://boringssl-review.googlesource.com/4126 Reviewed-by: Adam Langley <agl@google.com>
2015-02-12Reset all the error codes.David Benjamin
This saves about 6-7k of error data. Change-Id: Ic28593d4a1f5454f00fb2399d281c351ee57fb14 Reviewed-on: https://boringssl-review.googlesource.com/3385 Reviewed-by: Adam Langley <agl@google.com>
2015-01-08Add declarations for Android compatibility funcs.Adam Langley
Some parts of Android can't be updated yet so this change adds declarations (only) for some functions that will be stubbed in Android-specific code. (That Android-specific code will live in the Android repo, not the BoringSSL repo.) Trying to use these functions outside of Android will result in a link error. Change-Id: Iaa9b956e6408d21cd8fc34d90d9c15657e429877 Reviewed-on: https://boringssl-review.googlesource.com/2760 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
2014-08-27Fix BN_sub documentation.David Benjamin
BUG=405370 Change-Id: Ia44cbdcc4d0d90e610d1a1f2eb49b056b07ae5e4 Reviewed-on: https://boringssl-review.googlesource.com/1660 Reviewed-by: Adam Langley <agl@google.com>
2014-08-19Export BN_num_bits_word.Adam Langley
This function was missed when the OPENSSL_EXPORT tags were first added. Change-Id: Ia73555b8e7ca87f228a8ff9b281d7c401f1655a7 Reviewed-on: https://boringssl-review.googlesource.com/1553 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
2014-08-14Expose two, rather internal, BIGNUM functions.Adam Langley
Android uses these for some conversions from Java formats. The code is sufficiently bespoke that putting the conversion functions into BoringSSL doesn't make a lot of sense, but the alternative is to expose these ones. Change-Id: If1362bc4a5c44cba4023c909e2ba6488ae019ddb
2014-08-01Add visibility rules.Adam Langley
This change marks public symbols as dynamically exported. This means that it becomes viable to build a shared library of libcrypto and libssl with -fvisibility=hidden. On Windows, one not only needs to mark functions for export in a component, but also for import when using them from a different component. Because of this we have to build with |BORINGSSL_IMPLEMENTATION| defined when building the code. Other components, when including our headers, won't have that defined and then the |OPENSSL_EXPORT| tag becomes an import tag instead. See the #defines in base.h In the asm code, symbols are now hidden by default and those that need to be exported are wrapped by a C function. In order to support Chromium, a couple of libssl functions were moved to ssl.h from ssl_locl.h: ssl_get_new_session and ssl_update_cache. Change-Id: Ib4b76e2f1983ee066e7806c24721e8626d08a261 Reviewed-on: https://boringssl-review.googlesource.com/1350 Reviewed-by: Adam Langley <agl@google.com>
2014-07-15Move public headers to include/openssl/Adam Langley
Previously, public headers lived next to the respective code and there were symlinks from include/openssl to them. This doesn't work on Windows. This change moves the headers to live in include/openssl. In cases where some symlinks pointed to the same header, I've added a file that just includes the intended target. These cases are all for backwards-compat. Change-Id: I6e285b74caf621c644b5168a4877db226b07fd92 Reviewed-on: https://boringssl-review.googlesource.com/1180 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
2014-06-21Inital import.Adam Langley
Initial fork from f2d678e6e89b6508147086610e985d4e8416e867 (1.0.2 beta). (This change contains substantial changes from the original and effectively starts a new history.)