strongswan.git
4 years agochild-sa-manager: Add a global manager storing CHILD_SA relations
Martin Willi [Thu, 23 Oct 2014 13:42:21 +0000 (15:42 +0200)]
child-sa-manager: Add a global manager storing CHILD_SA relations

To quickly check out IKE_SAs and find associated CHILD_SAs, the
child_sa_manager stores relations between CHILD_SAs and IKE_SAs. It provides
CHILD_SA specific IKE_SA checkout functions wrapping the ike_sa_manager.

4 years agochild-sa: Replace reqid based marks by "unique" marks
Martin Willi [Thu, 13 Nov 2014 14:26:10 +0000 (15:26 +0100)]
child-sa: Replace reqid based marks by "unique" marks

As we now use the same reqid for multiple CHILD_SAs with the same selectors,
having marks based on the reqid makes not that much sense anymore. Instead we
use unique marks that use a custom identifier. This identifier is reused during
rekeying, keeping the marks constant for any rule relying on it (for example
installed by updown).

This also simplifies handling of reqid allocation, as we do not have to query
the marks that is not yet assigned for an unknown reqid.

4 years agochild-sa: Introduce a unique CHILD_SA identifier
Martin Willi [Thu, 23 Oct 2014 09:27:25 +0000 (11:27 +0200)]
child-sa: Introduce a unique CHILD_SA identifier

As the reqid is not that unique even among multiple IKE_SAs anymore, we need
an identifier to uniquely identify a specific CHILD_SA instance.

4 years agochild-sa: Delegate reqid allocation to the kernel interface
Martin Willi [Tue, 21 Oct 2014 09:36:18 +0000 (11:36 +0200)]
child-sa: Delegate reqid allocation to the kernel interface

4 years agokernel-interface: Add reqid allocation and release functions
Martin Willi [Wed, 12 Nov 2014 16:22:45 +0000 (17:22 +0100)]
kernel-interface: Add reqid allocation and release functions

To reassign reqids where appropriate, we explicitly allocate or confirm them
centrally on the kernel-interface.

Currently the state is stored in the kernel-interface wrapper for all
backends, but we may add appropriate methods to each backend to implement
a custom reqid allocation logic, if required.

4 years agotraffic-selector: Add a hash() method
Martin Willi [Thu, 23 Oct 2014 09:19:03 +0000 (11:19 +0200)]
traffic-selector: Add a hash() method

4 years agochild-sa: Sort traffic selectors after adding CHILD_SA policies
Martin Willi [Thu, 19 Feb 2015 17:03:08 +0000 (18:03 +0100)]
child-sa: Sort traffic selectors after adding CHILD_SA policies

Having traffic selectors sorted properly makes comparing them much simpler.

4 years agounit-tests: Add an initial set of traffic selector unit tests
Martin Willi [Thu, 19 Feb 2015 17:02:25 +0000 (18:02 +0100)]
unit-tests: Add an initial set of traffic selector unit tests

4 years agotraffic-selector: Add a compare function to sort traffic selectors
Martin Willi [Thu, 19 Feb 2015 17:01:38 +0000 (18:01 +0100)]
traffic-selector: Add a compare function to sort traffic selectors

4 years agochild-sa: Remove the obsolete update logic
Martin Willi [Fri, 17 Oct 2014 13:44:06 +0000 (15:44 +0200)]
child-sa: Remove the obsolete update logic

The kernel backend uses an inbound parameter these days, where it makes
no sense to pass the update flag. The kernel backend decides itself how
it handles SA installation based on the inbound flag.

4 years agokernel-interface: Pass full list of traffic selectors to add_sa()
Martin Willi [Wed, 15 Oct 2014 16:03:31 +0000 (18:03 +0200)]
kernel-interface: Pass full list of traffic selectors to add_sa()

While we can handle the first selector only in BEET mode in kernel-netlink,
passing the full list gives the backend more flexibility how to handle this
information.

