33 hours agoandroid: New release after improving connectivity/scheduling master
Tobias Brunner [Tue, 2 Jun 2020 12:55:58 +0000 (14:55 +0200)] 
android: New release after improving connectivity/scheduling

34 hours agotravis: Add build of the Android app
Tobias Brunner [Thu, 14 May 2020 16:14:59 +0000 (18:14 +0200)] 
travis: Add build of the Android app

34 hours agoandroid: Suppress linting error in manifest related to cert import activity
Tobias Brunner [Thu, 14 May 2020 13:55:36 +0000 (15:55 +0200)] 
android: Suppress linting error in manifest related to cert import activity

<data> tags that only specify the mimeType attribute are perfectly fine
according to the docs.

34 hours agoandroid: Ignore some missing quantity lint errors
Tobias Brunner [Thu, 14 May 2020 12:47:26 +0000 (14:47 +0200)] 
android: Ignore some missing quantity lint errors

Once these strings are translated and the quantities are defined, this
attribute can be removed again.

34 hours agoandroid: Mock parseInetAddress() method to fix unit tests
Tobias Brunner [Wed, 13 May 2020 14:02:08 +0000 (16:02 +0200)] 
android: Mock parseInetAddress() method to fix unit tests

The native parseInetAddressBytes() method called by that method is not
available when running the tests.

Not very pretty and there are some warnings because PowerMock does
reflection in some illegal way but it fixes the unit tests and does
not require any new dependencies like Apache Commons or Guava just to
parse IP addresses without DNS lookup.

Fixes: 2ef473be1532 ("android: Use helper to parse IP addresses where appropriate")
Fixes #3443.

34 hours agoMerge branch 'android-scheduler'
Tobias Brunner [Tue, 2 Jun 2020 12:18:42 +0000 (14:18 +0200)] 
Merge branch 'android-scheduler'

Starting with Android 6, the system will aggressively suspend apps when
the device is idle (Doze mode).  With Android 10 on a Pixel 4 this seems
to happen after about 70 minutes.  Then the scheduler thread in our
default scheduler is only woken rarely, combined with our previous use
of the monotonic clock it meant that events were executed with severe
delays and noticing that there was such a delay.  This was particularly
bad in regards to NAT keepalives as it usually meant that the device was
not reachable anymore from the outside.

Some changes here try to improve that situation, e.g. the clock is switched
to CLOCK_REALTIME (Bionic doesn't support CLOCK_BOOTTIME for condvars) so we
can measure the actual difference e.g. since the last outbound message,
other changes try to ensure that connectivity is restored after being asleep
for a while (send DPD instead of keepalive after a long delay, send DPD even
if path to peer stays the same).

However, the most significant change is the replacement of the default
scheduler with one specifically designed for Android.  It schedules
long-term events via AlarmManager, which allows waking up the app even
if the system put it to sleep.  The latter requires adding the app to the
system's battery optimization whitelist, which is requested from the
user automatically if necessary.  With this, NAT keepalives and rekeyings
are now scheduled accurately, with little changes to the battery usage.
If the app is not whitelisted (there is a setting to ignore this), events
are delayed by up to 15 minutes after about 70 minutes, so behind a NAT
the device won't be reachable from the outside afterwards (connectivity
should be restored as soon as the device is woken from deep sleep by the

Fixes #3364.

34 hours agoandroid: Add a preference flag to ignore battery optimizations
Tobias Brunner [Mon, 11 May 2020 13:49:22 +0000 (15:49 +0200)] 
android: Add a preference flag to ignore battery optimizations

This allows users to ignore whether the app is on the device's power
whitelist without a warning.  The flag is currently not set
automatically if the user denies the request.

34 hours agoandroid: Increase lifetimes a bit
Tobias Brunner [Fri, 8 May 2020 12:33:05 +0000 (14:33 +0200)] 
android: Increase lifetimes a bit

This should avoid clashes of soft and hard lifetimes even if the app is
not whitelisted.

34 hours agoandroid: Ask user to add our app to the device's power whitelist
Tobias Brunner [Fri, 8 May 2020 10:17:52 +0000 (12:17 +0200)] 
android: Ask user to add our app to the device's power whitelist

This is necessary so we can actually schedule events accurately in Doze
mode. Otherwise, we'd only get woken in intervals of several minutes (up to
15 according to the docs) after about an hour.

34 hours agoandroid: Use the default scheduler for short-term events
Tobias Brunner [Sat, 2 May 2020 07:20:59 +0000 (09:20 +0200)] 
android: Use the default scheduler for short-term events

Using AlarmManager has quite some overhead, so we use our regular
scheduler for events that are to be executed in the near future.

