Merge branch 'android-updates' master
authorTobias Brunner <tobias@strongswan.org>
Tue, 15 Oct 2019 15:26:16 +0000 (17:26 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 15 Oct 2019 15:28:25 +0000 (17:28 +0200)
Makes the local identity configurable and includes a fix for Android 10,
plus a break-before-make reauth issue (not Android specific) and some
deprecation workarounds.

211 files changed:
.cirrus.yml [new file with mode: 0644]
.editorconfig [new file with mode: 0644]
Android.mk
NEWS
conf/options/charon.opt
conf/options/imv_policy_manager.opt
conf/plugins/imc-attestation.opt
conf/plugins/imc-hcd.opt
conf/plugins/imc-os.opt
conf/plugins/tnccs-20.opt
configure.ac
fuzz/.gitignore
fuzz/Makefile.am
fuzz/fuzz_ids.c [new file with mode: 0644]
scripts/hash_burn.c
scripts/test.sh
src/charon-nm/Makefile.am
src/conftest/README
src/frontends/android/app/build.gradle
src/frontends/android/app/src/main/AndroidManifest.xml
src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java
src/frontends/android/app/src/main/java/org/strongswan/android/logic/NetworkManager.java
src/frontends/android/app/src/main/java/org/strongswan/android/logic/SimpleFetcher.java
src/frontends/android/app/src/main/java/org/strongswan/android/logic/VpnStateService.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/CertificateDeleteConfirmationDialog.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/ImcStateFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/LogFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/RemediationInstructionFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/RemediationInstructionsActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/RemediationInstructionsFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/SettingsActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/SettingsFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificateImportActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificateListFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileControlActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileImportActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileListFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileSelectActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnStateFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnTileService.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/CertificateIdentitiesAdapter.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationEntry.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/VpnProfileAdapter.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/widget/CheckableLinearLayout.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/widget/TextInputLayoutHelper.java
src/frontends/android/app/src/main/java/org/strongswan/android/utils/IPRange.java
src/frontends/android/app/src/main/jni/libandroidbridge/backend/android_service.c
src/frontends/android/app/src/main/res/layout/login_dialog.xml
src/frontends/android/app/src/main/res/layout/profile_detail_view.xml
src/frontends/android/app/src/main/res/layout/profile_import_view.xml
src/frontends/android/app/src/main/res/layout/trusted_certificates_activity.xml
src/frontends/android/app/src/main/res/values-de/strings.xml
src/frontends/android/app/src/main/res/values-pl/strings.xml
src/frontends/android/app/src/main/res/values-ru/strings.xml
src/frontends/android/app/src/main/res/values-ua/strings.xml
src/frontends/android/app/src/main/res/values-zh-rCN/strings.xml
src/frontends/android/app/src/main/res/values-zh-rTW/strings.xml
src/frontends/android/app/src/main/res/values/strings.xml
src/frontends/android/build.gradle
src/frontends/android/gradle.properties [new file with mode: 0644]
src/frontends/android/gradle/wrapper/gradle-wrapper.properties
src/ipsec/_ipsec.in
src/libcharon/Android.mk
src/libcharon/attributes/attributes.c
src/libcharon/attributes/attributes.h
src/libcharon/daemon.c
src/libcharon/encoding/payloads/ike_header.c
src/libcharon/encoding/payloads/notify_payload.c
src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
src/libcharon/plugins/load_tester/load_tester_creds.c
src/libcharon/plugins/medsrv/test.sql
src/libcharon/plugins/sql/sql_config.h
src/libcharon/plugins/sql/sql_cred.h
src/libcharon/plugins/sql/sql_logger.h
src/libcharon/plugins/tnc_ifmap/tnc_ifmap_http.h
src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.h
src/libcharon/plugins/tnc_ifmap/tnc_ifmap_plugin.c
src/libcharon/plugins/tnc_ifmap/tnc_ifmap_soap_msg.h
src/libcharon/plugins/updown/updown_listener.c
src/libcharon/plugins/vici/perl/Vici-Session/README.pod
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Transport.pm
src/libcharon/plugins/vici/ruby/vici.gemspec.in
src/libcharon/plugins/vici/vici_query.c
src/libcharon/sa/eap/eap_inner_method.h
src/libcharon/sa/ikev2/tasks/ike_delete.c
src/libcharon/sa/keymat.h
src/libimcv/generic/generic_attr_bool.c
src/libimcv/generic/generic_attr_bool.h
src/libimcv/imv/imv_database.h
src/libimcv/imv/imv_os_info.c
src/libimcv/imv/imv_remediation_string.c
src/libimcv/imv/imv_session_manager.h
src/libimcv/imv/imv_workitem.c
src/libimcv/imv/imv_workitem.h
src/libimcv/plugins/imc_attestation/Makefile.am
src/libimcv/plugins/imv_hcd/imv_hcd_agent.c
src/libimcv/plugins/imv_scanner/imv_scanner_state.c
src/libimcv/pts/components/pts_comp_evidence.h
src/libimcv/pts/components/pts_component.h
src/libimcv/pts/components/tcg/tcg_comp_func_name.h
src/libimcv/pts/pts_dh_group.h
src/libimcv/pts/pts_ima_event_list.h
src/libimcv/pts/pts_meas_algo.h
src/libimcv/swid_gen/swid_gen.c
src/libimcv/swima/swima_collector.h
src/libimcv/swima/swima_error.c
src/libimcv/tcg/seg/tcg_seg_attr_seg_env.c
src/libipsec/ip_packet.c
src/libstrongswan/Makefile.am
src/libstrongswan/asn1/asn1.c
src/libstrongswan/credentials/certificates/ocsp_response.h
src/libstrongswan/credentials/credential_set.h
src/libstrongswan/crypto/xofs/mgf1.h
src/libstrongswan/math/libnttfft/ntt_fft.c
src/libstrongswan/math/libnttfft/ntt_fft_params.c
src/libstrongswan/math/libnttfft/ntt_fft_reduce.h
src/libstrongswan/math/libnttfft/tests/suites/test_ntt_fft.c
src/libstrongswan/plugins/bliss/bliss_huffman_coder.c
src/libstrongswan/plugins/bliss/bliss_sampler.c
src/libstrongswan/plugins/bliss/bliss_signature.c
src/libstrongswan/plugins/botan/botan_ec_diffie_hellman.c
src/libstrongswan/plugins/botan/botan_ec_private_key.c
src/libstrongswan/plugins/botan/botan_rsa_private_key.c
src/libstrongswan/plugins/botan/botan_rsa_public_key.c
src/libstrongswan/plugins/botan/botan_x25519.c
src/libstrongswan/plugins/chapoly/chapoly_xof.c
src/libstrongswan/plugins/newhope/newhope_noise.c
src/libstrongswan/plugins/newhope/newhope_reconciliation.c
src/libstrongswan/plugins/newhope/newhope_reconciliation.h
src/libstrongswan/plugins/newhope/tests/suites/test_newhope_noise.c
src/libstrongswan/plugins/newhope/tests/suites/test_newhope_reconciliation.c
src/libstrongswan/plugins/ntru/ntru_convert.h
src/libstrongswan/plugins/ntru/ntru_poly.c
src/libstrongswan/plugins/ntru/ntru_poly.h
src/libstrongswan/plugins/ntru/ntru_private_key.c
src/libstrongswan/plugins/ntru/ntru_trits.c
src/libstrongswan/plugins/ntru/ntru_trits.h
src/libstrongswan/plugins/openssl/openssl_pkcs7.c
src/libstrongswan/plugins/openssl/openssl_plugin.c
src/libstrongswan/plugins/test_vectors/test_vectors/chacha20_xof.c
src/libstrongswan/plugins/wolfssl/wolfssl_aead.h
src/libstrongswan/plugins/wolfssl/wolfssl_common.h
src/libstrongswan/plugins/wolfssl/wolfssl_crypter.h
src/libstrongswan/plugins/wolfssl/wolfssl_diffie_hellman.h
src/libstrongswan/plugins/wolfssl/wolfssl_ec_diffie_hellman.h
src/libstrongswan/plugins/wolfssl/wolfssl_ec_private_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_ec_public_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_ed_private_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_ed_public_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_hasher.h
src/libstrongswan/plugins/wolfssl/wolfssl_hmac.h
src/libstrongswan/plugins/wolfssl/wolfssl_rng.h
src/libstrongswan/plugins/wolfssl/wolfssl_rsa_private_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_rsa_public_key.h
src/libstrongswan/plugins/wolfssl/wolfssl_sha1_prf.h
src/libstrongswan/plugins/wolfssl/wolfssl_util.h
src/libstrongswan/plugins/wolfssl/wolfssl_x_diffie_hellman.h
src/libstrongswan/tests/suites/test_asn1_parser.c
src/libstrongswan/tests/suites/test_crypter.c
src/libstrongswan/tests/suites/test_identification.c
src/libstrongswan/tests/suites/test_rsa.c
src/libstrongswan/utils/identification.c
src/libstrongswan/utils/leak_detective.c
src/libstrongswan/utils/utils/memory.c
src/libstrongswan/utils/utils/memory.h
src/libstrongswan/utils/utils/tty.h
src/libtnccs/plugins/tnccs_20/batch/pb_tnc_batch.c
src/libtnccs/plugins/tnccs_20/messages/ietf/pb_error_msg.h
src/libtnccs/plugins/tnccs_20/messages/ietf/pb_pa_msg.h
src/libtnccs/plugins/tnccs_20/messages/tcg/pb_pdp_referral_msg.c
src/libtnccs/plugins/tnccs_20/messages/tcg/pb_pdp_referral_msg.h
src/libtncif/tncif_identity.c
src/libtpmtss/plugins/tpm/tpm_rng.c
src/libtpmtss/tpm_tss_tss2_names_v1.c
src/libtpmtss/tpm_tss_tss2_v1.c
src/libtpmtss/tpm_tss_tss2_v2.c
src/manager/templates/config/list.cs
src/manager/templates/footer.cs
src/manager/templates/header.cs
src/manager/templates/ikesa/list.cs
src/manager/templates/static/jquery.js
src/manager/templates/static/style.css
src/medsrv/templates/footer.cs
src/medsrv/templates/header.cs
src/medsrv/templates/peer/add.cs
src/medsrv/templates/peer/edit.cs
src/medsrv/templates/user/edit.cs
src/sec-updater/Makefile.am
src/starter/Makefile.am
src/stroke/Makefile.am
src/sw-collector/sw_collector_dpkg.c
src/sw-collector/sw_collector_history.h
src/sw-collector/sw_collector_rest_api.c
src/swanctl/commands/list_authorities.c
testing/config/kernel/config-5.2 [new file with mode: 0644]
testing/scripts/build-certs-chroot
testing/scripts/build-guestimages
testing/scripts/function.sh
testing/scripts/load-testconfig
testing/scripts/recipes/011_botan.mk
testing/scripts/restore-defaults
testing/testing.conf

diff --git a/.cirrus.yml b/.cirrus.yml
new file mode 100644 (file)
index 0000000..ad7737e
--- /dev/null
@@ -0,0 +1,13 @@
+freebsd_instance:
+  image: freebsd-12-0-release-amd64
+
+env:
+  TESTS_REDUCED_KEYLENGTHS: yes
+  LEAK_DETECTIVE: no
+  MONOLITHIC: no
+  TEST: freebsd
+  TRAVIS_OS_NAME: freebsd
+
+task:
+  install_script: ./scripts/test.sh deps
+  script: ./scripts/test.sh
diff --git a/.editorconfig b/.editorconfig
new file mode 100644 (file)
index 0000000..944b24b
--- /dev/null
@@ -0,0 +1,54 @@
+# http://editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+# for alignment reasons the last tab may be replaced with < indent_size spaces,
+# which we currently can't configure here
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+block_comment_start = /*
+block_comment = *
+block_comment_end = */
+
+# don't change these files
+[{doc/**,src/include/{linux,sys}/**,testing/{hosts,tests}/**,AUTHORS,COPYING}]
+charset = unset
+indent_style = unset
+indent_size = unset
+end_of_line = unset
+insert_final_newline = unset
+trim_trailing_whitespace = unset
+
+# never trim whitespace in patches, everything else should not be changed
+[*.patch]
+trim_trailing_whitespace = false
+charset = unset
+indent_style = unset
+indent_size = unset
+end_of_line = unset
+insert_final_newline = unset
+
+[{.*,NEWS,README,INSTALL,*.{gemspec.in,pod,rb,ui}}]
+indent_style = space
+indent_size = 2
+
+[*.{gpr,adb,ads}]
+indent_style = space
+indent_size = 3
+line_comment = --
+
+[{*.{md,gradle,xml},HACKING}]
+indent_style = space
+indent_size = 4
+
+[src/libcharon/plugins/vici/README.md]
+indent_style = tab
+
+[src/libcharon/plugins/vici/**/*.{rst,PL,pm,py}]
+indent_style = space
+indent_size = 4
index 0ca462e..69869df 100644 (file)
@@ -29,8 +29,8 @@ strongswan_STARTER_PLUGINS := kernel-netlink
 
 # list of all plugins - used to enable them with the function below
 strongswan_PLUGINS := $(sort $(strongswan_CHARON_PLUGINS) \
-                            $(strongswan_STARTER_PLUGINS) \
-                            $(strongswan_SCEPCLIENT_PLUGINS))
+       $(strongswan_STARTER_PLUGINS) \
+       $(strongswan_SCEPCLIENT_PLUGINS))
 
 include $(LOCAL_PATH)/Android.common.mk
 
diff --git a/NEWS b/NEWS
index 8c763d4..68537bb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,20 @@
+strongswan-5.8.1
+----------------
+
+- RDNs in Distinguished Names can now optionally be matched less strict. The
+  global option charon.rdn_matching takes two alternative values that cause the
+  matching algorithm to either ignore the order of matched RDNs or additionally
+  accept DNs that contain more RDNs than configured (unmatched RDNs are treated
+  like wildcard matches).
+
+- The updown plugin now passes the same interface to the script that is also
+  used for the automatically installed routes, i.e. the interface over which the
+  peer is reached instead of the interface on which the local address is found.
+
+- TPM 2.0 contexts are now protected by a mutex to prevent issues if multiple
+  IKE_SAs use the same private key concurrently.
+
+
 strongswan-5.8.0
 ----------------
 
@@ -1949,7 +1966,7 @@ strongswan-4.3.1
   fuzzing techniques: 1) Sending a malformed IKE_SA_INIT request leaved an
   incomplete state which caused a null pointer dereference if a subsequent
   CREATE_CHILD_SA request was sent. 2) Sending an IKE_AUTH request with either
-  a missing TSi or TSr payload caused a null pointer derefence because the
+  a missing TSi or TSr payload caused a null pointer dereference because the
   checks for TSi and TSr were interchanged. The IKEv2 fuzzer used was
   developed by the Orange Labs vulnerability research team. The tool was
   initially written by Gabriel Campana and is now maintained by Laurent Butti.
index 21f6e08..d57b393 100644 (file)
@@ -296,6 +296,22 @@ charon.processor.priority_threads {}
        Section to configure the number of reserved threads per priority class
        see JOB PRIORITY MANAGEMENT in **strongswan.conf**(5).
 
+charon.rdn_matching = strict
+       How RDNs in subject DNs of certificates are matched against configured
+       identities (_strict_, _reordered_, or _relaxed_).
+
+       How RDNs in subject DNs of certificates are matched against configured
+       identities. Possible values are _strict_ (the default), _reordered_, and
+       _relaxed_. With _strict_ the number, type and order of all RDNs has to
+       match, wildcards (*) for the values of RDNs are allowed (that's the case
+       for all three variants). Using _reordered_ also matches DNs if the RDNs
+       appear in a different order, the number and type still has to match.
+       Finally, _relaxed_ also allows matches of DNs that contain more RDNs than
+       the configured identity (missing RDNs are treated like a wildcard match).
+
+       Note that _reordered_ and _relaxed_ impose a considerable overhead on memory
+       usage and runtime, in particular, for mismatches, compared to _strict_.
+
 charon.receive_delay = 0
        Delay in ms for receiving packets, to simulate larger RTT.
 
index 6ed0efc..82983e8 100644 (file)
@@ -10,4 +10,4 @@ imv_policy_manager.command_allow =
        Shell command to be executed with recommendation allow.
 
 imv_policy_manager.command_block =
-       Shell command to be executed with all other recommendations. 
+       Shell command to be executed with all other recommendations.
index 925ac4e..82af6b6 100644 (file)
@@ -26,19 +26,21 @@ libimcv.plugins.imc-attestation.pcr_info = no
        Whether to send pcr_before and pcr_after info.
 
 libimcv.plugins.imc-attestation.pcr17_before =
-        PCR17 value before measurement.
+       PCR17 value before measurement.
 
 libimcv.plugins.imc-attestation.pcr17_meas =
-        Dummy measurement value extended into PCR17 if the TBOOT log is not available.
+       Dummy measurement value extended into PCR17 if the TBOOT log is not
+       available.
 
 libimcv.plugins.imc-attestation.pcr17_after =
-        PCR17 value after measurement.
+       PCR17 value after measurement.
 
 libimcv.plugins.imc-attestation.pcr18_before =
-        PCR18 value before measurement.
+       PCR18 value before measurement.
 
 libimcv.plugins.imc-attestation.pcr18_meas =
-       Dummy measurement value extended into PCR17 if the TBOOT log is not available. 
+       Dummy measurement value extended into PCR17 if the TBOOT log is not
+       available.
 
 libimcv.plugins.imc-attestation.pcr18_after =
-        PCR18 value after measurement.
+       PCR18 value after measurement.
index d69b06c..e2e2f5d 100644 (file)
@@ -6,7 +6,7 @@ libimcv.plugins.imc-hcd.subtypes
 
 libimcv.plugins.imc-hcd.subtypes.<section>
        Defines a PWG HCD PA subtype section. Recognized subtype section names are
-    _system_, _control_, _marker_, _finisher_, _interface_ and _scanner_.
+       _system_, _control_, _marker_, _finisher_, _interface_ and _scanner_.
 
 libimcv.plugins.imc-hcd.subtypes.<section>.attributes_natural_language = en
        Variable length natural language tag conforming to RFC 5646 specifies
index 6c1da5e..b72470b 100644 (file)
@@ -1,18 +1,18 @@
 libimcv.plugins.imc-os.device_cert =
        Manually set the path to the client device certificate
-    (e.g. /etc/pts/aikCert.der)
+       (e.g. /etc/pts/aikCert.der)
 
 libimcv.plugins.imc-os.device_id =
        Manually set the client device ID in hexadecimal format
-   (e.g. 1083f03988c9762703b1c1080c2e46f72b99cc31)
+       (e.g. 1083f03988c9762703b1c1080c2e46f72b99cc31)
 
 libimcv.plugins.imc-os.device_handle =
        Manually set handle to a private key bound to a smartcard or TPM
-    (e.g. 0x81010004)
+       (e.g. 0x81010004)
 
 libimcv.plugins.imc-os.device_pubkey =
        Manually set the path to the client device public key
-    (e.g. /etc/pts/aikPub.der)
+       (e.g. /etc/pts/aikPub.der)
 
 libimcv.plugins.imc-os.push_info = yes
        Send operating system info without being prompted.
index 8d16d1c..ccbb258 100644 (file)
@@ -5,10 +5,10 @@ charon.plugins.tnccs-20.max_message_size = 65490
        Maximum size of a PA-TNC message (upper limit via PT-EAP = 65497).
 
 charon.plugins.tnccs-20.mutual = no
-        Enable PB-TNC mutual protocol.
+       Enable PB-TNC mutual protocol.
 
 charon.plugins.tnccs-20.tests.pb_tnc_noskip = no
-        Send an unsupported PB-TNC message type with the NOSKIP flag set.
+       Send an unsupported PB-TNC message type with the NOSKIP flag set.
 
 charon.plugins.tnccs-20.tests.pb_tnc_version = 2
-        Send a PB-TNC batch with a modified PB-TNC version.
+       Send a PB-TNC batch with a modified PB-TNC version.
index ffc17da..6a20ce6 100644 (file)
@@ -19,7 +19,7 @@
 #  initialize & set some vars
 # ============================
 