4 years agolibipsec: Remove unused src/dst_ts parameters from ipsec_sa_mgr_t.add_sa()
Martin Willi [Wed, 15 Oct 2014 16:02:46 +0000 (18:02 +0200)]
libipsec: Remove unused src/dst_ts parameters from ipsec_sa_mgr_t.add_sa()

4 years agokernel-pfkey: Don't update during add_sa(), but delete SPI allocation state
Martin Willi [Fri, 17 Oct 2014 12:31:32 +0000 (14:31 +0200)]
kernel-pfkey: Don't update during add_sa(), but delete SPI allocation state

4 years agokernel-interface: Remove reqid parameter from get_spi/get_cpi() methods
Martin Willi [Wed, 15 Oct 2014 15:22:55 +0000 (17:22 +0200)]
kernel-interface: Remove reqid parameter from get_spi/get_cpi() methods

The reqid is not strictly required, as we set the reqid with the update
call when installing the negotiated SA.

If we don't need a reqid at this stage, we can later allocate the reqid in
the kernel backend once the SA parameters have been fully negotaited. This
allows us to assign the same reqid for the same selectors to avoid conflicts
on backends this is necessary.

4 years agolibipsec: Remove unused reqid parameter from ipsec_sa_mgr_t.get_spi()
Martin Willi [Wed, 15 Oct 2014 15:19:56 +0000 (17:19 +0200)]
libipsec: Remove unused reqid parameter from ipsec_sa_mgr_t.get_spi()

4 years agolibtls: Don't send TLS close notifies in EAP after application succeeds
Martin Willi [Thu, 5 Feb 2015 08:13:57 +0000 (09:13 +0100)]
libtls: Don't send TLS close notifies in EAP after application succeeds

With the introduction of PT-TLS, we started sending TLS close notifies after
the application layer completes (7bbf7aa9). While this makes sense for TCP based
transports, it is not required in EAP methods. In EAP, handshake completion
can be directly signaled using the outer EAP-SUCCESS message. This also saves
one round-trip in the EAP exchange.

Windows 7/8 does not seem to like TLS close notifies at all in EAP, and either
stalls (EAP-TTLS) or disconnects (PEAP).

Fixes #556.

4 years agoha: Perform child rekeying outside of CHILD_SA enumerator
Thomas Egerer [Wed, 4 Feb 2015 11:47:03 +0000 (12:47 +0100)]
ha: Perform child rekeying outside of CHILD_SA enumerator

When rekey_child_sa is called while enumerating the children of an IKE_SA, and
the child to be rekeyed is redundant a QUICK_DELETE task is queued instead of a
QUICK_MODE task. This alters the IKE_SA's list of children (ike_sa_t::child_sas)
invalidating the current element of the child_sa_enumerator. The enumerate
function of linked_list_t will then advance to an element with unpredictable
contents most likely resulting in an segmentation violation. A similar behavior
should be observed when delete_child_sa is called.

This patch creates a list of protocol/spi values while holding the
child_sa_enumerator and performs the rekeying (deletion of redundant) chlidren
after releasing the enumerator.

Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
4 years agomem-pool: Document reassign_online option
Tobias Brunner [Thu, 12 Feb 2015 11:17:48 +0000 (12:17 +0100)]
mem-pool: Document reassign_online option

4 years agoman: Document IKEv2 fragmentation in ipsec.conf(5)
Tobias Brunner [Tue, 10 Feb 2015 17:29:41 +0000 (18:29 +0100)]
man: Document IKEv2 fragmentation in ipsec.conf(5)

4 years agoconfigure: Load SQL backends after crypto plugins
Tobias Brunner [Tue, 10 Feb 2015 15:08:09 +0000 (16:08 +0100)]
configure: Load SQL backends after crypto plugins

If the MySQL client library is linked against OpenSSL the mysql plugin
will cause a segmentation fault when it is unloaded after the openssl
plugin has already been deinitialized.  This is very similar to the issues
with curl (see 44b6a34d438f).

Fixes #814.

4 years agostroke: Double the stroke message string buffer size
Martin Willi [Fri, 6 Feb 2015 15:43:33 +0000 (16:43 +0100)]
stroke: Double the stroke message string buffer size

