Commit Graph

95 Commits

Author SHA1 Message Date
David Benjamin 11a85b6542
Use EVP_PKEY_assign_RSA instead of EVP_PKEY_assign (#434)
EVP_PKEY_assign_RSA, at least in C, is more type-safe. It also is
compatible with an upcoming BoringSSL change to make the RSA struct
opaque. For some Swift reasons I don't fully understand (but relating to
the OpaquePointer mess), when RSA becomes opaque, EVP_PKEY_assign no
longer works.

I assume it could be made to work with some appropriate cast, but
since EVP_PKEY_assign_RSA already exists (and will, in the future, be
more binary-size-friendly), just use that.
2023-06-09 10:12:15 +01:00
George Barnett dfdf5eb507
Update leaf cert (#431)
Motivation:

A few of cert the verification tests are failing on macOS.

Modifications:

Fetched a newer leaf cert by running 'openssl s_client -connect apple.com:443 -showcerts'

Result:

Tests pass.

After your change, what will change.
2023-05-24 04:59:25 -07:00
Mukesh Bharsakle 662d538281
Skipping testNotValidAfter on 32-bit platform (#426)
* the system must have a 64-bit time_t
2023-05-02 02:24:25 -07:00
Cory Benfield 5c57d8e64a
Drop Swift 5.5 (#425)
* Drop Swift 5.5

This patch drops Swift 5.5 support. It removes docker-compose files and
deletes any conditional compilation guards that are no longer necessary.

* Remove test generation script
2023-04-13 16:48:55 +01:00
Cory Benfield 9d0d5d8798
Update BoringSSL to abfd5ebc87ddca0fab9fca067c9d7edbc355eae8 (#424)
* Update BoringSSL vendoring scripts for new perlasm

* More patches

* Update BoringSSL to abfd5ebc87ddca0fab9fca067c9d7edbc355eae8

* Fixup newly opaquified types
2023-04-13 12:42:47 +01:00
carolinacass 837912bcb2
Use #fileID/#filePath instead of #file (#408)
Motivation:

#fileID introduced in Swift 5.3, so no longer need to use #file anywhere

Modifications:

Changed #file to #filePath or #fileID depending on situation
2022-10-31 08:54:36 -07:00
David Nadoba b8a78b0846
Remove `#if compiler(>=5.5)` (#404)
Co-authored-by: Cory Benfield <lukasa@apple.com>
2022-10-12 09:06:41 -07:00
Cory Benfield f904622568
Replace Lock with NIOLock (#400)
Motivation:

Lock has been deprecated in favour of NIOLock. Warnings aren't great.

Modifications:

- Replace Lock with NIOLock
- Update the minimum required NIO version to 2.42.0.

Result:

Everything builds cleanly
2022-09-27 06:02:20 -07:00
Cory Benfield 024bbd111e
Remove giant write test (#398)
Motivation:

The giant write test requires an enormous commitment of RAM to run it.
This has caused problems for both our own CI and a number of downstream
CI systems, leading to long execution times or outright failures.

Unfortunately, we can't defend against the original failure using this
test suite, but we can at least exercise the new machinery we added and
trust that the configuration is right.

Modifications:

- Make the maximum write size configurable internally
- Test the maximum write size at a different value.

Result:

We feel confident that the write splitting continues to work correctly.
2022-09-02 12:03:19 +01:00
David Nadoba 5c07eca3ac
Adopt `Sendable` incrementally (#395)
* Adopt `Sendable`

* `@preconcurrency typealias` doesn’t work

* `NIOPSKClient/ServerIdentityCallback`

* `NIOSSLKeyLogCallback`

* `NIOSSLClientTLSProvider`

* Fix warnings in tests

* `@preconcurrency` is broken https://github.com/apple/swift/issues/60508

I think we don’t actually need it in that case and still don’t break API

* Fix warnigns in tets

* fix nightly
2022-08-11 07:41:11 -07:00
Alex Shatberashvili e5526088a4
Store internal error file and line number information in error wrappers (#393)
* Add file path and line number info to BoringSSL error wrappers

* Rename filename to filepath

* Renamed boringSSLErrorCode to boringSSLErrorInfo

* Store line number as Uint

* Change Int32 to Int
2022-08-11 11:09:16 +01:00
Cory Benfield b24a52093f
Update expired certs for CA name test. (#394)
Motivation:

The CA name tests have some complex certificate requirements, so they
have hardcoded certs. Those have expired, making the unit tests fail.

Modifications:

- Replace the certs with new ones.

Result:

The tests pass again.
2022-08-11 07:06:56 +01:00
David Nadoba 0265283d35
Make `NIOSSLCertificate._subjectAlternativeNames()` return type non-optiona (#389) 2022-08-01 16:45:21 +01:00
David Nadoba c37f562e0e
Invoke `additionalPeerCertificateVerificationCallback` with peer certificate (#387)
* Invoke `NIOSSLContext.AdditionalCertificateChainVerificationCallback` with peer certificate and make it public without guaranteeing API stability

* move function typealias to the module namespace and improve documentation

* Move `additionalPeerCertificateVerificationCallback` from `NIOSSLContext` to `NIOSSHandler`

* make peer certificate non-optional in user callback

* Update Sources/NIOSSL/NIOSSLHandler.swift

Co-authored-by: Cory Benfield <lukasa@apple.com>
2022-07-28 04:12:34 -07:00
Matt Eaton 8bb0412e8b
Add TLS-PSK Support (#369)
Motivation:

Add TLS-PSK Support to address #230.

Modifications:

Modified SSLContext to take a passed in PSK callback to perform key and identity operations during the handshake.

Result:

TLS-PSK support for TLS 1.2. TLS 1.3 is not addressed due to API support in BoringSSL.
2022-07-28 11:42:55 +01:00
Cory Benfield ff0fccddad
Clean up write logic (#385)
Motivation:

Unnecessary empty writes should be avoided, and we should avoid
completing promises too often.

Modifications:

- Avoid sending a split promise on every write when writes are too big.
- Avoid sending a zero-length write when writes are too big.

Result:

Slightly better write behaviour.

Note that this is fundamentally un-testable: there's no place to put a
test hook here, and we coalesce writes on the far side, so we can't do
much here.
2022-07-27 01:59:04 -07:00
Cory Benfield 45fe612e84
Add sendCANameList to best effort functions. (#386)
Motivation:

TLSConfiguration cannot be made equatable due to its use of closures, so
we have our own best-effort functions. Unfortunately, I forgot to make
sure everything was added to them, so I'm doing so now.

Modifications:

- Add missing fields to bestEffort functions.

Result:

Better bestEffort functions.
2022-07-27 09:38:24 +01:00
Cory Benfield 70649f8c93
Tolerate massive writes (#384)
Motivation:

In rare cases, users may attempt to write more data than can be
expressed in 2**31 bytes. This should not crash our program.

Modifications:

- Break up extremely long writes into smaller chunks
- Make sure to clamp on the read path too

Result:

Users who send hilariously long writes can do so.
2022-07-26 14:03:03 +01:00
David Nadoba 256a7980c7
Update the expired leaf certificate (#383) 2022-07-25 09:53:17 -07:00
Franz Busch c30c680c78
Unbuffer reads after handshake (#379)
# Motivation
We missed unbuffering reads after the handshake completed. This could result in reads that were buffered while the handshake was in progress to not unbuffer.

# Modification
This PR unbuffers any reads after the handshake is completed.

# Result
We are now unbuffering reads correctly.
2022-07-13 04:08:41 -07:00
David Nadoba 181802810e
Include file path in `IOError`s thrown by `fopen` (#375)
* Include file path in `IOError`s thrown by `fopen`

* change error reason formatting and also include mode

* use explicit `String` to `UnsafePointer<CChar>` transformation
2022-06-28 17:44:30 +01:00
Matt Eaton fbaa52b24d
Port SecureBytes from Swift Crypto to use with TLS-PSK (#366)
* Port SecureBytes from Swift Crypto to use with TLS-PSK

Motivation:

Porting SecureBytes to NIOSSLSecureBytes for using in (Add TLS-PSK Support #360).

Modifications:

Addition and modification of SecureBytes to work within SwiftNIO SSL.
Added additional test cases.

Result:

NIOSSLSecureBytes will be ported for usage in a later PR with TLS-PSK.

* secure-bytes-transfer: Added LinuxMain tests

* secure-bytes-transfer: Removed case from NIOSSLError

* secure-bytes-transfer: Addressed initial feedback

* secure-bytes-transfer: Removed NIOSSLSecureBytesError from SSLErrors

* secure-bytes-transfer: Remove public access from NIOSSLSecureBytes

* Remove remaining public declaration.

Co-authored-by: meaton2 <meaton3@apple.com>
Co-authored-by: Cory Benfield <lukasa@apple.com>
2022-05-13 01:05:56 -07:00
meaton2 efc0a67ea5 issue-367 address feedback 2022-05-12 08:08:13 +01:00
meaton2 23cb003a50 Parallel test fix for TLSConfigurationTest
Motivation:

Address the issue the race condition brought up in #367

Modifications:

Created directories based on the test name so that each file would be isolated.

Result:

Avoid race condition in parallel test.
2022-05-12 08:08:13 +01:00
David Nadoba 32101fe2f3
Flush only after handshake (#362)
* support additional certificate validation

* run `scripts/generate_linux_tests.rb`

* fix review comments

- rename `CertificateChainVerificationCallback` to `AdditionalCertificateChainVerificationCallback`
- switch over `result` instead of try/catch
- add `. eofDuringAdditionalCertficiateChainValidation` error and throw it if channel becomes inactive while in `.additionalVerification` state

* add `Channel` parameter to `AdditionalCertificateChainVerificationCallback`

* get `context` from self instead of captering it

* save progress

* Only flush after handshake

* run `./scripts/generate_linux_tests.rb`
`

* Add NIOSSLCertficiateExtensions

* adopt naming of ObjectIdentifier

* address review comments
- namespace top level types with `NIO`
- add `withUnsafeBytes(_:)` that gives access to the buffer through an untyped buffer pointer
- fix indentation

* use real optional for `reference` in `_NIOSSLCertificateExtensions`

* fix review comments part 2

- nest `_Extensions` and `_Extension` under `NIOSSLCertificate`
- explain optional reference
- remove empty and copy constructor
- replace fancy force-unwraps with `!`

* use channel from argument

* fix review comments

- buffer the flush instead of ignoring it
- do not automatically flush after a succesfull handshake
2022-05-05 09:51:41 +01:00
David Nadoba 9bd76cc12d
Add `NIOSSLCertficiateExtensions` (#359)
* Add NIOSSLCertficiateExtensions

* adopt naming of ObjectIdentifier

* address review comments
- namespace top level types with `NIO`
- add `withUnsafeBytes(_:)` that gives access to the buffer through an untyped buffer pointer
- fix indentation

* use real optional for `reference` in `_NIOSSLCertificateExtensions`

* fix review comments part 2

- nest `_Extensions` and `_Extension` under `NIOSSLCertificate`
- explain optional reference
- remove empty and copy constructor
- replace fancy force-unwraps with `!`
2022-05-04 16:32:40 +01:00
David Nadoba 534af7f0f3
support additional certificate validation (#361)
* support additional certificate validation

* run `scripts/generate_linux_tests.rb`

* fix review comments

- rename `CertificateChainVerificationCallback` to `AdditionalCertificateChainVerificationCallback`
- switch over `result` instead of try/catch
- add `. eofDuringAdditionalCertficiateChainValidation` error and throw it if channel becomes inactive while in `.additionalVerification` state

* add `Channel` parameter to `AdditionalCertificateChainVerificationCallback`

* get `context` from self instead of captering it

Co-authored-by: Cory Benfield <lukasa@apple.com>
2022-05-04 05:36:19 -07:00
David Nadoba 9bc329d9e4
Add support for owned references to `NIOSSLObjectIdentifier` (#358)
* Add support for owned references to `NIOSSLObjectIdentifier`
* rename `ObjectIdentifier.swift` to `ObjectIdentifierTests.swift`
2022-04-29 12:20:10 +02:00
David Nadoba 15b7c907a6
Add `NIOSSLObjectIdentifier` (OID) type (#352)
* add `NIOSSLObjectIdentifier` (OID) type

* fix review comments

* only backport for Swift 5.4+
2022-04-21 16:54:26 +01:00
David Nadoba fb1a6a6702
Add support for URI SAN (#347) 2022-03-11 10:16:38 +00:00
David Nadoba 00a45ad9bb
Add RandomAccessCollection conformance to `SubjectAlternativeNames` and make it public (#345)
* make `_SubjectAlternativeNames` and related types public

and add `RandomAccessCollection` conformance to `_SubjectAlternativeNames`

* move type conversion out of collection

* add `_SubjectAlternativeName`, `. NameType` and `. Contents`

* remove new error case

* add email as a supported name type

* fix review comments and move _SubjectAlternativeNames and related types to a separate file

* remove unused error code

* fix review comments

* add missing Glibc import for `in_addr` and related functionality

* add bounds check and use load instead of memoryRebound
2022-03-10 17:24:31 +00:00
David Nadoba 21b7349c95
Add `Hashable` conformance to `NIOSSLPKCS12Bundle` (#341)
* add Hashable conformance to NIOSSLPKCS12Bundle

* add tests
2022-01-28 18:04:44 +00:00
Matt Eaton 8abde3ea82
Enhancement to address issue-337 to query the final `TLSVersion` (#338)
* Enhancement to address issue-337 to query the final `TLSVersion`

Motivation:

To provide an enhancment to resolve issue-337 to query the final `TSLVersion`.
This allows a client channel to grab the final TLSVersion used for the connection.

Modifications:

Added extension points to allow querying the `TLSVersion` from the `SSLConnection` based on the `Channel` and `ChannelPipeline`.
Added an `unknown` type to `TLSVersion` to account for a default case where the `TLSVersion` cannot be derived from the conenction.
Added a unit test `testObtainingTLSVersionOnClientChannel` to query the final `TLSVersion` when the client channel is closed.

Result:

2 APIs added to query the `TLSVersion` when on a channel.

Additional Notes:

Note that I have 2 concerns about this PR that I would like some additional feedback on:
1. First is the `unknown` case for `TLSVersion`.  This may not be needed as BoringSSL may just return `tlsv12` each time the version cannot be derived from the connection.  Let me know your thoughts.
2. I am not wild about the way this is being unit-tested, but I wanted to do it this way because it provides the `TLSVersion` on the `Channel` after it is closed.  Let me know your thoughts.

* Removed unknown case as it cases an API breakage.

Motivation:

Removed unknown case as it cases an API breakage.

Modifications:

Defaulted to tlsv12 as this is what BoringSSL will default to.

Result:

Wiped out unknown and switched to tlsv12 as the default

* issue--337: Fix failure on soundness.sh for Linux test

* issue-337: Addressed feedback from review

* issue-337: Updated PR to address feedback

* issue-337: Updated the EventLoopFuture for the Channel extension

* issue-337: Refactored test case

Co-authored-by: meaton2 <meaton3@apple.com>
2022-01-20 10:20:49 +00:00
Cory Benfield 90101e7a15
Provide better error on EOF during handshake (#332)
Motivation:

When we get channelInactive during a handshake, we currently produce a
fairly useless error:
.handshakeFailed(NIOSSL.BoringSSLError.sslError([])). This error isn't
helpful to anyone, and it doesn't really communicate what's happened.

Sadly, due to the tightly constrained types it's really hard for us to
add new errors to handshakeFailed. Regardless, it would be good for us
to give as much diagnostic information as we can here.

Modifications:

- Changed the representation of BoringSSLInternalError to allow
  "synthetic" errors that don't come from BoringSSL at all.
- Added a new synthetic error for eof during handshake.
- Sent that error instead of a BoringSSL error stack that will always be
  empty.

Result:

- Easier to diagnose the error.
2021-11-25 13:46:38 +00:00
Cory Benfield 36f6419f2b Trust additional roots and defaults on Darwin
Motivation:

When we added additional trust roots on Darwin, we didn't add much
testing to cover that use-case because testing the default validator is
hard. This meant a bug slipped through: we called a pair of APIs in the
wrong order. As a result, users using additional trust roots on Darwin
_only_ trusted the additional ones: the defaults were unavailable.

Modifications:

- Fix the call so that we trust both the defaults and the additional
  roots.
- Refactor the security framework validator to make it possible to test
  it directly.
- Add unit tests for the security framework validator.

Result:

We'll correctly trust the additional roots and the defaults on Darwin.
2021-11-12 17:45:37 +00:00
Matt Eaton 21e2918756
issue-316: Support c_rehash Directory Format (#327)
* issue-316: Support c_rehash Directory Format

* issue-316: Address Feedback from PR

* issue-316: Addressed feedback

* issue-316: Addressed latest feedback

* issue-316: Refactor rehash check to be String.UTF8View:

* issue-316: Added split back into the String.UTF8View computational process

* issue-316: Added another split back to the computation of the rehash check

* issue-316: Added additional checks to rehash format

Co-authored-by: meaton2 <meaton3@apple.com>
2021-10-11 10:09:16 +01:00
Cory Benfield 15d2090ae3
Tolerate zeroReturnError in closed/unwrapped (#323)
Motivation:

In some rare cases we've seen production applications crash due to us
getting a zeroReturnError in either closed or perhaps unwrapped. This is
pretty hard to get to trigger in realistic situations, but I've found a
contrived-but-possible way to hit it in tests. In both of these cases we
are able to simply ignore the error and move on.

Modifications:

- Added a test to replicate the issue
- Tolerate .unwrapped and .closed on zeroReturnError.

Result:

Fewer weird crashes
2021-09-21 15:43:17 +01:00
Cory Benfield 70da47e2d4
Add callback-based custom private keys. (#322)
Motivation:

NIOSSL traditionally handles private keys be requiring that they can be
decoded into a BoringSSL EVP_PKEY structure. This requires the key to
have an in-memory representation that BoringSSL understands, and
ultimately forces the bytes of the private key into memory.

In many cases, however, this is either undesirable or not possible.
For security reasons it is common to want to offload a private key into
secure storage, such as the iPhone's Secure Enclave or a portable smart
card. In other circumstances it may be useful to put the private key on
an entirely different machine and have the signing operations occur over
an RPC mechanism.

In all of these cases it is necessary to have a programmatic interface
to the private key that can be implemented in an essentially arbitrary
manner.

Modifications:

- Defined a new protocol, `NIOSSLCustomPrivateKey`, that allows users to
  implement the private key operations needed for TLS.
- Plumbed support for this interface through `NIOSSLPrivateKey`.
- Added support for the BoringSSL interface to `SSLConnection`.

Result:

Custom TLS private keys backed by function calls can now be provided to
NIOSSL.
2021-09-21 12:57:22 +01:00
Cory Benfield 77a3bf1788
Fixup CA name tests on Darwin (#320)
Motivation:

The recently-added CA name tests consistently fail on Darwin machines.
This is becuase they expect the handshake to fail due to certificate
verification errors, but that doesn't happen synchronously on Darwin.
This also introduces thread-unsafety into the tests. Neither is good.

Modifications:

- Modify the test configuration to use custom trust roots, which
  disables the Security.framework callbacks
- Modify the test configuration to disable hostname verification.

Result:

These tests now successfully perform their handshake on all platforms.
2021-09-16 09:45:42 +01:00
Cory Benfield 7ced2aed37
Remove the implementationOnly dance (#321)
Motivation:

When we added implementationOnly imports a while back, we supported
Swift 5.0, and so we needed to guard their availability behind a
compiler check. We only support 5.2 and later now, so that check is
redundant and can go away.

Modifications:

- Removed compiler checks around imports of our C libraries.

Result:

Cleaner code
2021-09-16 09:29:08 +01:00
Cory Benfield c359ba56f7
Clean up imports and dependencies (#319)
Motivation:

With NIO 2.32.0 we broke the core NIO module up into modules that split
apart the POSIX layer and the core abstractions. As a result, this
package no longer needs to express a hard dependency on the POSIX layer.

Modifications:

- Rewrote imports of NIO to NIOCore.
- Added NIOEmbedded and NIOPosix imports where necessary in tests.
- Extended soundness script to detect NIO imports.
- Note that the main modules still depend on NIO, which is necessary
for backwards-compatibility reasons. This dependency is unused.

Result:

No need to use NIOPosix.
2021-09-14 14:55:25 +01:00
Matt Eaton d661f0fa95
Fix for nightly build. (#318)
Motivation:

Resolving build failures for the nightly build suite on each commit.

Modifications:

Modification to ClientSNITests.swift.

Result:

Surpressing the error on the nightly build.

Co-authored-by: meaton2 <meaton3@apple.com>
2021-09-09 17:07:01 +01:00
Cory Benfield 688f902407
Update BoringSSL to 25773430c07075a368416c3646fa4b07daf4968a (#315)
* Update BoringSSL to 25773430c07075a368416c3646fa4b07daf4968a

* Clean up the use of the X509 pointer

Motivation:

BoringSSL has begun opaquifying their X.509 library. This unfortunately
manifests as source code changes in Swift due to the way OpaquePointer
behaves. As a result, we need to change the places that held an X.509
pointer directly.

While we're here, we've been playing a bit fast-and-loose with the
lifetime of owned pointers. We should take this opportunity to clean
things up and be a bit better behaved.

Modifications:

- Replace the X509 pointers with OpaquePointer
- Use scoped access to the X.509 access outside the NIOSSLCertificate
  class.

Result:

Code compiles with better pointer hygeine.
2021-09-09 08:54:01 +01:00
Matt Eaton 2e74773972
issue-231: Adding CA Names to the TLS handshake. (#307)
Motivation:

This is an enhancement to add support for send CA names during the handshake for #231.

Modifications:

Changes to:
TLSConfiguration.swift: Added the `sendCANameList` flag to indicate loading the CA names on `.fullVerification`.
SSLContext.swift: Added the CA Names derived from the `trustRoots`.
TLSConfigurationTests.swift: Added the test case for `testFullVerificationWithCANames`.
NIOSSLTestHelpers.swift: Added a new set of PEMs for TLS and client authentication testing.

Result:

Addition for #231.
2021-09-08 16:37:12 +01:00
buttaface eab60b2ada
Enable tests for Android (#300)
Motivation:

Run the tests on Android.

Modifications:

- Enable the tests on Android.
- Replace a few uses of /tmp with FileManager.default.temporaryDirectory in the
  Swift tests.

Result:

All the tests pass on Android AArch64.
2021-06-15 09:10:17 +01:00
Cory Benfield 9c457d021e
Rationalise TLSConfiguration construction. (#299)
Motivation:

Currently whenever we add new config to TLSConfiguration, we add a new
static factory function that needs to provide the field. This is because
we currently allow configuration primarily by way of initializers. This
is increasingly not scaling, leading to a proliferation of almost
identical static factory functions.

We can replace this proliferation by having only "default" constructions
that default basically everything, and then having users use
getters/setters to initialize things. This also works well when we have
multiple ways of interacting with config, e.g. with the various cipher
suite operations.

Modifications:

- Deprecate all existing factory functions.
- Replace with two: forClient() and
  forServer(certificateChain:privateKey:). These configure only the
  mandatory things for each mode.
- Replace all uses of the deprecated initializers with the new ones,
  configuring fields manually as needed.

Result:

More consistent configuration objects.
2021-05-14 08:52:26 +01:00
Cory Benfield 33a4041c09
Clean up new hashable implementation. (#298)
Motivation:

The new hashable implementation was missing some fields. I've added
them, and added testing. It also needed to raise the minimum NIO
version.

Modifications:

- Raised the minimum NIO version.
- Fixed the comparison.
- Added fields.

Result:

The code is right.
2021-05-13 10:09:34 +01:00
Matt Eaton 0ca62dd739
Rebase: Added API for setting cipher suites in TLSConfiguration (#293)
* Rebase: Added API for setting cipher suites in TLSConfiguration

Motivation:

Issue-207 for adding an API for setting a cipher suite while also preserving the string based declaration.
Additions to TLSConfiguration and SSLContext to allow safe access to ciphers on a context.

Modifications:

Additions to TLSConfiguration and SSLContext to allow safe access to ciphers on a context.
Added test cases in TLSConfigurationTest.

Result:

Additional API for Issue-207.
Simplified and safer access to STACK_OF(SSL_CIPHER) on a context.

* Addressed all feedback expect for memberwise init.

Motivation:

Addressed all feedback from previous feedback except for memberwise init.

Modifications:

Changes to SSLContext and TLS Configuration.

Result:

Resolved all feedback except for memberwise init.

* Addressed duplicating the memberwise init.

Motivation:

Addressing feedback for memberwise init.

Modifications:

Changes to TLSConfiguration init.

Result:

Reduced code surface.

* Added additional cipher suite tests

Motivation:

Added additional cipher suites tests per feedback.

Modifications:

Added tests to TLSConfigurationTests.

Result:

Additional cipher suite tests.

Co-authored-by: Johannes Weiss <johannesweiss@apple.com>
2021-05-11 14:57:20 +01:00
Mads Odgaard b2f8f35326
Implement bestEffort functions for hashable and equatable. (#280)
* Make TLSConfiguration Hashable

* Fix equatable conformance

* Add basic tests

* Remove hash not equal check

* Implement bestEffort functions

* add doc

* add test for different callbacks

* generate tests

Co-authored-by: Johannes Weiss <johannesweiss@apple.com>
Co-authored-by: Cory Benfield <lukasa@apple.com>
2021-05-05 09:30:24 +01:00
Matt Eaton e1f6ac1c45
Bug fix to replace uncleanShutdown with handshakeFailed during TLS failure. (#287)
Motivation:

To address #253

Modifications:

When channelInactive is called during a handshake failure it currently defaults to uncleanShutdown.
This bugfix and test is to report handshakeFailed instead of uncleanShutdown.

Added the handshaking case to the channelInactive function to report handshakeFailed.
Added a new test case, testChannelInactiveDuringHandshake, in UnwrappingTests to test this fix.

Result:

Fix of #253
2021-04-08 08:24:31 +01:00