Andreas Steffen [Sun, 26 Jun 2016 14:00:43 +0000 (16:00 +0200)]
libtpmtss: Added to integrity checks
Andreas Steffen [Thu, 23 Jun 2016 10:42:22 +0000 (12:42 +0200)]
aikpub2: Output AIK signature algorithm
Andreas Steffen [Mon, 20 Jun 2016 08:47:27 +0000 (10:47 +0200)]
Refactoring to tpm_tss_quote_info object
Andreas Steffen [Thu, 16 Jun 2016 15:41:03 +0000 (17:41 +0200)]
libimcv: Changed debug level for functional components from 2 to 3
Andreas Steffen [Thu, 16 Jun 2016 15:40:10 +0000 (17:40 +0200)]
libtpmtss: Implemented TSS2 quote() method
Andreas Steffen [Tue, 14 Jun 2016 21:34:29 +0000 (23:34 +0200)]
libtpmtss: Implemented TSS2 read_pcr() method
Andreas Steffen [Sun, 5 Jun 2016 18:39:41 +0000 (20:39 +0200)]
libimcv: migrate pts to tpm_tss
Andreas Steffen [Sun, 5 Jun 2016 18:31:13 +0000 (20:31 +0200)]
libtpmtss: Get TPM 2.0 capabilities
Andreas Steffen [Sat, 4 Jun 2016 18:13:52 +0000 (20:13 +0200)]
libtpmtss: Retrieve TPM 1.2 version info
Andreas Steffen [Thu, 2 Jun 2016 21:01:11 +0000 (23:01 +0200)]
Created libtpmtss library handling access to v1.2 and v2.0 TPMs
Andreas Steffen [Tue, 31 May 2016 21:48:28 +0000 (23:48 +0200)]
aikpub2: --handle option retrieves public key from TPM 2.0 NVRAM
Andreas Steffen [Mon, 16 May 2016 08:53:44 +0000 (10:53 +0200)]
aikpub2: Convert TSS 2.0 AIK public key blob into PKCS#1 format
Tobias Brunner [Mon, 20 Jun 2016 16:31:13 +0000 (18:31 +0200)]
testing: Start charon before Apache in tnc/tnccs-20-pdp-pt-tls
The change in
c423d0e8a124 ("testing: Fix race in tnc/tnccs-20-pdp-pt-tls
scenario") is not really ideal as now the vici plugin might not yet be
ready when `swanctl --load-creds` is called. Perhaps starting charon
before Apache causes enough delay.
Once we switch to charon-systemd this isn't a problem anymore as starting the
unit will block until everything is up and ready. Also, the individual
swanctl calls will be redundant as the default service unit calls --load-all.
But start scripts do run before charon-systemd signals that the daemon is
ready, so using these would work too then.
Tobias Brunner [Mon, 20 Jun 2016 16:18:46 +0000 (18:18 +0200)]
testing: Only load selected plugins in swanctl
The main issue is that the ldap and curl plugins, or rather the libraries
they use, initialize GnuTLS (curl, strangely, even when it is, by its own
account, linked against OpenSSL). Some of these allocations are only freed
once the libraries are unloaded. This means that the leak detective causes
invalid frees when swanctl is terminated and libraries are unloaded after the
leak detective is already deinitialized.
Tobias Brunner [Fri, 17 Jun 2016 16:53:51 +0000 (18:53 +0200)]
Merge branch 'exchange-collisions'
Improves the handling of IKEv2 exchange collisions in several corner
cases. TEMPORARY_FAILURE and CHILD_SA_NOT_FOUND notifies that were defined
with RFC 7296 are now handled and sent as appropriate.
The behavior in these situations is tested with new unit tests.
Fixes #379, #464, #876, #1293.
Tobias Brunner [Fri, 10 Jun 2016 14:41:47 +0000 (16:41 +0200)]
unit-tests: Add tests for expires after CHILD_SA rekeying
Tobias Brunner [Fri, 10 Jun 2016 14:00:25 +0000 (16:00 +0200)]
child-rekey: Only rekey installed CHILD_SAs
Depending on the lifetimes a CHILD_SA we rekeyed as responder might
expire shortly afterwards. We don't want to rekey it again.
When retrying due to an INVALID_KE_PAYLOAD notify the expected state
is CHILD_REKEYING if it is anything else (e.g. due to a collision) we
ignore it.
We also abort the exchange properly if we don't find the CHILD_SA, no
need for an empty INFORMATIONAL exchange anymore.
Tobias Brunner [Thu, 2 Jun 2016 16:15:27 +0000 (18:15 +0200)]
Report test coverage of libcharon and starter
Tobias Brunner [Thu, 2 Jun 2016 15:28:03 +0000 (17:28 +0200)]
unit-tests: Add test for CHILD_SA rekey if a retry due to an INVALID_KE_PAYLOAD is delayed
Tobias Brunner [Thu, 2 Jun 2016 15:23:35 +0000 (17:23 +0200)]
child-rekey: Ignore failed colliding CHILD_SA rekeyings
If a passive rekeying fails due to an INVALID_KE_PAYLOAD we don't want
to consider this task later when resolving collisions. This previously
might have caused the wrong SA to get deleted/installed based on the nonces
in the unsuccessful exchange.
Tobias Brunner [Thu, 2 Jun 2016 14:03:30 +0000 (16:03 +0200)]
unit-tests: Add test for collision between IKE_SA rekey and CHILD_SA creation
Tobias Brunner [Thu, 2 Jun 2016 14:01:48 +0000 (16:01 +0200)]
child-create: Retry creating the CHILD_SA if TEMPORARY_FAILURE is received
We queue a delayed task that is initiated after a while.
Tobias Brunner [Thu, 2 Jun 2016 13:50:11 +0000 (15:50 +0200)]
ikev2: Add possibility to delay initiation of a queued task
Such a task is not initiated unless a certain time has passed. This
allows delaying certain tasks but avoids problems if we'd do this
via a scheduled job (e.g. if the IKE_SA is rekeyed in the meantime).
If the IKE_SA is rekeyed the delay of such tasks is reset when the
tasks are adopted i.e. they get executed immediately on the new IKE_SA.
This hasn't been implemented for IKEv1 yet.
Tobias Brunner [Thu, 2 Jun 2016 13:24:36 +0000 (15:24 +0200)]
ike: Reduce RETRY_INTERVAL a bit
Retry exchanges between 5 and 15 seconds after a temporary failure.
Tobias Brunner [Thu, 2 Jun 2016 13:13:24 +0000 (15:13 +0200)]
ike-rekey: Return TEMPORARY_FAILURE when concurrently creating a CHILD_SA
Tobias Brunner [Wed, 1 Jun 2016 13:49:45 +0000 (15:49 +0200)]
unit-tests: Add tests for IKE rekeying if INVALID_KE_PAYLOAD notifies are received
Tobias Brunner [Wed, 1 Jun 2016 10:18:56 +0000 (12:18 +0200)]
ike: Add configuration option to switch to preferring supplied proposals over local ones
Tobias Brunner [Wed, 1 Jun 2016 10:03:21 +0000 (12:03 +0200)]
child-cfg: Add option to prefer supplied proposals over locally configured ones
Tobias Brunner [Wed, 1 Jun 2016 09:44:33 +0000 (11:44 +0200)]
ike-cfg: Add option to prefer supplied proposals over locally configured ones
Tobias Brunner [Wed, 1 Jun 2016 12:53:23 +0000 (14:53 +0200)]
proposal: Remove MODP_NONE from IKE proposals parsed from strings
Tobias Brunner [Wed, 1 Jun 2016 09:28:30 +0000 (11:28 +0200)]
proposal: Handle MODP_NONE in both directions when selecting proposals
Tobias Brunner [Wed, 1 Jun 2016 09:14:20 +0000 (11:14 +0200)]
proposal: Parse modpnone as MODP_NONE(0)
Tobias Brunner [Wed, 1 Jun 2016 13:45:01 +0000 (15:45 +0200)]
ike-rekey: Make sure to ignore task when detecting collisions if ike-init subtask failed
For instance, if INVALID_KE_PAYLOAD is returned we don't want this task
to affect any active rekeying (no new SA has been established so far).
Tobias Brunner [Tue, 31 May 2016 16:19:17 +0000 (18:19 +0200)]
unit-tests: Add test for rekey collision if one CREATE_CHILD_SA response is delayed
Tobias Brunner [Tue, 31 May 2016 12:47:05 +0000 (14:47 +0200)]
unit-tests: Add tests for IKE_SA rekeying if collision is not detected by one peer
Tobias Brunner [Tue, 31 May 2016 12:41:19 +0000 (14:41 +0200)]
ike-rekey: Handle undetected collisions also if delete is delayed
If the peer does not detect the rekey collision and deletes the old
IKE_SA and then receives the colliding rekey request it will respond with
TEMPORARY_FAILURE. That notify may arrive before the DELETE does, in
which case we may just conclude the rekeying initiated by the peer.
Also, since the IKE_SA is destroyed in any case when we receive a delete
there is no point in storing the delete task in collide() as process_i()
in the ike-rekey task will never be called.
Tobias Brunner [Tue, 31 May 2016 12:35:22 +0000 (14:35 +0200)]
ike-rekey: There is no passive reauth task, so it will never collide with one
Tobias Brunner [Tue, 31 May 2016 12:14:26 +0000 (14:14 +0200)]
ike-rekey: Ignore colliding rekey tasks that did not create an IKE_SA
This simplifies collision handling and we don't need to know about these
tasks when concluding the rekeying we initiated.
Tobias Brunner [Tue, 31 May 2016 10:22:32 +0000 (12:22 +0200)]
ike-rekey: Properly handle situation if the peer did not notice the rekey collision
We conclude the rekeying before deleting the IKE_SA. Waiting for the
potential TEMPORARY_FAILURE notify is no good because if that response
does not reach us the peer will not retransmit it upon our retransmits
of the rekey request if it already deleted the IKE_SA after receiving
our response to the delete.
Tobias Brunner [Tue, 31 May 2016 10:21:01 +0000 (12:21 +0200)]
ike-delete: Handle deletes while rekeying differently if there was a collision
We treat these as if we concluded the rekeying, the active ike-rekey task
will handle the collision afterwards.
Tobias Brunner [Tue, 31 May 2016 10:19:53 +0000 (12:19 +0200)]
ike-rekey: Add method to check if there was a rekey collision
Tobias Brunner [Tue, 31 May 2016 10:18:44 +0000 (12:18 +0200)]
ikev2: Check for collisions after handling IKE deletion
Tobias Brunner [Tue, 31 May 2016 08:09:29 +0000 (10:09 +0200)]
unit-tests: Add tests for IKE/CHILD delete collisions
Tobias Brunner [Tue, 31 May 2016 08:08:03 +0000 (10:08 +0200)]
child-delete: Reply as usual when concurrently rekeying the IKE_SA
As per RFC 7296, 2.25.2 (what we did before was the behavior described
in RFC 4718).
Tobias Brunner [Mon, 30 May 2016 16:30:51 +0000 (18:30 +0200)]
unit-tests: Add tests for IKE/CHILD rekey collisions
Tobias Brunner [Mon, 30 May 2016 16:07:53 +0000 (18:07 +0200)]
child-create: Respond with TEMPORARY_FAILURE while rekeying/deleting IKE_SA
Tobias Brunner [Mon, 30 May 2016 15:59:42 +0000 (17:59 +0200)]
ike-rekey: Respond with TEMPORARY_FAILURE if CHILD_SAs are currently rekeyed/deleted/established
Tobias Brunner [Mon, 30 May 2016 15:26:28 +0000 (17:26 +0200)]
unit-tests: Add tests for collisions between IKE_SA rekeying and deletion
Tobias Brunner [Mon, 30 May 2016 15:10:51 +0000 (17:10 +0200)]
ike-rekey: Handle TEMPORARY_FAILURE notify
Tobias Brunner [Mon, 30 May 2016 14:53:37 +0000 (16:53 +0200)]
ike-rekey: Respond with TEMPORARY_FAILURE if we are deleting the SA
Tobias Brunner [Mon, 30 May 2016 14:30:56 +0000 (16:30 +0200)]
unit-tests: Add tests for IKE SA deletion
Tobias Brunner [Mon, 30 May 2016 14:27:47 +0000 (16:27 +0200)]
ike-delete: No need to wait for a response in case of concurrent deletes
RFC 7296 explicitly says we SHOULD reply as usual and forget about our
own close request.
Tobias Brunner [Mon, 30 May 2016 13:39:38 +0000 (15:39 +0200)]
unit-tests: Only deliver messages to the SA they are addressed to
Tobias Brunner [Sat, 28 May 2016 08:10:18 +0000 (10:10 +0200)]
unit-tests: Add test for simple IKE rekey collision
Tobias Brunner [Sat, 28 May 2016 07:34:29 +0000 (09:34 +0200)]
ikev2: Add a new state to track rekeyed IKE_SAs
This makes handling such IKE_SAs more specifically compared to keeping them
in state IKE_CONNECTING or IKE_ESTABLISHED (which we did when we lost a
collision - even triggering the ike_updown event), or using IKE_REKEYING for
them, which would also be ambiguous.
For instance, we can now reject anything but DELETES for such SAs.
Tobias Brunner [Fri, 27 May 2016 17:16:03 +0000 (19:16 +0200)]
ike-rekey: Add the name/ID of the redundant IKE_SAs to the log messages
Tobias Brunner [Fri, 27 May 2016 08:31:42 +0000 (10:31 +0200)]
unit-tests: Add tests for IKE_SA rekeying
Tobias Brunner [Fri, 27 May 2016 08:31:11 +0000 (10:31 +0200)]
unit-tests: Add asserts against IKE_SAs
Tobias Brunner [Fri, 27 May 2016 08:17:53 +0000 (10:17 +0200)]
unit-tests: Make sure to flush the IKE_SA manager before destroying the sender
As the static plugin that creates and destroys the default sender was
not initialized because of the missing socket the daemon won't destroy
our sender. Test cases will eventually have to flush the IKE_SA manager to
satisfy the leak detective. However, in case of a test failure and if there
are IKE_SAs in the manager the daemon will flush the SAs when deinitializing,
which will cause deletes to get sent. This crashes if the sender is already
destroyed.
Tobias Brunner [Fri, 27 May 2016 08:07:03 +0000 (10:07 +0200)]
unit-tests: Return status from process_message()
Tobias Brunner [Thu, 26 May 2016 15:00:10 +0000 (17:00 +0200)]
unit-tests: Use wrapper for add_listener in bus_t related asserts
Tobias Brunner [Thu, 26 May 2016 14:57:31 +0000 (16:57 +0200)]
unit-tests: Provide a wrapper around bus_t::add_listener and unregister them during cleanup
In case listeners on the stack are triggered while cleaning up after a
test failed (e.g. via ike_sa_manager_t::flush) remaining listeners defined on
the stack would cause a segmentation fault.
Tobias Brunner [Thu, 26 May 2016 14:35:18 +0000 (16:35 +0200)]
ike-sa-manager: Make sure rng is defined before destroying it in flush()
This allows calling flush() multiple times.
Tobias Brunner [Thu, 26 May 2016 13:08:09 +0000 (15:08 +0200)]
ike-rekey: Establish new IKE_SA earlier as responder, but only if no collision
Moving to the new SA only after receiving the DELETE for the old SA was
not ideal as it rendered the new SA unusable (because it simply didn't
exist in the manager) if the DELETE was delayed/got dropped.
Tobias Brunner [Thu, 26 May 2016 09:21:45 +0000 (11:21 +0200)]
unit-tests: Add tests where a peer is not aware of a CHILD_SA rekey collision
Tobias Brunner [Wed, 25 May 2016 17:12:53 +0000 (19:12 +0200)]
child-delete: Check if the deleted CHILD_SA is the redundant SA of a collision
This happens if the peer deletes the redundant SA before we are able to
handle the response. The deleted SA will be in state CHILD_INSTALLED but
we don't want to trigger the child_updown() event for it or recreate it.
Tobias Brunner [Wed, 25 May 2016 17:11:51 +0000 (19:11 +0200)]
child-rekey: Add method to check for the redundant SA created in a collision
Tobias Brunner [Wed, 25 May 2016 13:15:51 +0000 (15:15 +0200)]
unit-tests: Test for rekeying if INVALID_KE_PAYLOAD notifies are received
Tobias Brunner [Wed, 25 May 2016 12:55:16 +0000 (14:55 +0200)]
child-rekey: Don't change state to INSTALLED if it was already REKEYING
This happens if there is a rekey collision and the peers disagree on the
DH group.
Tobias Brunner [Tue, 24 May 2016 12:14:05 +0000 (14:14 +0200)]
unit-tests: Make IKE and ESP proposals configurable
Tobias Brunner [Sat, 21 May 2016 10:22:06 +0000 (12:22 +0200)]
unit-tests: Add tests for CHILD_SA rekeying/deletion collisions
Tobias Brunner [Sat, 21 May 2016 09:12:16 +0000 (11:12 +0200)]
unit-tests: Add asserts against job scheduling
Tobias Brunner [Fri, 20 May 2016 08:49:21 +0000 (10:49 +0200)]
ikev2: Use CHILD_REKEYED for replaced CHILD_SAs after rekeying
This allows handling collisions better, in particular with deletions.
Tobias Brunner [Thu, 19 May 2016 17:25:12 +0000 (19:25 +0200)]
unit-tests: Add asserts against task queues of IKE_SAs
Tobias Brunner [Thu, 19 May 2016 15:23:32 +0000 (17:23 +0200)]
child-rekey: Use more appropriate error notifies if CHILD_SA is not found or getting deleted
These are the notifies we should return according to RFC 7296.
Tobias Brunner [Thu, 19 May 2016 13:31:02 +0000 (15:31 +0200)]
child-rekey: Recreate the CHILD_SA if we receive a CHILD_SA_NOT_FOUND notify
Tobias Brunner [Thu, 19 May 2016 13:06:27 +0000 (15:06 +0200)]
child-create: Handle TEMPORARY_FAILURE notify as failure
We will later add code to retry creating the CHILD_SA if we are not
rekeying. Rekeying is already rescheduled as with any other errors.
Tobias Brunner [Tue, 17 May 2016 18:07:09 +0000 (20:07 +0200)]
unit-tests: Add unit tests for basic CHILD_SA rekeying
Tobias Brunner [Wed, 18 May 2016 15:16:29 +0000 (17:16 +0200)]
unit-tests: Add asserts against ike|child_rekey hooks
Tobias Brunner [Wed, 18 May 2016 15:15:12 +0000 (17:15 +0200)]
unit-tests: Match in and outbound SPIs in SA asserts
Since we use unique sequential SPIs that should be OK.
Tobias Brunner [Tue, 17 May 2016 18:06:24 +0000 (20:06 +0200)]
unit-tests: Register nonce generator and make first nonce byte configurable
Tobias Brunner [Tue, 17 May 2016 18:05:06 +0000 (20:05 +0200)]
crypto-factory: Stop after successfully creating one nonce generator
Fixes:
e2fc09c186c3 ("Add nonce generator interface")
Tobias Brunner [Tue, 17 May 2016 18:03:59 +0000 (20:03 +0200)]
unit-tests: Add mock nonce generator
We don't make the full nonces configurable but only the first byte,
which should be enough to force a nonce to be smaller than others.
Tobias Brunner [Tue, 17 May 2016 11:49:58 +0000 (13:49 +0200)]
unit-tests: Make message asserts more flexible
Tobias Brunner [Mon, 16 May 2016 17:35:14 +0000 (19:35 +0200)]
unit-tests: Add another CHILD_SA delete collision
Tobias Brunner [Fri, 13 May 2016 10:16:45 +0000 (12:16 +0200)]
unit-tests: Register mock DH implementation as static plugin feature
Tobias Brunner [Fri, 13 May 2016 10:12:51 +0000 (12:12 +0200)]
unit-tests: Add mock DH implementation that's basically a noop
If the openssl plugin is built DH isn't that much of an overhead as
ecp256 is used, but the default MODP group is now modp3072.
Tobias Brunner [Fri, 13 May 2016 06:50:17 +0000 (08:50 +0200)]
unit-tests: Make IKE SPIs predictable
Tobias Brunner [Fri, 13 May 2016 06:44:13 +0000 (08:44 +0200)]
unit-tests: Call methods on IKE_SAs in their context
Tobias Brunner [Thu, 12 May 2016 15:25:42 +0000 (17:25 +0200)]
unit-tests: Add a unit test for CHILD_SA DELETE collisions
Tobias Brunner [Thu, 12 May 2016 10:22:35 +0000 (12:22 +0200)]
child-delete: Remove unnecessary call to destroy_child_sa()
Generally, we will not find the CHILD_SA by searching for it with the
outbound SPI (the initiator of the DELETE sent its inbound SPI) - and if
we found a CHILD_SA it would most likely be the wrong one (one in which
we used the same inbound SPI as the peer used for the one it deletes).
And we don't actually want to destroy the CHILD_SA at this point as we
know we already initiated a DELETE ourselves, which means that task
still has a reference to it and will destroy the CHILD_SA when it
receives the response from the other peer.
Tobias Brunner [Fri, 13 May 2016 18:48:44 +0000 (20:48 +0200)]
unit-tests: Add asserts against hooks on listener_t and messages captured there
Tobias Brunner [Thu, 12 May 2016 15:59:42 +0000 (17:59 +0200)]
unit-tests: Add asserts against SAs (e.g. their states)
Tobias Brunner [Fri, 13 May 2016 09:57:11 +0000 (11:57 +0200)]
unit-tests: Add separate test runner to test IKEv2 exchanges
This allows proper initialization of the daemon and the helper object.
Tobias Brunner [Thu, 12 May 2016 15:03:44 +0000 (17:03 +0200)]
unit-tests: Add helper class/object to test IKE exchanges
Tobias Brunner [Thu, 12 May 2016 14:14:03 +0000 (16:14 +0200)]
unit-tests: Add mock kernel_ipsec_t implementation for unit tests
Provides predictable sequential SPIs.
Tobias Brunner [Thu, 12 May 2016 13:33:44 +0000 (15:33 +0200)]
unit-tests: Add mock sender_t implementation for unit testing
This allows to retrieve packets sent by an IKE_SA and pass it to another
IKE_SA directly via process_message().
Tobias Brunner [Thu, 12 May 2016 12:30:54 +0000 (14:30 +0200)]
unit-tests: Defining TESTS_RUNNERS allows to only run specific test runners
Tobias Brunner [Thu, 12 May 2016 11:49:11 +0000 (13:49 +0200)]
unit-tests: Don't unload plugins before calling libcharon_deinit()
libcharon_deinit() already calls all the functions we called manually.
Unloading the plugins will not work if charon->initialize() is called
as charon's static plugin features would already be unloaded before the
destroyed members are accessed in destroy() to flush them.
Tobias Brunner [Fri, 17 Jun 2016 12:56:37 +0000 (14:56 +0200)]
kernel-netlink: Don't set replay window for outbound SAs
It's not necessary and might waste memory. However, if ESN is used we set
the window to 1 as the kernel rejects the attribute otherwise.