4 years agostarter: Fail sending stroke message if a string exceeds the buffer size
Martin Willi [Fri, 6 Feb 2015 15:37:09 +0000 (16:37 +0100)]
starter: Fail sending stroke message if a string exceeds the buffer size

Instead of silently setting the string value to NULL, we fail completely in
sending the message to notify the user.

Fixes #844.

4 years agox509: Fix public key reference leak if authority key identifier does not match
Martin Willi [Fri, 6 Feb 2015 12:58:58 +0000 (13:58 +0100)]
x509: Fix public key reference leak if authority key identifier does not match

4 years agovici: Fix ruby gem author email
Martin Willi [Thu, 22 Jan 2015 14:00:45 +0000 (15:00 +0100)]
vici: Fix ruby gem author email

4 years agotrusted_enumerate requires an additional argument
Andreas Steffen [Wed, 21 Jan 2015 22:54:33 +0000 (23:54 +0100)]
trusted_enumerate requires an additional argument

4 years agovici: Fix README example encoding element type values, off by one
Martin Willi [Wed, 21 Jan 2015 08:31:24 +0000 (09:31 +0100)]
vici: Fix README example encoding element type values, off by one

While we fixed the wrong values in the description with d39e04b5, the example
values are still off by one.

Fixes #828.

4 years agolibtls: Check for CHANGE_CIPHER_SPEC type only if upper layer returns NEED_MORE
Martin Willi [Thu, 8 Jan 2015 10:06:45 +0000 (11:06 +0100)]
libtls: Check for CHANGE_CIPHER_SPEC type only if upper layer returns NEED_MORE

A type is returned only if upper layers successfully created a record, that is
returns NEED_MORE. If we do not check for the return value, we might check a
previous record or the uninitialized type variable and falsely reset the
sequence number.

4 years agostarter: Fix mark_out.mask in starter_cmp_conn()
Maks Naumov [Fri, 9 Jan 2015 22:44:36 +0000 (00:44 +0200)]
starter: Fix mark_out.mask in starter_cmp_conn()

4 years ago_updown: Remove obsolete man pages
Tobias Brunner [Mon, 5 Jan 2015 12:44:16 +0000 (13:44 +0100)]
_updown: Remove obsolete man pages

4 years agoUpdated RFC3779 certificates 5.2.2
Andreas Steffen [Sun, 28 Dec 2014 11:53:16 +0000 (12:53 +0100)]
Updated RFC3779 certificates

4 years agoVersion bump to 5.2.2
Andreas Steffen [Fri, 19 Dec 2014 09:03:54 +0000 (10:03 +0100)]
Version bump to 5.2.2

4 years agounit-tests: Adapted to coverity fixes
Andreas Steffen [Thu, 18 Dec 2014 14:51:13 +0000 (15:51 +0100)]
unit-tests: Adapted to coverity fixes

4 years agoFixed bad bit shift and sign extension errors
Andreas Steffen [Wed, 17 Dec 2014 17:16:26 +0000 (18:16 +0100)]
Fixed bad bit shift and sign extension errors

4 years agobliss: Remove unnecessary cast to double
Tobias Brunner [Mon, 15 Dec 2014 17:55:03 +0000 (18:55 +0100)]
bliss: Remove unnecessary cast to double

Coverity is still not happy when the result of an integer division is
assigned to a double (without e.g. casting the result to an int first to
indicate the intent).  The shift should avoid this issue.

4 years agobliss: Log type if unsupported
Tobias Brunner [Mon, 15 Dec 2014 17:54:59 +0000 (18:54 +0100)]
bliss: Log type if unsupported

4 years agobliss: Make sure sampler exists after checking for it earlier
Tobias Brunner [Mon, 15 Dec 2014 17:30:31 +0000 (18:30 +0100)]
bliss: Make sure sampler exists after checking for it earlier

4 years agopts: Do not override status with SUCCESS if length is invalid
Tobias Brunner [Mon, 15 Dec 2014 17:18:40 +0000 (18:18 +0100)]
pts: Do not override status with SUCCESS if length is invalid

