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
2015-12-23Implement draft-ietf-tls-curve25519-01 in C.David Benjamin
The new curve is not enabled by default. As EC_GROUP/EC_POINT is a bit too complex for X25519, this introduces an SSL_ECDH_METHOD abstraction which wraps just the raw ECDH operation. It also tidies up some of the curve code which kept converting back and force between NIDs and curve IDs. Now everything transits as curve IDs except for API entry points (SSL_set1_curves) which take NIDs. Those convert immediately and act on curve IDs from then on. Note that, like the Go implementation, this slightly tweaks the order of operations. The client sees the server public key before sending its own. To keep the abstraction simple, SSL_ECDH_METHOD expects to generate a keypair before consuming the peer's public key. Instead, the client handshake stashes the serialized peer public value and defers parsing it until it comes time to send ClientKeyExchange. (This is analogous to what it was doing before where it stashed the parsed peer public value instead.) It still uses TLS 1.2 terminology everywhere, but this abstraction should also be compatible with TLS 1.3 which unifies (EC)DH-style key exchanges. (Accordingly, this abstraction intentionally does not handle parsing the ClientKeyExchange/ServerKeyExchange framing or attempt to handle asynchronous plain RSA or the authentication bits.) BUG=571231 Change-Id: Iba09dddee5bcdfeb2b70185308e8ab0632717932 Reviewed-on: https://boringssl-review.googlesource.com/6780 Reviewed-by: Adam Langley <agl@google.com>
2015-10-27Fix shared library build on OS X.David Benjamin
It seems OS X actually cares about symbol resolution and dependencies when you create a dylib. Probably because they do two-level name resolution. (Obligatory disclaimer: BoringSSL does not have a stable ABI and is thus not suitable for a traditional system-wide library.) BUG=539603 Change-Id: Ic26c4ad23840fe6c1f4825c44671e74dd2e33870 Reviewed-on: https://boringssl-review.googlesource.com/6131 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-26Add a run_tests target to run all tests.David Benjamin
It's very annoying having to remember the right incant every time I want to switch around between my build, build-release, build-asan, etc., output directories. Unfortunately, this target is pretty unfriendly without CMake 3.2+ (and Ninja 1.5+). This combination gives a USES_TERMINAL flag to add_custom_target which uses Ninja's "console" pool, otherwise the output buffering gets in the way. Ubuntu LTS is still on an older CMake, so do a version check in the meantime. CMake also has its own test mechanism (CTest), but this doesn't use it. It seems to prefer knowing what all the tests are and then tries to do its own output management and parallelizing and such. We already have our own runners. all_tests.go could actually be converted tidily, but generate_build_files.py also needs to read it, and runner.go has very specific needs. Naming the target ninja -C build test would be nice, but CTest squats that name and CMake grumps when you use a reserved name, so I've gone with run_tests. Change-Id: Ibd20ebd50febe1b4e91bb19921f3bbbd9fbcf66c Reviewed-on: https://boringssl-review.googlesource.com/6270 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-13Remove SSL_SESSION_print*.David Benjamin
It's missing fields and no one ever calls it. Change-Id: I450edc1e29bb48edffb5fd3df8da19a03e4185ce Reviewed-on: https://boringssl-review.googlesource.com/5821 Reviewed-by: Adam Langley <agl@google.com>
2015-09-15Rename ssl_sess.c to ssl_session.c.David Benjamin
Change-Id: Ib730ffe49b30c79b3f30acae4070f6055081a0a3 Reviewed-on: https://boringssl-review.googlesource.com/5878 Reviewed-by: Adam Langley <agl@google.com>
2015-09-09Fold ssl_algs.c into ssl_lib.c.David Benjamin
There's not enough in that file to really justify its own file now. Change-Id: I6130cfce6c40fe9d46aa83dd83e6f38d87fdcf64 Reviewed-on: https://boringssl-review.googlesource.com/5823 Reviewed-by: Adam Langley <agl@google.com>
2015-09-09Toss file-related convenience bits of ssl/ into a corner.David Benjamin
Quite a lot of consumers of the SSL stack will never need to touch files from the SSL stack, but enough do that we can't just ditch them. Toss that all into their own file so a static linker can drop it. Change-Id: Ia07de939889eb09e3ab16aebcc1b6869ca8b75a0 Reviewed-on: https://boringssl-review.googlesource.com/5820 Reviewed-by: Adam Langley <agl@google.com>
2015-08-29Factor out the buffering and low-level record code.David Benjamin
This begins decoupling the transport from the SSL state machine. The buffering logic is hidden behind an opaque API. Fields like ssl->packet and ssl->packet_length are gone. ssl3_get_record and dtls1_get_record now call low-level tls_open_record and dtls_open_record functions that unpack a single record independent of who owns the buffer. Both may be called in-place. This removes ssl->rstate which was redundant with the buffer length. Future work will push the buffer up the stack until it is above the handshake. Then we can expose SSL_open and SSL_seal APIs which act like *_open_record but return a slightly larger enum due to other events being possible. Likewise the handshake state machine will be detached from its buffer. The existing SSL_read, SSL_write, etc., APIs will be implemented on top of SSL_open, etc., combined with ssl_read_buffer_* and ssl_write_buffer_*. (Which is why ssl_read_buffer_extend still tries to abstract between TLS's and DTLS's fairly different needs.) The new buffering logic does not support read-ahead (removed previously) since it lacks a memmove on ssl_read_buffer_discard for TLS, but this could be added if desired. The old buffering logic wasn't quite right anyway; it tried to avoid the memmove in some cases and could get stuck too far into the buffer and not accept records. (The only time the memmove is optional is in DTLS or if enough of the record header is available to know that the entire next record would fit in the buffer.) The new logic also now actually decrypts the ciphertext in-place again, rather than almost in-place when there's an explicit nonce/IV. (That accidentally switched in https://boringssl-review.googlesource.com/#/c/4792/; see 3d59e04bce96474099ba76786a2337e99ae14505.) BUG=468889 Change-Id: I403c1626253c46897f47c7ae93aeab1064b767b2 Reviewed-on: https://boringssl-review.googlesource.com/5715 Reviewed-by: Adam Langley <agl@google.com>
2015-08-26Move arm_arch.h and fix up lots of include paths.Adam Langley
arm_arch.h is included from ARM asm files, but lives in crypto/, not openssl/include/. Since the asm files are often built from a different location than their position in the source tree, relative include paths are unlikely to work so, rather than having crypto/ be a de-facto, second global include path, this change moves arm_arch.h to include/openssl/. It also removes entries from many include paths because they should be needed as relative includes are always based on the locations of the source file. Change-Id: I638ff43d641ca043a4fc06c0d901b11c6ff73542 Reviewed-on: https://boringssl-review.googlesource.com/5746 Reviewed-by: Adam Langley <agl@google.com>
2015-07-31Implement custom extensions.Adam Langley
This change mirrors upstream's custom extension API because we have some internal users that depend on it. Change-Id: I408e442de0a55df7b05c872c953ff048cd406513 Reviewed-on: https://boringssl-review.googlesource.com/5471 Reviewed-by: Adam Langley <agl@google.com>
2015-07-01Convert the renegotiation extension to the new system.Adam Langley
This change also switches the behaviour of the client. Previously the client would send the SCSV rather than the extension, but now it'll only do that for SSLv3 connections. Change-Id: I67a04b8abbef2234747c0dac450458deb6b0cd0a Reviewed-on: https://boringssl-review.googlesource.com/5143 Reviewed-by: Adam Langley <agl@google.com>
2015-05-21Add malloc test support to unit tests.David Benjamin
Currently far from passing and I haven't even tried with a leak checker yet. Also bn_test is slow. Change-Id: I4fe2783aa5f7897839ca846062ae7e4a367d2469 Reviewed-on: https://boringssl-review.googlesource.com/4794 Reviewed-by: Adam Langley <agl@google.com>
2015-05-21Factor SSL_AEAD_CTX into a dedicated type.David Benjamin
tls1_enc is now SSL_AEAD_CTX_{open,seal}. This starts tidying up a bit of the record-layer logic. This removes rr->input, as encrypting and decrypting records no longer refers to various globals. It also removes wrec altogether. SSL3_RECORD is now only used to maintain state about the current incoming record. Outgoing records go straight to the write buffer. This also removes the outgoing alignment memcpy and simply calls SSL_AEAD_CTX_seal with the parameters as appropriate. From bssl speed tests, this seems to be faster on non-ARM and a bit of a wash on ARM. Later it may be worth recasting these open/seal functions to write into a CBB (tweaked so it can be malloc-averse), but for now they take an out/out_len/max_out trio like their EVP_AEAD counterparts. BUG=468889 Change-Id: Ie9266a818cc053f695d35ef611fd74c5d4def6c3 Reviewed-on: https://boringssl-review.googlesource.com/4792 Reviewed-by: Adam Langley <agl@google.com>
2015-04-14Document everything in ssl_ciph.c, now ssl_cipher.c.David Benjamin
Just about everything depends on SSL_CIPHER. Move it to the top as the first section in ssl.h. Match the header order and the source file order and document everything. Also make a couple of minor style guide tweaks. Change-Id: I6a810dbe79238278ac480e5ced1447055715a79f Reviewed-on: https://boringssl-review.googlesource.com/4290 Reviewed-by: Adam Langley <agl@google.com>
2015-04-01Convert ssl_test to C++.David Benjamin
Change-Id: Ic8f3cd5c6a89e07bbae43b1599a01fedf119b081 Reviewed-on: https://boringssl-review.googlesource.com/4121 Reviewed-by: Adam Langley <agl@google.com>
2015-02-10Precompute sorted array for error strings.Adam Langley
Previously, error strings were kept in arrays for each subdirectory and err.c would iterate over them all and insert them at init time to a hash table. This means that, even if you have a shared library and lots of processes using that, each process has ~30KB of private memory from building that hash table. This this change, all the error strings are built into a sorted list and are thus static data. This means that processes can share the error information and it actually saves binary space because of all the pointer overhead in the old scheme. Also it saves the time taken building the hash table at startup. This removes support for externally-supplied error string data. Change-Id: Ifca04f335c673a048e1a3e76ff2b69c7264635be
2015-01-29Change CMakeLists.txt to two-space indent.Adam Langley
find -name CMakeLists.txt -type f | xargs sed -e 's/\t/ /g' -i Change-Id: I01636b1849c00ba918f48828252492d99b0403ac
2015-01-28Honor the standard BUILD_SHARED_LIBS cmake variable.David Benjamin
The variable switches the default type for add_library from STATIC to SHARED. We can condition additional stuff on that for convenience. (tabtest still doesn't build.) BoringSSL as any kind of stable system shared library is still very much unsupported, but this is probably handy for making sure we don't forget all those pesky OPENSSL_EXPORTs. Change-Id: I66ab80bcddbf3724e03e85384141fdf4f4acbc2e Reviewed-on: https://boringssl-review.googlesource.com/3092 Reviewed-by: Adam Langley <agl@google.com>
2015-01-15Remove dead code from EVP_CIPHER codepaths.David Benjamin
Everything is an AEAD now. Change-Id: Ib47638e128843fc8299c3dbf9bd60c01eb5afa16 Reviewed-on: https://boringssl-review.googlesource.com/2700 Reviewed-by: Adam Langley <agl@google.com>
2014-12-14Merge SSLv23_method and DTLS_ANY_VERSION.David Benjamin
This makes SSLv23_method go through DTLS_ANY_VERSION's version negotiation logic. This allows us to get rid of duplicate ClientHello logic. For compatibility, SSL_METHOD is now split into SSL_PROTOCOL_METHOD and a version. The legacy version-locked methods set min_version and max_version based this version field to emulate the original semantics. As a bonus, we can now handle fragmented ClientHello versions now. Because SSLv23_method is a silly name, deprecate that too and introduce TLS_method. Change-Id: I8b3df2b427ae34c44ecf972f466ad64dc3dbb171
2014-12-05Remove dtls1_enc.David Benjamin
(Imported from upstream's 4b87706d20f0a2fdf2e8f1b90256e141c487ef47 and eceef8fb865eb5de329b27ea472d4fdea4c290fe.) Dead code. Change-Id: I58120c3a9c42cb9db27f404774778222c3bb642a Reviewed-on: https://boringssl-review.googlesource.com/2479 Reviewed-by: Adam Langley <agl@google.com>
2014-10-01Merge the get_ssl_method hooks between TLS and SSLv3.David Benjamin
Remove one more difference to worry about switching between TLS and SSLv3 method tables. Although this does change the get_ssl_method hook for the version-specific tables (before TLS and SSLv3 would be somewhat partitioned), it does not appear to do anything. get_ssl_method is only ever called in SSL_set_session for client session resumption. Either you're using the version-specific method tables and don't know about other versions anyway or you're using SSLv23 and don't partition TLS vs SSL3 anyway. BUG=chromium:403378 Change-Id: I8cbdf02847653a01b04dbbcaf61fcb3fa4753a99 Reviewed-on: https://boringssl-review.googlesource.com/1842 Reviewed-by: Adam Langley <agl@google.com>
2014-09-22Add a set of tests for cipher string parsing.David Benjamin
Change-Id: I4f9cdfa443bc5916f1899a7fc90aca2bf3c6027c Reviewed-on: https://boringssl-review.googlesource.com/1801 Reviewed-by: Adam Langley <agl@google.com>
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-28Hook ssl_stat.c into build.Piotr Sikora
Change-Id: I049b2ed1b83e38375ddb658abf588a8e3355acb8 Signed-off-by: Piotr Sikora <piotr@cloudflare.com> Reviewed-on: https://boringssl-review.googlesource.com/1190 Reviewed-by: Adam Langley <agl@google.com>
2014-07-16Fix magic SSL reason codes.David Benjamin
SSL reason codes corresponding to alerts have special values. Teach make_errors.go that values above 1000 are reserved (otherwise it will assign new values in that namespace). Also fix all the existing reason codes which corresponded to alerts. Change-Id: Ieabdf8fd59f4802938616934e1d84e659227cf84 Reviewed-on: https://boringssl-review.googlesource.com/1212 Reviewed-by: Adam Langley <agl@google.com>
2014-06-27Remove heartbeat extension.David Benjamin
Change-Id: I0273a31e49c5367b89b9899553e3ebe13ec50687 Reviewed-on: https://boringssl-review.googlesource.com/1050 Reviewed-by: Adam Langley <agl@google.com>
2014-06-21Unit/regression test for TLS heartbeats.Adam Langley
Regression test against CVE-2014-0160 (Heartbleed). More info: http://mike-bland.com/tags/heartbleed.html (Imported from upstream's 2312a84ca17c5ac133581552df7024957cf15bc8)
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.)