-AC_INIT([strongSwan],[5.8.0])
+AC_INIT([strongSwan],[5.8.1])
 AM_INIT_AUTOMAKE(m4_esyscmd([
        echo tar-ustar
        echo subdir-objects
@@ -63,7 +63,7 @@ ARG_WITH_SUBST([routing-table],      [220], [set routing table to use for IPsec
 ARG_WITH_SUBST([routing-table-prio], [220], [set priority for IPsec routing table])
 ARG_WITH_SUBST([ipsec-script],       [ipsec], [change the name of the ipsec script])
 ARG_WITH_SUBST([fips-mode],          [0], [set openssl FIPS mode: disabled(0), enabled(1), Suite B enabled(2)])
-ARG_WITH_SUBST([libfuzzer],          [], [path to libFuzzer.a])
+ARG_WITH_SUBST([libfuzzer],          [], [-fsanitize=fuzzer or path to libFuzzer.a, a local driver is used if not specified])
 ARG_WITH_SET([capabilities],         [no], [set capability dropping library. Currently supported values are "libcap" and "native"])
 ARG_WITH_SET([mpz_powm_sec],         [yes], [use the more side-channel resistant mpz_powm_sec in libgmp, if available])
 ARG_WITH_SET([dev-headers],          [no], [install strongSwan development headers to directory.])
@@ -650,7 +650,7 @@ AC_CHECK_FUNC(
 )
 
 AC_CHECK_FUNCS(prctl mallinfo getpass closefrom getpwnam_r getgrnam_r getpwuid_r)
-AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd sigwaitinfo)
+AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd sigwaitinfo explicit_bzero)
 
 AC_CHECK_FUNC([syslog], [
        AC_DEFINE([HAVE_SYSLOG], [], [have syslog(3) and friends])
@@ -1294,18 +1294,26 @@ if test x$coverage = xtrue; then
 fi
 
 if test x$fuzzing = xtrue; then
-       if test x$libfuzzer = x; then
+       case "$libfuzzer" in
+       "")
                AC_MSG_NOTICE([fuzz targets enabled without libFuzzer, using local driver])
                CFLAGS="${CFLAGS} -fsanitize=address"
                libfuzzer="libFuzzerLocal.a"
-       else
+               ;;
+       "-fsanitize=fuzzer")
+               libfuzzer=""
+               FUZZING_CFLAGS="-fsanitize=fuzzer"
+               AC_SUBST(FUZZING_CFLAGS)
+               ;;
+       *)
                # required for libFuzzer
                FUZZING_LDFLAGS="-stdlib=libc++ -lstdc++"
                if test "$SANITIZER" = "coverage"; then
                        FUZZING_LDFLAGS="$FUZZING_LDFLAGS -lm"
                fi
                AC_SUBST(FUZZING_LDFLAGS)
-       fi
+               ;;
+       esac
 fi
 
 if test x$ruby_gems = xtrue; then
index 765d23a..0927874 100644 (file)
@@ -1,4 +1,5 @@
 fuzz_certs
 fuzz_crls
+fuzz_ids
 fuzz_pa_tnc
 fuzz_pb_tnc
index df228d3..55ead62 100644 (file)
@@ -1,4 +1,5 @@
 AM_CPPFLAGS = @CPPFLAGS@ \
+       @FUZZING_CFLAGS@ \
        -I$(top_srcdir)/src/libstrongswan \
        -I$(top_srcdir)/src/libimcv \
        -I$(top_srcdir)/src/libtncif \
@@ -24,7 +25,7 @@ pb_tnc_ldflags = \
        $(top_builddir)/src/libtncif/.libs/libtncif.a \
        $(fuzz_ldflags)
 
-FUZZ_TARGETS=fuzz_certs fuzz_crls fuzz_pa_tnc fuzz_pb_tnc
+FUZZ_TARGETS=fuzz_certs fuzz_crls fuzz_ids fuzz_pa_tnc fuzz_pb_tnc
 
 all-local: $(FUZZ_TARGETS)
 
@@ -36,6 +37,9 @@ fuzz_certs: fuzz_certs.c ${libfuzzer}
 fuzz_crls: fuzz_crls.c ${libfuzzer}
        $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
 
+fuzz_ids: fuzz_ids.c ${libfuzzer}
+       $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
+
 fuzz_pa_tnc: fuzz_pa_tnc.c ${libfuzzer}
        $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(pa_tnc_ldflags)
 
diff --git a/fuzz/fuzz_ids.c b/fuzz/fuzz_ids.c
new file mode 100644 (file)
index 0000000..8840c6e
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2018 Tobias Brunner
+ * HSR Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <library.h>
+#include <utils/debug.h>
+
+int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+       identification_t *id;
+       chunk_t chunk;
+
+       dbg_default_set_level(-1);
+       library_init(NULL, "fuzz_ids");
+
+       chunk = chunk_create((u_char*)buf, len);
+       id = identification_create_from_data(chunk);
+       DESTROY_IF(id);
+
+       library_deinit();
+       return 0;
+}
index 0aa9bf1..49a29cf 100644 (file)
@@ -45,13 +45,13 @@ int main(int argc, char *argv[])
 
        if (!enum_from_name(hash_algorithm_short_names, argv[1], &alg))
        {
-               fprintf(stderr, "unknown hash algorthm: %s\n", argv[1]);
+               fprintf(stderr, "unknown hash algorithm: %s\n", argv[1]);
                return 1;
        }
        hasher = lib->crypto->create_hasher(lib->crypto, alg);
        if (!hasher)
        {
-               fprintf(stderr, "hash algorthm not supported: %N\n",
+               fprintf(stderr, "hash algorithm not supported: %N\n",
                                hash_algorithm_names, alg);
                return 1;
        }
index 78b3feb..833d38a 100755 (executable)
@@ -4,7 +4,7 @@
 build_botan()
 {
        # same revision used in the build recipe of the testing environment
-       BOTAN_REV=2.10.0
+       BOTAN_REV=2.12.1
        BOTAN_DIR=$TRAVIS_BUILD_DIR/../botan
 
        if test -d "$BOTAN_DIR"; then
@@ -36,7 +36,7 @@ build_botan()
 
 build_wolfssl()
 {
-       WOLFSSL_REV=v4.0.0-stable
+       WOLFSSL_REV=v4.1.0-stable
        WOLFSSL_DIR=$TRAVIS_BUILD_DIR/../wolfssl
 
        if test -d "$WOLFSSL_DIR"; then
@@ -63,7 +63,7 @@ build_wolfssl()
 
 build_tss2()
 {
-       TSS2_REV=2.1.0
+       TSS2_REV=2.3.1
        TSS2_PKG=tpm2-tss-$TSS2_REV
        TSS2_DIR=$TRAVIS_BUILD_DIR/../$TSS2_PKG
        TSS2_SRC=https://github.com/tpm2-software/tpm2-tss/releases/download/$TSS2_REV/$TSS2_PKG.tar.gz
@@ -79,7 +79,7 @@ build_tss2()
        sudo apt-get install -qq libgcrypt20-dev &&
        curl -L $TSS2_SRC | tar xz -C $TRAVIS_BUILD_DIR/.. &&
        cd $TSS2_DIR &&
-       ./configure &&
+       ./configure --disable-doxygen-doc &&
        make -j4 >/dev/null &&
        sudo make install >/dev/null &&
        sudo ldconfig || exit $?
@@ -88,7 +88,7 @@ build_tss2()
 
 build_openssl()
 {
-       SSL_REV=1.1.1c
+       SSL_REV=1.1.1d
        SSL_PKG=openssl-$SSL_REV
        SSL_DIR=$TRAVIS_BUILD_DIR/../$SSL_PKG
        SSL_SRC=https://www.openssl.org/source/$SSL_PKG.tar.gz
@@ -270,6 +270,26 @@ osx)
        export CPPFLAGS
        export LDFLAGS
        ;;
+freebsd)
+       # use the options of the FreeBSD port (including options), except smp,
+       # which requires a patch but is deprecated anyway, only using the builtin
+       # printf hooks
+       CONFIG="--enable-kernel-pfkey --enable-kernel-pfroute --disable-scripts
+                       --disable-kernel-netlink --enable-openssl --enable-eap-identity
+                       --enable-eap-md5 --enable-eap-tls --enable-eap-mschapv2
+                       --enable-eap-peap --enable-eap-ttls --enable-md4 --enable-blowfish
+                       --enable-addrblock --enable-whitelist --enable-cmd --enable-curl
+                       --enable-eap-aka --enable-eap-aka-3gpp2 --enable-eap-dynamic
+                       --enable-eap-radius --enable-eap-sim --enable-eap-sim-file
+                       --enable-gcm --enable-ipseckey --enable-kernel-libipsec
+                       --enable-load-tester --enable-ldap --enable-mediation
+                       --enable-mysql --enable-sqlite --enable-tpm     --enable-unbound
+                       --enable-unity --enable-xauth-eap --enable-xauth-pam
+                       --with-printf-hooks=builtin --enable-attr-sql --enable-sql"
+       DEPS="gmp openldap-client libxml2 mysql80-client sqlite3 unbound ldns"
+       export GPERF=/usr/local/bin/gperf
+       export LEX=/usr/local/bin/flex
+       ;;
 fuzzing)
        CFLAGS="$CFLAGS -DNO_CHECK_MEMWIPE"
        CONFIG="--enable-fuzzing --enable-static --disable-shared --disable-scripts
@@ -318,6 +338,10 @@ if test "$1" = "deps"; then
                brew uninstall --force libtool && brew install libtool && \
                brew install $DEPS
                ;;
+       freebsd)
+               pkg install -y automake autoconf libtool pkgconf && \
+               pkg install -y bison flex gperf gettext $DEPS
+               ;;
        esac
        exit $?
 fi
index 4abfc74..2e0ab95 100644 (file)
@@ -23,7 +23,7 @@ charon_nm_LDADD = \
        $(top_builddir)/src/libcharon/libcharon.la \
        -lm $(PTHREADLIB) $(ATOMICLIB) $(DLLIB) ${nm_LIBS}
 
-dbusservicedir = $(sysconfdir)/dbus-1/system.d
+dbusservicedir = $(datadir)/dbus-1/system.d
 dbusservice_DATA = nm-strongswan-service.conf
 
 EXTRA_DIST = $(dbusservice_DATA)
index 404b2d1..ad33398 100644 (file)
@@ -1,7 +1,7 @@
 
 
-             conftest - an IKEv2 conformance testing framework
-             =================================================
+            conftest - an IKEv2 conformance testing framework
+            =================================================
 
 
 1. Introduction
@@ -40,9 +40,9 @@ strongSwan software suite.
 
 The syntax is as follows:
 
- settings := (section|keyvalue)*
- section  := name { settings }
- keyvalue := key = value\n
 settings := (section|keyvalue)*
 section  := name { settings }
 keyvalue := key = value\n
 
 Settings contain zero or more sub-sections or key/value pairs. A section
 consists of a name, followed by curly open and close brackets. The value in the
@@ -150,24 +150,24 @@ The actions section in the test specific configuration file defines
 the IKEv2 protocol actions to trigger. Currently, the following actions
 are supported and take these arguments (as key/value pairs):
 
-  initiate:    Initiate an IKE- and CHILD_SA
-               config: name of the CHILD_SA configuration to initiate
-               delay: Delay to trigger action after startup
-  rekey_ike:   Rekey an IKE_SA
-               config: name of originating IKE_SA configuration
-               delay: Delay to trigger action after startup
-  rekey_child: Rekey an CHILD_SA
-               config: name of originating CHILD_SA configuration
-               delay: Delay to trigger action after startup
-  liveness:    Do a liveness check (DPD) on the IKE_SA
-               config: name of originating IKE_SA configuration
-               delay: Delay to trigger action after startup
-  close_ike:   Close an IKE_SA
-               config: name of originating IKE_SA configuration
-               delay: Delay to trigger action after startup
-  close_child: Close a CHILD_SA
-               config: name of originating IKE_SA configuration
-               delay: Delay to trigger action after startup
+  initiate:     Initiate an IKE- and CHILD_SA
+                config: name of the CHILD_SA configuration to initiate
+                delay: Delay to trigger action after startup
+  rekey_ike:    Rekey an IKE_SA
+                config: name of originating IKE_SA configuration
+                delay: Delay to trigger action after startup
+  rekey_child:  Rekey an CHILD_SA
+                config: name of originating CHILD_SA configuration
+                delay: Delay to trigger action after startup
+  liveness:     Do a liveness check (DPD) on the IKE_SA
+                config: name of originating IKE_SA configuration
+                delay: Delay to trigger action after startup
+  close_ike:    Close an IKE_SA
+                config: name of originating IKE_SA configuration
+                delay: Delay to trigger action after startup
+  close_child:  Close a CHILD_SA
+                config: name of originating IKE_SA configuration
+                delay: Delay to trigger action after startup
 
 To trigger the same action multiple times, the action sections must be named
 uniquely. Append an arbitrary string to the action name. The following example
index f37ece8..b3a17f3 100644 (file)
@@ -1,14 +1,14 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 26
+    compileSdkVersion 28
 
     defaultConfig {
         applicationId "org.strongswan.android"
         minSdkVersion 15
-        targetSdkVersion 26
-        versionCode 64
-        versionName "2.1.1"
+        targetSdkVersion 28
+        versionCode 68
+        versionName "2.2.0"
     }
 
     sourceSets.main {
@@ -46,9 +46,9 @@ android {
 }
 
 dependencies {
-    implementation 'com.android.support:appcompat-v7:26.0.2'
-    implementation 'com.android.support:design:26.0.2'
-    implementation 'com.android.support:preference-v7:26.0.2'
-    implementation 'com.android.support:support-v4:26.0.2'
+    implementation 'androidx.appcompat:appcompat:1.1.0'
+    implementation 'androidx.preference:preference:1.1.0'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation 'com.google.android.material:material:1.0.0'
     testImplementation 'junit:junit:4.12'
 }
index 2a75d05..35fe4ca 100644 (file)
@@ -20,6 +20,7 @@
 
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
     <application
index 3672480..3e43058 100644 (file)
@@ -38,8 +38,6 @@ import android.os.ParcelFileDescriptor;
 import android.preference.PreferenceManager;
 import android.security.KeyChain;
 import android.security.KeyChainException;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.content.ContextCompat;
 import android.system.OsConstants;
 import android.util.Log;
 
@@ -77,6 +75,9 @@ import java.util.List;
 import java.util.Locale;
 import java.util.SortedSet;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.content.ContextCompat;
+
 public class CharonVpnService extends VpnService implements Runnable, VpnStateService.VpnStateListener
 {
        private static final String TAG = CharonVpnService.class.getSimpleName();
index abe6293..e283cd5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012-2015 Tobias Brunner
+ * Copyright (C) 2012-2019 Tobias Brunner
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -20,7 +20,10 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.ConnectivityManager;
+import android.net.Network;
 import android.net.NetworkInfo;
+import android.net.NetworkRequest;
+import android.os.Build;
 
 import java.util.LinkedList;
 
@@ -28,12 +31,45 @@ public class NetworkManager extends BroadcastReceiver implements Runnable
 {
        private final Context mContext;
        private volatile boolean mRegistered;
+       private ConnectivityManager.NetworkCallback mCallback;
        private Thread mEventNotifier;
+       private int mConnectedNetworks = 0;
        private LinkedList<Boolean> mEvents = new LinkedList<>();
 
        public NetworkManager(Context context)
        {
                mContext = context;
+
+               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+               {
+                       mCallback = new ConnectivityManager.NetworkCallback()
+                       {
+                               @Override
+                               public void onAvailable(Network network)
+                               {
+                                       synchronized (NetworkManager.this)
+                                       {
+                                               /* we expect this to be called if connected to at least one network during
+                                                * callback registration */
+                                               mConnectedNetworks += 1;
+                                               mEvents.addLast(true);
+                                               NetworkManager.this.notifyAll();
+                                       }
+                               }
+
+                               @Override
+                               public void onLost(Network network)
+                               {
+                                       synchronized (NetworkManager.this)
+                                       {
+                                               /* in particular mobile connections are disconnected overlapping with WiFi */
+                                               mConnectedNetworks -= 1;
+                                               mEvents.addLast(mConnectedNetworks > 0);
+                                               NetworkManager.this.notifyAll();
+                                       }
+                               }
+                       };
+               }
        }
 
        public void Register()
@@ -42,12 +78,38 @@ public class NetworkManager extends BroadcastReceiver implements Runnable
                mRegistered = true;
                mEventNotifier = new Thread(this);
                mEventNotifier.start();
+               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+               {
+                       ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
+                       /* while we only get events for the VPN network via registerDefaultNetworkCallback,
+                        * the default capabilities in the builder include NetworkCapabilities.NET_CAPABILITY_NOT_VPN */
+                       NetworkRequest.Builder builder = new NetworkRequest.Builder();
+                       cm.registerNetworkCallback(builder.build(), mCallback);
+               }
+               else
+               {
+                       registerLegacyReceiver();
+               }
+       }
+
+       @SuppressWarnings("deprecation")
+       private void registerLegacyReceiver()
+       {
+               /* deprecated since API level 28 */
                mContext.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        }
 
        public void Unregister()
        {
-               mContext.unregisterReceiver(this);
+               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+               {
+                       ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
+                       cm.unregisterNetworkCallback(mCallback);
+               }
+               else
+               {
+                       mContext.unregisterReceiver(this);
+               }
                mRegistered = false;
                synchronized (this)
                {
index 6eaccc4..de0ae97 100644 (file)
@@ -15,8 +15,6 @@
 
 package org.strongswan.android.logic;
 
-import android.support.annotation.Keep;
-
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -34,6 +32,8 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import androidx.annotation.Keep;
+
 @Keep
 public class SimpleFetcher
 {
index 5889293..551aff6 100644 (file)
@@ -24,7 +24,6 @@ import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
 import android.os.SystemClock;
-import android.support.v4.content.ContextCompat;
 
 import org.strongswan.android.R;
 import org.strongswan.android.data.VpnProfile;
@@ -41,6 +40,8 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.Callable;
 
+import androidx.core.content.ContextCompat;
+
 public class VpnStateService extends Service
 {
        private final HashSet<VpnStateListener> mListeners = new HashSet<VpnStateListener>();
index 5e36b11..e1a0872 100644 (file)
@@ -19,11 +19,12 @@ import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatDialogFragment;
 
 import org.strongswan.android.R;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatDialogFragment;
+
 /**
  * Class that displays a confirmation dialog to delete a selected local
  * certificate.
index a3cb245..fe8e770 100644 (file)
@@ -22,10 +22,6 @@ import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.content.ContextCompat;
 import android.view.GestureDetector;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -45,6 +41,11 @@ import org.strongswan.android.logic.imc.RemediationInstruction;
 
 import java.util.ArrayList;
 
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 public class ImcStateFragment extends Fragment implements VpnStateListener
 {
        private int mColorIsolate;
index c67017b..adcd832 100644 (file)
@@ -18,7 +18,6 @@ package org.strongswan.android.ui;
 import android.content.Intent;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.widget.Toast;
@@ -29,6 +28,8 @@ import org.strongswan.android.logic.CharonVpnService;
 
 import java.io.File;
 
+import androidx.appcompat.app.AppCompatActivity;
+
 public class LogActivity extends AppCompatActivity
 {
        @Override
index 625940f..2882740 100644 (file)
@@ -19,8 +19,6 @@ import android.content.Context;
 import android.os.Bundle;
 import android.os.FileObserver;
 import android.os.Handler;
-import android.support.annotation.NonNull;
-import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -37,6 +35,9 @@ import java.io.FileReader;
 import java.io.StringReader;
 import java.util.ArrayList;
 
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+
 public class LogFragment extends Fragment
 {
        private static String SCROLL_POSITION = "SCROLL_POSITION";
index bfef8e9..b00f3b2 100644 (file)
@@ -23,13 +23,6 @@ import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.AppCompatDialogFragment;
 import android.text.format.Formatter;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -44,6 +37,14 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 public class MainActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
 {
        public static final String CONTACT_EMAIL = "android@strongswan.org";
index d5d901b..aa1f472 100644 (file)
@@ -16,7 +16,6 @@
 package org.strongswan.android.ui;
 
 import android.os.Bundle;
-import android.support.v4.app.ListFragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -27,6 +26,8 @@ import android.widget.TextView;
 import org.strongswan.android.R;
 import org.strongswan.android.logic.imc.RemediationInstruction;
 
+import androidx.fragment.app.ListFragment;
+
 public class RemediationInstructionFragment extends ListFragment
 {
        public static final String ARG_REMEDIATION_INSTRUCTION = "instruction";
index 7f55427..66ea9e5 100644 (file)
@@ -16,7 +16,7 @@
 package org.strongswan.android.ui;
 
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
 import android.view.MenuItem;
 
 import org.strongswan.android.R;
index 32605e9..d00f561 100644 (file)
@@ -17,7 +17,6 @@ package org.strongswan.android.ui;
 
 import android.content.Context;
 import android.os.Bundle;
-import android.support.v4.app.ListFragment;
 import android.view.View;
 import android.widget.ListView;
 
@@ -27,6 +26,8 @@ import org.strongswan.android.ui.adapter.RemediationInstructionAdapter;
 
 import java.util.ArrayList;
 
+import androidx.fragment.app.ListFragment;
+
 public class RemediationInstructionsFragment extends ListFragment
 {
        public static final String EXTRA_REMEDIATION_INSTRUCTIONS = "instructions";
index db2e566..6e9a957 100644 (file)
@@ -17,14 +17,15 @@ package org.strongswan.android.ui;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.FragmentManager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatActivity;
 import android.view.MenuItem;
 
 import org.strongswan.android.data.VpnProfileDataSource;
 
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.FragmentManager;
+
 public class SelectedApplicationsActivity extends AppCompatActivity
 {
        private static final String LIST_TAG = "ApplicationList";
index 38c7494..2b041ef 100644 (file)
@@ -20,12 +20,6 @@ import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.ListFragment;
-import android.support.v4.app.LoaderManager;
-import android.support.v4.content.AsyncTaskLoader;
-import android.support.v4.content.Loader;
-import android.support.v7.widget.SearchView;
 import android.text.TextUtils;
 import android.util.Pair;
 import android.view.Menu;
@@ -46,6 +40,13 @@ import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.SearchView;
+import androidx.fragment.app.ListFragment;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.content.AsyncTaskLoader;
+import androidx.loader.content.Loader;
+
 public class SelectedApplicationsListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Pair<List<SelectedApplicationEntry>, List<String>>>, SearchView.OnQueryTextListener
 {
        private SelectedApplicationsAdapter mAdapter;
@@ -74,7 +75,7 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
                }
                mSelection = new TreeSet<>(selection);
 
-               getLoaderManager().initLoader(0, null, this);
+               LoaderManager.getInstance(this).initLoader(0, null, this);
        }
 
        @Override
index ad28529..f70d461 100644 (file)
 package org.strongswan.android.ui;
 
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
 import android.view.MenuItem;
 
+import androidx.appcompat.app.AppCompatActivity;
+
 public class SettingsActivity extends AppCompatActivity
 {
 
index b710c82..654f574 100644 (file)
@@ -18,10 +18,6 @@ package org.strongswan.android.ui;
 import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceFragmentCompat;
-import android.support.v7.preference.PreferenceManager;
 
 import org.strongswan.android.R;
 import org.strongswan.android.data.VpnProfile;
@@ -32,6 +28,11 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceManager;
+
 import static org.strongswan.android.utils.Constants.PREF_DEFAULT_VPN_PROFILE;
 import static org.strongswan.android.utils.Constants.PREF_DEFAULT_VPN_PROFILE_MRU;
 
index 9cfecf3..4581d44 100644 (file)
@@ -24,10 +24,6 @@ import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.AppCompatDialogFragment;
 import android.widget.Toast;
 
 import org.strongswan.android.R;
@@ -41,6 +37,11 @@ import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.fragment.app.FragmentTransaction;
+
 public class TrustedCertificateImportActivity extends AppCompatActivity
 {
        private static final int OPEN_DOCUMENT = 0;
index ae48ba2..b89386a 100644 (file)
@@ -17,10 +17,6 @@ package org.strongswan.android.ui;
 
 import android.content.Context;
 import android.os.Bundle;
-import android.support.v4.app.ListFragment;
-import android.support.v4.app.LoaderManager.LoaderCallbacks;
-import android.support.v4.content.AsyncTaskLoader;
-import android.support.v4.content.Loader;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -45,6 +41,12 @@ import java.util.Map.Entry;
 import java.util.Observable;
 import java.util.Observer;
 
+import androidx.fragment.app.ListFragment;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.app.LoaderManager.LoaderCallbacks;
+import androidx.loader.content.AsyncTaskLoader;
+import androidx.loader.content.Loader;
+
 public class TrustedCertificateListFragment extends ListFragment implements LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener
 {
        public static final String EXTRA_CERTIFICATE_SOURCE = "certificate_source";
@@ -79,7 +81,7 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
                        mSource = (TrustedCertificateSource)arguments.getSerializable(EXTRA_CERTIFICATE_SOURCE);
                }
 
-               getLoaderManager().initLoader(0, null, this);
+               LoaderManager.getInstance(this).initLoader(0, null, this);
        }
 
        @Override
index 0110b63..1c13a11 100644 (file)
@@ -20,16 +20,11 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.design.widget.TabLayout;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatActivity;
 import android.view.Menu;
 import android.view.MenuItem;
 
+import com.google.android.material.tabs.TabLayout;
+
 import org.strongswan.android.R;
 import org.strongswan.android.data.VpnProfileDataSource;
 import org.strongswan.android.logic.TrustedCertificateManager;
@@ -39,6 +34,13 @@ import org.strongswan.android.ui.CertificateDeleteConfirmationDialog.OnCertifica
 
 import java.security.KeyStore;
 
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
 public class TrustedCertificatesActivity extends AppCompatActivity implements TrustedCertificateListFragment.OnTrustedCertificateSelectedListener, OnCertificateDeleteListener
 {
        public static final String SELECT_CERTIFICATE = "org.strongswan.android.action.SELECT_CERTIFICATE";
@@ -167,7 +169,7 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr
 
                public TrustedCertificatesPagerAdapter(FragmentManager fm, Context context)
                {
-                       super(fm);
+                       super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
                        mTabs = new TrustedCertificatesTab[]{
                                new TrustedCertificatesTab(context.getString(R.string.system_tab), TrustedCertificateSource.SYSTEM),
                                new TrustedCertificatesTab(context.getString(R.string.user_tab), TrustedCertificateSource.USER),
index 78cbebf..813afbb 100644 (file)
@@ -25,12 +25,6 @@ import android.content.ServiceConnection;
 import android.net.VpnService;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.AppCompatDialogFragment;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.EditText;
@@ -43,6 +37,13 @@ import org.strongswan.android.data.VpnType.VpnTypeFeature;
 import org.strongswan.android.logic.VpnStateService;
 import org.strongswan.android.logic.VpnStateService.State;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 public class VpnProfileControlActivity extends AppCompatActivity
 {
        public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE";
index e096587..fac9b34 100644 (file)
@@ -27,12 +27,7 @@ import android.os.Bundle;
 import android.security.KeyChain;
 import android.security.KeyChainAliasCallback;
 import android.security.KeyChainException;
-import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.AppCompatDialogFragment;
 import android.text.Editable;
-import android.text.Html;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.TextUtils;
@@ -79,6 +74,12 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.UUID;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.core.text.HtmlCompat;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
 public class VpnProfileDetailActivity extends AppCompatActivity
 {
        private static final int SELECT_TRUSTED_CERTIFICATE = 0;
@@ -89,7 +90,6 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private TrustedCertificateEntry mCertEntry;
        private String mUserCertLoading;
        private CertificateIdentitiesAdapter mSelectUserIdAdapter;
-       private String mSelectedUserId;
        private TrustedCertificateEntry mUserCertEntry;
        private VpnType mVpnType = VpnType.IKEV2_EAP;
        private SelectedAppsHandling mSelectedAppsHandling = SelectedAppsHandling.SELECTED_APPS_DISABLE;
@@ -106,7 +106,6 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private EditText mPassword;
        private ViewGroup mUserCertificate;
        private RelativeLayout mSelectUserCert;
-       private Spinner mSelectUserId;
        private CheckBox mCheckAuto;
        private RelativeLayout mSelectCert;
        private RelativeLayout mTncNotice;
@@ -114,6 +113,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private ViewGroup mAdvancedSettings;
        private MultiAutoCompleteTextView mRemoteId;
        private TextInputLayoutHelper mRemoteIdWrap;
+       private MultiAutoCompleteTextView mLocalId;
+       private TextInputLayoutHelper mLocalIdWrap;
        private EditText mMTU;
        private TextInputLayoutHelper mMTUWrap;
        private EditText mPort;
@@ -139,7 +140,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private EditText mEspProposal;
        private TextView mProfileIdLabel;
        private TextView mProfileId;
-       private MultiAutoCompleteTextView mDnsServers;
+       private EditText mDnsServers;
        private TextInputLayoutHelper mDnsServersWrap;
 
        @Override
@@ -169,7 +170,6 @@ public class VpnProfileDetailActivity extends AppCompatActivity
 
                mUserCertificate = (ViewGroup)findViewById(R.id.user_certificate_group);
                mSelectUserCert = (RelativeLayout)findViewById(R.id.select_user_certificate);
-               mSelectUserId = (Spinner)findViewById(R.id.select_user_id);
 
                mCheckAuto = (CheckBox)findViewById(R.id.ca_auto);
                mSelectCert = (RelativeLayout)findViewById(R.id.select_certificate);
@@ -179,8 +179,10 @@ public class VpnProfileDetailActivity extends AppCompatActivity
 
                mRemoteId = (MultiAutoCompleteTextView)findViewById(R.id.remote_id);
                mRemoteIdWrap = (TextInputLayoutHelper) findViewById(R.id.remote_id_wrap);
-               mDnsServers = (MultiAutoCompleteTextView)findViewById(R.id.dns_servers);
-               mDnsServersWrap = (TextInputLayoutHelper) findViewById(R.id.dns_servers_wrap);
+               mLocalId = findViewById(R.id.local_id);
+               mLocalIdWrap = findViewById(R.id.local_id_wrap);
+               mDnsServers = findViewById(R.id.dns_servers);
+               mDnsServersWrap = findViewById(R.id.dns_servers_wrap);
                mMTU = (EditText)findViewById(R.id.mtu);
                mMTUWrap = (TextInputLayoutHelper) findViewById(R.id.mtu_wrap);
                mPort = (EditText)findViewById(R.id.port);
@@ -215,9 +217,10 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                final SpaceTokenizer spaceTokenizer = new SpaceTokenizer();
                mName.setTokenizer(spaceTokenizer);
                mRemoteId.setTokenizer(spaceTokenizer);
-               final ArrayAdapter<String> completeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line);
-               mName.setAdapter(completeAdapter);
-               mRemoteId.setAdapter(completeAdapter);
+               mLocalId.setTokenizer(spaceTokenizer);
+               final ArrayAdapter<String> gatewayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line);
+               mName.setAdapter(gatewayAdapter);
+               mRemoteId.setAdapter(gatewayAdapter);
 
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                {
@@ -236,8 +239,8 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                        @Override
                        public void afterTextChanged(Editable s)
                        {
-                               completeAdapter.clear();
-                               completeAdapter.add(mGateway.getText().toString());
+                               gatewayAdapter.clear();
+                               gatewayAdapter.add(mGateway.getText().toString());
                                if (TextUtils.isEmpty(mGateway.getText()))
                                {
                                        mNameWrap.setHelperText(getString(R.string.profile_name_hint));
@@ -279,23 +282,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
 
                mSelectUserCert.setOnClickListener(new SelectUserCertOnClickListener());
                mSelectUserIdAdapter = new CertificateIdentitiesAdapter(this);
-               mSelectUserId.setAdapter(mSelectUserIdAdapter);
-               mSelectUserId.setOnItemSelectedListener(new OnItemSelectedListener() {
-                       @Override
-                       public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
-                       {
-                               if (mUserCertEntry != null)
-                               {       /* we don't store the subject DN as it is in the reverse order and the default anyway */
-                                       mSelectedUserId = position == 0 ? null : mSelectUserIdAdapter.getItem(position);
-                               }
-                       }
-
-                       @Override
-                       public void onNothingSelected(AdapterView<?> parent)
-                       {
-                               mSelectedUserId = null;
-                       }
-               });
+               mLocalId.setAdapter(mSelectUserIdAdapter);
 
                mCheckAuto.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        @Override
@@ -383,10 +370,6 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                {
                        outState.putString(VpnProfileDataSource.KEY_USER_CERTIFICATE, mUserCertEntry.getAlias());
                }
-               if (mSelectedUserId != null)
-               {
-                       outState.putString(VpnProfileDataSource.KEY_LOCAL_ID, mSelectedUserId);
-               }
                if (mCertEntry != null)
                {
                        outState.putString(VpnProfileDataSource.KEY_CERTIFICATE, mCertEntry.getAlias());
@@ -454,10 +437,10 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                mUsernamePassword.setVisibility(mVpnType.has(VpnTypeFeature.USER_PASS) ? View.VISIBLE : View.GONE);
                mUserCertificate.setVisibility(mVpnType.has(VpnTypeFeature.CERTIFICATE) ? View.VISIBLE : View.GONE);
                mTncNotice.setVisibility(mVpnType.has(VpnTypeFeature.BYOD) ? View.VISIBLE : View.GONE);
+               mLocalIdWrap.setHelperText(getString(R.string.profile_local_id_hint_user));
 
                if (mVpnType.has(VpnTypeFeature.CERTIFICATE))
                {
-                       mSelectUserId.setEnabled(false);
                        if (mUserCertLoading != null)
                        {
                                ((TextView)mSelectUserCert.findViewById(android.R.id.text1)).setText(mUserCertLoading);
@@ -469,8 +452,6 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                                ((TextView)mSelectUserCert.findViewById(android.R.id.text1)).setText(mUserCertEntry.getAlias());
                                ((TextView)mSelectUserCert.findViewById(android.R.id.text2)).setText(mUserCertEntry.getCertificate().getSubjectDN().toString());
                                mSelectUserIdAdapter.setCertificate(mUserCertEntry);
-                               mSelectUserId.setSelection(mSelectUserIdAdapter.getPosition(mSelectedUserId));
-                               mSelectUserId.setEnabled(true);
                        }
                        else
                        {
@@ -478,6 +459,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                                ((TextView)mSelectUserCert.findViewById(android.R.id.text2)).setText(R.string.profile_user_select_certificate);
                                mSelectUserIdAdapter.setCertificate(null);
                        }
+                       mLocalIdWrap.setHelperText(getString(R.string.profile_local_id_hint_cert));
                }
        }
 
@@ -579,7 +561,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                                   mProfile.getIncludedSubnets() != null || mProfile.getExcludedSubnets() != null ||
                                   mProfile.getSelectedAppsHandling() != SelectedAppsHandling.SELECTED_APPS_DISABLE ||
                                   mProfile.getIkeProposal() != null || mProfile.getEspProposal() != null ||
-                                  mProfile.getDnsServers() != null;
+                                  mProfile.getDnsServers() != null || mProfile.getLocalId() != null;
                }
                mShowAdvanced.setVisibility(!show ? View.VISIBLE : View.GONE);
                mAdvancedSettings.setVisibility(show ? View.VISIBLE : View.GONE);
@@ -630,14 +612,14 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private boolean verifyInput()
        {
                boolean valid = true;
-               if (mGateway.getText().toString().trim().isEmpty())
+               if (getString(mGateway) == null)
                {
                        mGatewayWrap.setError(getString(R.string.alert_text_no_input_gateway));
                        valid = false;
                }
                if (mVpnType.has(VpnTypeFeature.USER_PASS))
                {
-                       if (mUsername.getText().toString().trim().isEmpty())
+                       if (getString(mUsername) == null)
                        {
                                mUsernameWrap.setError(getString(R.string.alert_text_no_input_username));
                                valid = false;
@@ -703,27 +685,24 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        private void updateProfileData()
        {
                /* the name is optional, we default to the gateway if none is given */
-               String name = mName.getText().toString().trim();
-               String gateway = mGateway.getText().toString().trim();
-               mProfile.setName(name.isEmpty() ? gateway : name);
+               String name = getString(mName);
+               String gateway = getString(mGateway);
+               mProfile.setName(name == null ? gateway : name);
                mProfile.setGateway(gateway);
                mProfile.setVpnType(mVpnType);
                if (mVpnType.has(VpnTypeFeature.USER_PASS))
                {
-                       mProfile.setUsername(mUsername.getText().toString().trim());
-                       String password = mPassword.getText().toString().trim();
-                       password = password.isEmpty() ? null : password;
-                       mProfile.setPassword(password);
+                       mProfile.setUsername(getString(mUsername));
+                       mProfile.setPassword(getString(mPassword));
                }
                if (mVpnType.has(VpnTypeFeature.CERTIFICATE))
                {
                        mProfile.setUserCertificateAlias(mUserCertEntry.getAlias());
-                       mProfile.setLocalId(mSelectedUserId);
                }
                String certAlias = mCheckAuto.isChecked() ? null : mCertEntry.getAlias();
                mProfile.setCertificateAlias(certAlias);
-               String remote_id = mRemoteId.getText().toString().trim();
-               mProfile.setRemoteId(remote_id.isEmpty() ? null : remote_id);
+               mProfile.setRemoteId(getString(mRemoteId));
+               mProfile.setLocalId(getString(mLocalId));
                mProfile.setMTU(getInteger(mMTU));
                mProfile.setPort(getInteger(mPort));
                mProfile.setNATKeepAlive(getInteger(mNATKeepalive));
@@ -734,22 +713,17 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                flags |= mStrictRevocation.isChecked() ? VpnProfile.FLAGS_STRICT_REVOCATION : 0;
                flags |= mRsaPss.isChecked() ? VpnProfile.FLAGS_RSA_PSS : 0;
                mProfile.setFlags(flags);
-               String included = mIncludedSubnets.getText().toString().trim();
-               mProfile.setIncludedSubnets(included.isEmpty() ? null : included);
-               String excluded = mExcludedSubnets.getText().toString().trim();
-               mProfile.setExcludedSubnets(excluded.isEmpty() ? null : excluded);
+               mProfile.setIncludedSubnets(getString(mIncludedSubnets));
+               mProfile.setExcludedSubnets(getString(mExcludedSubnets));
                int st = 0;
                st |= mBlockIPv4.isChecked() ? VpnProfile.SPLIT_TUNNELING_BLOCK_IPV4 : 0;
                st |= mBlockIPv6.isChecked() ? VpnProfile.SPLIT_TUNNELING_BLOCK_IPV6 : 0;
                mProfile.setSplitTunneling(st == 0 ? null : st);
                mProfile.setSelectedAppsHandling(mSelectedAppsHandling);
                mProfile.setSelectedApps(mSelectedApps);
-               String ike = mIkeProposal.getText().toString().trim();
-               mProfile.setIkeProposal(ike.isEmpty() ? null : ike);
-               String esp = mEspProposal.getText().toString().trim();
-               mProfile.setEspProposal(esp.isEmpty() ? null : esp);
-               String dns = mDnsServers.getText().toString().trim();
-               mProfile.setDnsServers(dns.isEmpty() ? null : dns);
+               mProfile.setIkeProposal(getString(mIkeProposal));
+               mProfile.setEspProposal(getString(mEspProposal));
+               mProfile.setDnsServers(getString(mDnsServers));
        }
 
        /**
@@ -774,6 +748,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                                mUsername.setText(mProfile.getUsername());
                                mPassword.setText(mProfile.getPassword());
                                mRemoteId.setText(mProfile.getRemoteId());
+                               mLocalId.setText(mProfile.getLocalId());
                                mMTU.setText(mProfile.getMTU() != null ? mProfile.getMTU().toString() : null);
                                mPort.setText(mProfile.getPort() != null ? mProfile.getPort().toString() : null);
                                mNATKeepalive.setText(mProfile.getNATKeepAlive() != null ? mProfile.getNATKeepAlive().toString() : null);
@@ -810,12 +785,10 @@ public class VpnProfileDetailActivity extends AppCompatActivity
 
                /* check if the user selected a user certificate previously */
                useralias = savedInstanceState == null ? useralias : savedInstanceState.getString(VpnProfileDataSource.KEY_USER_CERTIFICATE);
-               local_id = savedInstanceState == null ? local_id : savedInstanceState.getString(VpnProfileDataSource.KEY_LOCAL_ID);
                if (useralias != null)
                {
                        UserCertificateLoader loader = new UserCertificateLoader(this, useralias);
                        mUserCertLoading = useralias;
-                       mSelectedUserId = local_id;
                        loader.execute();
                }
 
@@ -845,6 +818,17 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        }
 
        /**
+        * Get the string value in the given text box or null if empty
+        *
+        * @param view text box
+        */
+       private String getString(EditText view)
+       {
+               String value = view.getText().toString().trim();
+               return value.isEmpty() ? null : value;
+       }
+
+       /**
         * Get the integer value in the given text box or null if empty
         *
         * @param view text box (numeric entry assumed)
@@ -941,7 +925,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                public void onClick(View v)
                {
                        String useralias = mUserCertEntry != null ? mUserCertEntry.getAlias() : null;
-                       KeyChain.choosePrivateKeyAlias(VpnProfileDetailActivity.this, this, new String[] { "RSA" }, null, null, -1, useralias);
+                       KeyChain.choosePrivateKeyAlias(VpnProfileDetailActivity.this, this, null, null, null, -1, useralias);
                }
 
                @Override
@@ -1035,7 +1019,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                {
                        return new AlertDialog.Builder(getActivity())
                                .setTitle(R.string.tnc_notice_title)
-                               .setMessage(Html.fromHtml(getString(R.string.tnc_notice_details)))
+                               .setMessage(HtmlCompat.fromHtml(getString(R.string.tnc_notice_details), HtmlCompat.FROM_HTML_MODE_LEGACY))
                                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int id)
index 221840b..33b3966 100644 (file)
 package org.strongswan.android.ui;
 
 import android.app.Activity;
-import android.app.LoaderManager;
 import android.content.ActivityNotFoundException;
-import android.content.AsyncTaskLoader;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.Loader;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.security.KeyChain;
 import android.security.KeyChainAliasCallback;
 import android.security.KeyChainException;
-import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.app.AppCompatActivity;
 import android.text.TextUtils;
 import android.util.Base64;
 import android.view.Menu;
@@ -79,6 +74,12 @@ import java.util.UUID;
 
 import javax.net.ssl.SSLHandshakeException;
 
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.loader.app.LoaderManager;
+import androidx.loader.content.AsyncTaskLoader;
+import androidx.loader.content.Loader;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
 public class VpnProfileImportActivity extends AppCompatActivity
 {
        private static final String PKCS12_INSTALLED = "PKCS12_INSTALLED";
@@ -95,7 +96,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
        private TrustedCertificateEntry mUserCertEntry;
        private String mUserCertLoading;
        private boolean mHideImport;
-       private android.support.v4.widget.ContentLoadingProgressBar mProgressBar;
+       private androidx.core.widget.ContentLoadingProgressBar mProgressBar;
        private TextView mExistsWarning;
        private ViewGroup mBasicDataGroup;
        private TextView mName;
@@ -229,7 +230,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
                        mUserCertLoading = savedInstanceState.getString(VpnProfileDataSource.KEY_USER_CERTIFICATE);
                        if (mUserCertLoading != null)
                        {
-                               getLoaderManager().initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
+                               LoaderManager.getInstance(this).initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
                        }
                        mImportUserCert.setEnabled(!savedInstanceState.getBoolean(PKCS12_INSTALLED));
                }
@@ -312,7 +313,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
 
                Bundle args = new Bundle();
                args.putParcelable(PROFILE_URI, uri);
-               getLoaderManager().initLoader(PROFILE_LOADER, args, mProfileLoaderCallbacks);
+               LoaderManager.getInstance(this).initLoader(PROFILE_LOADER, args, mProfileLoaderCallbacks);
        }
 
        public void handleProfile(ProfileLoadResult data)
@@ -400,7 +401,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
                        if (mUserCertLoading == null)
                        {
                                mUserCertLoading = getString(R.string.profile_cert_alias, mProfile.getName());
-                               getLoaderManager().initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
+                               LoaderManager.getInstance(this).initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
                        }
                        updateUserCertView();
                }
@@ -504,6 +505,8 @@ public class VpnProfileImportActivity extends AppCompatActivity
                JSONObject local = obj.optJSONObject("local");
                if (local != null)
                {
+                       profile.setLocalId(local.optString("id", null));
+
                        if (type.has(VpnTypeFeature.USER_PASS))
                        {
                                profile.setUsername(local.optString("eap_id", null));
@@ -511,7 +514,6 @@ public class VpnProfileImportActivity extends AppCompatActivity
 
                        if (type.has(VpnTypeFeature.CERTIFICATE))
                        {
-                               profile.setLocalId(local.optString("id", null));
                                profile.PKCS12 = decodeBase64(local.optString("p12", null));
 
                                if (local.optBoolean("rsa-pss", false))
@@ -887,7 +889,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
                        {
                                alias = getString(R.string.profile_cert_alias, mProfile.getName());
                        }
-                       KeyChain.choosePrivateKeyAlias(VpnProfileImportActivity.this, this, new String[] { "RSA" }, null, null, -1, alias);
+                       KeyChain.choosePrivateKeyAlias(VpnProfileImportActivity.this, this, null, null, null, -1, alias);
                }
 
                @Override
@@ -902,7 +904,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
                                        updateUserCertView();
                                        if (alias != null)
                                        {       /* otherwise the dialog was canceled, the request denied */
-                                               getLoaderManager().restartLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
+                                               LoaderManager.getInstance(VpnProfileImportActivity.this).restartLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
                                        }
                                }
                        });
index 904b434..c6d430f 100644 (file)
@@ -23,8 +23,6 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.TypedArray;
 import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.content.LocalBroadcastManager;
 import android.util.AttributeSet;
 import android.view.ActionMode;
 import android.view.LayoutInflater;
@@ -51,6 +49,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
+import androidx.fragment.app.Fragment;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
 public class VpnProfileListFragment extends Fragment
 {
        private static final String SELECTED_KEY = "SELECTED";
index fe3d013..0b1e611 100644 (file)
@@ -17,15 +17,16 @@ package org.strongswan.android.ui;
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.v4.content.pm.ShortcutInfoCompat;
-import android.support.v4.content.pm.ShortcutManagerCompat;
-import android.support.v4.graphics.drawable.IconCompat;
-import android.support.v7.app.AppCompatActivity;
 
 import org.strongswan.android.R;
 import org.strongswan.android.data.VpnProfile;
 import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedListener;
 
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.pm.ShortcutInfoCompat;
+import androidx.core.content.pm.ShortcutManagerCompat;
+import androidx.core.graphics.drawable.IconCompat;
+
 public class VpnProfileSelectActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
 {
        @Override
index edc70fa..1214b12 100644 (file)
@@ -24,8 +24,6 @@ import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.support.v4.app.Fragment;
-import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -41,6 +39,9 @@ import org.strongswan.android.logic.VpnStateService.ErrorState;
 import org.strongswan.android.logic.VpnStateService.State;
 import org.strongswan.android.logic.VpnStateService.VpnStateListener;
 
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+
 public class VpnStateFragment extends Fragment implements VpnStateListener
 {
        private boolean mVisible;
index 623a80f..e754fe1 100644 (file)
@@ -39,7 +39,6 @@ import org.strongswan.android.utils.Constants;
 @TargetApi(Build.VERSION_CODES.N)
 public class VpnTileService extends TileService implements VpnStateService.VpnStateListener
 {
-       private boolean mListening;
        private VpnProfileDataSource mDataSource;
        private VpnStateService mService;
        private final ServiceConnection mServiceConnection = new ServiceConnection()
@@ -54,7 +53,7 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
                public void onServiceConnected(ComponentName name, IBinder service)
                {
                        mService = ((VpnStateService.LocalBinder)service).getService();
-                       if (mListening)
+                       if (mDataSource != null)
                        {
                                mService.registerListener(VpnTileService.this);
                                updateTile();
@@ -70,27 +69,27 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
                Context context = getApplicationContext();
                context.bindService(new Intent(context, VpnStateService.class),
                                                        mServiceConnection, Service.BIND_AUTO_CREATE);
-
-               mDataSource = new VpnProfileDataSource(this);
-               mDataSource.open();
        }
 
        @Override
        public void onDestroy()
        {
                super.onDestroy();
+
                if (mService != null)
                {
                        getApplicationContext().unbindService(mServiceConnection);
                }
-               mDataSource.close();
        }
 
        @Override
        public void onStartListening()
        {
                super.onStartListening();
-               mListening = true;
+
+               mDataSource = new VpnProfileDataSource(this);
+               mDataSource.open();
+
                if (mService != null)
                {
                        mService.registerListener(this);
@@ -102,11 +101,14 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
        public void onStopListening()
        {
                super.onStopListening();
-               mListening = false;
+
                if (mService != null)
                {
                        mService.unregisterListener(this);
                }
+
+               mDataSource.close();
+               mDataSource = null;
        }
 
        private VpnProfile getProfile()
index c8e3df3..912f524 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Tobias Brunner
+ * Copyright (C) 2016-2019 Tobias Brunner
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
 package org.strongswan.android.ui.adapter;
 
 import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
-import android.widget.TextView;
 
-import org.strongswan.android.R;
 import org.strongswan.android.security.TrustedCertificateEntry;
 
-import java.util.List;
-
 public class CertificateIdentitiesAdapter extends ArrayAdapter<String>
 {
        TrustedCertificateEntry mCertificate;
@@ -51,14 +44,8 @@ public class CertificateIdentitiesAdapter extends ArrayAdapter<String>
 
        private void extractIdentities()
        {
-               if (mCertificate == null)
-               {
-                       add(getContext().getString(R.string.profile_user_select_id_init));
-               }
-               else
+               if (mCertificate != null)
                {
-                       add(String.format(getContext().getString(R.string.profile_user_select_id_default),
-                                                         mCertificate.getCertificate().getSubjectDN().getName()));
                        addAll(mCertificate.getSubjectAltNames());
                }
        }
index 0bfbbcf..df6753d 100644 (file)
@@ -18,10 +18,11 @@ package org.strongswan.android.ui.adapter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
 
 import java.text.Collator;
 
+import androidx.annotation.NonNull;
+
 public class SelectedApplicationEntry implements Comparable<SelectedApplicationEntry>
 {
        private final ApplicationInfo mInfo;
index f1ff1c6..d920174 100644 (file)
 
 package org.strongswan.android.ui.adapter;
 
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.strongswan.android.R;
-import org.strongswan.android.data.VpnProfile;
-import org.strongswan.android.data.VpnType.VpnTypeFeature;
-
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -32,6 +24,14 @@ import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.TextView;
 
+import org.strongswan.android.R;
+import org.strongswan.android.data.VpnProfile;
+import org.strongswan.android.data.VpnType.VpnTypeFeature;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
 public class VpnProfileAdapter extends ArrayAdapter<VpnProfile>
 {
        private final int resource;
@@ -74,7 +74,7 @@ public class VpnProfileAdapter extends ArrayAdapter<VpnProfile>
                                 profile.getLocalId() != null)
                {
                        tv.setVisibility(View.VISIBLE);
-                       tv.setText(getContext().getString(R.string.profile_user_select_id_label) + ": " + profile.getLocalId());
+                       tv.setText(getContext().getString(R.string.profile_local_id_label) + ": " + profile.getLocalId());
                }
                else
                {
index fb5e85b..48e942f 100644 (file)
 package org.strongswan.android.ui.widget;
 
 import android.content.Context;
-import android.support.annotation.Nullable;
 import android.util.AttributeSet;
 import android.widget.Checkable;
 import android.widget.LinearLayout;
 
+import androidx.annotation.Nullable;
+
 public class CheckableLinearLayout extends LinearLayout implements Checkable
 {
        private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
index 45b0ae5..f539062 100644 (file)
@@ -17,10 +17,6 @@ package org.strongswan.android.ui.widget;
 
 import android.content.Context;
 import android.content.res.TypedArray;
-import android.support.annotation.Nullable;
-import android.support.design.widget.TextInputLayout;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.util.AttributeSet;
@@ -31,10 +27,16 @@ import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.google.android.material.textfield.TextInputLayout;
+
 import org.strongswan.android.R;
 
+import androidx.annotation.Nullable;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.ViewPropertyAnimatorListenerAdapter;
+
 /**
- * Layout that extends {@link android.support.design.widget.TextInputLayout} with a helper text
+ * Layout that extends {@link TextInputLayout} with a helper text
  * displayed below the text field when it receives the focus. Also, any error message shown with
  * {@link #setError(CharSequence)} is hidden when the text field is changed (this mirrors the
  * behavior of {@link android.widget.EditText}).
@@ -141,7 +143,10 @@ public class TextInputLayoutHelper extends TextInputLayout
         */
        public void setHelperText(CharSequence text)
        {
-               mHelperText.setText(text);
+               if (mHelperText != null)
+               {
+                       mHelperText.setText(text);
+               }
        }
 
        private void showHelper(boolean show)
index e839770..64e0bab 100644 (file)
@@ -15,8 +15,6 @@
 
 package org.strongswan.android.utils;
 
-import android.support.annotation.NonNull;
-
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
@@ -24,6 +22,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 /**
  * Class that represents a range of IP addresses. This range could be a proper subnet, but that's
  * not necessarily the case (see {@code getPrefix} and {@code toSubnets}).
index 05cb599..f37d992 100644 (file)
@@ -829,7 +829,7 @@ static job_requeue_t initiate(private_android_service_t *this)
        if (!gateway || gateway->get_type(gateway) == ID_ANY)
        {
                DESTROY_IF(gateway);
-               gateway = identification_create_from_string(server);
+               gateway = identification_create_from_string(ike.remote);
                /* only use this if remote ID was not configured explicitly */
                auth->add(auth, AUTH_RULE_IDENTITY_LOOSE, TRUE);
        }
index 32892da..0f69378 100644 (file)
     android:orientation="vertical"
     android:padding="10dp" >
 
-    <android.support.design.widget.TextInputLayout
+    <com.google.android.material.textfield.TextInputLayout
         android:id="@+id/username_wrap"
         android:layout_width="match_parent"
         android:layout_height="wrap_content" >
 
-        <android.support.design.widget.TextInputEditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/username"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="none"
             android:hint="@string/login_username" />
 
-    </android.support.design.widget.TextInputLayout>
+    </com.google.android.material.textfield.TextInputLayout>
 
-    <android.support.design.widget.TextInputLayout
+    <com.google.android.material.textfield.TextInputLayout
         android:id="@+id/password_wrap"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="4dp" >
 
-        <android.support.design.widget.TextInputEditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/password"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -50,6 +50,6 @@
             android:inputType="textPassword|textNoSuggestions"
             android:hint="@string/login_password" />
 
-    </android.support.design.widget.TextInputLayout>
+    </com.google.android.material.textfield.TextInputLayout>
 
 </LinearLayout>
index 671c58d..acab0b2 100644 (file)
@@ -35,7 +35,7 @@
             android:hint="@string/profile_gateway_label"
             app:helper_text="@string/profile_gateway_hint" >
 
-            <android.support.design.widget.TextInputEditText
+            <com.google.android.material.textfield.TextInputEditText
                 android:id="@+id/gateway"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:id="@+id/username_wrap"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:layout_marginTop="4dp"
                 android:hint="@string/profile_username_label" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/username"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -92,7 +93,7 @@
                 android:hint="@string/profile_password_label"
                 app:helper_text="@string/profile_password_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/password"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:id="@+id/select_user_certificate"
                 layout="@layout/two_line_button" />
 
-            <TextView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="4dp"
-                android:layout_marginLeft="4dp"
-                android:textSize="12sp"
-                android:text="@string/profile_user_select_id_label" />
-
-            <Spinner
-                android:id="@+id/select_user_id"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:spinnerMode="dropdown" />
-
         </LinearLayout>
 
         <TextView
             </org.strongswan.android.ui.widget.TextInputLayoutHelper>
 
             <org.strongswan.android.ui.widget.TextInputLayoutHelper
+                android:id="@+id/local_id_wrap"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/profile_local_id_label"
+                app:helper_text="@string/profile_local_id_hint_user" >
+
+                <MultiAutoCompleteTextView
+                    android:id="@+id/local_id"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:inputType="textNoSuggestions"
+                    android:completionThreshold="0" />
+
+            </org.strongswan.android.ui.widget.TextInputLayoutHelper>
+
+            <org.strongswan.android.ui.widget.TextInputLayoutHelper
                 android:id="@+id/dns_servers_wrap"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="10dp"
                 android:hint="@string/profile_dns_servers_label"
                 app:helper_text="@string/profile_dns_servers_hint" >
 
-                <MultiAutoCompleteTextView
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/dns_servers"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:singleLine="true"
-                    android:inputType="textNoSuggestions"
-                    android:completionThreshold="1" />
+                    android:inputType="textNoSuggestions" />
 
             </org.strongswan.android.ui.widget.TextInputLayoutHelper>
 
                 android:hint="@string/profile_mtu_label"
                 app:helper_text="@string/profile_mtu_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/mtu"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_port_label"
                 app:helper_text="@string/profile_port_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/port"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_nat_keepalive_label"
                 app:helper_text="@string/profile_nat_keepalive_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/nat_keepalive"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_included_subnets_label"
                 app:helper_text="@string/profile_included_subnets_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/included_subnets"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_excluded_subnets_label"
                 app:helper_text="@string/profile_excluded_subnets_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/excluded_subnets"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_proposals_ike_label"
                 app:helper_text="@string/profile_proposals_ike_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/ike_proposal"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_proposals_esp_label"
                 app:helper_text="@string/profile_proposals_esp_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/esp_proposal"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
index 8fba69f..3b130da 100644 (file)
@@ -25,7 +25,7 @@
         android:padding="10dp"
         android:animateLayoutChanges="true" >
 
-        <android.support.v4.widget.ContentLoadingProgressBar
+        <androidx.core.widget.ContentLoadingProgressBar
             style="@style/Widget.AppCompat.ProgressBar.Horizontal"
             android:id="@+id/progress_bar"
             android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:hint="@string/profile_username_label" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/username"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                 android:hint="@string/profile_password_label"
                 app:helper_text="@string/profile_password_hint" >
 
-                <android.support.design.widget.TextInputEditText
+                <com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/password"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
index 20d1cc0..44b45e6 100644 (file)
               android:layout_height="match_parent"
               android:orientation="vertical">
 
-    <android.support.design.widget.TabLayout
+    <com.google.android.material.tabs.TabLayout
         android:id="@+id/tabs"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:tabGravity="fill"
         app:tabMode="fixed"/>
 
-    <android.support.v4.view.ViewPager
+    <androidx.viewpager.widget.ViewPager
         android:id="@+id/viewpager"
         android:layout_width="match_parent"
         android:layout_height="0dp"
index f7fc36d..fcd14ea 100644 (file)
@@ -73,9 +73,6 @@
     <string name="profile_user_certificate_label">Benutzer-Zertifikat</string>
     <string name="profile_user_select_certificate_label">Benutzer-Zertifikat auswählen</string>
     <string name="profile_user_select_certificate">Wählen Sie ein bestimmtes Benutzer-Zertifikat</string>
-    <string name="profile_user_select_id_label">Benutzer-Identität</string>
-    <string name="profile_user_select_id_init">Wählen Sie zuerst ein Benutzer-Zertifikat</string>
-    <string name="profile_user_select_id_default">Standardwert (%1$s)</string>
     <string name="profile_ca_label">CA-Zertifikat</string>
     <string name="profile_ca_auto_label">Automatisch wählen</string>
     <string name="profile_ca_select_certificate_label">CA-Zertifikat auswählen</string>
     <string name="profile_remote_id_label">Server-Identität</string>
     <string name="profile_remote_id_hint">Standardwert ist der konfigurierte Server. Eigene Werte werden explizit an den Server gesendet und während der Authentifizierung erzwungen</string>
     <string name="profile_remote_id_hint_gateway">Standardwert ist \"%1$s\". Eigene Werte werden explizit an den Server gesendet und während der Authentifizierung erzwungen</string>
+    <string name="profile_local_id_label">Client-Identität</string>
+    <string name="profile_local_id_hint_user">Standardwert ist der konfigurierte Benutzername. Eigene Werte können verwendet werden, falls der Server diese erwartet/benötigt</string>
+    <string name="profile_local_id_hint_cert">Standardwert ist die Inhaber-Identität des Zertifkats. Eigene Werte können verwendet werden, falls der Server diese erwartet/benötigt. Zu beachten ist, dass diese üblicherweise vom Zertifikat bestätigt werden müssen (für die alternativen Identitäten des Zertifikats, falls vorhanden, wird eine Auto-Vervollständigung angeboten)</string>
     <string name="profile_dns_servers_label">DNS Server</string>
-    <string name="profile_dns_servers_hint">Benutzerdefinierte DNS Server bei Verbindung zum VPN (mit Leerzeichen getrennt, z.B.. \"8.8.8.8 2001:4860:4860::8888\", standardmässig werden die vom VPN Server erhaltenen Server verwendet)</string>
+    <string name="profile_dns_servers_hint">Benutzerdefinierte DNS Server bei Verbindung zum VPN (mit Leerzeichen getrennt, z.B.. \"8.8.8.8 2001:4860:4860::8888\"), standardmässig werden die vom VPN Server erhaltenen Server verwendet</string>
     <string name="profile_mtu_label">MTU des VPN Tunnel-Device</string>
     <string name="profile_mtu_hint">Falls der Standardwert in einem bestimmten Netzwerk nicht geeignet ist</string>
     <string name="profile_port_label">Server Port</string>
index b202b67..6f4716b 100644 (file)
@@ -73,9 +73,6 @@
     <string name="profile_user_certificate_label">Certyfikat użytkownika</string>
     <string name="profile_user_select_certificate_label">Wybierz certyfikat użytkownika</string>
     <string name="profile_user_select_certificate">>Wybierz określony certyfikat użytkownika</string>
-    <string name="profile_user_select_id_label">User identity</string>
-    <string name="profile_user_select_id_init">Select a certificate first</string>
-    <string name="profile_user_select_id_default">Default (%1$s)</string>
     <string name="profile_ca_label">Certyfikat CA</string>
     <string name="profile_ca_auto_label">Wybierz automatycznie</string>
     <string name="profile_ca_select_certificate_label">Wybierz certyfikat CA</string>
     <string name="profile_remote_id_label">Server identity</string>
     <string name="profile_remote_id_hint">Defaults to the configured server. Custom values are explicitly sent to the server and enforced during authentication</string>
     <string name="profile_remote_id_hint_gateway">Defaults to \"%1$s\". Custom values are explicitly sent to the server and enforced during authentication</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
     <string name="profile_dns_servers_label">DNS servers</string>
-    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\", defaults to those received from the VPN server)</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">MTU of the VPN tunnel device</string>
     <string name="profile_mtu_hint">In case the default value is unsuitable for a particular network</string>
     <string name="profile_port_label">Server port</string>
index 1f81587..5def66d 100644 (file)
@@ -70,9 +70,6 @@
     <string name="profile_user_certificate_label">Сертификат пользователя</string>
     <string name="profile_user_select_certificate_label">Выбрать сертификат пользователя</string>
     <string name="profile_user_select_certificate">Выбрать сертификат пользователя</string>
-    <string name="profile_user_select_id_label">User identity</string>
-    <string name="profile_user_select_id_init">Select a certificate first</string>
-    <string name="profile_user_select_id_default">Default (%1$s)</string>
     <string name="profile_ca_label">Сертификат CA</string>
     <string name="profile_ca_auto_label">Выбрать автоматически</string>
     <string name="profile_ca_select_certificate_label">Выбрать сертификат CA</string>
     <string name="profile_remote_id_label">Server identity</string>
     <string name="profile_remote_id_hint">Defaults to the configured server. Custom values are explicitly sent to the server and enforced during authentication</string>
     <string name="profile_remote_id_hint_gateway">Defaults to \"%1$s\". Custom values are explicitly sent to the server and enforced during authentication</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
     <string name="profile_dns_servers_label">DNS servers</string>
-    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\", defaults to those received from the VPN server)</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">MTU of the VPN tunnel device</string>
     <string name="profile_mtu_hint">In case the default value is unsuitable for a particular network</string>
     <string name="profile_port_label">Server port</string>
index 95fdd42..4920aa2 100644 (file)
@@ -71,9 +71,6 @@
     <string name="profile_user_certificate_label">Сертифікат користувача</string>
     <string name="profile_user_select_certificate_label">Виберіть сертифікат користувача</string>
     <string name="profile_user_select_certificate">Вибрати спеціальний сертифікат користувача</string>
-    <string name="profile_user_select_id_label">User identity</string>
-    <string name="profile_user_select_id_init">Select a certificate first</string>
-    <string name="profile_user_select_id_default">Default (%1$s)</string>
     <string name="profile_ca_label">Сертифікат CA</string>
     <string name="profile_ca_auto_label">Вибрати автоматично</string>
     <string name="profile_ca_select_certificate_label">Вибрати сертифікат CA</string>
     <string name="profile_remote_id_label">Server identity</string>
     <string name="profile_remote_id_hint">Defaults to the configured server. Custom values are explicitly sent to the server and enforced during authentication</string>
     <string name="profile_remote_id_hint_gateway">Defaults to \"%1$s\". Custom values are explicitly sent to the server and enforced during authentication</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
     <string name="profile_dns_servers_label">DNS servers</string>
-    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\", defaults to those received from the VPN server)</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">MTU of the VPN tunnel device</string>
     <string name="profile_mtu_hint">In case the default value is unsuitable for a particular network</string>
     <string name="profile_port_label">Server port</string>
index 006ad53..3408f5f 100644 (file)
@@ -70,9 +70,6 @@
     <string name="profile_user_certificate_label">用户证书</string>
     <string name="profile_user_select_certificate_label">选择用户证书</string>
     <string name="profile_user_select_certificate">选择指定的用户证书</string>
-    <string name="profile_user_select_id_label">用户ID</string>
-    <string name="profile_user_select_id_init">首先选择一个证书</string>
-    <string name="profile_user_select_id_default">默认(%1$s)</string>
     <string name="profile_ca_label">CA证书</string>
     <string name="profile_ca_auto_label">自动选择</string>
     <string name="profile_ca_select_certificate_label">选择CA证书</string>
     <string name="profile_remote_id_label">服务器ID</string>
     <string name="profile_remote_id_hint">默认为已配置的服务器地址。自义定值将在鉴权期间被显式地发送至服务器</string>
     <string name="profile_remote_id_hint_gateway">默认为 \"%1$s\"。自义定值将在鉴权期间被显式地发送至服务器</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
+    <string name="profile_dns_servers_label">DNS servers</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">VPN隧道设备的MTU值</string>
     <string name="profile_mtu_hint">假如在某一网络下默认值不合适</string>
     <string name="profile_port_label">服务器端口</string>
index 12666ca..e3d7f03 100644 (file)
@@ -70,9 +70,6 @@
     <string name="profile_user_certificate_label">用戶憑證</string>
     <string name="profile_user_select_certificate_label">選擇用戶憑證</string>
     <string name="profile_user_select_certificate">選擇指定的用戶憑證</string>
-    <string name="profile_user_select_id_label">用戶帳號</string>
-    <string name="profile_user_select_id_init">請先選擇一個憑證</string>
-    <string name="profile_user_select_id_default">預設(%1$s)</string>
     <string name="profile_ca_label">CA憑證</string>
     <string name="profile_ca_auto_label">自動選擇</string>
     <string name="profile_ca_select_certificate_label">選擇CA憑證</string>
     <string name="profile_remote_id_label">伺服器ID</string>
     <string name="profile_remote_id_hint">預設為已設定的伺服器位置。自訂值會在授權期間送到伺服器</string>
     <string name="profile_remote_id_hint_gateway">預設為 \"%1$s\"。自訂值會在授權期間送到伺服器</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
     <string name="profile_dns_servers_label">DNS servers</string>
-    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\", defaults to those received from the VPN server)</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">VPN通道裝置的MTU值</string>
     <string name="profile_mtu_hint">如果在某個網路下預設值不適合</string>
     <string name="profile_port_label">伺服器Port</string>
index e86e84b..4d9fd87 100644 (file)
@@ -73,9 +73,6 @@
     <string name="profile_user_certificate_label">User certificate</string>
     <string name="profile_user_select_certificate_label">Select user certificate</string>
     <string name="profile_user_select_certificate">Select a specific user certificate</string>
-    <string name="profile_user_select_id_label">User identity</string>
-    <string name="profile_user_select_id_init">Select a certificate first</string>
-    <string name="profile_user_select_id_default">Default (%1$s)</string>
     <string name="profile_ca_label">CA certificate</string>
     <string name="profile_ca_auto_label">Select automatically</string>
     <string name="profile_ca_select_certificate_label">Select CA certificate</string>
     <string name="profile_remote_id_label">Server identity</string>
     <string name="profile_remote_id_hint">Defaults to the configured server. Custom values are explicitly sent to the server and enforced during authentication</string>
     <string name="profile_remote_id_hint_gateway">Defaults to \"%1$s\". Custom values are explicitly sent to the server and enforced during authentication</string>
+    <string name="profile_local_id_label">Client identity</string>
+    <string name="profile_local_id_hint_user">Defaults to the configured username. Custom values may be used if expected/required by the server</string>
+    <string name="profile_local_id_hint_cert">Defaults to the certificate\'s subject identity. Custom values may be used if expected/required by the server. Note that these usually must be confirmed by the certificate (auto-completion is provided for the certificate\'s alternative identities, if any)</string>
     <string name="profile_dns_servers_label">DNS servers</string>
-    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\", defaults to those received from the VPN server)</string>
+    <string name="profile_dns_servers_hint">Custom DNS servers to use when connected to the VPN (separated by spaces, e.g. \"8.8.8.8 2001:4860:4860::8888\"), defaults to those received from the VPN server</string>
     <string name="profile_mtu_label">MTU of the VPN tunnel device</string>
     <string name="profile_mtu_hint">In case the default value is unsuitable for a particular network</string>
     <string name="profile_port_label">Server port</string>
index 970bc06..5880d16 100644 (file)
@@ -4,7 +4,7 @@ buildscript {
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.3.2'
+        classpath 'com.android.tools.build:gradle:3.5.1'
     }
 }
 
diff --git a/src/frontends/android/gradle.properties b/src/frontends/android/gradle.properties
new file mode 100644 (file)
index 0000000..5465fec
--- /dev/null
@@ -0,0 +1,2 @@
+android.enableJetifier=true
+android.useAndroidX=true
\ No newline at end of file
index a0a4bbe..558ba36 100644 (file)
@@ -1,6 +1,6 @@
-#Mon Mar 04 17:15:25 CET 2019
+#Mon Oct 07 16:41:25 CEST 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
index 29b3232..c1de833 100644 (file)
@@ -100,8 +100,8 @@ down)
        shift
        if [ "$#" -ne 1 ]
        then
-           echo "Usage: $IPSEC_SCRIPT down <connection name>"
-           exit 2
+               echo "Usage: $IPSEC_SCRIPT down <connection name>"
+               exit 2
        fi
        rc=7
        if [ -e $IPSEC_CHARON_PID ]
@@ -115,8 +115,8 @@ down-srcip)
        shift
        if [ "$#" -lt 1 ]
        then
-           echo "Usage: $IPSEC_SCRIPT down-srcip <start> [<end>]"
-           exit 2
+               echo "Usage: $IPSEC_SCRIPT down-srcip <start> [<end>]"
+               exit 2
        fi
        rc=7
        if [ -e $IPSEC_CHARON_PID ]
@@ -283,8 +283,8 @@ up)
        shift
        if [ "$#" -ne 1 ]
        then
-           echo "Usage: $IPSEC_SCRIPT up <connection name>"
-           exit 2
+               echo "Usage: $IPSEC_SCRIPT up <connection name>"
+               exit 2
        fi
        rc=7
        if [ -e $IPSEC_CHARON_PID ]
index d1fb337..cefab67 100644 (file)
@@ -140,7 +140,7 @@ processing/jobs/dpd_timeout_job.c processing/jobs/dpd_timeout_job.h \
 processing/jobs/adopt_children_job.c processing/jobs/adopt_children_job.h
 
 libcharon_la_SOURCES += \
-    bus/listeners/sys_logger.c bus/listeners/sys_logger.h
+       bus/listeners/sys_logger.c bus/listeners/sys_logger.h
 
 LOCAL_SRC_FILES := $(filter %.c,$(libcharon_la_SOURCES))
 
index d31b62c..52c2ef1 100644 (file)
@@ -17,7 +17,7 @@
 
 #include "attributes.h"
 
-ENUM_BEGIN(configuration_attribute_type_names, INTERNAL_IP4_ADDRESS, P_CSCF_IP6_ADDRESS,
+ENUM_BEGIN(configuration_attribute_type_names, INTERNAL_IP4_ADDRESS, INTERNAL_DNSSEC_TA,
        "INTERNAL_IP4_ADDRESS",
        "INTERNAL_IP4_NETMASK",
        "INTERNAL_IP4_DNS",
@@ -38,8 +38,13 @@ ENUM_BEGIN(configuration_attribute_type_names, INTERNAL_IP4_ADDRESS, P_CSCF_IP6_
        "INTERNAL_IP6_PREFIX",
        "HOME_AGENT_ADDRESS",
        "P_CSCF_IP4_ADDRESS",
-       "P_CSCF_IP6_ADDRESS");
-ENUM_NEXT(configuration_attribute_type_names, XAUTH_TYPE, XAUTH_ANSWER, P_CSCF_IP6_ADDRESS,
+       "P_CSCF_IP6_ADDRESS",
+       "FTT_KAT",
+       "EXT_SRC_IP4_NAT_INFO",
+       "TIMEOUT_PERIOD_FOR_DPD",
+       "INTERNAL_DNS_DOMAIN",
+       "INTERNAL_DNSSEC_TA");
+ENUM_NEXT(configuration_attribute_type_names, XAUTH_TYPE, XAUTH_ANSWER, INTERNAL_DNSSEC_TA,
        "XAUTH_TYPE",
        "XAUTH_USER_NAME",
        "XAUTH_USER_PASSWORD",
@@ -67,7 +72,7 @@ ENUM_NEXT(configuration_attribute_type_names, UNITY_BANNER, UNITY_DDNS_HOSTNAME,
        "UNITY_DDNS_HOSTNAME");
 ENUM_END(configuration_attribute_type_names, UNITY_DDNS_HOSTNAME);
 
-ENUM_BEGIN(configuration_attribute_type_short_names, INTERNAL_IP4_ADDRESS, P_CSCF_IP6_ADDRESS,
+ENUM_BEGIN(configuration_attribute_type_short_names, INTERNAL_IP4_ADDRESS, INTERNAL_DNSSEC_TA,
        "ADDR",
        "MASK",
        "DNS",
@@ -88,8 +93,13 @@ ENUM_BEGIN(configuration_attribute_type_short_names, INTERNAL_IP4_ADDRESS, P_CSC
        "PFX6",
        "HOA",
        "PCSCF4",
-       "PCSCF6");
-ENUM_NEXT(configuration_attribute_type_short_names, XAUTH_TYPE, XAUTH_ANSWER, P_CSCF_IP6_ADDRESS,
+       "PCSCF6",
+       "FTTKAT",
+       "EXTSRC4",
+       "DPD",
+       "DOMAIN",
+       "TA");
+ENUM_NEXT(configuration_attribute_type_short_names, XAUTH_TYPE, XAUTH_ANSWER, INTERNAL_DNSSEC_TA,
        "X_TYPE",
        "X_USER",
        "X_PWD",
index 119143a..0a83277 100644 (file)
@@ -52,6 +52,15 @@ enum configuration_attribute_type_t {
        /* RFC 7651 */
        P_CSCF_IP4_ADDRESS              = 20,
        P_CSCF_IP6_ADDRESS              = 21,
+       /* Firewall traversal keep-alive time (TS 24.302 12.6.0) */
+       FTT_KAT                                 = 22,
+       /* External NAT endpoint (TS 29.139) */
+       EXT_SRC_IP4_NAT_INFO    = 23,
+       /* DPD interval (TS 24.302 13.4.0)*/
+       TIMEOUT_PERIOD_FOR_DPD  = 24,
+       /* RFC 8598 */
+       INTERNAL_DNS_DOMAIN             = 25,
+       INTERNAL_DNSSEC_TA              = 26,
        /* XAUTH attributes */
        XAUTH_TYPE              = 16520,
        XAUTH_USER_NAME         = 16521,
index d2f3afd..801e42c 100644 (file)
@@ -680,7 +680,7 @@ METHOD(daemon_t, set_level, void,
                                entry->logger.custom->set_level(entry->logger.custom, group,
                                                                                                level);
                                charon->bus->add_logger(charon->bus,
-                                                                               &entry->logger.sys->logger);
+                                                                               &entry->logger.custom->logger);
                                break;
                }
        }
index 6a39dc8..85e11a2 100644 (file)
@@ -172,7 +172,7 @@ static encoding_rule_t encodings[] = {
        { FLAG,                 offsetof(private_ike_header_t, flags.encryption)},
        /* 4 Byte message id, stored in the field message_id */
        { U_INT_32,             offsetof(private_ike_header_t, message_id)              },
-       /* 4 Byte length fied, stored in the field length */
+       /* 4 Byte length field, stored in the field length */
        { HEADER_LENGTH,        offsetof(private_ike_header_t, length)                  }
 };
 
index a69db93..fc5c198 100644 (file)
@@ -467,6 +467,14 @@ METHOD(payload_t, verify, status_t,
                        }
                        break;
                }
+               case COOKIE:
+               {
+                       if (this->notify_data.len < 1 || this->notify_data.len > 64)
+                       {
+                               bad_length = TRUE;
+                       }
+                       break;
+               }
                case ADDITIONAL_IP4_ADDRESS:
                {
                        if (this->notify_data.len != 4)
index 37170a3..92bbe57 100644 (file)
@@ -1760,6 +1760,17 @@ METHOD(kernel_ipsec_t, add_sa, status_t,
                        sa->sadb_sa_replay = min((data->replay_window + 7) / 8, UINT8_MAX);
 #endif
                }
+               if (data->esn)
+               {
+#ifdef SADB_X_SAFLAGS_ESN
+                       DBG2(DBG_KNL, "  using extended sequence numbers (ESN)");
+                       sa->sadb_sa_flags |= SADB_X_SAFLAGS_ESN;
+#else
+                       DBG1(DBG_KNL, "extended sequence numbers (ESN) not supported by "
+                                "kernel!");
+                       return FAILED;
+#endif
+               }
                sa->sadb_sa_auth = lookup_algorithm(INTEGRITY_ALGORITHM, data->int_alg);
                sa->sadb_sa_encrypt = lookup_algorithm(ENCRYPTION_ALGORITHM,
                                                                                           data->enc_alg);
index 6ae7b7e..0740dd3 100644 (file)
@@ -136,22 +136,23 @@ static char private[] = {
 };
 
 /**
- * And an associated self-signed certificate
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQDQXr7poAPYZLxmTCqR51STGRuk9Hc5SWtTcs6b2RzpnP8EVRLx
-JEVxOKE9Mw6n7mD1pNrupCpnpGRdLAV5VznTPhSQ6k7ppJJrxosRYg0pHTZqBUEC
-7nQFwAe10g8q0UnM1wa4lJzGxDH78d21cVweJgbkxAeyriS0jhNs7gO5nQIDAQAB
-AoGACVACtkxJf7VY2jWTPXwaQoy/uIqYfX3zhwI9i6eTbDlxCE+JDi/xzpKaWjLa
-99RmjvP0OPArWQB239ck03x7gAm2obutosGbqbKzJZS5cyIayzyW9djZDHBdt9Ho
-quKB39aspWit3xPzkrr+QeIkiggtmBKALTBxTwxAU+P6euECQQD4IPdrzKbCrO79
-LKvoPrQQtTjL6ogag9rI9n2ZuoK3/XVybh2byOXT8tA5G5jSz9Ac8XeVOsnH9gT5
-3WXeaLOFAkEA1vrm/hVSEasp5eATgQ7ig9CF+GGKqhTwXp/uOSl/h3IRmStu5J0C
-9AkYyx0bn3j5R8iUEX/C00KSE1kQNh4NOQJAVOsLYlRG2idPH0xThQc4nuM2jes1
-K0Xm8ZISSDNhm1BeCoyPC4rExTW7d1/vfG5svgsRrvvQpOOYrl7MB0Lz9QJBALhg
-AWJiyLsskEd90Vx7dpvUaEHo7jMGuEx/X6GYzK5Oj3dNP9NEMfc4IhJ5SWqRJ0KA
-bTVA3MexLXT4iqXPSkkCQQDSjLhBwvEnSuW4ElIMzBwLbu7573z2gzU82Mj6trrw
-Osoox/vmcepT1Wjy4AvPZHgxp7vEXNSeS+M5L29QNTp8
------END RSA PRIVATE KEY-----
+ * And an associated self-signed CA certificate (note that the keyUsage
+ * extension has the digitalSignature bit set, which is not usually the case for
+ * CA certificates, so it can be used as end-entity certificate in load tests).
+-----BEGIN CERTIFICATE-----
+MIICJjCCAY+gAwIBAgIBADANBgkqhkiG9w0BAQsFADA3MQwwCgYDVQQDEwNzcnYx
+EjAQBgNVBAsTCWxvYWQtdGVzdDETMBEGA1UEChMKc3Ryb25nU3dhbjAeFw0xOTAy
+MDgwODUyMjVaFw0yOTAyMDgwODUyMjVaMDcxDDAKBgNVBAMTA3NydjESMBAGA1UE
+CxMJbG9hZC10ZXN0MRMwEQYDVQQKEwpzdHJvbmdTd2FuMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDQXr7poAPYZLxmTCqR51STGRuk9Hc5SWtTcs6b2RzpnP8E
+VRLxJEVxOKE9Mw6n7mD1pNrupCpnpGRdLAV5VznTPhSQ6k7ppJJrxosRYg0pHTZq
+BUEC7nQFwAe10g8q0UnM1wa4lJzGxDH78d21cVweJgbkxAeyriS0jhNs7gO5nQID
+AQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4E
+FgQUytOG/alLWTyyO6ElA3cGwIzkofYwDQYJKoZIhvcNAQELBQADgYEAIdCzmJAw
+Cj6VaDacc7yOhZK61nGzNJml5NEeLzZkGzYvsIggL/Kb2v42fKYC5OunkZ1Nw3YY
+207LR7wrhS7pndHfRMny86RwJ4d6LmiwtgbzTAbm3HL/iENDiyiJfCTknTvzMj9O
+kGfz0rGDkJqIxx0inxp84PWWR5lX84A9pNQ=
+-----END CERTIFICATE-----
  */
 static char cert[] = {
   0x30,0x82,0x02,0x26,0x30,0x82,0x01,0x8f,0xa0,0x03,0x02,0x01,0x02,0x02,0x01,0x00,
@@ -177,18 +178,18 @@ static char cert[] = {
   0xe4,0xc4,0x07,0xb2,0xae,0x24,0xb4,0x8e,0x13,0x6c,0xee,0x03,0xb9,0x9d,0x02,0x03,
   0x01,0x00,0x01,0xa3,0x42,0x30,0x40,0x30,0x0f,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,
   0xff,0x04,0x05,0x30,0x03,0x01,0x01,0xff,0x30,0x0e,0x06,0x03,0x55,0x1d,0x0f,0x01,
-  0x01,0xff,0x04,0x04,0x03,0x02,0x01,0x06,0x30,0x1d,0x06,0x03,0x55,0x1d,0x0e,0x04,
+  0x01,0xff,0x04,0x04,0x03,0x02,0x01,0x86,0x30,0x1d,0x06,0x03,0x55,0x1d,0x0e,0x04,
   0x16,0x04,0x14,0xca,0xd3,0x86,0xfd,0xa9,0x4b,0x59,0x3c,0xb2,0x3b,0xa1,0x25,0x03,
   0x77,0x06,0xc0,0x8c,0xe4,0xa1,0xf6,0x30,0x0d,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,
-  0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x81,0x81,0x00,0xce,0x3c,0x30,0xe4,0xad,0x2f,
-  0x40,0x9f,0x3a,0xc1,0x80,0x0b,0x0f,0xa1,0x87,0x94,0x98,0x6d,0x8b,0xcf,0x77,0xd1,
-  0xf8,0xd8,0x99,0x2b,0x37,0xd9,0xc8,0x6a,0x15,0x18,0xf9,0xc4,0xe0,0xa9,0x4f,0x42,
-  0xfc,0xca,0x48,0x76,0xf4,0xe4,0x77,0x75,0x59,0x73,0x74,0x1e,0x6d,0xb4,0x63,0xcf,
-  0x60,0xd3,0x3e,0x28,0x27,0x6e,0x65,0xa0,0xd9,0xea,0x5c,0x78,0x6f,0xb5,0xb0,0x2e,
-  0x6f,0xcd,0x33,0x1d,0xc2,0x8a,0xde,0x6d,0x7b,0xcc,0x3a,0x6e,0x13,0xa2,0x79,0xcd,
-  0x78,0x32,0x6f,0x91,0xce,0xc9,0xcf,0x87,0xbb,0x70,0xbd,0xa7,0xd6,0xda,0xa3,0x68,
-  0x41,0xb4,0x22,0x2f,0x31,0xae,0x2e,0xc8,0x84,0xa4,0x0d,0x37,0x06,0x23,0x58,0x60,
-  0x49,0x5c,0xf7,0x54,0xea,0x2c,0xc3,0xb8,0x24,0x52
+  0x0d,0x01,0x01,0x0b,0x05,0x00,0x03,0x81,0x81,0x00,0x21,0xd0,0xb3,0x98,0x90,0x30,
+  0x0a,0x3e,0x95,0x68,0x36,0x9c,0x73,0xbc,0x8e,0x85,0x92,0xba,0xd6,0x71,0xb3,0x34,
+  0x99,0xa5,0xe4,0xd1,0x1e,0x2f,0x36,0x64,0x1b,0x36,0x2f,0xb0,0x88,0x20,0x2f,0xf2,
+  0x9b,0xda,0xfe,0x36,0x7c,0xa6,0x02,0xe4,0xeb,0xa7,0x91,0x9d,0x4d,0xc3,0x76,0x18,
+  0xdb,0x4e,0xcb,0x47,0xbc,0x2b,0x85,0x2e,0xe9,0x9d,0xd1,0xdf,0x44,0xc9,0xf2,0xf3,
+  0xa4,0x70,0x27,0x87,0x7a,0x2e,0x68,0xb0,0xb6,0x06,0xf3,0x4c,0x06,0xe6,0xdc,0x72,
+  0xff,0x88,0x43,0x43,0x8b,0x28,0x89,0x7c,0x24,0xe4,0x9d,0x3b,0xf3,0x32,0x3f,0x4e,
+  0x90,0x67,0xf3,0xd2,0xb1,0x83,0x90,0x9a,0x88,0xc7,0x1d,0x22,0x9f,0x1a,0x7c,0xe0,
+  0xf5,0x96,0x47,0x99,0x57,0xf3,0x80,0x3d,0xa4,0xd4,
 };
 
 /**
index 8ba3364..cd96430 100644 (file)
@@ -2,7 +2,7 @@
 INSERT INTO `Peer` (
        `IdPeer`, `IdUser`, `Alias`, `KeyId`, `PublicKey`
 ) VALUES (
-       1, 0, 'sidv150', 
+       1, 0, 'sidv150',
        X'ed90e64feca21f4b6897992422e0de21b9d62629',
        X'30820122300d06092a864886f70d01010105000382010f003082010a0282010100cd946c229f7d52b21da1cb5384e7dcaf6529f760534a56355efd49e87a9c6f1ddd5ff303bd7eb49c23de03adc487456f41eb5f92947bdc8ff8dbe443f8d112e0da2c98145e7c4d1cd15cddd08577f4d4f3d0a2e1da3c08c94cd819758751931e7a9724cc43d73a11b8e176a268b4cdbbf3995cb09723abc9bfc477c25e714a4661a84c078be7404d8986be55f20437e3a6b278a3cc89aec085941f1a1aafaf4b22ae146fe4684d5567dc30658a32087d01b98515070cb1653311cb6102f82a83c638c2a79985dbb9600752e9cbc272014a5c547b4ab59130c3a948658bff794b6f202cf95939ffa73b10521f05c060cecb15f8597ed95d72b9e405ee31f1b5d90203010001'
 );
index e385ed8..2b11037 100644 (file)
@@ -37,7 +37,7 @@ struct sql_config_t {
        backend_t backend;
 
        /**
-        * Destry the backend.
+        * Destroy the backend.
         */
        void (*destroy)(sql_config_t *this);
 };
index 697c981..98161fa 100644 (file)
@@ -37,7 +37,7 @@ struct sql_cred_t {
        credential_set_t set;
 
        /**
-        * Destry the backend.
+        * Destroy the backend.
         */
        void (*destroy)(sql_cred_t *this);
 };
index a43d726..1650984 100644 (file)
@@ -37,7 +37,7 @@ struct sql_logger_t {
        logger_t logger;
 
        /**
-        * Destry the backend.
+        * Destroy the backend.
         */
        void (*destroy)(sql_logger_t *this);
 };
index 3d30847..25bd45a 100644 (file)
@@ -15,7 +15,7 @@
 
 /**
  * @defgroup tnc_ifmap_http tnc_ifmap_http
- * @{ @ingroup tnc_ifmap 
+ * @{ @ingroup tnc_ifmap
  */
 
 #ifndef TNC_IFMAP_HTTP_H_
index 4ecccf4..3ee26e1 100644 (file)
@@ -15,7 +15,7 @@
 
 /**
  * @defgroup tnc_ifmap_listener tnc_ifmap_listener
- * @{ @ingroup tnc_ifmap 
+ * @{ @ingroup tnc_ifmap
  */
 
 #ifndef TNC_IFMAP_LISTENER_H_
index 85ad49b..9927caf 100644 (file)
@@ -17,7 +17,7 @@
 #include "tnc_ifmap_listener.h"
 
 #include <daemon.h>
+
 typedef struct private_tnc_ifmap_plugin_t private_tnc_ifmap_plugin_t;
 
 /**
index 4f809ba..9d6e25e 100644 (file)
@@ -15,7 +15,7 @@
 
 /**
  * @defgroup tnc_ifmap_soap_msg tnc_ifmap_soap_msg
- * @{ @ingroup tnc_ifmap 
+ * @{ @ingroup tnc_ifmap
  */
 
 #ifndef TNC_IFMAP_SOAP_MSG_H_
index 95d5cde..c7ee7bf 100644 (file)
@@ -289,7 +289,9 @@ static void invoke_once(private_updown_listener_t *this, ike_sa_t *ike_sa,
                         config->get_name(config));
        if (up)
        {
-               if (charon->kernel->get_interface(charon->kernel, me, &iface))
+               host = charon->kernel->get_nexthop(charon->kernel, other, -1, me,
+                                                                                  &iface);
+               if (host && iface)
                {
                        cache_iface(this, child_sa->get_reqid(child_sa), iface);
                }
@@ -297,6 +299,7 @@ static void invoke_once(private_updown_listener_t *this, ike_sa_t *ike_sa,
                {
                        iface = NULL;
                }
+               DESTROY_IF(host);
        }
        else
        {
index d197397..1f5ff59 100644 (file)
@@ -64,7 +64,7 @@ my $moon_key = "-----BEGIN RSA PRIVATE KEY-----\n" .
     "YeivMDc9hj0YLXA47ryQHTx4vB5Nv3TI/LoUG6VrCvZvocQOXe/n7TguwAjJj7ef" .
     "E55Gy8lXDRENyJMP1vif3N2iH8eQ1ASf8k/+gnBNkjSlYSSQUDfV\n" .
     "-----END RSA PRIVATE KEY-----\n";
+
 my $moon_cert = "-----BEGIN CERTIFICATE-----\n" .
     "MIIEIjCCAwqgAwIBAgIBKzANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJDSDEZ" .
     "MBcGA1UEChMQTGludXggc3Ryb25nU3dhbjEbMBkGA1UEAxMSc3Ryb25nU3dhbiBS" .
@@ -283,7 +283,7 @@ my %child = (
     local_ts  => \@l_ts,
     remote_ts => \@r_ts,
     esp_proposals => \@esp,
-);  
+);
 my %children = ( 'net-net' => \%child );
 my @l_addrs = ( '192.168.0.1' );
 my @r_addrs = ( '192.168.0.2' );
index d0700fa..8ea97c2 100644 (file)
@@ -229,7 +229,7 @@ Vici::Message - Perl extension for building and parsing strongSwan VICI messages
 
 =head1 SYNOPSIS
 
-  use Vici::Message;
+use Vici::Message;
 
 =head1 DESCRIPTION
 
index 9e2b77f..09f5fc2 100644 (file)
@@ -21,7 +21,7 @@ sub new {
     my $class = shift;
     my $socket = shift;
     my $self = {
-       Transport => Vici::Transport->new($socket),
+        Transport => Vici::Transport->new($socket),
     };
     bless($self, $class);
     return $self;
@@ -98,7 +98,7 @@ sub streamed_request {
     my ($self, $command, $event, $vars) = @_;
     my $out = defined $vars ? $vars->encode() : '';
 
-   $self->register($event);
+    $self->register($event);
 
     my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out);
     $self->{'Transport'}->send($request);
@@ -112,13 +112,13 @@ sub streamed_request {
 
         if ( $type == EVENT )
         {
-           (my $event_name, $data) = unpack('C/a*a*', $data);
+            (my $event_name, $data) = unpack('C/a*a*', $data);
 
-           if ($event_name eq $event)
-           {
-               my $msg = Vici::Message->from_data($data);
-               push(@list, $msg);
-           }
+            if ($event_name eq $event)
+            {
+                my $msg = Vici::Message->from_data($data);
+                push(@list, $msg);
+            }
         }
         elsif ( $type == CMD_RESPONSE )
         {
@@ -142,7 +142,7 @@ Vici::Packet - Perl extension for sending and receiving strongSwan VICI packets
 
 =head1 SYNOPSIS
 
-  use Vici::Packet;
+use Vici::Packet;
 
 =head1 DESCRIPTION
 
index 27c023e..20207d1 100644 (file)
@@ -25,7 +25,7 @@ sub stats {
 }
 
 sub reload_settings {
-   return request_res('reload-settings', @_);
+    return request_res('reload-settings', @_);
 }
 
 sub initiate {
@@ -125,7 +125,7 @@ sub flush_certs {
 }
 
 sub clear_creds {
-   return request_res('clear-creds', @_);
+    return request_res('clear-creds', @_);
 }
 
 sub load_authority {
@@ -197,7 +197,7 @@ Vici::Session - Perl binding for the strongSwan VICI configuration interface
 
 =head1 SYNOPSIS
 
-  use Vici::Session;
+use Vici::Session;
 
 =head1 DESCRIPTION
 
index b0a7b62..ae0e88a 100644 (file)
@@ -53,7 +53,7 @@ Vici::Transport - Perl extension for communicating via a strongSwan VICI socket
 
 =head1 SYNOPSIS
 
-  use Vici::Transport;
+use Vici::Transport;
 
 =head1 DESCRIPTION
 
index 7a1e8ee..8602ae1 100644 (file)
@@ -4,10 +4,10 @@ Gem::Specification.new do |s|
   s.authors       = ["strongSwan Project"]
   s.email         = ["info@strongswan.org"]
   s.description   = %q{
-     The strongSwan VICI protocol allows external application to monitor,
-     configure and control the IKE daemon charon. This Ruby Gem provides a
-     native client side implementation of the VICI protocol, well suited to
-     script automated tasks in a relaible way.
+    The strongSwan VICI protocol allows external application to monitor,
+    configure and control the IKE daemon charon. This Ruby Gem provides a
+    native client side implementation of the VICI protocol, well suited to
+    script automated tasks in a relaible way.
   }
   s.summary       = "Native Ruby interface for strongSwan VICI"
   s.homepage      = "https://wiki.strongswan.org/projects/strongswan/wiki/Vici"
index 16e3c8b..346ffb5 100644 (file)
@@ -1716,6 +1716,7 @@ METHOD(listener_t, child_updown, bool,
 {
        vici_builder_t *b;
        time_t now;
+       char buf[BUF_LEN];
 
        if (!this->dispatcher->has_event_listeners(this->dispatcher, "child-updown"))
        {
@@ -1734,7 +1735,10 @@ METHOD(listener_t, child_updown, bool,
        list_ike(this, b, ike_sa, now);
        b->begin_section(b, "child-sas");
 
-       b->begin_section(b, child_sa->get_name(child_sa));
+       snprintf(buf, sizeof(buf), "%s-%u", child_sa->get_name(child_sa),
+                        child_sa->get_unique_id(child_sa));
+
+       b->begin_section(b, buf);
        list_child(this, b, child_sa, now);
        b->end_section(b);
 
index 5008529..b2efe52 100644 (file)
@@ -29,7 +29,7 @@ typedef struct eap_inner_method_t eap_inner_method_t;
 
 /**
  * Interface of a weak inner EAP method like EAP-TNC or PT-EAP
- * that must be encapsulated in a strong TLS-based EAP method 
+ * that must be encapsulated in a strong TLS-based EAP method
  */
 struct eap_inner_method_t {
 
@@ -43,14 +43,14 @@ struct eap_inner_method_t {
         *
         * @return                      outer EAP authentication type
         */
-       eap_type_t (*get_auth_type)(eap_inner_method_t *this); 
+       eap_type_t (*get_auth_type)(eap_inner_method_t *this);
 
        /*
         * Set type of outer EAP Client/Server authentication
         *
         * @param type          outer EAP authentication type
         */
-       void (*set_auth_type)(eap_inner_method_t *this, eap_type_t type); 
+       void (*set_auth_type)(eap_inner_method_t *this, eap_type_t type);
 
 };
 
index fd36b14..49cd663 100644 (file)
@@ -168,6 +168,33 @@ METHOD(task_t, process_r, status_t,
        return NEED_MORE;
 }
 
+/**
+ * Check if we are currently deleting this IKE_SA in a break-before-make reauth.
+ */
+static bool is_reauthenticating(private_ike_delete_t *this)
+{
+       enumerator_t *tasks;
+       task_t *task;
+
+       if (!this->ike_sa->has_condition(this->ike_sa, COND_REAUTHENTICATING))
+       {
+               return FALSE;
+       }
+
+       tasks = this->ike_sa->create_task_enumerator(this->ike_sa,
+                                                                                                TASK_QUEUE_ACTIVE);
+       while (tasks->enumerate(tasks, &task))
+       {
+               if (task->get_type(task) == TASK_IKE_REAUTH)
+               {
+                       tasks->destroy(tasks);
+                       return TRUE;
+               }
+       }
+       tasks->destroy(tasks);
+       return FALSE;
+}
+
 METHOD(task_t, build_r, status_t,
        private_ike_delete_t *this, message_t *message)
 {
@@ -177,6 +204,18 @@ METHOD(task_t, build_r, status_t,
        {       /* invoke ike_down() hook if SA has not been rekeyed */
                charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE);
        }
+
+       /* if we are currently deleting this IKE_SA due to a break-before-make
+        * reauthentication, make sure to not just silently destroy the SA if
+        * the peer concurrently deletes it */
+       if (is_reauthenticating(this))
+       {
+               if (this->ike_sa->reestablish(this->ike_sa) != SUCCESS)
+               {
+                       DBG1(DBG_IKE, "reauthenticating IKE_SA failed");
+               }
+       }
+
        /* completed, delete IKE_SA by returning DESTROY_ME */
        return DESTROY_ME;
 }
index 3fbb758..c05dcb3 100644 (file)
@@ -98,7 +98,7 @@ struct keymat_t {
  *
  * @param version                      requested IKE version
  * @param initiator                    TRUE if we are initiator
- * @return                                     keymat_t implmenetation
+ * @return                                     keymat_t implementation
  */
 keymat_t *keymat_create(ike_version_t version, bool initiator);
 
index 5668b94..619a638 100644 (file)
@@ -24,7 +24,7 @@
 typedef struct private_generic_attr_bool_t private_generic_attr_bool_t;
 
 /**
- * Generic PA-TNC attribute containing boolean status value in 32 bit encoding 
+ * Generic PA-TNC attribute containing boolean status value in 32 bit encoding
  *
  *                       1                   2                   3
  *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -123,7 +123,7 @@ METHOD(pa_tnc_attr_t, process, status_t,
        enum_name_t *pa_attr_names;
        bio_reader_t *reader;
        uint32_t status;
-  
+
        *offset = 0;
 
        if (this->value.len < this->length)
index 93754bf..ac96c15 100644 (file)
@@ -28,7 +28,7 @@ typedef struct generic_attr_bool_t generic_attr_bool_t;
 
 /**
  * Class implementing a generic PA-TNC attribute containing a boolean status
- * value encoded as a 32 bit unsigned integer (0,1) in network order 
+ * value encoded as a 32 bit unsigned integer (0,1) in network order
  */
 struct generic_attr_bool_t {
 
index d0b2db2..4e31c34 100644 (file)
@@ -32,7 +32,7 @@
 typedef struct imv_database_t imv_database_t;
 
 /**
- * IMV database interface 
+ * IMV database interface
  */
 struct imv_database_t {
 
index dfab194..c38d75e 100644 (file)
@@ -78,7 +78,7 @@ METHOD(imv_os_info_t, set_name, void,
                this->info = NULL;
        }
        this->name = chunk_clone(name);
-       this->type = os_type_from_name(name); 
+       this->type = os_type_from_name(name);
 }
 
 METHOD(imv_os_info_t, get_name, chunk_t,
index af82e1c..d7bfc46 100644 (file)
@@ -154,7 +154,7 @@ METHOD(imv_remediation_string_t, add_instruction, void,
                        items ? items : "");
        free(header);
        free(items);
-       this->instructions = chunk_cat("mm", this->instructions, 
+       this->instructions = chunk_cat("mm", this->instructions,
                                                        chunk_create(instruction, strlen(instruction)));
 }
 
index cfae23b..7c33501 100644 (file)
@@ -31,7 +31,7 @@
 typedef struct imv_session_manager_t imv_session_manager_t;
 
 /**
- * IMV session manager interface 
+ * IMV session manager interface
  */
 struct imv_session_manager_t {
 
index 8784a0c..07c8c51 100644 (file)
@@ -160,7 +160,7 @@ METHOD(imv_workitem_t, set_result, TNC_IMV_Action_Recommendation,
                 TNC_IMV_Action_Recommendation_names, this->rec_final,
                 strlen(result) ? " - " : "", result);
 
-       return this->rec_final; 
+       return this->rec_final;
 }
 
 METHOD(imv_workitem_t, get_result, TNC_IMV_Action_Recommendation,
index 93a4b58..2b4ebc0 100644 (file)
@@ -51,12 +51,12 @@ enum imv_workitem_type_t {
 extern enum_name_t *imv_workitem_type_names;
 
 /**
- * IMV database interface 
+ * IMV database interface
  */
 struct imv_workitem_t {
 
        /**
-        * Get primary workitem key 
+        * Get primary workitem key
         *
         * @return                              Primary workitem key
         */
@@ -104,7 +104,7 @@ struct imv_workitem_t {
         * @param eval                  Evaluation Result
         * @return                              Action Recommendation
         */
-        TNC_IMV_Action_Recommendation (*set_result)(imv_workitem_t *this, 
+        TNC_IMV_Action_Recommendation (*set_result)(imv_workitem_t *this,
                                                char *result, TNC_IMV_Evaluation_Result eval);
 
        /**
@@ -113,7 +113,7 @@ struct imv_workitem_t {
         * @param result                Result string
         * @return                              Action Recommendatino
         */
-        TNC_IMV_Action_Recommendation (*get_result)(imv_workitem_t *this, 
+        TNC_IMV_Action_Recommendation (*get_result)(imv_workitem_t *this,
                                                                                                 char **result);
 
        /**
index 14b1646..4f94497 100644 (file)
@@ -2,7 +2,7 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/src/libstrongswan \
        -I$(top_srcdir)/src/libtncif \
        -I$(top_srcdir)/src/libimcv \
-       -I$(top_srcdir)/src/libtpmtss 
+       -I$(top_srcdir)/src/libtpmtss
 
 AM_CFLAGS = \
        $(PLUGIN_CFLAGS)
index e15eeb1..bca1958 100644 (file)
@@ -176,7 +176,7 @@ static TNC_Result receive_msg(private_imv_hcd_agent_t *this, imv_state_t *state,
        imv_msg_t *out_msg;
        imv_hcd_state_t *hcd_state;
        pa_tnc_attr_t *attr;
-       enum_name_t *pa_subtype_names; 
+       enum_name_t *pa_subtype_names;
        pen_type_t type, msg_type;
        TNC_Result result;
        bool fatal_error = FALSE, assessment = FALSE;
@@ -328,7 +328,7 @@ static TNC_Result receive_msg(private_imv_hcd_agent_t *this, imv_state_t *state,
                                        {
                                                /* do not request user applications */
                                                hcd_state->set_user_app_disabled(hcd_state);
-                                       }               
+                                       }
                                        break;
                                }
                                case PWG_HCD_FORWARDING_ENABLED:
@@ -543,7 +543,7 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
 
                /* Determine maximum PA-TNC attribute segment size */
                max_seg_size = state->get_max_msg_len(state)
-                                                               - PA_TNC_HEADER_SIZE 
+                                                               - PA_TNC_HEADER_SIZE
                                                                - PA_TNC_ATTR_HEADER_SIZE
                                                                - TCG_SEG_ATTR_SEG_ENV_HEADER
                                                                - PA_TNC_ATTR_HEADER_SIZE
@@ -565,7 +565,7 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
                                                                                                TRUE);
                        out_msg->add_attribute(out_msg, attr);
 
-                       hcd_state->set_subtype(hcd_state, msg_types[i].type);   
+                       hcd_state->set_subtype(hcd_state, msg_types[i].type);
                        received = state->get_action_flags(state);
 
                        if ((received & IMV_HCD_ATTR_MUST) != IMV_HCD_ATTR_MUST)
index 64ab5c4..2429733 100644 (file)
@@ -66,7 +66,7 @@ struct private_imv_scanner_state_t {
        uint32_t action_flags;
 
        /**
-        * IMV database session associatied with TNCCS connection
+        * IMV database session associated with TNCCS connection
         */
        imv_session_t *session;
 
index 6178c2a..ee79091 100644 (file)
@@ -48,7 +48,7 @@ enum pts_pcr_transform_t {
  * PTS Component Evidence Validation Result Flags
  */
 enum pts_comp_evid_validation_t {
-       /** No Validation was attempted */              
+       /** No Validation was attempted */
        PTS_COMP_EVID_VALIDATION_NONE =         0x00,
        /** Attempted validation, unable to verify */
        PTS_COMP_EVID_VALIDATION_UNABLE =       0x20,
@@ -59,7 +59,7 @@ enum pts_comp_evid_validation_t {
 };
 
 /**
- * PTS Functional Component Interface 
+ * PTS Functional Component Interface
  */
 struct pts_comp_evidence_t {
 
@@ -140,7 +140,7 @@ struct pts_comp_evidence_t {
 
 /**
  * Creates a pts_comp_evidence_t object
- * 
+ *
  * @param name                                 Component Functional Name
  * @param depth                                        Sub-component depth
  * @param extended_pcr                 PCR the measurement was extended into
@@ -160,7 +160,7 @@ pts_comp_evidence_t* pts_comp_evidence_create(pts_comp_func_name_t *name,
 /**
  * Determine transform to fit measurement hash into PCR register
  *
- * @param algo                                 Measurement hash algorithm 
+ * @param algo                                 Measurement hash algorithm
  * @param pcr_len                              Length of the PCR registers in bytes
  * @return                                             PCR transform type
  */
index 1ca4458..286061a 100644 (file)
@@ -33,7 +33,7 @@ typedef struct pts_component_t pts_component_t;
 #include <bio/bio_writer.h>
 
 /**
- * PTS Functional Component Interface 
+ * PTS Functional Component Interface
  */
 struct pts_component_t {
 
index 9708ad0..8200e4f 100644 (file)
@@ -29,7 +29,7 @@ typedef enum pts_tcg_comp_func_name_t pts_tcp_comp_func_name_t;
 /**
  * PTS Component Functional Name Qualifier Flags for the TCG namespace
  * see section 5.2 of PTS Protocol: Binding to TNC IF-M Specification
- *     
+ *
  *      0 1 2 3 4 5
  *  +-+-+-+-+-+-+
  *  |K|S| Type  |
index f5d951e..6e8c989 100644 (file)
@@ -62,7 +62,7 @@ enum pts_dh_group_t {
  * @param dh_groups                            returns set of available DH groups
  * @param mandatory_dh_groups  if TRUE enforce mandatory PTS DH groups
  * @return                                             TRUE if mandatory DH groups are available
- *                                                             or at least one optional DH group if 
+ *                                                             or at least one optional DH group if
  *                                                             mandatory_dh_groups is set to FALSE.
  */
 bool pts_dh_group_probe(pts_dh_group_t *dh_groups, bool mandatory_dh_groups);
index bf5478a..9b70153 100644 (file)
@@ -57,7 +57,7 @@ struct pts_ima_event_list_t {
         *
         * @param measurement   Measurement hash
         * @param algo                  Algorithm used to hash files
-        " @param name                  Event name (absolute filename or boot_aggregate) 
+        " @param name                  Event name (absolute filename or boot_aggregate)
         * @return                              Return code
         */
        status_t (*get_next)(pts_ima_event_list_t *this, chunk_t *measurement,
index d703106..36d0ab1 100644 (file)
@@ -47,11 +47,11 @@ extern enum_name_t *pts_meas_algorithm_names;
  * see section 3.8.5 of PTS Protocol: Binding to TNC IF-M Specification
  *
  *                                        1
- *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
+ *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  *  |1|2|3|R|R|R|R|R|R|R|R|R|R|R|R|R|
  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *  
+ *
  */
 
 /**
index 206d41d..94edf07 100644 (file)
@@ -65,14 +65,14 @@ METHOD(swid_gen_t, generate_tag, char*,
 
        /* Compose the SWID generator command */
        if (full || !package || !version)
-       { 
+       {
                snprintf(command, BUF_LEN, "%s swid --entity-name \"%s\" "
                                 "--regid %s --software-id %s%s%s",
                                 this->generator, this->entity, this->regid, sw_id,
                                 full ? " --full" : "", pretty ? " --pretty" : "");
        }
        else
-       { 
+       {
                snprintf(command, BUF_LEN, "%s swid --entity-name \"%s\" "
                                 "--regid %s --name %s --version-string %s%s",
                                 this->generator, this->entity, this->regid, package,
index 848dc16..2e0d329 100644 (file)
@@ -39,7 +39,7 @@ struct swima_collector_t {
         * @return                              Software [Identity] Inventory
         */
        swima_inventory_t* (*collect_inventory)(swima_collector_t *this,
-                                                                                       bool sw_id_only, 
+                                                                                       bool sw_id_only,
                                                                                        swima_inventory_t *targets);
 
        /**
index bce4645..7f847d8 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 /**
- * SW_RESPONSE_TOO_LARGE_ERROR 
+ * SW_RESPONSE_TOO_LARGE_ERROR
  *
  *                       1                   2                   3
  *   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
index 7cd585a..46acf2a 100644 (file)
@@ -219,7 +219,7 @@ pa_tnc_attr_t* tcg_seg_attr_seg_env_create(chunk_t segment, uint8_t flags,
        *this->value.ptr = flags;
        memcpy(this->value.ptr + TCG_SEG_ATTR_SEG_ENV_HEADER,
                   segment.ptr, segment.len);
-       
+
        return &this->public.pa_tnc_attribute;
 }
 
index fee70c1..f4f3358 100644 (file)
@@ -335,7 +335,7 @@ ip_packet_t *ip_packet_create(chunk_t packet)
                        }
                        ip = (struct ip6_hdr*)packet.ptr;
                        /* remove any RFC 4303 TFC extra padding */
-                       packet.len = min(packet.len, 40 + untoh16(&ip->ip6_plen));
+                       packet.len = min(packet.len, 40 + untoh16((void*)&ip->ip6_plen));
                        if (!parse_transport_header_v6(ip, packet, &payload, &next_header,
                                                                                   &sport, &dport))
                        {
index 827e0ad..77fe6eb 100644 (file)
@@ -231,13 +231,13 @@ $(srcdir)/crypto/proposal/proposal_keywords_static.h: $(srcdir)/crypto/proposal/
                $(AM_V_GEN) \
                sed \
                -e "s:\@GPERF_LEN_TYPE\@:$(GPERF_LEN_TYPE):" \
-               $< > $@
+               $(srcdir)/crypto/proposal/proposal_keywords_static.h.in > $@
 
 $(srcdir)/crypto/proposal/proposal_keywords_static.c:  $(srcdir)/crypto/proposal/proposal_keywords_static.txt \
                                                                                                                $(srcdir)/crypto/proposal/proposal_keywords_static.h
                $(AM_V_GEN) \
-               $(GPERF) -N proposal_get_token_static -m 10 -C -G -c -t -D \
-                                                                                               $(srcdir)/crypto/proposal/proposal_keywords_static.txt > $@
+               $(GPERF) -N proposal_get_token_static -m 10 -C -G -c -t -D \
+                       --output-file=$@ $(srcdir)/crypto/proposal/proposal_keywords_static.txt
 
 if STATIC_PLUGIN_CONSTRUCTORS
 BUILT_SOURCES += $(srcdir)/plugin_constructors.c
index aa649e9..f75e942 100644 (file)
@@ -851,15 +851,14 @@ chunk_t asn1_bitstring(const char *mode, chunk_t content)
  */
 chunk_t asn1_integer(const char *mode, chunk_t content)
 {
-       chunk_t object;
+       chunk_t zero = chunk_from_chars(0x00), object;
        size_t len;
        u_char *pos;
        bool move;
 
-
        if (content.len == 0)
        {       /* make sure 0 is encoded properly */
-               content = chunk_from_chars(0x00);
+               content = zero;
                move = FALSE;
        }
        else
index 9e699ae..e701061 100644 (file)
@@ -62,7 +62,7 @@ struct ocsp_response_t {
         * @param revocation_time       receives time of revocation, if revoked
         * @param revocation_reason     receives reason of revocation, if revoked
         * @param this_update           creation time of revocation list
-        * @param next_update           exptected time of next revocation list
+        * @param next_update           expected time of next revocation list
         * @return                                      certificate revocation status
         */
        cert_validation_t (*get_status)(ocsp_response_t *this,
index d0b2c57..9c4db70 100644 (file)
@@ -37,7 +37,7 @@ typedef struct credential_set_t credential_set_t;
  *
  * A credential set enumerator may not block the credential set, i.e. multiple
  * threads must be able to hold multiple enumerators, as the credential manager
- * is higly parallelized. The best way to achieve this is by using shared
+ * is highly parallelized. The best way to achieve this is by using shared
  * read locks for the enumerators only. Otherwise deadlocks will occur.
  * The writing cache_cert() routine is called by the manager only if no
  * enumerator is alive, so it is save to use a write lock there.
index 5ad3a51..f06fc29 100644 (file)
@@ -38,7 +38,7 @@ struct mgf1_t {
 
        /**
         * Hash the seed before using it as a seed for MGF1
-        * 
+        *
         * @param yes           TRUE if seed has to be hashed first
         */
        void (*set_hash_seed)(mgf1_t *this, bool yes);
index f83dbfc..565af50 100644 (file)
@@ -60,7 +60,7 @@ METHOD(ntt_fft_t, get_modulus, uint16_t,
  *
  * x[i1] ---|+|------- x[i1]
  *        \/
- *        /\    w[iw]  
+ *        /\    w[iw]
  * x[i2] ---|-|--|*|-- x[i2]
  *
  */
@@ -147,7 +147,7 @@ METHOD(ntt_fft_t, transform, void,
                                {
                                        iw = s * (inverse ? (n - i * k) : (i * k));
                                        butterfly(this, b, t + i, t + i + m, iw);
-                               }                               
+                               }
                        }
                        t += 2*m;
                }
@@ -169,7 +169,7 @@ METHOD(ntt_fft_t, transform, void,
 
        /**
         * Compensate the linear phase needed for negative wrapped convolution
-        * and normalize the output array with 1/n mod q after the inverse FFT. 
+        * and normalize the output array with 1/n mod q after the inverse FFT.
         */
        if (inverse)
        {
index 4daac27..fc3afc2 100644 (file)
@@ -563,7 +563,7 @@ static const uint16_t wi_12289_512[] = {
  * Bit-reversed indices for n = 512
  */
 static const uint16_t rev_512[] = {
-         0, 256, 128, 384,  64, 320, 192, 448,  32, 288, 
+         0, 256, 128, 384,  64, 320, 192, 448,  32, 288,
        160, 416,  96, 352, 224, 480,  16, 272, 144, 400,
         80, 336, 208, 464,  48, 304, 176, 432, 112, 368,
        240, 496,   8, 264, 136, 392,  72, 328, 200, 456,
index 5ff2b95..b027fc0 100644 (file)
@@ -32,7 +32,7 @@
 static inline uint32_t ntt_fft_mreduce(uint32_t x, const ntt_fft_params_t *p)
 {
        uint32_t m, t;
-       
+
        m = (x * p->q_inv) & p->rmask;
        t = (x + m * p->q) >> p->rlog;
 
index 2a0f3bd..d23b5bd 100644 (file)
@@ -39,7 +39,7 @@ START_TEST(test_ntt_fft_impulse)
                x[i] = 0;
        }
        x[0] = 1;
+
        fft = ntt_fft_create(fft_params[_i]);
        fft->transform(fft, x, X, FALSE);
 
@@ -72,7 +72,7 @@ START_TEST(test_ntt_fft_wrap)
        }
        fft = ntt_fft_create(fft_params[_i]);
        ck_assert(fft->get_size(fft) == n);
-       ck_assert(fft->get_modulus(fft) == q); 
+       ck_assert(fft->get_modulus(fft) == q);
        fft->transform(fft, x, X, FALSE);
 
        for (j = 0; j < n; j++)
@@ -92,7 +92,7 @@ START_TEST(test_ntt_fft_wrap)
                }
                y[j] = 0;
        }
-       fft->destroy(fft);  
+       fft->destroy(fft);
 }
 END_TEST
 
index 018ae0e..b894abf 100644 (file)
@@ -131,7 +131,7 @@ bliss_huffman_coder_t *bliss_huffman_coder_create(bliss_huffman_code_t *code,
                },
                .packer = packer,
                .code = code,
-               .index_max = (2*code->n_z2 - 1) * code->n_z1,           
+               .index_max = (2*code->n_z2 - 1) * code->n_z1,
        );
 
        return &this->public;
index fb29d66..84de486 100644 (file)
@@ -185,7 +185,7 @@ METHOD(bliss_sampler_t, gaussian, bool,
                                return FALSE;
                        }
                        if (x || y || u)
-                       { 
+                       {
                                break;
                        }
                }
index f4e1bff..948c641 100644 (file)
@@ -102,7 +102,7 @@ METHOD(bliss_signature_t, get_encoding, chunk_t,
        encoding = packer->extract_buf(packer);
 
        DBG2(DBG_LIB, "efficiency of Huffman coder is %6.4f bits/tuple (%u bits)",
-                                  coder->get_bits(coder)/(double)(this->set->n), 
+                                  coder->get_bits(coder)/(double)(this->set->n),
                                   coder->get_bits(coder));
        DBG2(DBG_LIB, "generated BLISS signature (%u bits encoded in %u bytes)",
                                   packer->get_bits(packer), encoding.len);
index ed28b46..50234b2 100644 (file)
@@ -211,7 +211,7 @@ botan_ec_diffie_hellman_t *botan_ec_diffie_hellman_create(
                return NULL;
        }
 
-       if (botan_privkey_create_ecdh(&this->key, rng, this->curve_name))
+       if (botan_privkey_create(&this->key, "ECDH", this->curve_name, rng))
        {
                DBG1(DBG_LIB, "ECDH private key generation failed");
                botan_rng_destroy(rng);
index f8dbb66..d9469e9 100644 (file)
@@ -336,7 +336,7 @@ botan_ec_private_key_t *botan_ec_private_key_gen(key_type_t type, va_list args)
 
        this = create_empty(oid);
 
-       if (botan_privkey_create_ecdsa(&this->key, rng, curve))
+       if (botan_privkey_create(&this->key, "ECDSA", curve, rng))
        {
                DBG1(DBG_LIB, "EC private key generation failed");
                botan_rng_destroy(rng);
index 02820b2..06a9345 100644 (file)
@@ -225,7 +225,7 @@ METHOD(private_key_t, get_keysize, int,
                return 0;
        }
 
-       if (botan_privkey_rsa_get_n(n, this->key) ||
+       if (botan_privkey_get_field(n, this->key, "n") ||
                botan_mp_num_bits(n, &bits))
        {
                botan_mp_destroy(n);
@@ -346,6 +346,7 @@ botan_rsa_private_key_t *botan_rsa_private_key_gen(key_type_t type,
 {
        private_botan_rsa_private_key_t *this;
        botan_rng_t rng;
+       char buf[BUF_LEN];
        u_int key_size = 0;
 
        while (TRUE)
@@ -375,7 +376,9 @@ botan_rsa_private_key_t *botan_rsa_private_key_gen(key_type_t type,
 
        this = create_empty();
 
-       if (botan_privkey_create_rsa(&this->key, rng, key_size))
+       snprintf(buf, sizeof(buf), "%u", key_size);
+
+       if (botan_privkey_create(&this->key, "RSA", buf, rng))
        {
                botan_rng_destroy(rng);
                free(this);
@@ -412,7 +415,7 @@ static bool calculate_pq(botan_mp_t *n, botan_mp_t *e, botan_mp_t *d,
        }
 
        /* k must be even */
-       if (!botan_mp_is_even(k))
+       if (botan_mp_get_bit(k, 0) != 0)
        {
                goto error;
        }
@@ -424,7 +427,7 @@ static bool calculate_pq(botan_mp_t *n, botan_mp_t *e, botan_mp_t *d,
                goto error;
        }
 
-       for (t = 0; !botan_mp_is_odd(r); t++)
+       for (t = 0; botan_mp_get_bit(r, 0) != 1; t++)
        {
                if (botan_mp_rshift(r, r, 1))
                {
index 244caa5..af573b7 100644 (file)
@@ -215,7 +215,7 @@ METHOD(public_key_t, get_keysize, int,
                return 0;
        }
 
-       if (botan_pubkey_rsa_get_n(n, this->key) ||
+       if (botan_pubkey_get_field(n, this->key, "n") ||
                botan_mp_num_bits(n, &bits))
        {
                botan_mp_destroy(n);
index 519f29f..8863f3f 100644 (file)
@@ -161,7 +161,7 @@ diffie_hellman_t *botan_x25519_create(diffie_hellman_group_t group)
                return NULL;
        }
 
-       if (botan_privkey_create_ecdh(&this->key, rng, "curve25519"))
+       if (botan_privkey_create(&this->key, "Curve25519", "", rng))
        {
                DBG1(DBG_LIB, "x25519 private key generation failed");
                botan_rng_destroy(rng);
index 2740a55..3b8127e 100644 (file)
@@ -65,7 +65,7 @@ METHOD(xof_t, get_bytes, bool,
        }
 
        /* copy whole stream blocks directly to output buffer */
-       blocks = (out_len - index) / CHACHA_BLOCK_SIZE; 
+       blocks = (out_len - index) / CHACHA_BLOCK_SIZE;
        while (blocks--)
        {
                if (!this->drv->chacha(this->drv, buffer + index))
@@ -73,8 +73,8 @@ METHOD(xof_t, get_bytes, bool,
                        return FALSE;
                }
                index += CHACHA_BLOCK_SIZE;
-       }       
-       
+       }
+
        /* refill the stream buffer if some more output bytes are needed */
        len = out_len - index;
        if (len)
@@ -85,8 +85,8 @@ METHOD(xof_t, get_bytes, bool,
                }
                memcpy(buffer + index, this->stream, len);
                this->stream_index = len;
-       }               
-       
+       }
+
        return TRUE;
 }
 
index 5ba9f94..e7bcbe3 100644 (file)
@@ -140,7 +140,7 @@ newhope_noise_t *newhope_noise_create(chunk_t seed)
        {
                DBG1(DBG_LIB, "could not instantiate ChaCha20 stream");
                return NULL;
-       }       
+       }
 
        INIT(this,
                .public = {
index 4aed60e..1021d10 100644 (file)
@@ -14,7 +14,7 @@
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
- * 
+ *
  */
 
 #include "newhope_reconciliation.h"
@@ -166,7 +166,7 @@ METHOD(newhope_reconciliation_t, reconcile, chunk_t,
                        i2 = i1 + this->n4;
                        i3 = i2 + this->n4;
 
-                       tmp[0] = this->q16 + 8 * (int32_t)v[i0] - 
+                       tmp[0] = this->q16 + 8 * (int32_t)v[i0] -
                                         this->q  * (2*r[i0] + r[i3]);
                        tmp[1] = this->q16 + 8 * (int32_t)v[i1] -
                                         this->q  * (2*r[i1] + r[i3]);
index 7cbf0d2..4c1239e 100644 (file)
@@ -35,7 +35,7 @@ struct newhope_reconciliation_t {
         * Generate reconciliation polynomial
         *
         * @param v                     polynomial v
-        * @param rbits         pseudo random bit array 
+        * @param rbits         pseudo random bit array
         * @return                      return array with reconciliation polynomial
         */
        uint8_t* (*help_reconcile)(newhope_reconciliation_t *this,
index 96dd167..7d5942a 100644 (file)
@@ -151,7 +151,7 @@ static noise_t noises[] = {
                0x98, 0x10, 0x39, 0xce, 0x17, 0x66, 0xaa, 0x25, 0x42, 0xb0,
                0x5d, 0xb3, 0xbd, 0x80, 0x9a, 0xb1, 0x42, 0x48, 0x9d, 0x5d,
                0xbf, 0xe1, 0x27, 0x3e, 0x73, 0x99, 0x63, 0x7b, 0x4b, 0x32,
-               0x13, 0x76, 0x8a, 0xaa }, 
+               0x13, 0x76, 0x8a, 0xaa },
          { 12283,     1, 12288,     4,     0, 12285,     5,     1,     1,     2,
                    3,     4, 12288,     0,     3,     1,     1,     0, 12286,     6,
                    1,     0,     1,     0,     4,     2, 12288,     3,     0,     5,
@@ -263,7 +263,7 @@ static noise_t noises[] = {
                0xaa, 0x5a, 0x8e, 0xca, 0x00, 0xbb, 0xb4, 0xa7, 0x3b, 0xda,
                0xd1, 0x92, 0xb5, 0xc4, 0x2f, 0x73, 0xf2, 0xfd, 0x4e, 0x27,
                0x36, 0x44, 0xc8, 0xb3, 0x61, 0x25, 0xa6, 0x4a, 0xdd, 0xeb,
-               0x00, 0x6c, 0x13, 0xa0 }, 
+               0x00, 0x6c, 0x13, 0xa0 },
          {     5,     4,     4, 12288, 12286,     1, 12287, 12288,     2, 12288,
                12288, 12287,     2,     2, 12284, 12288, 12288,     3,     2,     3,
                12287,     2,     2,     0,     0,     2,     5, 12285,     5, 12287,
@@ -366,7 +366,7 @@ static noise_t noises[] = {
                    0, 12287, 12288,     2, 12288, 12284, 12288, 12285,     4,     1,
                12288, 12284, 12287,     4, 12284,     1,     3, 12284, 12282,     0,
                12286, 12287,     2, 12286,     3,     4,     2, 12288,     3,     3,
-                   1,     3, 12287, 12283 } 
+                   1,     3, 12287, 12283 }
        },
        { 0x01, 0x01,   /* polynomial e' */
          { 0x58, 0xd8, 0x6a, 0xcd, 0xe2, 0x79, 0x61, 0x98, 0xfd, 0xea,
@@ -375,7 +375,7 @@ static noise_t noises[] = {
                0x41, 0x2b, 0x78, 0x88, 0x58, 0x6d, 0x58, 0x47, 0x3e, 0xb7,
                0x46, 0x60, 0xd8, 0x2f, 0xa0, 0x83, 0xe4, 0xbc, 0x81, 0xdd,
                0xc6, 0x29, 0x8b, 0xee, 0xf9, 0xec, 0x90, 0x39, 0x9d, 0x46,
-               0xbf, 0x2d, 0x7c, 0xdf }, 
+               0xbf, 0x2d, 0x7c, 0xdf },
          { 12287,     3,     3,     1, 12285,     4,     1,     5, 12287, 12285,
                12285, 12285,     1, 12288, 12287, 12288,     2,     3, 12283, 12288,
                12285,     0,     0, 12286, 12287, 12288, 12288, 12288, 12288,     1,
@@ -487,7 +487,7 @@ static noise_t noises[] = {
                0xd1, 0x25, 0xf2, 0x84, 0xd7, 0xee, 0xd5, 0x53, 0x86, 0x5b,
                0xa3, 0x93, 0x4e, 0xee, 0xc7, 0x5b, 0xe5, 0x52, 0x68, 0x19,
                0xdf, 0x63, 0xfb, 0x91, 0x3d, 0xe9, 0x5d, 0xd6, 0xeb, 0x81,
-               0x3d, 0xac, 0xf1, 0xad }, 
+               0x3d, 0xac, 0xf1, 0xad },
          { 12286, 12286,     1, 12287,     1, 12286, 12287, 12287, 12284,     1,
                12287,     2, 12284,     0,     2, 12288,     0,     1,     0, 12285,
                12288,     4,     2, 12287, 12282, 12288, 12285, 12288,     2, 12288,
index 4432e34..dec316a 100644 (file)
@@ -242,57 +242,57 @@ static uint8_t rbits[] = {
 };
 
 static uint8_t r_ref[] = {
-       0, 3, 3, 1, 1, 1, 0, 1, 0, 3, 2, 0, 1, 1, 3, 0, 2, 1, 0, 3, 
-       2, 1, 2, 3, 3, 0, 2, 0, 1, 3, 3, 2, 3, 3, 0, 3, 0, 2, 2, 0, 
-       1, 1, 2, 0, 1, 1, 2, 1, 3, 0, 0, 3, 1, 1, 0, 0, 0, 2, 0, 1, 
-       0, 2, 3, 1, 3, 0, 3, 1, 0, 0, 2, 1, 3, 3, 1, 3, 2, 1, 0, 2, 
-       0, 0, 3, 3, 0, 1, 2, 2, 0, 1, 0, 3, 2, 2, 1, 1, 3, 0, 3, 3, 
-       2, 2, 0, 2, 1, 0, 0, 0, 3, 0, 3, 1, 2, 1, 1, 0, 3, 3, 2, 1, 
-       3, 3, 2, 2, 1, 3, 0, 0, 2, 2, 3, 1, 1, 2, 2, 2, 0, 2, 0, 2, 
-       0, 0, 1, 2, 2, 2, 3, 1, 2, 0, 3, 0, 1, 3, 2, 3, 3, 1, 1, 2, 
-       0, 0, 2, 1, 2, 2, 0, 2, 2, 2, 2, 1, 1, 3, 1, 3, 3, 1, 2, 2, 
-       3, 0, 1, 0, 0, 2, 2, 1, 3, 2, 2, 2, 3, 1, 1, 0, 0, 3, 2, 3, 
-       0, 0, 3, 3, 2, 2, 2, 2, 1, 1, 0, 1, 2, 1, 3, 2, 0, 3, 0, 2, 
-       3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 1, 0, 2, 3, 2, 1, 2, 0, 3, 0, 
-       2, 2, 1, 1, 2, 1, 2, 0, 1, 2, 1, 3, 0, 0, 2, 3, 0, 3, 1, 0, 
-       2, 2, 2, 1, 2, 0, 3, 1, 0, 0, 3, 0, 2, 3, 1, 0, 2, 3, 3, 0, 
-       0, 0, 3, 0, 2, 3, 2, 0, 2, 2, 1, 0, 1, 2, 1, 3, 3, 3, 1, 2, 
-       1, 2, 3, 1, 1, 2, 2, 0, 3, 0, 3, 3, 1, 3, 3, 3, 1, 3, 0, 3, 
-       0, 0, 1, 2, 1, 0, 3, 0, 0, 2, 1, 3, 3, 3, 1, 1, 2, 3, 1, 0, 
-       1, 1, 3, 3, 0, 3, 1, 3, 1, 2, 2, 2, 1, 3, 1, 2, 1, 3, 0, 1, 
-       2, 2, 2, 3, 3, 2, 2, 3, 1, 2, 2, 1, 2, 1, 0, 0, 0, 1, 3, 2, 
-       0, 3, 1, 1, 2, 1, 3, 2, 3, 2, 0, 1, 0, 1, 3, 0, 2, 3, 1, 3, 
-       0, 1, 1, 3, 1, 1, 1, 0, 2, 3, 2, 1, 2, 0, 3, 3, 2, 0, 1, 0, 
-       3, 3, 3, 1, 2, 2, 1, 0, 3, 3, 0, 2, 3, 1, 1, 1, 3, 3, 1, 3, 
-       3, 0, 1, 0, 2, 0, 1, 1, 0, 0, 3, 2, 2, 3, 0, 2, 2, 0, 1, 1, 
-       1, 3, 1, 1, 1, 0, 1, 2, 3, 2, 2, 3, 1, 1, 3, 3, 3, 1, 2, 0, 
-       0, 0, 2, 2, 2, 3, 2, 0, 0, 1, 3, 0, 0, 0, 2, 0, 1, 0, 3, 0, 
-       3, 1, 0, 1, 1, 1, 2, 2, 2, 0, 0, 2, 2, 0, 3, 1, 0, 2, 2, 0, 
-       2, 0, 0, 1, 1, 0, 1, 2, 3, 2, 3, 2, 3, 3, 3, 0, 2, 1, 2, 2, 
-       1, 0, 1, 1, 1, 2, 1, 3, 2, 0, 3, 3, 0, 0, 1, 1, 1, 2, 2, 2, 
-       0, 1, 1, 2, 0, 2, 0, 1, 2, 0, 1, 3, 2, 2, 3, 0, 0, 1, 1, 2, 
-       3, 1, 2, 0, 3, 0, 2, 1, 0, 0, 0, 1, 1, 1, 1, 3, 0, 0, 0, 3, 
-       2, 3, 2, 1, 0, 3, 1, 1, 1, 1, 3, 0, 0, 1, 1, 1, 0, 3, 2, 2, 
-       3, 1, 1, 3, 0, 1, 1, 3, 0, 3, 2, 2, 0, 3, 1, 3, 1, 0, 0, 1, 
-       1, 0, 0, 1, 0, 3, 2, 2, 0, 1, 3, 0, 1, 3, 3, 2, 1, 3, 1, 1, 
-       3, 3, 2, 1, 1, 3, 1, 0, 2, 1, 1, 3, 3, 3, 1, 3, 1, 3, 0, 1, 
-       2, 2, 0, 3, 3, 2, 1, 1, 1, 3, 0, 2, 0, 3, 3, 1, 2, 3, 1, 3, 
-       0, 0, 0, 1, 3, 3, 0, 2, 3, 0, 1, 3, 0, 0, 3, 0, 2, 2, 3, 3, 
-       3, 3, 2, 1, 0, 3, 1, 1, 1, 2, 2, 0, 3, 2, 0, 2, 2, 3, 1, 0, 
-       3, 3, 1, 2, 3, 0, 1, 1, 0, 3, 3, 1, 1, 3, 0, 2, 1, 2, 2, 2, 
-       2, 3, 2, 3, 0, 0, 3, 1, 1, 0, 3, 2, 3, 2, 3, 3, 2, 2, 3, 1, 
-       3, 2, 1, 0, 1, 0, 2, 2, 1, 3, 1, 2, 3, 3, 1, 3, 2, 1, 3, 2, 
-       2, 3, 1, 1, 3, 3, 3, 3, 2, 0, 0, 3, 3, 3, 2, 3, 2, 0, 3, 0, 
-       3, 1, 2, 0, 3, 0, 2, 2, 2, 3, 1, 2, 2, 1, 3, 3, 0, 1, 3, 0, 
-       0, 1, 3, 2, 1, 1, 0, 1, 3, 3, 1, 1, 0, 1, 2, 2, 2, 0, 2, 3, 
-       1, 2, 1, 1, 3, 2, 3, 3, 1, 0, 1, 3, 2, 3, 2, 2, 1, 2, 3, 1, 
-       3, 2, 3, 1, 3, 3, 0, 3, 1, 1, 3, 2, 1, 2, 2, 0, 1, 1, 2, 3, 
-       1, 3, 0, 0, 3, 0, 3, 0, 1, 2, 0, 2, 2, 3, 2, 0, 0, 0, 3, 0, 
-       2, 0, 0, 2, 2, 2, 3, 1, 3, 2, 3, 2, 0, 1, 2, 1, 1, 3, 0, 3, 
-       2, 0, 2, 2, 3, 2, 1, 0, 1, 1, 0, 2, 0, 3, 2, 0, 2, 3, 1, 3, 
-       2, 2, 2, 2, 3, 1, 0, 2, 3, 3, 3, 2, 0, 0, 3, 3, 1, 2, 2, 3, 
-       0, 1, 1, 1, 3, 2, 1, 0, 0, 1, 2, 3, 3, 0, 1, 1, 1, 1, 0, 1, 
-       0, 2, 3, 3, 3, 3, 0, 2, 3, 0, 1, 0, 0, 1, 1, 3, 2, 2, 0, 0, 
+       0, 3, 3, 1, 1, 1, 0, 1, 0, 3, 2, 0, 1, 1, 3, 0, 2, 1, 0, 3,
+       2, 1, 2, 3, 3, 0, 2, 0, 1, 3, 3, 2, 3, 3, 0, 3, 0, 2, 2, 0,
+       1, 1, 2, 0, 1, 1, 2, 1, 3, 0, 0, 3, 1, 1, 0, 0, 0, 2, 0, 1,
+       0, 2, 3, 1, 3, 0, 3, 1, 0, 0, 2, 1, 3, 3, 1, 3, 2, 1, 0, 2,
+       0, 0, 3, 3, 0, 1, 2, 2, 0, 1, 0, 3, 2, 2, 1, 1, 3, 0, 3, 3,
+       2, 2, 0, 2, 1, 0, 0, 0, 3, 0, 3, 1, 2, 1, 1, 0, 3, 3, 2, 1,
+       3, 3, 2, 2, 1, 3, 0, 0, 2, 2, 3, 1, 1, 2, 2, 2, 0, 2, 0, 2,
+       0, 0, 1, 2, 2, 2, 3, 1, 2, 0, 3, 0, 1, 3, 2, 3, 3, 1, 1, 2,
+       0, 0, 2, 1, 2, 2, 0, 2, 2, 2, 2, 1, 1, 3, 1, 3, 3, 1, 2, 2,
+       3, 0, 1, 0, 0, 2, 2, 1, 3, 2, 2, 2, 3, 1, 1, 0, 0, 3, 2, 3,
+       0, 0, 3, 3, 2, 2, 2, 2, 1, 1, 0, 1, 2, 1, 3, 2, 0, 3, 0, 2,
+       3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 1, 0, 2, 3, 2, 1, 2, 0, 3, 0,
+       2, 2, 1, 1, 2, 1, 2, 0, 1, 2, 1, 3, 0, 0, 2, 3, 0, 3, 1, 0,
+       2, 2, 2, 1, 2, 0, 3, 1, 0, 0, 3, 0, 2, 3, 1, 0, 2, 3, 3, 0,
+       0, 0, 3, 0, 2, 3, 2, 0, 2, 2, 1, 0, 1, 2, 1, 3, 3, 3, 1, 2,
+       1, 2, 3, 1, 1, 2, 2, 0, 3, 0, 3, 3, 1, 3, 3, 3, 1, 3, 0, 3,
+       0, 0, 1, 2, 1, 0, 3, 0, 0, 2, 1, 3, 3, 3, 1, 1, 2, 3, 1, 0,
+       1, 1, 3, 3, 0, 3, 1, 3, 1, 2, 2, 2, 1, 3, 1, 2, 1, 3, 0, 1,
+       2, 2, 2, 3, 3, 2, 2, 3, 1, 2, 2, 1, 2, 1, 0, 0, 0, 1, 3, 2,
+       0, 3, 1, 1, 2, 1, 3, 2, 3, 2, 0, 1, 0, 1, 3, 0, 2, 3, 1, 3,
+       0, 1, 1, 3, 1, 1, 1, 0, 2, 3, 2, 1, 2, 0, 3, 3, 2, 0, 1, 0,
+       3, 3, 3, 1, 2, 2, 1, 0, 3, 3, 0, 2, 3, 1, 1, 1, 3, 3, 1, 3,
+       3, 0, 1, 0, 2, 0, 1, 1, 0, 0, 3, 2, 2, 3, 0, 2, 2, 0, 1, 1,
+       1, 3, 1, 1, 1, 0, 1, 2, 3, 2, 2, 3, 1, 1, 3, 3, 3, 1, 2, 0,
+       0, 0, 2, 2, 2, 3, 2, 0, 0, 1, 3, 0, 0, 0, 2, 0, 1, 0, 3, 0,
+       3, 1, 0, 1, 1, 1, 2, 2, 2, 0, 0, 2, 2, 0, 3, 1, 0, 2, 2, 0,
+       2, 0, 0, 1, 1, 0, 1, 2, 3, 2, 3, 2, 3, 3, 3, 0, 2, 1, 2, 2,
+       1, 0, 1, 1, 1, 2, 1, 3, 2, 0, 3, 3, 0, 0, 1, 1, 1, 2, 2, 2,
+       0, 1, 1, 2, 0, 2, 0, 1, 2, 0, 1, 3, 2, 2, 3, 0, 0, 1, 1, 2,
+       3, 1, 2, 0, 3, 0, 2, 1, 0, 0, 0, 1, 1, 1, 1, 3, 0, 0, 0, 3,
+       2, 3, 2, 1, 0, 3, 1, 1, 1, 1, 3, 0, 0, 1, 1, 1, 0, 3, 2, 2,
+       3, 1, 1, 3, 0, 1, 1, 3, 0, 3, 2, 2, 0, 3, 1, 3, 1, 0, 0, 1,
+       1, 0, 0, 1, 0, 3, 2, 2, 0, 1, 3, 0, 1, 3, 3, 2, 1, 3, 1, 1,
+       3, 3, 2, 1, 1, 3, 1, 0, 2, 1, 1, 3, 3, 3, 1, 3, 1, 3, 0, 1,
+       2, 2, 0, 3, 3, 2, 1, 1, 1, 3, 0, 2, 0, 3, 3, 1, 2, 3, 1, 3,
+       0, 0, 0, 1, 3, 3, 0, 2, 3, 0, 1, 3, 0, 0, 3, 0, 2, 2, 3, 3,
+       3, 3, 2, 1, 0, 3, 1, 1, 1, 2, 2, 0, 3, 2, 0, 2, 2, 3, 1, 0,
+       3, 3, 1, 2, 3, 0, 1, 1, 0, 3, 3, 1, 1, 3, 0, 2, 1, 2, 2, 2,
+       2, 3, 2, 3, 0, 0, 3, 1, 1, 0, 3, 2, 3, 2, 3, 3, 2, 2, 3, 1,
+       3, 2, 1, 0, 1, 0, 2, 2, 1, 3, 1, 2, 3, 3, 1, 3, 2, 1, 3, 2,
+       2, 3, 1, 1, 3, 3, 3, 3, 2, 0, 0, 3, 3, 3, 2, 3, 2, 0, 3, 0,
+       3, 1, 2, 0, 3, 0, 2, 2, 2, 3, 1, 2, 2, 1, 3, 3, 0, 1, 3, 0,
+       0, 1, 3, 2, 1, 1, 0, 1, 3, 3, 1, 1, 0, 1, 2, 2, 2, 0, 2, 3,
+       1, 2, 1, 1, 3, 2, 3, 3, 1, 0, 1, 3, 2, 3, 2, 2, 1, 2, 3, 1,
+       3, 2, 3, 1, 3, 3, 0, 3, 1, 1, 3, 2, 1, 2, 2, 0, 1, 1, 2, 3,
+       1, 3, 0, 0, 3, 0, 3, 0, 1, 2, 0, 2, 2, 3, 2, 0, 0, 0, 3, 0,
+       2, 0, 0, 2, 2, 2, 3, 1, 3, 2, 3, 2, 0, 1, 2, 1, 1, 3, 0, 3,
+       2, 0, 2, 2, 3, 2, 1, 0, 1, 1, 0, 2, 0, 3, 2, 0, 2, 3, 1, 3,
+       2, 2, 2, 2, 3, 1, 0, 2, 3, 3, 3, 2, 0, 0, 3, 3, 1, 2, 2, 3,
+       0, 1, 1, 1, 3, 2, 1, 0, 0, 1, 2, 3, 3, 0, 1, 1, 1, 1, 0, 1,
+       0, 2, 3, 3, 3, 3, 0, 2, 3, 0, 1, 0, 0, 1, 1, 3, 2, 2, 0, 0,
        2, 2, 1, 3
 };
 
index 31594b1..25b2f6d 100644 (file)
@@ -91,7 +91,7 @@ void ntru_indices_2_trits(uint16_t in_len, uint16_t const *in, bool plus1,
                                                  uint8_t *out);
 
 /**
- * Unpacks an array of N trits and creates a list of array indices 
+ * Unpacks an array of N trits and creates a list of array indices
  * corresponding to trits = +1, and list of array indices corresponding to
  * trits = -1.
  *
index b2fca2f..3ab5db4 100644 (file)
@@ -321,7 +321,7 @@ ntru_poly_t *ntru_poly_create_from_seed(ext_out_function_t mgf1_type,
                /* generate indices for a single polynomial */
                while (num_indices)
                {
-                       /* generate a random candidate index with a size of c_bits */           
+                       /* generate a random candidate index with a size of c_bits */
                        do
                        {
                                if (!bitspender->get_bits(bitspender, c_bits, &index))
index 642384f..b1bcc75 100644 (file)
@@ -27,7 +27,7 @@ typedef struct ntru_poly_t ntru_poly_t;
 #include <crypto/xofs/xof.h>
 
 /**
- * Implements a trinary polynomial storing the indices of non-zero coefficients 
+ * Implements a trinary polynomial storing the indices of non-zero coefficients
  */
 struct ntru_poly_t {
 
index 642a35c..1acab3b 100644 (file)
@@ -146,7 +146,7 @@ METHOD(ntru_private_key_t, get_encoding, chunk_t,
        return this->encoding;
 }
 
-/** 
+/**
  * Checks that the number of 0, +1, and -1 trinary ring elements meet or exceed
  * a minimum weight.
  *
@@ -596,7 +596,7 @@ static bool ring_inv(uint16_t *a, uint16_t N, uint16_t q, uint16_t *t,
                        f[i] ^= g[i];
                }
                if (deg_c > deg_b)
-               {       
+               {
                        deg_b = deg_c;
                }
                for (i = 0; i <= deg_c; i++)
@@ -633,7 +633,7 @@ static bool ring_inv(uint16_t *a, uint16_t N, uint16_t q, uint16_t *t,
                t[0] = t[0] + 2;
                ring_mult_c(t2, t, N, q, a_inv);
        }
-       
+
        return TRUE;
 }
 
@@ -692,7 +692,7 @@ ntru_private_key_t *ntru_private_key_create(ntru_drbg_t *drbg,
        t = malloc(t_len);
        t1 = t + 2 * params->N;
 
-       /* extend sparse private key polynomial f to N array elements */ 
+       /* extend sparse private key polynomial f to N array elements */
        this->privkey->get_array(this->privkey, t1);
 
        /* set mask for large modulus */
@@ -707,7 +707,7 @@ ntru_private_key_t *ntru_private_key_create(ntru_drbg_t *drbg,
 
        /* use the public key array as a temporary buffer */
        t2 = this->pubkey;
+
        /* find f^-1 in (Z/qZ)[X]/(X^N - 1) */
        if (!ring_inv(t1, params->N, params->q, t, t2))
        {
@@ -743,7 +743,7 @@ ntru_private_key_t *ntru_private_key_create(ntru_drbg_t *drbg,
        chunk_clear(&seed);
        memwipe(t, t_len);
        free(t);
-       
+
        /* generate private key encoding */
        generate_encoding(this);
 
@@ -821,7 +821,7 @@ ntru_private_key_t *ntru_private_key_create_from_data(ntru_drbg_t *drbg,
             privkey_packed_indices_len <= privkey_packed_trits_len)
                {
                        tag = NTRU_PRIVKEY_INDICES_TAG;
-               }               
+               }
                else
                {
                        tag = NTRU_PRIVKEY_TRITS_TAG;
@@ -858,7 +858,7 @@ ntru_private_key_t *ntru_private_key_create_from_data(ntru_drbg_t *drbg,
        indices = malloc(2 * dF * sizeof(uint16_t));
 
        /* unpack the private key */
-       privkey_packed = data.ptr + header_len + pubkey_packed_len;     
+       privkey_packed = data.ptr + header_len + pubkey_packed_len;
        if (tag == NTRU_PRIVKEY_TRITS_TAG)
        {
                ntru_packed_trits_2_indices(privkey_packed, params->N,
index 0bbbcc1..17bd2ac 100644 (file)
@@ -103,7 +103,7 @@ ntru_trits_t *ntru_trits_create(size_t len, ext_out_function_t alg,
                        return NULL;
                }
                if (octet < 243)  /* 243 = 3^5 */
-               {               
+               {
                        ntru_octet_2_trits(octet, (trits_needed < 5) ? buf : trits);
                        if (trits_needed < 5)
                        {
index e489aae..8e040ce 100644 (file)
@@ -27,7 +27,7 @@ typedef struct ntru_trits_t ntru_trits_t;
 #include <crypto/xofs/xof.h>
 
 /**
- * Implements an array of trinary elements (trits) 
+ * Implements an array of trinary elements (trits)
  */
 struct ntru_trits_t {
 
index f94767c..0bd8545 100644 (file)
@@ -441,7 +441,7 @@ METHOD(pkcs7_t, get_attribute, bool,
                return FALSE;
        }
 
-       /* "i" gets incremeneted after enumerate(), hence read from previous */
+       /* "i" gets incremented after enumerate(), hence read from previous */
        si = sk_CMS_SignerInfo_value(e->signers, e->i - 1);
        for (i = 0; i < CMS_signed_get_attr_count(si); i++)
        {
index c2dbf53..069136d 100644 (file)
@@ -243,8 +243,11 @@ static void threading_cleanup()
 
 #endif
 
+#if OPENSSL_VERSION_NUMBER < 0x1010100fL
 /**
  * Seed the OpenSSL RNG, if required
+ * Not necessary anymore with OpenSSL 1.1.1 (maybe wasn't already earlier, but
+ * it's now explicitly mentioned in the documentation).
  */
 static bool seed_rng()
 {
@@ -271,6 +274,7 @@ static bool seed_rng()
        DESTROY_IF(rng);
        return TRUE;
 }
+#endif /* OPENSSL_VERSION_NUMBER */
 
 /**
  * Generic key loader
@@ -839,12 +843,14 @@ plugin_t *openssl_plugin_create()
                "openssl FIPS mode(%d) - %sabled ", fips_mode, fips_mode ? "en" : "dis");
 #endif /* OPENSSL_FIPS */
 
+#if OPENSSL_VERSION_NUMBER < 0x1010100fL
        if (!seed_rng())
        {
                DBG1(DBG_CFG, "no RNG found to seed OpenSSL");
                destroy(this);
                return NULL;
        }
+#endif /* OPENSSL_VERSION_NUMBER */
 
        return &this->public.plugin;
 }
index 2c602c6..989c542 100644 (file)
@@ -16,7 +16,7 @@
 #include <crypto/crypto_tester.h>
 
 /**
- * ChaCha20 Stream Test Vector from RFC 7539, Section 2.3.2 
+ * ChaCha20 Stream Test Vector from RFC 7539, Section 2.3.2
  */
 xof_test_vector_t chacha20_xof_1 = {
        .alg = XOF_CHACHA20, .len = 44,
@@ -31,7 +31,7 @@ xof_test_vector_t chacha20_xof_1 = {
 };
 
 /**
- * ChaCha20 Stream Test Vector from RFC 7539, Section 2.4.2 
+ * ChaCha20 Stream Test Vector from RFC 7539, Section 2.4.2
  */
 xof_test_vector_t chacha20_xof_2 = {
        .alg = XOF_CHACHA20, .len = 44,
@@ -50,7 +50,7 @@ xof_test_vector_t chacha20_xof_2 = {
 };
 
 /**
- * ChaCha20 Stream Test Vector #2 from RFC 7539, Section A1. 
+ * ChaCha20 Stream Test Vector #2 from RFC 7539, Section A1.
  */
 xof_test_vector_t chacha20_xof_3 = {
        .alg = XOF_CHACHA20, .len = 44,
@@ -65,7 +65,7 @@ xof_test_vector_t chacha20_xof_3 = {
 };
 
 /**
- * ChaCha20 Stream Test Vector #3 from RFC 7539, Section A1. 
+ * ChaCha20 Stream Test Vector #3 from RFC 7539, Section A1.
  */
 xof_test_vector_t chacha20_xof_4 = {
        .alg = XOF_CHACHA20, .len = 44,
index fd6dfdb..430145a 100644 (file)
@@ -27,8 +27,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_AEAD_H_
-#define WOLFSSL_AEAD_H_
+#ifndef WOLFSSL_PLUGIN_AEAD_H_
+#define WOLFSSL_PLUGIN_AEAD_H_
 
 #include <crypto/aead.h>
 
@@ -43,4 +43,4 @@
 aead_t *wolfssl_aead_create(encryption_algorithm_t algo, size_t key_size,
                                                        size_t salt_size);
 
-#endif /** WOLFSSL_AEAD_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_AEAD_H_ @}*/
index 3c9081a..c498cb5 100644 (file)
@@ -20,8 +20,8 @@
  * THE SOFTWARE.
  */
 
-#ifndef WOLFSSL_COMMON_H_
-#define WOLFSSL_COMMON_H_
+#ifndef WOLFSSL_PLUGIN_COMMON_H_
+#define WOLFSSL_PLUGIN_COMMON_H_
 
 #include <library.h>
 
 #endif
 
 /* PARSE_ERROR is an enum entry in wolfSSL - not used in this plugin */
-#define PARSE_ERROR    WOLFSSL_PARSE_EROR
+#define PARSE_ERROR    WOLFSSL_PARSE_ERROR
+
+/* Remap unused enums from the OpenSSL compatibility layer to avoid conflicts */
+#define ASN1_BOOLEAN         REMAP_ASN1_BOOLEAN
+#define ASN1_OID             REMAP_ASN1_OID
+#define ASN1_INTEGER         REMAP_ASN1_INTEGER
+#define ASN1_BIT_STRING      REMAP_ASN1_BIT_STRING
+#define ASN1_IA5STRING       REMAP_ASN1_IA5STRING
+#define ASN1_OCTET_STRING    REMAP_ASN1_OCTET_STRING
+#define ASN1_UTCTIME         REMAP_ASN1_UTCTIME
+#define ASN1_GENERALIZEDTIME REMAP_ASN1_GENERALIZEDTIME
 
 #ifndef WOLFSSL_USER_SETTINGS
        #include <wolfssl/options.h>
 
 #undef PARSE_ERROR
 
-#endif /* WOLFSSL_COMMON_H_ */
+#undef ASN1_BOOLEAN
+#undef ASN1_OID
+#undef ASN1_INTEGER
+#undef ASN1_BIT_STRING
+#undef ASN1_IA5STRING
+#undef ASN1_OCTET_STRING
+#undef ASN1_UTCTIME
+#undef ASN1_GENERALIZEDTIME
+
+/* Eliminate macro conflicts */
+#undef RNG
+
+#endif /* WOLFSSL_PLUGIN_COMMON_H_ */
index 108c9cc..73e98f1 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_CRYPTER_H_
-#define WOLFSSL_CRYPTER_H_
+#ifndef WOLFSSL_PLUGIN_CRYPTER_H_
+#define WOLFSSL_PLUGIN_CRYPTER_H_
 
 typedef struct wolfssl_crypter_t wolfssl_crypter_t;
 
@@ -53,4 +53,4 @@ struct wolfssl_crypter_t {
 wolfssl_crypter_t *wolfssl_crypter_create(encryption_algorithm_t algo,
                                                                                  size_t key_size);
 
-#endif /** WOLFSSL_CRYPTER_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_CRYPTER_H_ @}*/
index 85952e7..2f286ca 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_DIFFIE_HELLMAN_H_
-#define WOLFSSL_DIFFIE_HELLMAN_H_
+#ifndef WOLFSSL_PLUGIN_DIFFIE_HELLMAN_H_
+#define WOLFSSL_PLUGIN_DIFFIE_HELLMAN_H_
 
 typedef struct wolfssl_diffie_hellman_t wolfssl_diffie_hellman_t;
 
@@ -53,5 +53,5 @@ struct wolfssl_diffie_hellman_t {
 wolfssl_diffie_hellman_t *wolfssl_diffie_hellman_create(
                                                                                        diffie_hellman_group_t group, ...);
 
-#endif /** WOLFSSL_DIFFIE_HELLMAN_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_DIFFIE_HELLMAN_H_ @}*/
 
index c0a3e84..d36f83f 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_EC_DIFFIE_HELLMAN_H_
-#define WOLFSSL_EC_DIFFIE_HELLMAN_H_
+#ifndef WOLFSSL_PLUGIN_EC_DIFFIE_HELLMAN_H_
+#define WOLFSSL_PLUGIN_EC_DIFFIE_HELLMAN_H_
 
 typedef struct wolfssl_ec_diffie_hellman_t wolfssl_ec_diffie_hellman_t;
 
@@ -53,4 +53,4 @@ struct wolfssl_ec_diffie_hellman_t {
 wolfssl_ec_diffie_hellman_t *wolfssl_ec_diffie_hellman_create(
                                                                                                diffie_hellman_group_t group);
 
-#endif /** WOLFSSL_EC_DIFFIE_HELLMAN_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_EC_DIFFIE_HELLMAN_H_ @}*/
index 971b6e9..7ac0257 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_EC_PRIVATE_KEY_H_
-#define WOLFSSL_EC_PRIVATE_KEY_H_
+#ifndef WOLFSSL_PLUGIN_EC_PRIVATE_KEY_H_
+#define WOLFSSL_PLUGIN_EC_PRIVATE_KEY_H_
 
 #include <credentials/builder.h>
 #include <credentials/keys/private_key.h>
@@ -68,4 +68,4 @@ wolfssl_ec_private_key_t *wolfssl_ec_private_key_gen(key_type_t type,
 wolfssl_ec_private_key_t *wolfssl_ec_private_key_load(key_type_t type,
                                                                                                          va_list args);
 
-#endif /** WOLFSSL_EC_PRIVATE_KEY_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_EC_PRIVATE_KEY_H_ @}*/
index ac82af3..45cbd5c 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_EC_PUBLIC_KEY_H_
-#define WOLFSSL_EC_PUBLIC_KEY_H_
+#ifndef WOLFSSL_PLUGIN_EC_PUBLIC_KEY_H_
+#define WOLFSSL_PLUGIN_EC_PUBLIC_KEY_H_
 
 typedef struct wolfssl_ec_public_key_t wolfssl_ec_public_key_t;
 
@@ -56,4 +56,4 @@ struct wolfssl_ec_public_key_t {
 wolfssl_ec_public_key_t *wolfssl_ec_public_key_load(key_type_t type,
                                                                                                        va_list args);
 
-#endif /** WOLFSSL_EC_PUBLIC_KEY_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_EC_PUBLIC_KEY_H_ @}*/
index 2f44a49..72802dc 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_ED_PRIVATE_KEY_H_
-#define WOLFSSL_ED_PRIVATE_KEY_H_
+#ifndef WOLFSSL_PLUGIN_ED_PRIVATE_KEY_H_
+#define WOLFSSL_PLUGIN_ED_PRIVATE_KEY_H_
 
 #include <credentials/builder.h>
 #include <credentials/keys/private_key.h>
@@ -51,4 +51,4 @@ private_key_t *wolfssl_ed_private_key_gen(key_type_t type, va_list args);
  */
 private_key_t *wolfssl_ed_private_key_load(key_type_t type, va_list args);
 
-#endif /** WOLFSSL_ED_PRIVATE_KEY_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_ED_PRIVATE_KEY_H_ @}*/
index b6239ca..4b3be1c 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_ED_PUBLIC_KEY_H_
-#define WOLFSSL_ED_PUBLIC_KEY_H_
+#ifndef WOLFSSL_PLUGIN_ED_PUBLIC_KEY_H_
+#define WOLFSSL_PLUGIN_ED_PUBLIC_KEY_H_
 
 #include <credentials/builder.h>
 #include <credentials/keys/public_key.h>
@@ -42,4 +42,4 @@
  */
 public_key_t *wolfssl_ed_public_key_load(key_type_t type, va_list args);
 
-#endif /** WOLFSSL_ED_PUBLIC_KEY_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_ED_PUBLIC_KEY_H_ @}*/
index a976f07..63c8bc7 100644 (file)
@@ -25,8 +25,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_HASHER_H_
-#define WOLFSSL_HASHER_H_
+#ifndef WOLFSSL_PLUGIN_HASHER_H_
+#define WOLFSSL_PLUGIN_HASHER_H_
 
 typedef struct wolfssl_hasher_t wolfssl_hasher_t;
 
@@ -51,4 +51,4 @@ struct wolfssl_hasher_t {
  */
 wolfssl_hasher_t *wolfssl_hasher_create(hash_algorithm_t algo);
 
-#endif /** WOLFSSL_HASHER_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_HASHER_H_ @}*/
index 23953da..a8e8532 100644 (file)
@@ -27,8 +27,8 @@
  * @{ @ingroup wolfssl_p
  */
 
-#ifndef WOLFSSL_HMAC_H_
-#define WOLFSSL_HMAC_H_
+#ifndef WOLFSSL_PLUGIN_HMAC_H_
+#define WOLFSSL_PLUGIN_HMAC_H_
 
 #include <crypto/prfs/prf.h>
 #include <crypto/signers/signer.h>
@@ -49,4 +49,4 @@ prf_t *wolfssl_hmac_prf_create(pseudo_random_function_t algo);
  */
 signer_t *wolfssl_hmac_signer_create(integrity_algorithm_t algo);
 
-#endif /** WOLFSSL_HMAC_H_ @}*/
+#endif /** WOLFSSL_PLUGIN_HMAC_H_ @}*/