4 years agoNEWS: Added info about CVE-2014-9221
Tobias Brunner [Thu, 18 Dec 2014 15:15:03 +0000 (16:15 +0100)]
NEWS: Added info about CVE-2014-9221

4 years agoikev2: Only touch the DH object if we have a matching proposal
Tobias Brunner [Mon, 15 Dec 2014 13:25:04 +0000 (14:25 +0100)]
ikev2: Only touch the DH object if we have a matching proposal

4 years agocrypto: Define MODP_CUSTOM outside of IKE DH range
Tobias Brunner [Mon, 1 Dec 2014 16:21:59 +0000 (17:21 +0100)]
crypto: Define MODP_CUSTOM outside of IKE DH range

Before this fix it was possible to crash charon with an IKE_SA_INIT
message containing a KE payload with DH group MODP_CUSTOM(1025).
Defining MODP_CUSTOM outside of the two byte IKE DH identifier range
prevents it from getting negotiated.

Fixes CVE-2014-9221.

4 years agopki: Document correct output formats for --pkcs12 --export
Tobias Brunner [Fri, 19 Dec 2014 15:30:47 +0000 (16:30 +0100)]
pki: Document correct output formats for --pkcs12 --export

4 years agopki: Properly clean up if output format for --pkcs12 is wrong
Tobias Brunner [Fri, 19 Dec 2014 15:30:10 +0000 (16:30 +0100)]
pki: Properly clean up if output format for --pkcs12 is wrong

4 years agokernel-netlink: Add missing documentation for two options
Tobias Brunner [Fri, 19 Dec 2014 14:36:01 +0000 (15:36 +0100)]
kernel-netlink: Add missing documentation for two options

4 years agoMerge branch 'osx-app'
Martin Willi [Thu, 18 Dec 2014 08:50:50 +0000 (09:50 +0100)]
Merge branch 'osx-app'

Mainline the OS X App providing the graphical user interface for the charon-xpc
privileged helper.

4 years agoosx: Update the README with App related bits
Martin Willi [Tue, 16 Dec 2014 16:14:38 +0000 (17:14 +0100)]
osx: Update the README with App related bits

4 years agoosx: Initial import of the Objective-C App graphical user interface
Martin Willi [Tue, 16 Dec 2014 16:13:44 +0000 (17:13 +0100)]
osx: Initial import of the Objective-C App graphical user interface

4 years agoapple: Redefine some additional clashing Mach types
Martin Willi [Tue, 16 Dec 2014 15:55:29 +0000 (16:55 +0100)]
apple: Redefine some additional clashing Mach types

While they usually are not included in a normal strongSwan build, the XPC
header indirectly defines these Mach types. To build charon-xpc, which uses
both XPC and strongSwan includes, we have to redefine these types.

4 years agokernel-pfroute: If a new interface appears, slightly delay address enumeration
Martin Willi [Fri, 24 Oct 2014 13:21:11 +0000 (15:21 +0200)]
kernel-pfroute: If a new interface appears, slightly delay address enumeration

On OS X 10.10, when installing a virtual IP on a tun device, there is a chance
that a RTM_IFANNOUNCE is sent before the IP is ready on that link when calling
getifaddrs(). As we don't get an RTM_NEWADDR event either, that race lets us
miss the virtual IP install event, failing the add_ip() call.

4 years agocharon-xpc: Add a work-around to trigger IP address add events after boot
Martin Willi [Tue, 16 Dec 2014 15:58:17 +0000 (16:58 +0100)]
charon-xpc: Add a work-around to trigger IP address add events after boot

4 years agomgf1: Use correct Doxygen groups
Tobias Brunner [Mon, 15 Dec 2014 16:20:13 +0000 (17:20 +0100)]
mgf1: Use correct Doxygen groups

4 years agobliss: Fix Doxygen comments
Tobias Brunner [Mon, 15 Dec 2014 16:19:44 +0000 (17:19 +0100)]
bliss: Fix Doxygen comments

4 years agoFixed some typos, courtesy of codespell
Tobias Brunner [Mon, 15 Dec 2014 16:11:14 +0000 (17:11 +0100)]
Fixed some typos, courtesy of codespell