34 hours agoandroid: Use Android-specific scheduler on Android 6 and later
Tobias Brunner [Fri, 1 May 2020 09:15:38 +0000 (11:15 +0200)] 
android: Use Android-specific scheduler on Android 6 and later

34 hours agoandroid: Add Android-specific implementation of scheduler_t
Tobias Brunner [Thu, 30 Apr 2020 16:55:23 +0000 (18:55 +0200)] 
android: Add Android-specific implementation of scheduler_t

This uses AlarmManager to schedule events in a way that ensures the app
is woken up (requires whitelisting when in Doze mode to be woken up at
the exact time, otherwise there are delays of up to 15 minutes).

34 hours agoscheduler: Use timercmp(3) instead of a custom function
Tobias Brunner [Fri, 27 Mar 2020 14:34:32 +0000 (15:34 +0100)] 
scheduler: Use timercmp(3) instead of a custom function

34 hours agoike: Only track actually sent retransmits as outbound packets
Tobias Brunner [Thu, 30 Apr 2020 15:42:07 +0000 (17:42 +0200)] 
ike: Only track actually sent retransmits as outbound packets

Retransmission jobs for old requests for which we already received a
response previously left the impression that messages were sent more
recently than was actually the case.

task_manager_t always defined INVALID_STATE as possible return value if
no retransmit was sent, this just was never actually returned.

I guess we could further differentiate between actual invalid states
(e.g. if we already received the response) and when we don't send a
retransmit for other reasons e.g. because the IKE_SA became stale.

34 hours agoandroid: Change how initial log handler is registered
Tobias Brunner [Tue, 31 Mar 2020 12:56:38 +0000 (14:56 +0200)] 
android: Change how initial log handler is registered

Previously, if the two utility functions were called while the VPN
connection was established (i.e. charon was initialized) the logger for
libstrongswan would get reset to the initial log handler.  So certain
log messages would not get logged to the log file after the TUN device
was created (one of the helpers is used to convert IPs there).

34 hours agoandroid: Check the current path using DPD after a roaming event
Tobias Brunner [Thu, 19 Mar 2020 15:08:07 +0000 (16:08 +0100)] 
android: Check the current path using DPD after a roaming event

A new NAT mapping might be created even if the IP stays the same.  Due to
the DPD fallback with NAT keep-alives this might only be necessary in
corner cases, if at all.

34 hours agoike: Optionally use DPD to check if the current path still works
Tobias Brunner [Thu, 19 Mar 2020 15:04:01 +0000 (16:04 +0100)] 
ike: Optionally use DPD to check if the current path still works

We could maybe check the duration of the last stale condition or when
the last packet was sent as filter to avoid unnecessary updates.

34 hours agoandroid: Enable switch from NAT interval to DPDs after 20 seconds
Tobias Brunner [Thu, 19 Mar 2020 12:48:31 +0000 (13:48 +0100)] 
android: Enable switch from NAT interval to DPDs after 20 seconds

34 hours agoike: Add an option to trigger a DPD instead of a NAT keepalive
Tobias Brunner [Thu, 19 Mar 2020 12:39:48 +0000 (13:39 +0100)] 
ike: Add an option to trigger a DPD instead of a NAT keepalive

This is useful on Android where the app might not be able to send
keep-alives if the device is asleep for a while.  If the NAT mapping
has been deleted in the mean time, the NAT-D payloads allow detecting
this and connectivity can be restored by doing a MOBIKE update or
recreating the SA if the peer already deleted it because the client
wasn't reachable.

34 hours agoandroid: Switch to CLOCK_REALTIME on Android
Tobias Brunner [Thu, 19 Mar 2020 13:22:56 +0000 (14:22 +0100)] 
android: Switch to CLOCK_REALTIME on Android

This allows measuring the delay between events more accurately if a
device is often suspended.

While CLOCK_BOOTTIME would be preferable, Android's bionic C library
does not support it for condvars.

34 hours agotime: Allow using different clocks
Tobias Brunner [Thu, 19 Mar 2020 13:19:22 +0000 (14:19 +0100)] 
time: Allow using different clocks

On some systems it might be preferable to use e.g. CLOCK_BOOTTIME
instead of CLOCK_MONOTONIC, which is also not affected by time
adjustments but includes times when the system was suspended.

34 hours agomutex: Don't use ...timedwait_monotonic() if clock is set via attribute
Tobias Brunner [Wed, 1 Apr 2020 08:17:27 +0000 (10:17 +0200)] 
mutex: Don't use ...timedwait_monotonic() if clock is set via attribute

This allows using clocks other than CLOCK_MONOTONIC.

