Martin Willi [Fri, 6 Jun 2014 13:09:16 +0000 (15:09 +0200)]
WIP: cng: DH implementation
Because CNG does not allow us to export the raw DH secret, an implementation
using our DH interface seems unfeasible. Changing the DH interface to do
key derivation could work, but is non-trivial.
As cng without DH does not allow us to remove the gmp/openssl/... dependency,
this is probably a dead-end for cng.
Martin Willi [Wed, 4 Jun 2014 14:32:23 +0000 (16:32 +0200)]
Merge branch 'win-kernel'
Adds the kernel-iph and kernel-wfp kernel backends for the Windows platform.
kernel-iph provides a networking backend using the IP Helper native Windows
API, while the kernel-wfp backend implements an interface to the Windows Kernel
IPsec layer using the Windows Filtering Platform API.
Martin Willi [Tue, 24 Dec 2013 10:27:59 +0000 (11:27 +0100)]
child-sa: Pass the number of total policies tied to an SA to the kernel
This will be useful if the kernel backend has to know how many policies
follow an SA install, for example if it must install all policies concurrently.
Martin Willi [Mon, 23 Dec 2013 17:45:13 +0000 (18:45 +0100)]
kernel-wfp: Set flag to get UDP encapsulation with tunnel mode working
Having this flag set fixes connections initiated by the Windows host, but
unfortunately does not yet fix incoming connections. Connection state issue?
We still see 0xc00000e2 error events, translating to INTERNAL_ERROR.
Martin Willi [Thu, 19 Dec 2013 15:55:43 +0000 (16:55 +0100)]
kernel-wfp: Manually create a ProviderContext to attach individual filters
This gives us more flexibility than using the intransparent FwpmIPsecTunnelAdd,
and fixes the issues we have seen with trap policies. Forward filters are
still missing, but required for site-to-site tunnels.
Martin Willi [Fri, 15 Nov 2013 11:09:46 +0000 (12:09 +0100)]
kernel-wfp: Fix/Complete some fwpuclnt functionality in MinGW
While MinGW declares all the required symbols, some of them are missing in the
library files. We provide missing variables locally, functions get a stub
that call the GetProcAddress()ed function from the DLL.
Also some MinGW headers define some enum values incorrectly, we overload these
using defines.
Martin Willi [Wed, 4 Jun 2014 14:26:58 +0000 (16:26 +0200)]
Merge branch 'win'
Ports the strongSwan core libraries and some plugins to the Windows platform
using a MinGW based toolchain. Beside generic platform abstraction and
the windows.[ch] compatibility layer, this merge introduces a Windows native
threading backend and a charon-svc Windows IKE service.
Travis adds a MinGW cross-compile build to Windows, and further enables -Werror
to let builds fail for all compiler warnings with gcc and Clang.
Martin Willi [Thu, 3 Apr 2014 13:44:02 +0000 (15:44 +0200)]
x509: Check return value when signing attribute certificates
In addition that this lets AC generation fail properly if private key signing
fails, it also fixes an issue when compiling on Windows with MinGW 4.8.1, where
for some reason the attributeCertificateInfo got encoded incorrectly.
Martin Willi [Thu, 3 Apr 2014 10:25:38 +0000 (12:25 +0200)]
unit-tests: Support testable functions on Windows, avoid weak GCC symbols
Instead of using weak symbols, we use dlsym() on Windows to find an arbitrary
symbol in libtest to detect its linkage. Instead of creating the associated
hashtable in the test runner, we maintain it in libstrongswan, making it
significantly simpler.
Martin Willi [Thu, 3 Apr 2014 09:46:09 +0000 (11:46 +0200)]
unit-tests: Seed chunk_hash() only once, but before creating any hashtables
Due to the removal of pthread_once, we manually create the seed for
chunk_hash(). With the new testable functions interface, this won't work for
the hashtable initiated using __attribute__((constructor)). Enforce seeding
before creating that hashtable.
Martin Willi [Wed, 2 Apr 2014 13:16:15 +0000 (15:16 +0200)]
openssl: Don't re-enter FIPS mode if we are already using it
If FIPS mode has been enabled by other means, under some environments it can't
be entered again. It fails with "FIPS mode already set". To avoid it, we first
check the mode before changing it.
Martin Willi [Wed, 2 Apr 2014 10:29:32 +0000 (12:29 +0200)]
unit-tests: Force a CET/CEST timezone Windows understands
As it is currently unclear what the "three-letter-timezone" for CEST is, we
use the German timezone, which actually is CET/CEST. SetEnvironmentVariable()
"TZ" does not seem to affect localtime(), so we use _putenv() instead.