4 years agokernel-pfkey: Fix replay window size on FreeBSD and Mac OS X
Tobias Brunner [Thu, 4 Dec 2014 15:21:45 +0000 (16:21 +0100)]
kernel-pfkey: Fix replay window size on FreeBSD and Mac OS X

The FreeBSD and Mac OS X kernels interpret sadb_sa_replay as the size of the
replay window in bytes.  Linux on the other hand does the same for PF_KEY it
does for XFRM so sadb_sa_replay denotes the number of packets/bits in the
window.  Similarly, the window size on Linux is limited to 32 by the four
byte default bitmap used for IPsec SAs (may only be changed with
XFRMA_REPLAY_ESN_VAL), which is not the case on the other platforms.

4 years agoUpdated BLISS CA certificate in ikev2/rw-ntru-bliss scenario 5.2.2rc1
Andreas Steffen [Fri, 12 Dec 2014 12:55:03 +0000 (13:55 +0100)]
Updated BLISS CA certificate in ikev2/rw-ntru-bliss scenario

4 years agoAlso initialize s_sign
Andreas Steffen [Fri, 12 Dec 2014 12:24:11 +0000 (13:24 +0100)]
Also initialize s_sign

4 years agopem: Handle BER indefinite length encoding as binary ASN.1
Martin Willi [Tue, 9 Dec 2014 13:19:39 +0000 (14:19 +0100)]
pem: Handle BER indefinite length encoding as binary ASN.1

While our ASN.1 parser can't handle BER indefinite length encoding, the OpenSSL
backend can. Some PKCS#12 containers get encoded this way, so we should
support loading such files in the pem plugin.

4 years agopki: Add command to export certificates and keys from PKCS#12 containers
Tobias Brunner [Tue, 9 Dec 2014 11:54:03 +0000 (12:54 +0100)]
pki: Add command to export certificates and keys from PKCS#12 containers

4 years agopki: Reformat PKCS#12 output and add an index for each certificate/key
Tobias Brunner [Tue, 9 Dec 2014 10:40:12 +0000 (11:40 +0100)]
pki: Reformat PKCS#12 output and add an index for each certificate/key

4 years agopki: Add simple PKCS#12 display command
Tobias Brunner [Fri, 5 Dec 2014 09:41:07 +0000 (10:41 +0100)]
pki: Add simple PKCS#12 display command

4 years agopki: Load hmac plugin which is required to decrypt PKCS#12 containers
Tobias Brunner [Fri, 5 Dec 2014 09:39:03 +0000 (10:39 +0100)]
pki: Load hmac plugin which is required to decrypt PKCS#12 containers

4 years agopki: Cache entered secrets in case they are needed more than once
Tobias Brunner [Fri, 5 Dec 2014 09:38:30 +0000 (10:38 +0100)]
pki: Cache entered secrets in case they are needed more than once

4 years agoike: Allow creation of internally used payloads
Tobias Brunner [Fri, 12 Dec 2014 11:39:44 +0000 (12:39 +0100)]
ike: Allow creation of internally used payloads