34 hours agoike: Track NAT-keepalives as outbound packets
Tobias Brunner [Thu, 19 Mar 2020 10:25:37 +0000 (11:25 +0100)] 
ike: Track NAT-keepalives as outbound packets

34 hours agoandroid: Fix app icon on Android versions < 5.0
Tobias Brunner [Wed, 15 Jan 2020 13:12:07 +0000 (14:12 +0100)] 
android: Fix app icon on Android versions < 5.0

XML resources are apparently not supported there.  Moving the icon to
the mipmap folders should fix that.  Aliases are defined for the icons on
Android < 8.0.

34 hours agoandroid: Update Gradle plugin
Tobias Brunner [Wed, 15 Jan 2020 12:58:47 +0000 (13:58 +0100)] 
android: Update Gradle plugin

34 hours agoandroid: Again change how data source is handled in TileService
Tobias Brunner [Mon, 21 Oct 2019 13:12:05 +0000 (15:12 +0200)] 
android: Again change how data source is handled in TileService

Evidently, onClick() may be called either before onStartListening() or
after onStopListening() has been called, which causes a crash when
trying to load a VpnProfile via mDataSource.

This partially reverts 3716af079e21 ("android: Avoid crash related to
TileService on Huawei devices").

8 days agotravis: Bump tpm2-tss to 2.4.1
Tobias Brunner [Mon, 25 May 2020 12:29:44 +0000 (14:29 +0200)] 
travis: Bump tpm2-tss to 2.4.1

Manually built dependencies are now built in a separate step after
packages have been installed as they might depend themselves on some
packages (e.g. tpm2-tss, which now requires libjson-c).

9 days agocharon-nm: Allow configurable remote traffic selectors
Thomas [Sun, 24 May 2020 11:54:31 +0000 (13:54 +0200)] 
charon-nm: Allow configurable remote traffic selectors

This change allows to customize the previously hard-coded remote traffic

This does not actually write the newly added "remote-ts" configuration option
into NetworkManager's configuration file, but will use an existing value.
Exposing the config setting in the GUI could be done later if this is a
desired change.

Use case:  remote firewall appliance wrongly accepts the `` TS but
does not actually route external traffic, leaving the user with a partially
working internet connection.

Closes strongswan/strongswan#173.

2 weeks agoikev2: Return to the original host if connection fails after redirection
Tobias Brunner [Tue, 19 May 2020 08:07:18 +0000 (10:07 +0200)] 
ikev2: Return to the original host if connection fails after redirection

If we fail connecting to the host we got redirected to, we should restart
with the original host where we might get redirected to a different host.

We must not reset this when retrying due to INVALID_KE_PAYLOAD or COOKIE
notifies.  Since we keep the initiator SPI in those cases, we use that
flag as indicator.

Since we don't store the original remote_host value, we can't restore
that.  So there is a potential conflict with MIPv6.

Closes strongswan/strongswan#171.

2 weeks agonm: Version bump to 1.5.2
Tobias Brunner [Tue, 19 May 2020 14:14:49 +0000 (16:14 +0200)] 
nm: Version bump to 1.5.2

2 weeks agonm: Move server port to options tab and position tabs to the left
Tobias Brunner [Mon, 18 May 2020 14:38:51 +0000 (16:38 +0200)] 
nm: Move server port to options tab and position tabs to the left

Also shortened the title of the proposal tab.  This saves some additional
screen space.

Fixes #3448.

2 weeks agonm: Use tabs for options/proposals to save screen space
Tobias Brunner [Mon, 18 May 2020 09:26:08 +0000 (11:26 +0200)] 
nm: Use tabs for options/proposals to save screen space

The height of the dialog increased due to the recently added additional
fields for certificate selection and identities.  On some screens the
fields to configure custom proposals were not visible anymore.
Together with less spacing on the top level GtkBox this change reduces
the height by about 80 pixels.

Fixes #3448.

3 weeks agonm: Migrate appdata to metainfo
Tobias Brunner [Mon, 11 May 2020 07:48:27 +0000 (09:48 +0200)] 
nm: Migrate appdata to metainfo

The path '/usr/share/appdata' is deprecated as is the .appdata.xml
extension, files should be in installed in '/usr/share/metainfo' with
a .metainfo.xml extension.

According to the docs, the metainfo path should be well supported even
by older distros like Ubuntu 16.04.

Reference: 2.1.2. Filesystem locations

3 weeks agonm: Version bump to 1.5.1
Tobias Brunner [Fri, 8 May 2020 16:09:32 +0000 (18:09 +0200)] 
nm: Version bump to 1.5.1

3 weeks agocharon-nm: Clear secrets when disconnecting
Tobias Brunner [Fri, 8 May 2020 08:33:55 +0000 (10:33 +0200)] 
charon-nm: Clear secrets when disconnecting

The need_secrets() method is called before connect() (where we clear the
previous secrets too), so e.g. a password-protected private could be
decrypted with the cached password from earlier but if the password was not
stored with the connection, it would later fail as no password was requested
from the user that could be passed to connect().

References #3428.

3 weeks agonm: Fix password entry for private keys and allow saving it
Tobias Brunner [Tue, 28 Apr 2020 17:09:15 +0000 (19:09 +0200)] 
nm: Fix password entry for private keys and allow saving it

On newer desktops the auth dialog is called with --external-ui-mode and
it seems that the password flag has to be set, otherwise the password is
not stored temporarily in the profile and passed to charon-nm (not sure
how this works exactly as need_secrets() is called multiple times even
after the password was already entered, only before doing so the last
time is the password available in that callback, but only if the flag
was set).  This now also allows storing the password for the private key
with the profile.

Fixes #3428.

3 weeks agoike: Properly support high number of retransmission tries
Tobias Brunner [Thu, 2 Apr 2020 13:48:31 +0000 (15:48 +0200)] 
ike: Properly support high number of retransmission tries

Due to the exponential backoff a high number of retransmits only
makes sense if retransmit_limit is set.  However, even with that there
was a problem.

We first calculated the timeout for the next retransmit and only then
compared that to the configured limit.  Depending on the configured
base and timeout the calculation overflowed the range of uint32_t after
a relatively low number of retransmits (with the default values after 23)
causing the timeout to first get lower (on a high level) before constantly
resulting in 0 (with the default settings after 60 retransmits).

Since that's obviously lower than any configured limit, all remaining
retransmits were then sent without any delay, causing a lot of concurrent
messages if the number of retransmits was high.

This change determines the maximum number of retransmits until an
overflow occurs based on the configuration and defaults to UINT32_MAX
if that value is exceeded.  Note that since the timeout is in milliseconds
UINT32_MAX equals nearly 50 days.

The calculation in task_manager_total_retransmit_timeout() uses a double
variable and the result is in seconds so the maximum number would be higher
there (with the default settings 1205).  However, we want its result to
be based on the actual IKE retransmission behavior.

3 weeks agoike-auth: Add option to use EAP-only authentication without notify
Tobias Brunner [Tue, 7 Apr 2020 16:49:00 +0000 (18:49 +0200)] 
ike-auth: Add option to use EAP-only authentication without notify

Some peers apparently don't send the notify and still expect to
authenticate with EAP-only authentication.  This option allows forcing
the configured use of EAP-only authentication in that scenario.

3 weeks agochild-create: Properly handle DH group during migration when reestablishing
Tobias Brunner [Wed, 1 Apr 2020 07:48:56 +0000 (09:48 +0200)] 
child-create: Properly handle DH group during migration when reestablishing

If such a task was active while reestablishing it will get queued on the
new IKE_SA.  If the DH group is already set, the DH groups won't be
stripped from the proposals and a KE payload will be sent, which is invalid
during IKE_AUTH.  We don't want to reset the group if the task is part of a
child-rekey task.

3 weeks agoikev1: Use actual local identity as initiator or aggressive mode responder
Tobias Brunner [Thu, 9 Apr 2020 08:14:42 +0000 (10:14 +0200)] 
ikev1: Use actual local identity as initiator or aggressive mode responder

If none is configured, there is a fallback to the IP address, which is
not stored on the static auth config, but is set on the IKE_SA.

Fixes #3394.

3 weeks agoikev1: Store fallback identity (IP address) on IKE_SA's auth-cfg
Tobias Brunner [Tue, 7 Apr 2020 14:59:28 +0000 (16:59 +0200)] 
ikev1: Store fallback identity (IP address) on IKE_SA's auth-cfg

The other auth-cfg object is shared via peer-cfg, so we must not
modify it.  It's only stored to simplify memory management.

Fixes #3394.

3 weeks agolookip: Use line buffering for stdout
Tobias Brunner [Wed, 8 Apr 2020 14:39:28 +0000 (16:39 +0200)] 
lookip: Use line buffering for stdout

Otherwise, the output is buffered when e.g. piping the output to another
command (or file).  And it avoids having to call fflush() in the
interactive mode.

Fixes #3404.

3 weeks agotravis: Bump wolfSSL to 4.4.0
Tobias Brunner [Thu, 23 Apr 2020 06:58:41 +0000 (08:58 +0200)] 
travis: Bump wolfSSL to 4.4.0

SHA-3 is only automatically enabled on x86/x64.  The tests are disabled
because we don't need them and they currently cause a compile warning/error
when built with clang on x64 (sizeof() on a pointer to an array).  If the
examples are enabled, another test suite is built, which includes the
disabled crypto tests.

3 weeks agowolfssl: Add support for Ed448
Tobias Brunner [Thu, 23 Apr 2020 08:39:55 +0000 (10:39 +0200)] 
wolfssl: Add support for Ed448

3 weeks agowolfssl: Add support for x448 Diffie-Hellman
Tobias Brunner [Thu, 23 Apr 2020 08:26:33 +0000 (10:26 +0200)] 
wolfssl: Add support for x448 Diffie-Hellman

3 weeks agofile-logger: Set owner/group of log file
Tobias Brunner [Tue, 14 Apr 2020 08:31:49 +0000 (10:31 +0200)] 
file-logger: Set owner/group of log file

The file is usually opened/created by root, however, if user/group IDs
are configured and the configuration is reloaded, the file will be reopened
as configured user.  Like with UNIX sockets we only attempt to change
the user if we have CAP_CHOWN allowing a start as regular user.

We don't have chown() on Windows, so check for it.

3 weeks agoxfrmi: Only build if libcharon is built
Tobias Brunner [Tue, 14 Apr 2020 08:44:19 +0000 (10:44 +0200)] 
xfrmi: Only build if libcharon is built

The kernel-netlink plugin is only built if libcharon is.

Closes strongswan/strongswan#167.

3 weeks agopkcs11: Optionally hash data for PKCS#1 v1.5 RSA signatures in software
Tobias Brunner [Mon, 4 May 2020 07:45:39 +0000 (09:45 +0200)] 
pkcs11: Optionally hash data for PKCS#1 v1.5 RSA signatures in software

If cards/libraries don't support signature mechanisms with hashing, we fall
back to do it ourselves in software and pass the PKCS#1 digestInfo ASN.1
structure to sign via CKM_RSA_PKCS mechanism.

Closes strongswan/strongswan#168.

4 weeks agoscripts: Initialize libstrongswan in id2sql to fix a crash
Tobias Brunner [Mon, 4 May 2020 14:56:47 +0000 (16:56 +0200)] 
scripts: Initialize libstrongswan in id2sql to fix a crash

Since 770f4ccee12d ("identification: Optionally match RDNs in any order
and accept missing RDNs") the DN parser requires lib->settings.

7 weeks agovici: Allow maximum vici message size configuration via compile option
Thomas Egerer [Tue, 7 Apr 2020 18:35:57 +0000 (20:35 +0200)] 
vici: Allow maximum vici message size configuration via compile option

Signed-off-by: Thomas Egerer <>
8 weeks agoUse Botan 2.14.0 for tests
Tobias Brunner [Tue, 7 Apr 2020 08:07:30 +0000 (10:07 +0200)] 
Use Botan 2.14.0 for tests

Requires at least GCC 5.0 to build with `--amalgamation`, so it's
disabled for our Ubuntu 16.04 build.

2 months agoVersion bump to 5.8.4 5.8.4
Andreas Steffen [Sun, 29 Mar 2020 10:49:13 +0000 (12:49 +0200)] 
Version bump to 5.8.4

2 months agoopenssl: Allow squeezing multiple times from SHAKE128/256 XOFs
Tobias Brunner [Thu, 26 Mar 2020 12:52:47 +0000 (13:52 +0100)] 
openssl: Allow squeezing multiple times from SHAKE128/256 XOFs

OpenSSL currently doesn't support squeezing bytes out of an XOF multiple
times.  Unfortunately, EVP_DigestFinalXOF() completely resets the context
and later calls not simply fail, they cause a null-pointer dereference in
libcrypto.  This fixes the crash at the cost of repeating initializing
the whole state and allocating too much data for subsequent calls.

There is an open issue and PR that might add a function that allows
squeezing more data from an XOF in a future version of OpenSSL.

2 months agocharon-nm: Allow using fixed source ports
Tobias Brunner [Thu, 26 Mar 2020 07:55:36 +0000 (08:55 +0100)] 
charon-nm: Allow using fixed source ports

This could be useful in cases a client behind a NAT has to be made reachable
via port forwarding.

Closes strongswan/strongswan#166.

2 months agosettings: Use strtoul(3) for settings to int conversion
Thomas Egerer [Wed, 25 Mar 2020 17:01:37 +0000 (18:01 +0100)] 
settings: Use strtoul(3) for settings to int conversion

strtol(3) accepts values in the range of [LONG_MIN;LONG_MAX].  Based
on the architecture (32 or 64 bits), these values expand to either
0x8000000000000000/0x7fffffffffffffff for 64-bit builds, or
0x80000000/0x7fffffff for 32-bit builds.

The behavior when retrieving non-default values for charon.spi_min or
charon.spi_max, for example, depends on the architecture of the target
platform.  While 0xC000001/0xCFFFFFFE work fine on a 64-bit build, on a
32-bit build, due to the use of strtol(3), an ERANGE causes get_int()
to return the default values.

By using strtoul(3) the default is only returned if the input value
exceeds 32 or 64 bits, based on the platform.  Negative values are still
parsed correctly.

Signed-off-by: Thomas Egerer <>
2 months agoquick-mode: Make sure we have a proposal before determining lifetimes
Tobias Brunner [Thu, 26 Mar 2020 07:41:00 +0000 (08:41 +0100)] 
quick-mode: Make sure we have a proposal before determining lifetimes

Fixes: e0dd36c9c730 ("ikev1: Get and set the lifetimes of the selected proposal/transform")

2 months agounit-tests: Update expired certificates for TLS tests
Tobias Brunner [Wed, 25 Mar 2020 14:31:07 +0000 (15:31 +0100)] 
unit-tests: Update expired certificates for TLS tests

2 months agonm: Version bump to 1.5.0
Tobias Brunner [Wed, 25 Mar 2020 09:14:46 +0000 (10:14 +0100)] 
nm: Version bump to 1.5.0

2 months agoVersion bump to 5.8.3 5.8.3
Andreas Steffen [Tue, 24 Mar 2020 15:01:04 +0000 (16:01 +0100)] 
Version bump to 5.8.3

2 months agocharon-nm: Correctly set remote auth class for PSK authentication
Tobias Brunner [Fri, 20 Mar 2020 14:53:37 +0000 (15:53 +0100)] 
charon-nm: Correctly set remote auth class for PSK authentication

Fixes: bc3eda99bac0 ("charon-nm: Add support for EAP-TLS")

2 months agoVersion bump to 5.8.3rc1 5.8.3rc1
Andreas Steffen [Thu, 19 Mar 2020 07:43:10 +0000 (08:43 +0100)] 
Version bump to 5.8.3rc1

2 months agoNEWS: Add news for 5.8.3
Tobias Brunner [Thu, 12 Mar 2020 18:32:43 +0000 (19:32 +0100)] 
NEWS: Add news for 5.8.3

2 months agoopenssl: Add support for SHAKE128/256
Tobias Brunner [Tue, 10 Mar 2020 11:16:26 +0000 (12:16 +0100)] 
openssl: Add support for SHAKE128/256

2 months agoopenssl: Add support for SHA-3
Tobias Brunner [Tue, 10 Mar 2020 10:22:12 +0000 (11:22 +0100)] 
openssl: Add support for SHA-3

2 months agoMerge branch 'throw-type-routes'
Tobias Brunner [Tue, 10 Mar 2020 11:49:53 +0000 (12:49 +0100)] 
Merge branch 'throw-type-routes'

Implements simpler routes for passthrough policies on Linux, which
basically act as fallbacks on routes in other routing tables.  This way
they require less information (e.g. no interface or source IP) and can
be installed earlier and are not affected by updates.

Closes strongswan/strongswan#165.
Fixes #3118.

2 months agokernel-netlink: Extract shared route handling code in net/ipsec
Tobias Brunner [Mon, 9 Mar 2020 15:41:28 +0000 (16:41 +0100)] 
kernel-netlink: Extract shared route handling code in net/ipsec

2 months agokernel-netlink: Don't require an interface name for passthrough policies
Tobias Brunner [Wed, 26 Feb 2020 15:53:06 +0000 (16:53 +0100)] 
kernel-netlink: Don't require an interface name for passthrough policies

2 months agokernel-netlink: Allow blank source address in routes for passthrough policies
Tobias Brunner [Tue, 25 Feb 2020 15:39:35 +0000 (16:39 +0100)] 
kernel-netlink: Allow blank source address in routes for passthrough policies

2 months agokernel-netlink: Implement passthrough type routes and use them on Linux
Noel Kuntze [Sun, 9 Feb 2020 13:52:32 +0000 (14:52 +0100)] 
kernel-netlink: Implement passthrough type routes and use them on Linux

Enables us to ignore any future kernel features for routes unless
we actually need to consider them for the source IP routes.

Also enables us to actually really skip IPsec processing for those networks
(because even the routes don't touch those packets). It's more what
users expect.

Co-authored-by: Tobias Brunner <>
2 months agokernel-interface: Reallocate previously used reqids
Tobias Brunner [Fri, 13 Dec 2019 15:46:47 +0000 (16:46 +0100)] 
kernel-interface: Reallocate previously used reqids

This is mainly an issue on FreeBSD where the current kernel still only
allows the daemon to use reqids < IPSEC_MANUAL_REQID_MAX (0x3fff = 16383).

Fixes #2315.

2 months agoike: Optionally allow private algorithms for IKE/CHILD_SAs
Thomas Egerer [Thu, 12 Sep 2019 14:58:46 +0000 (16:58 +0200)] 
ike: Optionally allow private algorithms for IKE/CHILD_SAs

Charon refuses to make use of algorithms IDs from the private space
for unknown peer implementations [1]. If you chose to ignore and violate
that section of the RFC since you *know* your peers *must* support those
private IDs, there's no way to disable that behavior.

With this commit a strongswan.conf option is introduced which allows to
deliberately ignore parts of section 3.12 from the standard.


Signed-off-by: Thomas Egerer <>
2 months agoopenssl: Don't check signature if issuer doesn't match always
Tobias Brunner [Wed, 4 Mar 2020 18:26:55 +0000 (19:26 +0100)] 
openssl: Don't check signature if issuer doesn't match always

Doing this for the self-signed check also (i.e. if this and issuer are
the same) is particularly useful if the issuer uses a different key type.
Otherwise, we'd try to verify the signature with an incompatible key
that would result in a log message.

Fixes #3357.

2 months agonm: Update NEWS for next release
Tobias Brunner [Tue, 25 Feb 2020 10:38:43 +0000 (11:38 +0100)] 
nm: Update NEWS for next release

2 months agoMerge branch 'ikev1-transform-nr'
Tobias Brunner [Fri, 6 Mar 2020 09:47:34 +0000 (10:47 +0100)] 
Merge branch 'ikev1-transform-nr'

With these changes we return the lifetimes of the actually selected
transform back to the client, which is an issue if the peer uses
different lifetimes for different proposals.  We now also return the
correct transform and proposal IDs.

Fixes #3329.

2 months agoikev1: Get and set the lifetimes of the selected proposal/transform
Tobias Brunner [Thu, 6 Feb 2020 14:52:06 +0000 (15:52 +0100)] 
ikev1: Get and set the lifetimes of the selected proposal/transform

Previously, we simply used the lifetimes of the first
proposal/transform, which is not correct if the initiator uses different
lifetimes in its proposals/transforms.

2 months agoproposal-substructure: Start numbering IKEv1 proposals with 1
Tobias Brunner [Fri, 7 Feb 2020 08:45:56 +0000 (09:45 +0100)] 
proposal-substructure: Start numbering IKEv1 proposals with 1

2 months agoproposal-substructure: Encode transform number of selected IKEv1 proposal
Tobias Brunner [Thu, 6 Feb 2020 14:46:27 +0000 (15:46 +0100)] 
proposal-substructure: Encode transform number of selected IKEv1 proposal

2 months agoproposal-substructure: Store transform number for IKEv1 proposals
Tobias Brunner [Thu, 6 Feb 2020 14:46:05 +0000 (15:46 +0100)] 
proposal-substructure: Store transform number for IKEv1 proposals

2 months agoproposal: Add IKEv1 transform number on which a proposal is based
Tobias Brunner [Thu, 6 Feb 2020 14:39:45 +0000 (15:39 +0100)] 
proposal: Add IKEv1 transform number on which a proposal is based

2 months agolibtls: Remove unused variable in TLS socket implementation
Tobias Brunner [Mon, 2 Mar 2020 15:37:36 +0000 (16:37 +0100)] 
libtls: Remove unused variable in TLS socket implementation

Not used anymore since c43e8fdec400 ("Block TLS read when sending data,
but have to wait for the handshake data first").

2 months agoVersion bump to 5.8.3dr1
Andreas Steffen [Wed, 4 Mar 2020 21:24:54 +0000 (22:24 +0100)] 
Version bump to 5.8.3dr1

3 months agoscript: Fix upper bounds
Tobias Brunner [Wed, 4 Mar 2020 16:07:32 +0000 (17:07 +0100)] 
script: Fix upper bounds

^ is the XOR operator.

3 months agopubkey-speed: Add sanity check for the number of rounds
Tobias Brunner [Mon, 2 Mar 2020 16:37:54 +0000 (17:37 +0100)] 
pubkey-speed: Add sanity check for the number of rounds

The allocated buffer for the signatures is based on this, which LGTM
doesn't like.

3 months agocrypt-burn: Add sanity check for buffer length
Tobias Brunner [Mon, 2 Mar 2020 16:36:33 +0000 (17:36 +0100)] 
crypt-burn: Add sanity check for buffer length

This value is passed to chunk_alloc(), which LGTM complains about.

3 months agoconfigure: Make sure Python is available for static builds
Tobias Brunner [Fri, 28 Feb 2020 09:39:15 +0000 (10:39 +0100)] 
configure: Make sure Python is available for static builds

We need Python to create files that reference the plugin constructors.
Without it, empty files are created and plugins can't be loaded.

Fixes #3349.

3 months agotravis: Enable caching for sonarcloud scan
Tobias Brunner [Fri, 21 Feb 2020 14:23:22 +0000 (15:23 +0100)] 
travis: Enable caching for sonarcloud scan

3 months agoike: Don't reestablish IKE_SAs for which a deletion is queued
Tobias Brunner [Thu, 13 Feb 2020 09:48:49 +0000 (10:48 +0100)] 
ike: Don't reestablish IKE_SAs for which a deletion is queued

If an IKE_SA is terminated while a task is active, the delete task is
simply queued (unless the deletion is forced).  If the active task times
out before any optional timeout associated with the termination hits, the
IKE_SA previously was reestablished without considering the termination

Fixes #3335.

3 months agoRemove obsolete packages directory
Tobias Brunner [Wed, 19 Feb 2020 16:38:57 +0000 (17:38 +0100)] 
Remove obsolete packages directory

These Debian package sources have not been updated for years and are
severely out-of-date.  Since the Debian packages are properly
maintained nowadays, we don't have to provide our own package sources
to serve as examples.

References #3344.

3 months agotravis: Bump tpm2-tss to 2.3.3
Tobias Brunner [Wed, 19 Feb 2020 09:52:57 +0000 (10:52 +0100)] 
travis: Bump tpm2-tss to 2.3.3

3 months agotravis: Remove deprecated `sudo` option, set default OS
Tobias Brunner [Wed, 19 Feb 2020 10:50:26 +0000 (11:50 +0100)] 
travis: Remove deprecated `sudo` option, set default OS

Also replaces `matrix` with the current official name `jobs`.

3 months agocharon-nm: Use better default directory for D-Bus policy file
Tobias Brunner [Thu, 13 Feb 2020 16:53:17 +0000 (17:53 +0100)] 
charon-nm: Use better default directory for D-Bus policy file

Also makes it configurable via configure script.  Depending on `$datadir` is
not ideal as package maintainers might set that to a custom value.  Depending
on `$datarootdir` might have been better, the default if pkg-config fails is
now based on that.

References #3339.

3 months agotravis: Add build tests for NM plugin
Tobias Brunner [Wed, 12 Feb 2020 14:41:36 +0000 (15:41 +0100)] 
travis: Add build tests for NM plugin

3 months agonm: Ignore generated POT file
Tobias Brunner [Wed, 12 Feb 2020 14:57:35 +0000 (15:57 +0100)] 
nm: Ignore generated POT file

3 months agonm: Only check PSK length if one is actually stored
Tobias Brunner [Wed, 12 Feb 2020 13:04:45 +0000 (14:04 +0100)] 
nm: Only check PSK length if one is actually stored

3 months agoMerge commit 'nm-client-id'
Tobias Brunner [Fri, 14 Feb 2020 13:47:34 +0000 (14:47 +0100)] 
Merge commit 'nm-client-id'

Makes the client's IKE identity configurable in the NM GUI.  For PSK
authentication the identity is now configured via that new field
and not the username anymore (old configs still work and are migrated
when edited).  The client identity now also defaults to the IP address
if not configured when using EAP/PSK.

Fixes #2581.

3 months agonm: Make local identity configurable
Tobias Brunner [Wed, 12 Feb 2020 10:39:07 +0000 (11:39 +0100)] 
nm: Make local identity configurable

For PSK authentication we now use the local identity and not the username

3 months agocharon-nm: Add support for custom local IKE identities
Tobias Brunner [Wed, 12 Feb 2020 10:35:53 +0000 (11:35 +0100)] 
charon-nm: Add support for custom local IKE identities

3 months agoMerge branch 'nm-reauth'
Tobias Brunner [Fri, 14 Feb 2020 12:58:50 +0000 (13:58 +0100)] 
Merge branch 'nm-reauth'

With these changes, the NM service should be able to handle
reauthentication (and redirection) by switching to the new IKE_SA and
not considering the old SA going down an error.

Fixes #852.

3 months agocharon-nm: Keep listener registered even on failures
Tobias Brunner [Fri, 7 Feb 2020 14:22:31 +0000 (15:22 +0100)] 
charon-nm: Keep listener registered even on failures

NM doesn't seem to terminate the daemon on failures, so we might not get
further events for later retries.

3 months agocharon-nm: Support reauthentication and redirection
Tobias Brunner [Thu, 6 Feb 2020 16:36:46 +0000 (17:36 +0100)] 
charon-nm: Support reauthentication and redirection