Since 42e0a317c64b ("ike: Only parse payloads valid for the current IKE
version") payload types are checked before creating objects.  This check
failed for internally used payload types (e.g. proposal substructures),
which have a type >= 256, i.e. outside the IKE payload type range.

4 years agoCache only support fingerprint types
Andreas Steffen [Fri, 12 Dec 2014 12:08:40 +0000 (13:08 +0100)]
Cache only support fingerprint types

4 years agoFix ambiguities and gcc compiler warning
Andreas Steffen [Fri, 12 Dec 2014 11:48:23 +0000 (12:48 +0100)]
Fix ambiguities and gcc compiler warning

4 years agoapple: Use precancelable poll() to wrap accept/recvmsg calls
Martin Willi [Fri, 12 Dec 2014 11:05:24 +0000 (12:05 +0100)]
apple: Use precancelable poll() to wrap accept/recvmsg calls

To make accept/recvmsg cancelable, we wrap them with poll. As poll itself
does not honor pending cancellations when entering the function, we use our
variant that checks for pending cancellation requests before entering poll().

4 years agoVersion bump to 5.2.2rc1
Andreas Steffen [Fri, 12 Dec 2014 11:00:04 +0000 (12:00 +0100)]
Version bump to 5.2.2rc1

4 years agoUpdated BLISS scenario keys and certificates to new format
Andreas Steffen [Fri, 12 Dec 2014 07:25:45 +0000 (08:25 +0100)]
Updated BLISS scenario keys and certificates to new format

4 years agoUse bitspender->get_bytes() method in ntru_trits
Andreas Steffen [Thu, 11 Dec 2014 21:30:29 +0000 (22:30 +0100)]
Use bitspender->get_bytes() method in ntru_trits

4 years agoUse Huffman code in BLISS signature
Andreas Steffen [Thu, 11 Dec 2014 16:11:17 +0000 (17:11 +0100)]
Use Huffman code in BLISS signature

4 years agoInclude design parameters in generated Huffman code files
Andreas Steffen [Thu, 11 Dec 2014 11:10:23 +0000 (12:10 +0100)]
Include design parameters in generated Huffman code files

4 years agobliss: Fix monolithic build
Tobias Brunner [Fri, 5 Dec 2014 15:36:13 +0000 (16:36 +0100)]
bliss: Fix monolithic build

This requires moving test files so that the Makefile for the tests can be
included after building libstrongswan, which requires the plugin when
building monolithically.  Due to this a static helper library is required
as directly referring to object files (or source files) is not possible.

It's also necessary to avoid any link-time dependency on libstrongswan in
bliss_huffman, to avoid circular dependencies (bliss_huffman -> libstrongswan
-> bliss -> bliss_huffman).

4 years agobliss: Fix compilation warning with certain GCC versions
Tobias Brunner [Fri, 5 Dec 2014 15:37:10 +0000 (16:37 +0100)]
bliss: Fix compilation warning with certain GCC versions

Theoretically, n could be zero and these variables are then used
uninitialized.  Older GCC versions warn about this and on Travis where we
compile with -Werror this causes the tests to fail.

4 years agoswanctl: Fail loading a connection if loading a cacert constraint fails
Martin Willi [Fri, 12 Dec 2014 09:08:17 +0000 (10:08 +0100)]
swanctl: Fail loading a connection if loading a cacert constraint fails

4 years agovici: Use silent builder destroy function in vici_free_req()
Martin Willi [Fri, 12 Dec 2014 09:07:31 +0000 (10:07 +0100)]
vici: Use silent builder destroy function in vici_free_req()

4 years agovici: Add a destroy method to builder, allowing cancellation without error
Martin Willi [Fri, 12 Dec 2014 09:06:39 +0000 (10:06 +0100)]
vici: Add a destroy method to builder, allowing cancellation without error

When cancelling a builder, finalize throws an error which we might prefer
to avoid.

4 years agoeap-radius: Use the single-server legacy server options as fallback
Martin Willi [Thu, 11 Dec 2014 11:29:53 +0000 (12:29 +0100)]
eap-radius: Use the single-server legacy server options as fallback

4 years agoPack private key arrays
Andreas Steffen [Wed, 10 Dec 2014 21:45:13 +0000 (22:45 +0100)]
Pack private key arrays

4 years agodumm: Fix -Wformat warning in ruby extension
Martin Willi [Wed, 10 Dec 2014 13:26:14 +0000 (14:26 +0100)]
dumm: Fix -Wformat warning in ruby extension

In recent ruby versions, extensions get built with -Wformat. As we use custom
printf specifiers, that does not work for us. As there does not seem to be a
reliable way to override -Wformat, we use a variable for the format string,
which prevents gcc from doing the -Wformat check in that particular situation.

4 years agoAutomatic generation of optimized Huffman codes
Andreas Steffen [Tue, 9 Dec 2014 06:48:51 +0000 (07:48 +0100)]
Automatic generation of optimized Huffman codes

4 years agounit-tests: added bliss_sampler test
Andreas Steffen [Tue, 9 Dec 2014 06:44:36 +0000 (07:44 +0100)]
unit-tests: added bliss_sampler test

4 years agoExpanded bliss_bitpacker to 32 bits
Andreas Steffen [Tue, 9 Dec 2014 06:31:59 +0000 (07:31 +0100)]
Expanded bliss_bitpacker to 32 bits

4 years agoNEWS: Add note about AH algorithm mapping
Tobias Brunner [Fri, 5 Dec 2014 14:06:31 +0000 (15:06 +0100)]
NEWS: Add note about AH algorithm mapping

4 years agoikev1: Use same map for AH and ESP authentication algorithms
Tobias Brunner [Mon, 24 Nov 2014 16:28:27 +0000 (17:28 +0100)]
ikev1: Use same map for AH and ESP authentication algorithms

The transform identifier used in AH transforms is not the same as the
authentication algorithm identifier used in the transform attributes in
AH (and ESP) transforms.

4 years agoikev1: Accept IPComp proposals with 4 octet long CPI values
Tobias Brunner [Tue, 4 Nov 2014 17:24:16 +0000 (18:24 +0100)]
ikev1: Accept IPComp proposals with 4 octet long CPI values

While they SHOULD be sent as 16-bit values according to RFC 3173
a responder MUST be able to accept CPI values encoded in four bytes.

4 years agoike: Only parse payloads valid for the current IKE version
Tobias Brunner [Tue, 21 Oct 2014 12:03:25 +0000 (14:03 +0200)]
ike: Only parse payloads valid for the current IKE version

4 years agoike: Make check for known payloads depend on IKE version
Tobias Brunner [Tue, 21 Oct 2014 09:22:51 +0000 (11:22 +0200)]
ike: Make check for known payloads depend on IKE version

4 years agopkcs5: Add support for PBES2 encryption schemes other than 3DES
Tobias Brunner [Fri, 17 Oct 2014 08:16:19 +0000 (10:16 +0200)]
pkcs5: Add support for PBES2 encryption schemes other than 3DES

This allows using e.g. AES for PKCS#8 and PKCS#12 files.

Some legacy schemes defined in RFC 2898 are not supported (like RC2).

Fixes #740.

4 years agoasn1: Add OID for Blowfish CBC
Tobias Brunner [Fri, 17 Oct 2014 10:33:14 +0000 (12:33 +0200)]
asn1: Add OID for Blowfish CBC

The OID (1.3.6.1.4.1.3029.1.2) is technically not correct, the correct
one is (1.3.6.1.4.1.3029.1.1.2).  Every other library or tool (like OpenSSL)
uses the incorrect one so we do the same.

References #740.

4 years agodiffie-hellman: Handle dh_exponent_ansi_x9_42 as a boolean setting
Martin Willi [Fri, 5 Dec 2014 12:48:51 +0000 (13:48 +0100)]
diffie-hellman: Handle dh_exponent_ansi_x9_42 as a boolean setting

While it was always documented as boolean setting, the option is currently
handled as integer value, for which yes/no values do not work. Instead the
default of TRUE is used for a no value.

The option has been moved a lot during the last years, and in some locations
was handled as bool, in some as integer. In the latest codebase it
congruently used integer, which is actually not what is documented and used
in testing.

Fixes #781.

4 years agounity: Only do narrowing of responder's TS if we received 0.0.0.0/0
Tobias Brunner [Thu, 16 Oct 2014 14:16:48 +0000 (16:16 +0200)]
unity: Only do narrowing of responder's TS if we received 0.0.0.0/0

iOS and Mac OS X clients establish individual IPsec SAs for the traffic
selectors received in Split-Include attributes (might have been different
in earlier releases).  If we return 0.0.0.0/0 as TSr that either results
in a bunch of Quick Mode exchanges (for each TS), or with the latest
client releases an error notify (ATTRIBUTES_NOT_SUPPORTED).
We also can't install the IPsec SA with all configured subnets as that
would cause conflicts if the client later negotiates SAs for other subnets,
which iOS 8 does based on traffic to such subnets.

For Shrew and the Cisco client, which propose 0.0.0.0/0, we still need to
override the narrowed TS with 0.0.0.0/0, as they otherwise won't accept
the Quick Mode response.  Likewise, we also have to narrow the TS before
installing the IPsec SAs and policies.

So we basically have to follow the client's proposal and only modify TSr
if we received 0.0.0.0/0.  Since we don't get the original TS in the
narrow hook we handle the inbound QM messages and make note of IKE_SAs on
which we received a TSr of 0.0.0.0/0.

Fixes #737.

4 years agoid-payload: Enable multiple calls to get_ts() for subnet traffic selectors
Tobias Brunner [Thu, 16 Oct 2014 14:10:41 +0000 (16:10 +0200)]
id-payload: Enable multiple calls to get_ts() for subnet traffic selectors

The second call resulted in a /32 subnet previously.

4 years agoikev2: Fix handling of more than one hash-and-URL certificate payloads
Tobias Brunner [Thu, 4 Dec 2014 10:32:22 +0000 (11:32 +0100)]
ikev2: Fix handling of more than one hash-and-URL certificate payloads

4 years agoMerge branch 'wfp-drop-firewall'
Martin Willi [Thu, 4 Dec 2014 10:11:47 +0000 (11:11 +0100)]
Merge branch 'wfp-drop-firewall'

Introduces ALE layer WFP rules to accept tunnel mode packets in Windows
stateful packet filtering if default-drop policies are used.

4 years agokernel-wfp: Install outbound ALE connect rules for IPsec
Martin Willi [Fri, 28 Nov 2014 08:39:40 +0000 (09:39 +0100)]
kernel-wfp: Install outbound ALE connect rules for IPsec

Similar to the inbound rules, the ALE filter processes IP-in-IP packets for
outbound tunnel mode traffic. When using an outbound default-drop policy,
Windows does not allow connection initiation without these explicit rules.

4 years agokernel-wfp: Install inbound ALE IP-in-IP filters
Martin Willi [Thu, 27 Nov 2014 18:19:09 +0000 (19:19 +0100)]
kernel-wfp: Install inbound ALE IP-in-IP filters

When processing inbound tunnel mode packets, Windows decrypts packets and
filters them as IP-in-IP packets. We therefore require an ALE filter that
calls the FWPM_CALLOUT_IPSEC_INBOUND_TUNNEL_ALE_ACCEPT callout to allow them
when using a default-drop policy.

Without these rules, any outbound packet created an ALE state that allows
inbound packets as well. Processing inbound packets without any outbound
traffic fails without these rules.

4 years agokernel-wfp: Add missing IPsec sublayer GUIDs
Martin Willi [Fri, 28 Nov 2014 14:41:21 +0000 (15:41 +0100)]
kernel-wfp: Add missing IPsec sublayer GUIDs

4 years agokernel-wfp: Define IPsec related ALE layers and callout GUIDs
Martin Willi [Thu, 27 Nov 2014 18:00:34 +0000 (19:00 +0100)]
kernel-wfp: Define IPsec related ALE layers and callout GUIDs

4 years agokernel-wfp: Fix logging of MM/QM/EM NetEvent failures
Martin Willi [Thu, 27 Nov 2014 18:10:11 +0000 (19:10 +0100)]
kernel-wfp: Fix logging of MM/QM/EM NetEvent failures

4 years agovici: Make sure to send/recv all requested bytes over socket
Martin Willi [Wed, 19 Nov 2014 13:20:47 +0000 (14:20 +0100)]
vici: Make sure to send/recv all requested bytes over socket

As the underlying C functions, send/recv on ruby sockets are not guaranteed
to send/recv all requested bytes. Use wrapper functions to make sure we get
all bytes needed.

4 years agoupdown: Inverse comment of VPN_LOGGING variable, as it is enabled by default
Martin Willi [Tue, 2 Dec 2014 14:02:41 +0000 (15:02 +0100)]
updown: Inverse comment of VPN_LOGGING variable, as it is enabled by default

Fixes #780.