diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index e92129d..0000000 --- a/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -# Telling GIT that Xcode pbxproj remote and local files -# should be merged using union of differences -*.pbxproj binary merge=union - diff --git a/.gitignore b/.gitignore index c936c9b..0e76568 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ DerivedData *.perspectivev3 !default.perspectivev3 xcuserdata/ +Scripts/environment.rb ## Other *.xccheckout @@ -47,4 +48,3 @@ playground.xcworkspace # Carthage/Checkouts Carthage/Build - diff --git a/Configuration/Framework.xcconfig b/Configuration/Framework.xcconfig index f3fb7ad..b72131d 100755 --- a/Configuration/Framework.xcconfig +++ b/Configuration/Framework.xcconfig @@ -1,16 +1,16 @@ PRODUCT_NAME = OpenVPNAdapter PRODUCT_BUNDLE_IDENTIFIER = me.ss-abramchuk.openvpn-adapter INFOPLIST_FILE = Configuration/Info-Framework.plist -MODULEMAP_FILE = OpenVPN Adapter/OpenVPNAdapter.modulemap +MODULEMAP_FILE = Configuration/OpenVPNAdapter.modulemap DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION) APPLICATION_EXTENSION_API_ONLY = YES CLANG_CXX_LANGUAGE_STANDARD = gnu++14 CLANG_CXX_LIBRARY = libc++ -VENDORS_PATH = $(PROJECT_DIR)/OpenVPN Adapter/Vendors -HEADER_SEARCH_PATHS = "$(VENDORS_PATH)/asio/asio/include" "$(VENDORS_PATH)/lz4/include" "$(VENDORS_PATH)/mbedtls/include" "$(VENDORS_PATH)/openvpn" -LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*] = "$(VENDORS_PATH)/lz4/lib/sim" "$(VENDORS_PATH)/mbedtls/lib/sim" -LIBRARY_SEARCH_PATHS[sdk=iphoneos*] = "$(VENDORS_PATH)/lz4/lib/ios" "$(VENDORS_PATH)/mbedtls/lib/ios" -LIBRARY_SEARCH_PATHS[sdk=macosx*] = "$(VENDORS_PATH)/lz4/lib/macos" "$(VENDORS_PATH)/mbedtls/lib/macos" +VENDORS_DIR = $(PROJECT_DIR)/Sources/OpenVPNAdapter/Libraries/Vendors +HEADER_SEARCH_PATHS = "$(VENDORS_DIR)/asio/asio/include" "$(VENDORS_DIR)/lz4/include" "$(VENDORS_DIR)/mbedtls/include" "$(VENDORS_DIR)/openvpn" +LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*] = "$(VENDORS_DIR)/lz4/lib/sim" "$(VENDORS_DIR)/mbedtls/lib/sim" +LIBRARY_SEARCH_PATHS[sdk=iphoneos*] = "$(VENDORS_DIR)/lz4/lib/ios" "$(VENDORS_DIR)/mbedtls/lib/ios" +LIBRARY_SEARCH_PATHS[sdk=macosx*] = "$(VENDORS_DIR)/lz4/lib/macos" "$(VENDORS_DIR)/mbedtls/lib/macos" OTHER_LDFLAGS = -lmbedtls -lmbedx509 -lmbedcrypto -llz4 OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS) -DUSE_ASIO -DUSE_ASIO_THREADLOCAL -DASIO_STANDALONE -DASIO_NO_DEPRECATED -DHAVE_LZ4 -DUSE_MBEDTLS -DOPENVPN_FORCE_TUN_NULL -DUSE_TUN_BUILDER GCC_WARN_64_TO_32_BIT_CONVERSION = NO diff --git a/OpenVPN Adapter/OpenVPNAdapter.modulemap b/Configuration/OpenVPNAdapter.modulemap similarity index 100% rename from OpenVPN Adapter/OpenVPNAdapter.modulemap rename to Configuration/OpenVPNAdapter.modulemap diff --git a/OpenVPN Adapter Tests/ProfileLoader.swift b/OpenVPN Adapter Tests/ProfileLoader.swift deleted file mode 100644 index f157590..0000000 --- a/OpenVPN Adapter Tests/ProfileLoader.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ProfileLoader.swift -// OpenVPN Adapter -// -// Created by Sergey Abramchuk on 22.04.17. -// -// - -import Foundation - -enum ProfileType: String { - case localVPNServer = "local_vpn_server" - case remoteVPNServer = "remote_vpn_server" -} - -struct ProfileLoader { - - static func getVPNProfile(type: ProfileType) -> Data { - let fileName = type.rawValue - - guard - let path = Bundle.current.url(forResource: fileName, withExtension: "ovpn"), - let profile = try? Data(contentsOf: path) - else { - fatalError("Failed to retrieve OpenVPN profile") - } - - return profile - } - -} - diff --git a/OpenVPN Adapter Tests/local_vpn_server.ovpn b/OpenVPN Adapter Tests/local_vpn_server.ovpn deleted file mode 100644 index e07238c..0000000 --- a/OpenVPN Adapter Tests/local_vpn_server.ovpn +++ /dev/null @@ -1,89 +0,0 @@ -dev tun -proto udp -remote 192.168.1.200 1194 -cipher AES-256-CBC -resolv-retry infinite -nobind -persist-key -persist-tun -client -verb 3 - ------BEGIN CERTIFICATE----- -MIIDpjCCAo6gAwIBAgIBADANBgkqhkiG9w0BAQsFADBSMRUwEwYDVQQDEww5ZTQ3 -NThlOTVlZTIxFTATBgNVBAoTDDllNDc1OGU5NWVlMjEVMBMGA1UECxMMOWU0NzU4 -ZTk1ZWUyMQswCQYDVQQGEwJVUzAeFw0xNzA0MjgxODU3MjhaFw0zNzEyMzExODU3 -MjhaMFIxFTATBgNVBAMTDDllNDc1OGU5NWVlMjEVMBMGA1UEChMMOWU0NzU4ZTk1 -ZWUyMRUwEwYDVQQLEww5ZTQ3NThlOTVlZTIxCzAJBgNVBAYTAlVTMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ecfScl3JGwRhbmHgIrNx7LItVyTX9V3 -CSZOjBOZymXIKt7/vNt9w6suebtK64/YCRAyPsUbvqUwYqfZhd6jngua/917LrnO -SKHMrGtwDLfnxKY3WTPl1tI5GlrojgF2Z3wCgzRr/+KkFAk8Fq2iffJDRi2Iptqn -5PlOosGfpA1fQKYsedKx7DAXbwTvXPbE/tJ0m8WfdiHIUkWWrNxAFOuctWLk+oBi -vAmlb3/GSctXEIcVPHdF5AKU/GR5AjY1Qqde4LcMS+54YV+g/rpFYNUFsySNSvLQ -Lxg3zZ79HAd9DMwYSt47MP9pih8dT2jdt7df6y+/RXq32B6SoqrYPwIDAQABo4GG -MIGDMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgH2MGMGA1UdJQRcMFoGCCsG -AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDBQYI -KwYBBQUHAwYGCCsGAQUFBwMHBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcN -AQELBQADggEBAKnWRxFiKPR7mhbH+JKg8uxu1ONe8TpBygMw6B0XM0WXFY0byTnK -7IX1X1TzIeJNaeDiBKvrm8o4SJGXy8qC1DM+tFAlcRCwwBl5Yi89TcbLup0SSYnw -QEJQ169+u1WNS6H14ED2p0Um8kslRXqSC04yLjImy3Sr4d52h1TQNjkpSGKggBbN -L6YR29j8LX+3ls+Jx5e+allaw6v9Dft+jjsPEZE6KznhtQa6Zyw6Afk44yPLWjne -ShcnY1Au3meaU98Q/S891i7o1tEFUKNBy+n4Qu3J/BnK77NPw1g7FJOcOD0JZIUq -XtjqsiTviTpsUFcwp/Bl3BTXT0b6BwKi978= ------END CERTIFICATE----- - - ------BEGIN CERTIFICATE----- -MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQsFADBnMRwwGgYDVQQDExM2OTg1 -MzIwMzIwNzkwNTYyMDkzMRwwGgYDVQQKExM2OTg1MzIwMzIwNzkwNTYyMDkzMRww -GgYDVQQLExM2OTg1MzIwMzIwNzkwNTYyMDkzMQswCQYDVQQGEwJVUzAeFw0xNzA0 -MjgxODU3MzFaFw0zNzEyMzExODU3MzFaMGcxHDAaBgNVBAMTEzY5ODUzMjAzMjA3 -OTA1NjIwOTMxHDAaBgNVBAoTEzY5ODUzMjAzMjA3OTA1NjIwOTMxHDAaBgNVBAsT -EzY5ODUzMjAzMjA3OTA1NjIwOTMxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAx9oRmlK91IFxB3WWjrRJkR8l4csle9EmrH+6r6US -Utq/Ik9SctVZz7n8L5IrJc1/hpPvdSyD8uq3lI0U9/h0eDca5pKy0b9Oe4qS75wv -JFkebg/5V2grRL9//125ux/2zytOPG3WIQF0p2NT4Y4OSOPG0RCdQRd2pZBS1sIu -AMO+jRZGlrLxc+QyokR64wlkTHnv3dWJBUm8iuVaQpr5X22a5urCPk3H79zRPJuO -1u74a0AaMRREzAp9F547VghvMWKxd6y38jOVteSQyB6E4c/T7rnO0MWk8GPO3JEj -qNQ/9N0OE9kVWNuKVQf6UHV2cknyfHyg9Va0IgWvRoLt7QIDAQABo4GGMIGDMA8G -A1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgH2MGMGA1UdJQRcMFoGCCsGAQUFBwMB -BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDBQYIKwYBBQUH -AwYGCCsGAQUFBwMHBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQELBQAD -ggEBAFZZJLTP84lo46eZkaRfvXiv0qKO2FHHTSJtrHl7C6mR9ffZzp6nTd0EPB6T -AkQZong8LqjcDmTk+3JGTHDSdy+5E6TkDTp1oiOoVApxRd13TIFmxpPslBczyHwt -u5MrWNMMk+urGHK4tm/TBCm13AQAv20CQBsI+s+3pW3blcUpD7HbZvahZgNg978h -g/y5hFtffBJbCEzJpYV9bvh7tyI0ndhyxB6ew93jfaGukDtIbpTjLTD1qvmnaGvW -dEY8VmtmQ7gKuSMvfkW7ClN0XxTfDwkT8jxADF4P9RGHeUW2AUwMKw2dV2LbX933 -BNZuIgS6Lcaxso+R20VwQnefPvM= ------END CERTIFICATE----- - - ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDH2hGaUr3UgXEH -dZaOtEmRHyXhyyV70Sasf7qvpRJS2r8iT1Jy1VnPufwvkislzX+Gk+91LIPy6reU -jRT3+HR4NxrmkrLRv057ipLvnC8kWR5uD/lXaCtEv3//Xbm7H/bPK048bdYhAXSn -Y1Phjg5I48bREJ1BF3alkFLWwi4Aw76NFkaWsvFz5DKiRHrjCWRMee/d1YkFSbyK -5VpCmvlfbZrm6sI+Tcfv3NE8m47W7vhrQBoxFETMCn0XnjtWCG8xYrF3rLfyM5W1 -5JDIHoThz9Puuc7QxaTwY87ckSOo1D/03Q4T2RVY24pVB/pQdXZySfJ8fKD1VrQi -Ba9Ggu3tAgMBAAECggEAU6V8FKFo/pam3j5jI5tl5y2oR1cleytRCoXzdyyZ/L+9 -m/ijQ5j0nDL10FtXX90g8Qzd/qcBGx0OdUiPbDI7XU2DHtprqcpuaNrZIRy3xnje -eaaJ8AGTipS0WAe8gwuf25n+huBZ7TqUvrKeGxu/8tYTEtHnX6UYbbd4VJa1dm+5 -16LfueOIricLu5JJ7TFLls4kFY6R//cFu6wzmlHwYvU7xsTQg8yWReojCifyvPqW -yvF/MARb+1XWGCWKfT9B/A64uy8a4vqT52JHoG53t35luAjtHni65r+HDdiEf2Ph -+gvpH/g0bOBBDFLQe5j1CdZr1PdzBNv9a1rxVVVgAQKBgQDoyKM9pTbNjmMPSb64 -3SsbBpF8M4JuIVg2qmu+xs25CoRKT+S6sMnnY/2uLzvYeUQWAQRPCqjL6jYWoLyZ -AwDAl3uvAGG6LNuMqscSkDfO5hpr2y+fXRyh1+vTl9Fau3ZCSlCwJy/wBIfKbls9 -4Y0aLBlaS4AivMh9dSJe7e9MAQKBgQDbyJ+wcS8QcyRtOAZ7MQMRqsLjXRk6E2aY -1a/WhLDfcsew56dh6F6VGE75DTvnOVmw19+HHj+bmmqbwU4Ook46E+BIWeonK6yZ -8hBq6VFYutNaiid9MzV+90u1VYPT1C7/H28WkQ5F2obzSEdpQUs+z/Kb2wTRbgEx -ECYTGe2R7QKBgF3Do21LRR3bQq9/xuDzxU8ngCaFIP53U+8BClFYBrmIMO017S39 -0/XuYtpskDCL+A7c7f1gj8lDV/IZYJ5JhV4OJnXBM5woQW8RwwoJKVGfgfj72tzY -RpYyQP2D44ImjGX7RTEPN9H4ITI67Wmplop6ROQIEV7sp91Q9z1BnegBAoGAHMU3 -ej5mvc2E0DNMTeYNk8t5tY+jVMHjZVBbs0YtbSK2V0cL1zo232eONvXviIYuYoLv -xN1F0FW3bOoyEKJYgSvG6VGz4CrMbl6MnaIrPuU985UwNCh28UboBzXJivo0qLrx -rM+SQbyoe8JTbsjYU8Ge7Z4PFGdFCqolgcycF8UCgYBEVR50Ze1j8XK8oyySePqn -YN1/CPQHkMv4Z9J511uDOw+rZpo8BtZX19jj4MWpFtcR7EAj4OyCe8gdn7YRv/n9 -Hw+zm4o54mkL4tgWg0/9jt0eCR3j3Ph03mTlkqwE/PPXaRIb1E8EmEYSwT0hDzjc -Wb3dqIAxzkHucnvInG+TEw== ------END PRIVATE KEY----- - diff --git a/OpenVPN Adapter Tests/remote_vpn_server.ovpn b/OpenVPN Adapter Tests/remote_vpn_server.ovpn deleted file mode 100644 index ba0d432..0000000 --- a/OpenVPN Adapter Tests/remote_vpn_server.ovpn +++ /dev/null @@ -1,214 +0,0 @@ -############################################################################### -# OpenVPN 2.0 Sample Configuration File -# for PacketiX VPN / SoftEther VPN Server -# -# !!! AUTO-GENERATED BY SOFTETHER VPN SERVER MANAGEMENT TOOL !!! -# -# !!! YOU HAVE TO REVIEW IT BEFORE USE AND MODIFY IT AS NECESSARY !!! -# -# This configuration file is auto-generated. You might use this config file -# in order to connect to the PacketiX VPN / SoftEther VPN Server. -# However, before you try it, you should review the descriptions of the file -# to determine the necessity to modify to suitable for your real environment. -# If necessary, you have to modify a little adequately on the file. -# For example, the IP address or the hostname as a destination VPN Server -# should be confirmed. -# -# Note that to use OpenVPN 2.0, you have to put the certification file of -# the destination VPN Server on the OpenVPN Client computer when you use this -# config file. Please refer the below descriptions carefully. - - -############################################################################### -# Specify the type of the layer of the VPN connection. -# -# To connect to the VPN Server as a "Remote-Access VPN Client PC", -# specify 'dev tun'. (Layer-3 IP Routing Mode) -# -# To connect to the VPN Server as a bridging equipment of "Site-to-Site VPN", -# specify 'dev tap'. (Layer-2 Ethernet Bridgine Mode) - -dev tun - - -############################################################################### -# Specify the underlying protocol beyond the Internet. -# Note that this setting must be correspond with the listening setting on -# the VPN Server. -# -# Specify either 'proto tcp' or 'proto udp'. - -proto udp - - -############################################################################### -# The destination hostname / IP address, and port number of -# the target VPN Server. -# -# You have to specify as 'remote '. You can also -# specify the IP address instead of the hostname. -# -# Note that the auto-generated below hostname are a "auto-detected -# IP address" of the VPN Server. You have to confirm the correctness -# beforehand. -# -# When you want to connect to the VPN Server by using TCP protocol, -# the port number of the destination TCP port should be same as one of -# the available TCP listeners on the VPN Server. -# -# When you use UDP protocol, the port number must same as the configuration -# setting of "OpenVPN Server Compatible Function" on the VPN Server. - -remote vpn152461132.opengw.net 1840 - - -############################################################################### -# The HTTP/HTTPS proxy setting. -# -# Only if you have to use the Internet via a proxy, uncomment the below -# two lines and specify the proxy address and the port number. -# In the case of using proxy-authentication, refer the OpenVPN manual. - -;http-proxy-retry -;http-proxy [proxy server] [proxy port] - - -############################################################################### -# The encryption and authentication algorithm. -# -# Default setting is good. Modify it as you prefer. -# When you specify an unsupported algorithm, the error will occur. -# -# The supported algorithms are as follows: -# cipher: [NULL-CIPHER] NULL AES-128-CBC AES-192-CBC AES-256-CBC BF-CBC -# CAST-CBC CAST5-CBC DES-CBC DES-EDE-CBC DES-EDE3-CBC DESX-CBC -# RC2-40-CBC RC2-64-CBC RC2-CBC -# auth: SHA SHA1 MD5 MD4 RMD160 - -cipher AES-128-CBC -auth SHA1 - - -############################################################################### -# Other parameters necessary to connect to the VPN Server. -# -# It is not recommended to modify it unless you have a particular need. - -resolv-retry infinite -nobind -persist-key -persist-tun -client -verb 3 - - -############################################################################### -# The certificate file of the destination VPN Server. -# -# The CA certificate file is embedded in the inline format. -# You can replace this CA contents if necessary. -# Please note that if the server certificate is not a self-signed, you have to -# specify the signer's root certificate (CA) here. - - ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - - - - -############################################################################### -# The client certificate file (dummy). -# -# In some implementations of OpenVPN Client software -# (for example: OpenVPN Client for iOS), -# a pair of client certificate and private key must be included on the -# configuration file due to the limitation of the client. -# So this sample configuration file has a dummy pair of client certificate -# and private key as follows. - - ------BEGIN CERTIFICATE----- -MIICxjCCAa4CAQAwDQYJKoZIhvcNAQEFBQAwKTEaMBgGA1UEAxMRVlBOR2F0ZUNs -aWVudENlcnQxCzAJBgNVBAYTAkpQMB4XDTEzMDIxMTAzNDk0OVoXDTM3MDExOTAz -MTQwN1owKTEaMBgGA1UEAxMRVlBOR2F0ZUNsaWVudENlcnQxCzAJBgNVBAYTAkpQ -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5h2lgQQYUjwoKYJbzVZA -5VcIGd5otPc/qZRMt0KItCFA0s9RwReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD -4W8GmJe8zapJnLsD39OSMRCzZJnczW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQ -CjntLIWk5OLLVkFt9/tScc1GDtci55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67 -XCKJnGB5nlQ+HsMYPV/O49Ld91ZN/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6h -p/0yXnTB//mWutBGpdUlIbwiITbAmrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGD -ywIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQChO5hgcw/4oWfoEFLu9kBa1B//kxH8 -hQkChVNn8BRC7Y0URQitPl3DKEed9URBDdg2KOAz77bb6ENPiliD+a38UJHIRMqe -UBHhllOHIzvDhHFbaovALBQceeBzdkQxsKQESKmQmR832950UCovoyRB61UyAV7h -+mZhYPGRKXKSJI6s0Egg/Cri+Cwk4bjJfrb5hVse11yh4D9MHhwSfCOH+0z4hPUT -Fku7dGavURO5SVxMn/sL6En5D+oSeXkadHpDs+Airym2YHh15h0+jPSOoR6yiVp/ -6zZeZkrN43kuS73KpKDFjfFPh8t4r1gOIjttkNcQqBccusnplQ7HJpsk ------END CERTIFICATE----- - - - - ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA5h2lgQQYUjwoKYJbzVZA5VcIGd5otPc/qZRMt0KItCFA0s9R -wReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD4W8GmJe8zapJnLsD39OSMRCzZJnc -zW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQCjntLIWk5OLLVkFt9/tScc1GDtci -55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67XCKJnGB5nlQ+HsMYPV/O49Ld91ZN -/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6hp/0yXnTB//mWutBGpdUlIbwiITbA -mrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGDywIDAQABAoIBAERV7X5AvxA8uRiK -k8SIpsD0dX1pJOMIwakUVyvc4EfN0DhKRNb4rYoSiEGTLyzLpyBc/A28Dlkm5eOY -fjzXfYkGtYi/Ftxkg3O9vcrMQ4+6i+uGHaIL2rL+s4MrfO8v1xv6+Wky33EEGCou -QiwVGRFQXnRoQ62NBCFbUNLhmXwdj1akZzLU4p5R4zA3QhdxwEIatVLt0+7owLQ3 -lP8sfXhppPOXjTqMD4QkYwzPAa8/zF7acn4kryrUP7Q6PAfd0zEVqNy9ZCZ9ffho -zXedFj486IFoc5gnTp2N6jsnVj4LCGIhlVHlYGozKKFqJcQVGsHCqq1oz2zjW6LS -oRYIHgECgYEA8zZrkCwNYSXJuODJ3m/hOLVxcxgJuwXoiErWd0E42vPanjjVMhnt -KY5l8qGMJ6FhK9LYx2qCrf/E0XtUAZ2wVq3ORTyGnsMWre9tLYs55X+ZN10Tc75z -4hacbU0hqKN1HiDmsMRY3/2NaZHoy7MKnwJJBaG48l9CCTlVwMHocIECgYEA8jby -dGjxTH+6XHWNizb5SRbZxAnyEeJeRwTMh0gGzwGPpH/sZYGzyu0SySXWCnZh3Rgq -5uLlNxtrXrljZlyi2nQdQgsq2YrWUs0+zgU+22uQsZpSAftmhVrtvet6MjVjbByY -DADciEVUdJYIXk+qnFUJyeroLIkTj7WYKZ6RjksCgYBoCFIwRDeg42oK89RFmnOr -LymNAq4+2oMhsWlVb4ejWIWeAk9nc+GXUfrXszRhS01mUnU5r5ygUvRcarV/T3U7 -TnMZ+I7Y4DgWRIDd51znhxIBtYV5j/C/t85HjqOkH+8b6RTkbchaX3mau7fpUfds -Fq0nhIq42fhEO8srfYYwgQKBgQCyhi1N/8taRwpk+3/IDEzQwjbfdzUkWWSDk9Xs -H/pkuRHWfTMP3flWqEYgW/LW40peW2HDq5imdV8+AgZxe/XMbaji9Lgwf1RY005n -KxaZQz7yqHupWlLGF68DPHxkZVVSagDnV/sztWX6SFsCqFVnxIXifXGC4cW5Nm9g -va8q4QKBgQCEhLVeUfdwKvkZ94g/GFz731Z2hrdVhgMZaU/u6t0V95+YezPNCQZB -wmE9Mmlbq1emDeROivjCfoGhR3kZXW1pTKlLh6ZMUQUOpptdXva8XxfoqQwa3enA -M7muBbF0XN7VO80iJPv+PmIZdEIAkpwKfi201YB+BafCIuGxIF50Vg== ------END RSA PRIVATE KEY----- - - - - diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedtls.a b/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedtls.a deleted file mode 100644 index c5452ec..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedtls.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedcrypto.a b/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedcrypto.a deleted file mode 100644 index 61f5c72..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedcrypto.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedtls.a b/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedtls.a deleted file mode 100644 index 8cd0621..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedtls.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedx509.a b/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedx509.a deleted file mode 100644 index 9c930d3..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/macos/libmbedx509.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedcrypto.a b/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedcrypto.a deleted file mode 100644 index 2857ecb..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedcrypto.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedtls.a b/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedtls.a deleted file mode 100644 index 88a463c..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedtls.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedx509.a b/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedx509.a deleted file mode 100644 index a25c5af..0000000 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/sim/libmbedx509.a and /dev/null differ diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0002-pkcs5v2-add-support-for-additional-hmacSHA-algorithm.patch b/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0002-pkcs5v2-add-support-for-additional-hmacSHA-algorithm.patch deleted file mode 100644 index 157ff29..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0002-pkcs5v2-add-support-for-additional-hmacSHA-algorithm.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 56df6d5003b20fa673b67fb06c2ec03a8197c4c2 Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Wed, 20 Dec 2017 07:03:55 +0800 -Subject: [PATCH] pkcs5v2: add support for additional hmacSHA algorithms - -Currently only SHA1 is supported as PRF algorithm for PBKDF2 -(PKCS#5 v2.0). -This means that keys encrypted and authenticated using -another algorithm of the SHA family cannot be decrypted. - -This deficiency has become particularly incumbent now that -PKIs created with OpenSSL1.1 are encrypting keys using -hmacSHA256 by default (OpenSSL1.0 used PKCS#5 v1.0 by default -and even if v2 was forced, it would still use hmacSHA1). - -Enable support for all the digest algorithms of the SHA -family for PKCS#5 v2.0. - -Signed-off-by: Antonio Quartulli ---- - include/mbedtls/oid.h | 18 +++++++++++++++ - library/oid.c | 45 ++++++++++++++++++++++++++++++++++++++ - library/pkcs5.c | 4 +--- - tests/suites/test_suite_pkcs5.data | 4 ++-- - 4 files changed, 66 insertions(+), 5 deletions(-) - -diff --git a/include/mbedtls/oid.h b/include/mbedtls/oid.h -index bf2ef5ec..408645ec 100644 ---- a/include/mbedtls/oid.h -+++ b/include/mbedtls/oid.h -@@ -228,6 +228,14 @@ - - #define MBEDTLS_OID_HMAC_SHA1 MBEDTLS_OID_RSA_COMPANY "\x02\x07" /**< id-hmacWithSHA1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 7 } */ - -+#define MBEDTLS_OID_HMAC_SHA224 MBEDTLS_OID_RSA_COMPANY "\x02\x08" /**< id-hmacWithSHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 8 } */ -+ -+#define MBEDTLS_OID_HMAC_SHA256 MBEDTLS_OID_RSA_COMPANY "\x02\x09" /**< id-hmacWithSHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 9 } */ -+ -+#define MBEDTLS_OID_HMAC_SHA384 MBEDTLS_OID_RSA_COMPANY "\x02\x0A" /**< id-hmacWithSHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 10 } */ -+ -+#define MBEDTLS_OID_HMAC_SHA512 MBEDTLS_OID_RSA_COMPANY "\x02\x0B" /**< id-hmacWithSHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 11 } */ -+ - /* - * Encryption algorithms - */ -@@ -514,6 +522,16 @@ int mbedtls_oid_get_oid_by_sig_alg( mbedtls_pk_type_t pk_alg, mbedtls_md_type_t - * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND - */ - int mbedtls_oid_get_md_alg( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_alg ); -+ -+/** -+ * \brief Translate hmac algorithm OID into md_type -+ * -+ * \param oid OID to use -+ * \param md_hmac place to store message hmac algorithm -+ * -+ * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND -+ */ -+int mbedtls_oid_get_md_hmac( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_hmac ); - #endif /* MBEDTLS_MD_C */ - - /** -diff --git a/library/oid.c b/library/oid.c -index f13826ed..edea950f 100644 ---- a/library/oid.c -+++ b/library/oid.c -@@ -625,6 +625,51 @@ static const oid_md_alg_t oid_md_alg[] = - FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg) - FN_OID_GET_ATTR1(mbedtls_oid_get_md_alg, oid_md_alg_t, md_alg, mbedtls_md_type_t, md_alg) - FN_OID_GET_OID_BY_ATTR1(mbedtls_oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, mbedtls_md_type_t, md_alg) -+ -+/* -+ * For HMAC digestAlgorithm -+ */ -+typedef struct { -+ mbedtls_oid_descriptor_t descriptor; -+ mbedtls_md_type_t md_hmac; -+} oid_md_hmac_t; -+ -+static const oid_md_hmac_t oid_md_hmac[] = -+{ -+#if defined(MBEDTLS_SHA1_C) -+ { -+ { ADD_LEN( MBEDTLS_OID_HMAC_SHA1 ), "hmacSHA1", "HMAC-SHA-1" }, -+ MBEDTLS_MD_SHA1, -+ }, -+#endif /* MBEDTLS_SHA1_C */ -+#if defined(MBEDTLS_SHA256_C) -+ { -+ { ADD_LEN( MBEDTLS_OID_HMAC_SHA224 ), "hmacSHA224", "HMAC-SHA-224" }, -+ MBEDTLS_MD_SHA224, -+ }, -+ { -+ { ADD_LEN( MBEDTLS_OID_HMAC_SHA256 ), "hmacSHA256", "HMAC-SHA-256" }, -+ MBEDTLS_MD_SHA256, -+ }, -+#endif /* MBEDTLS_SHA256_C */ -+#if defined(MBEDTLS_SHA512_C) -+ { -+ { ADD_LEN( MBEDTLS_OID_HMAC_SHA384 ), "hmacSHA384", "HMAC-SHA-384" }, -+ MBEDTLS_MD_SHA384, -+ }, -+ { -+ { ADD_LEN( MBEDTLS_OID_HMAC_SHA512 ), "hmacSHA512", "HMAC-SHA-512" }, -+ MBEDTLS_MD_SHA512, -+ }, -+#endif /* MBEDTLS_SHA512_C */ -+ { -+ { NULL, 0, NULL, NULL }, -+ MBEDTLS_MD_NONE, -+ }, -+}; -+ -+FN_OID_TYPED_FROM_ASN1(oid_md_hmac_t, md_hmac, oid_md_hmac) -+FN_OID_GET_ATTR1(mbedtls_oid_get_md_hmac, oid_md_hmac_t, md_hmac, mbedtls_md_type_t, md_hmac) - #endif /* MBEDTLS_MD_C */ - - #if defined(MBEDTLS_PKCS12_C) -diff --git a/library/pkcs5.c b/library/pkcs5.c -index e28d5a84..95f44fa9 100644 ---- a/library/pkcs5.c -+++ b/library/pkcs5.c -@@ -96,11 +96,9 @@ static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, - if( ( ret = mbedtls_asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); - -- if( MBEDTLS_OID_CMP( MBEDTLS_OID_HMAC_SHA1, &prf_alg_oid ) != 0 ) -+ if( mbedtls_oid_get_md_hmac( &prf_alg_oid, md_type ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); - -- *md_type = MBEDTLS_MD_SHA1; -- - if( p != end ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); -diff --git a/tests/suites/test_suite_pkcs5.data b/tests/suites/test_suite_pkcs5.data -index e609d62b..4c2c0bb6 100644 ---- a/tests/suites/test_suite_pkcs5.data -+++ b/tests/suites/test_suite_pkcs5.data -@@ -82,9 +82,9 @@ PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg overlong) - depends_on:MBEDTLS_SHA1_C:MBEDTLS_DES_C - mbedtls_pkcs5_pbes2:MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE:"301D06092A864886F70D01050C301004082ED7F24A1D516DD7020208003001":"":"":MBEDTLS_ERR_PKCS5_INVALID_FORMAT + MBEDTLS_ERR_ASN1_OUT_OF_DATA:"" - --PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg != HMAC-SHA1) -+PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg != HMAC-SHA*) - depends_on:MBEDTLS_SHA1_C:MBEDTLS_DES_C --mbedtls_pkcs5_pbes2:MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE:"302706092A864886F70D01050C301A04082ED7F24A1D516DD702020800300A06082A864886F70D0208":"":"":MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE:"" -+mbedtls_pkcs5_pbes2:MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE:"302706092A864886F70D01050C301A04082ED7F24A1D516DD702020800300A06082A864886F70D0206":"":"":MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE:"" - - PBES2 Decrypt (bad, PBKDF2 params extra data) - depends_on:MBEDTLS_SHA1_C:MBEDTLS_DES_C --- -2.16.2 - diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0003-tests-pkcs5-pbkdf2_hmac-add-unit-tests-for-additiona.patch b/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0003-tests-pkcs5-pbkdf2_hmac-add-unit-tests-for-additiona.patch deleted file mode 100644 index ad46ebb..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0003-tests-pkcs5-pbkdf2_hmac-add-unit-tests-for-additiona.patch +++ /dev/null @@ -1,128 +0,0 @@ -From bb029567d8a2b55e500a85c916a8d22ae9434ab3 Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Wed, 31 Jan 2018 23:23:02 +0800 -Subject: [PATCH] tests/pkcs5/pbkdf2_hmac: add unit tests for additional SHA - algorithms - -Test vectors for SHA224,256,384 and 512 have been -generated using Python's hashlib module by the -following oneliner: - -import binascii, hashlib -binascii.hexlify(hashlib.pbkdf2_hmac(ALGO, binascii.unhexlify('PASSWORD'), binascii.unhexlify('SALT'), ITER, KEYLEN))) - -where ALGO was 'sha224', 'sha256', 'sha384' and 'sha512' -respectively. - -Values for PASSWORD, SALT, ITER and KEYLEN were copied from the -existent test vectors for SHA1. - -For SHA256 we also have two test vectors coming from RFC7914 Sec 11. - -Signed-off-by: Antonio Quartulli ---- - tests/suites/test_suite_pkcs5.data | 88 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 88 insertions(+) - -diff --git a/tests/suites/test_suite_pkcs5.data b/tests/suites/test_suite_pkcs5.data -index 4c2c0bb6..f3c421d0 100644 ---- a/tests/suites/test_suite_pkcs5.data -+++ b/tests/suites/test_suite_pkcs5.data -@@ -18,6 +18,94 @@ PBKDF2 RFC 6070 Test Vector #6 (SHA1) - depends_on:MBEDTLS_SHA1_C - pbkdf2_hmac:MBEDTLS_MD_SHA1:"7061737300776f7264":"7361006c74":4096:16:"56fa6aa75548099dcc37d7f03425e0c3" - -+PBKDF2 Python hashlib Test Vector #1 (SHA224) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA224:"70617373776f7264":"73616c74":1:20:"3c198cbdb9464b7857966bd05b7bc92bc1cc4e6e" -+ -+PBKDF2 Python hashlib Test Vector #2 (SHA224) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA224:"70617373776f7264":"73616c74":2:20:"93200ffa96c5776d38fa10abdf8f5bfc0054b971" -+ -+PBKDF2 Python hashlib Test Vector #3 (SHA224) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA224:"70617373776f7264":"73616c74":4096:20:"218c453bf90635bd0a21a75d172703ff6108ef60" -+ -+PBKDF2 Python hashlib Test Vector #5 (SHA224) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA224:"70617373776f726450415353574f524470617373776f7264":"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":4096:25:"056c4ba438ded91fc14e0594e6f52b87e1f3690c0dc0fbc057" -+ -+PBKDF2 Python hashlib Test Vector #6 (SHA224) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA224:"7061737300776f7264":"7361006c74":4096:16:"9b4011b641f40a2a500a31d4a392d15c" -+ -+PBKDF2 RFC 7914 Sec 11 Test Vector #1 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"706173737764":"73616c74":1:64:"55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783" -+ -+PBKDF2 RFC 7914 Sec 11 Test Vector #2 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"50617373776f7264":"4e61436c":80000:64:"4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8d" -+ -+PBKDF2 Python hashlib Test Vector #1 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"70617373776f7264":"73616c74":1:20:"120fb6cffcf8b32c43e7225256c4f837a86548c9" -+ -+PBKDF2 Python hashlib Test Vector #2 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"70617373776f7264":"73616c74":2:20:"ae4d0c95af6b46d32d0adff928f06dd02a303f8e" -+ -+PBKDF2 Python hashlib Test Vector #3 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"70617373776f7264":"73616c74":4096:20:"c5e478d59288c841aa530db6845c4c8d962893a0" -+ -+PBKDF2 Python hashlib Test Vector #5 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"70617373776f726450415353574f524470617373776f7264":"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":4096:25:"348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c" -+ -+PBKDF2 Python hashlib Test Vector #6 (SHA256) -+depends_on:MBEDTLS_SHA256_C -+pbkdf2_hmac:MBEDTLS_MD_SHA256:"7061737300776f7264":"7361006c74":4096:16:"89b69d0516f829893c696226650a8687" -+ -+PBKDF2 Python hashlib Test Vector #1 (SHA384) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA384:"70617373776f7264":"73616c74":1:20:"c0e14f06e49e32d73f9f52ddf1d0c5c719160923" -+ -+PBKDF2 Python hashlib Test Vector #2 (SHA384) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA384:"70617373776f7264":"73616c74":2:20:"54f775c6d790f21930459162fc535dbf04a93918" -+ -+PBKDF2 Python hashlib Test Vector #3 (SHA384) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA384:"70617373776f7264":"73616c74":4096:20:"559726be38db125bc85ed7895f6e3cf574c7a01c" -+ -+PBKDF2 Python hashlib Test Vector #5 (SHA384) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA384:"70617373776f726450415353574f524470617373776f7264":"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":4096:25:"819143ad66df9a552559b9e131c52ae6c5c1b0eed18f4d283b" -+ -+PBKDF2 Python hashlib Test Vector #6 (SHA384) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA384:"7061737300776f7264":"7361006c74":4096:16:"a3f00ac8657e095f8e0823d232fc60b3" -+ -+PBKDF2 Python hashlib Test Vector #1 (SHA512) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA512:"70617373776f7264":"73616c74":1:20:"867f70cf1ade02cff3752599a3a53dc4af34c7a6" -+ -+PBKDF2 Python hashlib Test Vector #2 (SHA512) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA512:"70617373776f7264":"73616c74":2:20:"e1d9c16aa681708a45f5c7c4e215ceb66e011a2e" -+ -+PBKDF2 Python hashlib Test Vector #3 (SHA512) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA512:"70617373776f7264":"73616c74":4096:20:"d197b1b33db0143e018b12f3d1d1479e6cdebdcc" -+ -+PBKDF2 Python hashlib Test Vector #5 (SHA512) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA512:"70617373776f726450415353574f524470617373776f7264":"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":4096:25:"8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868" -+ -+PBKDF2 Python hashlib Test Vector #6 (SHA512) -+depends_on:MBEDTLS_SHA512_C -+pbkdf2_hmac:MBEDTLS_MD_SHA512:"7061737300776f7264":"7361006c74":4096:16:"9d9e9c4cd21fe4be24d5b8244c759665" -+ - PBES2 Decrypt (OK) - depends_on:MBEDTLS_SHA1_C:MBEDTLS_DES_C:MBEDTLS_CIPHER_MODE_CBC - mbedtls_pkcs5_pbes2:MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800301406082A864886F70D030704088A4FCC9DCC394910":"70617373776f7264":"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":0:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" --- -2.16.2 - diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0004-tests-pkcs5-pbkdf2_hmac-extend-array-to-accommodate-.patch b/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0004-tests-pkcs5-pbkdf2_hmac-extend-array-to-accommodate-.patch deleted file mode 100644 index ed67848..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0004-tests-pkcs5-pbkdf2_hmac-extend-array-to-accommodate-.patch +++ /dev/null @@ -1,49 +0,0 @@ -From d09cecb5f7d1e66476c97a35caee7248930ef425 Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Wed, 31 Jan 2018 23:45:09 +0800 -Subject: [PATCH] tests/pkcs5/pbkdf2_hmac: extend array to accommodate longer - results - -Some unit tests for pbkdf2_hmac() have results longer than -99bytes when represented in hexadecimal form. - -For this reason extend the result array to accommodate -longer strings. - -At the same time make memset() parametric to avoid -bugs in the future. - -Signed-off-by: Antonio Quartulli ---- - tests/suites/test_suite_pkcs5.function | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/tests/suites/test_suite_pkcs5.function b/tests/suites/test_suite_pkcs5.function -index 8fabec08..3ad64805 100644 ---- a/tests/suites/test_suite_pkcs5.function -+++ b/tests/suites/test_suite_pkcs5.function -@@ -14,7 +14,7 @@ void pbkdf2_hmac( int hash, char *hex_password_string, - { - unsigned char pw_str[100]; - unsigned char salt_str[100]; -- unsigned char dst_str[100]; -+ unsigned char dst_str[200]; - - mbedtls_md_context_t ctx; - const mbedtls_md_info_t *info; -@@ -24,9 +24,9 @@ void pbkdf2_hmac( int hash, char *hex_password_string, - - mbedtls_md_init( &ctx ); - -- memset(pw_str, 0x00, 100); -- memset(salt_str, 0x00, 100); -- memset(dst_str, 0x00, 100); -+ memset(pw_str, 0x00, sizeof(pw_str)); -+ memset(salt_str, 0x00, sizeof(salt_str)); -+ memset(dst_str, 0x00, sizeof(dst_str)); - - pw_len = unhexify( pw_str, hex_password_string ); - salt_len = unhexify( salt_str, hex_salt_string ); --- -2.16.2 - diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0005-data_files-pkcs8-v2-add-keys-generated-with-PRF-SHA1.patch b/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0005-data_files-pkcs8-v2-add-keys-generated-with-PRF-SHA1.patch deleted file mode 100644 index 9eecc17..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0005-data_files-pkcs8-v2-add-keys-generated-with-PRF-SHA1.patch +++ /dev/null @@ -1,2593 +0,0 @@ -From 4e96327a813d2e1d06dfb7e44caacb400fd8769b Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Thu, 1 Feb 2018 13:54:13 +0800 -Subject: [PATCH] data_files/pkcs8-v2: add keys generated with PRF != SHA1 - -We now have support for the entire SHA family to be used as -PRF in PKCS#5 v2.0, therefore we need to add new keys to test -these new functionalities. - -This patch adds the new keys in `tests/data_files` and -commands to generate them in `tests/data_files/Makefile`. - -Note that the pkcs8 command in OpenSSL 1.0 called with -the -v2 argument generates keys using PKCS#5 v2.0 with SHA1 -as PRF by default. - -(This behaviour has changed in OpenSSL 1.1, where the exact same -command instead uses PKCS#5 v2.0 with SHA256) - -The new keys are generated by specifying different PRFs with --v2prf. - -Signed-off-by: Antonio Quartulli ---- - tests/data_files/Makefile | 568 +++++++++++++++++++++ - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der | Bin 0 -> 728 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der | Bin 0 -> 728 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der | Bin 0 -> 728 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der | Bin 0 -> 728 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der | Bin 0 -> 725 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der | Bin 0 -> 725 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der | Bin 0 -> 725 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der | Bin 0 -> 725 bytes - .../rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem | 18 + - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der | Bin 0 -> 1312 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der | Bin 0 -> 1312 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der | Bin 0 -> 1312 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der | Bin 0 -> 1312 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der | Bin 0 -> 1309 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der | Bin 0 -> 1309 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der | Bin 0 -> 1309 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der | Bin 0 -> 1309 bytes - .../rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem | 30 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der | Bin 0 -> 2464 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der | Bin 0 -> 2464 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der | Bin 0 -> 2464 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der | Bin 0 -> 2464 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der | Bin 0 -> 2461 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der | Bin 0 -> 2461 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der | Bin 0 -> 2461 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem | 54 ++ - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der | Bin 0 -> 2461 bytes - .../rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem | 54 ++ - 49 files changed, 1384 insertions(+) - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der - create mode 100644 tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem - -diff --git a/tests/data_files/Makefile b/tests/data_files/Makefile -index d4aed678..7069b4f3 100644 ---- a/tests/data_files/Makefile -+++ b/tests/data_files/Makefile -@@ -392,6 +392,574 @@ server1_all: server1.csr server1.crt server1.noauthid.crt server1.crt.openssl se - - - -+################################################################ -+#### Generate various RSA keys -+################################################################ -+ -+### Password used for PKCS1-encoded encrypted RSA keys -+keys_rsa_basic_pwd = testkey -+ -+### Password used for PKCS8-encoded encrypted RSA keys -+keys_rsa_pkcs8_pwd = PolarSSLTest -+ -+### Basic 1024-, 2048- and 4096-bit unencrypted RSA keys from which -+### all other encrypted RSA keys are derived. -+rsa_pkcs1_1024_clear.pem: -+ $(OPENSSL) genrsa -out $@ 1024 -+all_final += rsa_pkcs1_1024_clear.pem -+rsa_pkcs1_2048_clear.pem: -+ $(OPENSSL) genrsa -out $@ 2048 -+all_final += rsa_pkcs1_2048_clear.pem -+rsa_pkcs1_4096_clear.pem: -+ $(OPENSSL) genrsa -out $@ 4096 -+all_final += rsa_pkcs1_4096_clear.pem -+ -+### -+### PKCS1-encoded, encrypted RSA keys -+### -+ -+### 1024-bit -+rsa_pkcs1_1024_des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_1024_des.pem -+rsa_pkcs1_1024_3des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_1024_3des.pem -+rsa_pkcs1_1024_aes128.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_1024_aes128.pem -+rsa_pkcs1_1024_aes192.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_1024_aes192.pem -+rsa_pkcs1_1024_aes256.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_1024_aes256.pem -+keys_rsa_enc_basic_1024: rsa_pkcs1_1024_des.pem rsa_pkcs1_1024_3des.pem rsa_pkcs1_1024_aes128.pem rsa_pkcs1_1024_aes192.pem rsa_pkcs1_1024_aes256.pem -+ -+# 2048-bit -+rsa_pkcs1_2048_des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_2048_des.pem -+rsa_pkcs1_2048_3des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_2048_3des.pem -+rsa_pkcs1_2048_aes128.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_2048_aes128.pem -+rsa_pkcs1_2048_aes192.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_2048_aes192.pem -+rsa_pkcs1_2048_aes256.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_2048_aes256.pem -+keys_rsa_enc_basic_2048: rsa_pkcs1_2048_des.pem rsa_pkcs1_2048_3des.pem rsa_pkcs1_2048_aes128.pem rsa_pkcs1_2048_aes192.pem rsa_pkcs1_2048_aes256.pem -+ -+# 4096-bit -+rsa_pkcs1_4096_des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_4096_des.pem -+rsa_pkcs1_4096_3des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_4096_3des.pem -+rsa_pkcs1_4096_aes128.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_4096_aes128.pem -+rsa_pkcs1_4096_aes192.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_4096_aes192.pem -+rsa_pkcs1_4096_aes256.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" -+all_final += rsa_pkcs1_4096_aes256.pem -+keys_rsa_enc_basic_4096: rsa_pkcs1_4096_des.pem rsa_pkcs1_4096_3des.pem rsa_pkcs1_4096_aes128.pem rsa_pkcs1_4096_aes192.pem rsa_pkcs1_4096_aes256.pem -+ -+### -+### PKCS8-v1 encoded, encrypted RSA keys -+### -+ -+### 1024-bit -+rsa_pkcs8_pbe_sha1_1024_3des.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_1024_3des.der -+rsa_pkcs8_pbe_sha1_1024_3des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_1024_3des.pem -+keys_rsa_enc_pkcs8_v1_1024_3des: rsa_pkcs8_pbe_sha1_1024_3des.pem rsa_pkcs8_pbe_sha1_1024_3des.der -+ -+rsa_pkcs8_pbe_sha1_1024_2des.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_1024_2des.der -+rsa_pkcs8_pbe_sha1_1024_2des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_1024_2des.pem -+keys_rsa_enc_pkcs8_v1_1024_2des: rsa_pkcs8_pbe_sha1_1024_2des.pem rsa_pkcs8_pbe_sha1_1024_2des.der -+ -+rsa_pkcs8_pbe_sha1_1024_rc4_128.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_1024_rc4_128.der -+rsa_pkcs8_pbe_sha1_1024_rc4_128.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_1024_rc4_128.pem -+keys_rsa_enc_pkcs8_v1_1024_rc4_128: rsa_pkcs8_pbe_sha1_1024_rc4_128.pem rsa_pkcs8_pbe_sha1_1024_rc4_128.der -+ -+keys_rsa_enc_pkcs8_v1_1024: keys_rsa_enc_pkcs8_v1_1024_3des keys_rsa_enc_pkcs8_v1_1024_2des keys_rsa_enc_pkcs8_v1_1024_rc4_128 -+ -+### 2048-bit -+rsa_pkcs8_pbe_sha1_2048_3des.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_2048_3des.der -+rsa_pkcs8_pbe_sha1_2048_3des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_2048_3des.pem -+keys_rsa_enc_pkcs8_v1_2048_3des: rsa_pkcs8_pbe_sha1_2048_3des.pem rsa_pkcs8_pbe_sha1_2048_3des.der -+ -+rsa_pkcs8_pbe_sha1_2048_2des.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_2048_2des.der -+rsa_pkcs8_pbe_sha1_2048_2des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_2048_2des.pem -+keys_rsa_enc_pkcs8_v1_2048_2des: rsa_pkcs8_pbe_sha1_2048_2des.pem rsa_pkcs8_pbe_sha1_2048_2des.der -+ -+rsa_pkcs8_pbe_sha1_2048_rc4_128.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_2048_rc4_128.der -+rsa_pkcs8_pbe_sha1_2048_rc4_128.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_2048_rc4_128.pem -+keys_rsa_enc_pkcs8_v1_2048_rc4_128: rsa_pkcs8_pbe_sha1_2048_rc4_128.pem rsa_pkcs8_pbe_sha1_2048_rc4_128.der -+ -+keys_rsa_enc_pkcs8_v1_2048: keys_rsa_enc_pkcs8_v1_2048_3des keys_rsa_enc_pkcs8_v1_2048_2des keys_rsa_enc_pkcs8_v1_2048_rc4_128 -+ -+### 4096-bit -+rsa_pkcs8_pbe_sha1_4096_3des.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_4096_3des.der -+rsa_pkcs8_pbe_sha1_4096_3des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES -+all_final += rsa_pkcs8_pbe_sha1_4096_3des.pem -+keys_rsa_enc_pkcs8_v1_4096_3des: rsa_pkcs8_pbe_sha1_4096_3des.pem rsa_pkcs8_pbe_sha1_4096_3des.der -+ -+rsa_pkcs8_pbe_sha1_4096_2des.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_4096_2des.der -+rsa_pkcs8_pbe_sha1_4096_2des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES -+all_final += rsa_pkcs8_pbe_sha1_4096_2des.pem -+keys_rsa_enc_pkcs8_v1_4096_2des: rsa_pkcs8_pbe_sha1_4096_2des.pem rsa_pkcs8_pbe_sha1_4096_2des.der -+ -+rsa_pkcs8_pbe_sha1_4096_rc4_128.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_4096_rc4_128.der -+rsa_pkcs8_pbe_sha1_4096_rc4_128.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 -+all_final += rsa_pkcs8_pbe_sha1_4096_rc4_128.pem -+keys_rsa_enc_pkcs8_v1_4096_rc4_128: rsa_pkcs8_pbe_sha1_4096_rc4_128.pem rsa_pkcs8_pbe_sha1_4096_rc4_128.der -+ -+keys_rsa_enc_pkcs8_v1_4096: keys_rsa_enc_pkcs8_v1_4096_3des keys_rsa_enc_pkcs8_v1_4096_2des keys_rsa_enc_pkcs8_v1_4096_rc4_128 -+ -+### -+### PKCS8-v2 encoded, encrypted RSA keys, no PRF specified (default for OpenSSL1.0: hmacWithSHA1) -+### -+ -+### 1024-bit -+rsa_pkcs8_pbes2_pbkdf2_1024_3des.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des.der -+rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem -+keys_rsa_enc_pkcs8_v2_1024_3des: rsa_pkcs8_pbes2_pbkdf2_1024_3des.der rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_1024_des.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des.der -+rsa_pkcs8_pbes2_pbkdf2_1024_des.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des.pem -+keys_rsa_enc_pkcs8_v2_1024_des: rsa_pkcs8_pbes2_pbkdf2_1024_des.der rsa_pkcs8_pbes2_pbkdf2_1024_des.pem -+ -+keys_rsa_enc_pkcs8_v2_1024: keys_rsa_enc_pkcs8_v2_1024_3des keys_rsa_enc_pkcs8_v2_1024_des -+ -+### 2048-bit -+rsa_pkcs8_pbes2_pbkdf2_2048_3des.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des.der -+rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem -+keys_rsa_enc_pkcs8_v2_2048_3des: rsa_pkcs8_pbes2_pbkdf2_2048_3des.der rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_2048_des.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des.der -+rsa_pkcs8_pbes2_pbkdf2_2048_des.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des.pem -+keys_rsa_enc_pkcs8_v2_2048_des: rsa_pkcs8_pbes2_pbkdf2_2048_des.der rsa_pkcs8_pbes2_pbkdf2_2048_des.pem -+ -+keys_rsa_enc_pkcs8_v2_2048: keys_rsa_enc_pkcs8_v2_2048_3des keys_rsa_enc_pkcs8_v2_2048_des -+ -+### 4096-bit -+rsa_pkcs8_pbes2_pbkdf2_4096_3des.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des.der -+rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem -+keys_rsa_enc_pkcs8_v2_4096_3des: rsa_pkcs8_pbes2_pbkdf2_4096_3des.der rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_4096_des.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des.der -+rsa_pkcs8_pbes2_pbkdf2_4096_des.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des.pem -+keys_rsa_enc_pkcs8_v2_4096_des: rsa_pkcs8_pbes2_pbkdf2_4096_des.der rsa_pkcs8_pbes2_pbkdf2_4096_des.pem -+ -+keys_rsa_enc_pkcs8_v2_4096: keys_rsa_enc_pkcs8_v2_4096_3des keys_rsa_enc_pkcs8_v2_4096_des -+ -+### -+### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA224 -+### -+ -+### 1024-bit -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem -+keys_rsa_enc_pkcs8_v2_1024_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem -+keys_rsa_enc_pkcs8_v2_1024_des_sha224: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem -+ -+keys_rsa_enc_pkcs8_v2_1024_sha224: keys_rsa_enc_pkcs8_v2_1024_3des_sha224 keys_rsa_enc_pkcs8_v2_1024_des_sha224 -+ -+### 2048-bit -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem -+keys_rsa_enc_pkcs8_v2_2048_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem -+keys_rsa_enc_pkcs8_v2_2048_des_sha224: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem -+ -+keys_rsa_enc_pkcs8_v2_2048_sha224: keys_rsa_enc_pkcs8_v2_2048_3des_sha224 keys_rsa_enc_pkcs8_v2_2048_des_sha224 -+ -+### 4096-bit -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem -+keys_rsa_enc_pkcs8_v2_4096_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem -+keys_rsa_enc_pkcs8_v2_4096_des_sha224: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem -+ -+keys_rsa_enc_pkcs8_v2_4096_sha224: keys_rsa_enc_pkcs8_v2_4096_3des_sha224 keys_rsa_enc_pkcs8_v2_4096_des_sha224 -+ -+### -+### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA256 -+### -+ -+### 1024-bit -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem -+keys_rsa_enc_pkcs8_v2_1024_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem -+keys_rsa_enc_pkcs8_v2_1024_des_sha256: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem -+ -+keys_rsa_enc_pkcs8_v2_1024_sha256: keys_rsa_enc_pkcs8_v2_1024_3des_sha256 keys_rsa_enc_pkcs8_v2_1024_des_sha256 -+ -+### 2048-bit -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem -+keys_rsa_enc_pkcs8_v2_2048_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem -+keys_rsa_enc_pkcs8_v2_2048_des_sha256: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem -+ -+keys_rsa_enc_pkcs8_v2_2048_sha256: keys_rsa_enc_pkcs8_v2_2048_3des_sha256 keys_rsa_enc_pkcs8_v2_2048_des_sha256 -+ -+### 4096-bit -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem -+keys_rsa_enc_pkcs8_v2_4096_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem -+keys_rsa_enc_pkcs8_v2_4096_des_sha256: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem -+ -+keys_rsa_enc_pkcs8_v2_4096_sha256: keys_rsa_enc_pkcs8_v2_4096_3des_sha256 keys_rsa_enc_pkcs8_v2_4096_des_sha256 -+ -+### -+### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA384 -+### -+ -+### 1024-bit -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem -+keys_rsa_enc_pkcs8_v2_1024_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem -+keys_rsa_enc_pkcs8_v2_1024_des_sha384: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem -+ -+keys_rsa_enc_pkcs8_v2_1024_sha384: keys_rsa_enc_pkcs8_v2_1024_3des_sha384 keys_rsa_enc_pkcs8_v2_1024_des_sha384 -+ -+### 2048-bit -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem -+keys_rsa_enc_pkcs8_v2_2048_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem -+keys_rsa_enc_pkcs8_v2_2048_des_sha384: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem -+ -+keys_rsa_enc_pkcs8_v2_2048_sha384: keys_rsa_enc_pkcs8_v2_2048_3des_sha384 keys_rsa_enc_pkcs8_v2_2048_des_sha384 -+ -+### 4096-bit -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem -+keys_rsa_enc_pkcs8_v2_4096_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem -+keys_rsa_enc_pkcs8_v2_4096_des_sha384: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem -+ -+keys_rsa_enc_pkcs8_v2_4096_sha384: keys_rsa_enc_pkcs8_v2_4096_3des_sha384 keys_rsa_enc_pkcs8_v2_4096_des_sha384 -+ -+### -+### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA512 -+### -+ -+### 1024-bit -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem -+keys_rsa_enc_pkcs8_v2_1024_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem: rsa_pkcs1_1024_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem -+keys_rsa_enc_pkcs8_v2_1024_des_sha512: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem -+ -+keys_rsa_enc_pkcs8_v2_1024_sha512: keys_rsa_enc_pkcs8_v2_1024_3des_sha512 keys_rsa_enc_pkcs8_v2_1024_des_sha512 -+ -+### 2048-bit -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem -+keys_rsa_enc_pkcs8_v2_2048_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem: rsa_pkcs1_2048_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem -+keys_rsa_enc_pkcs8_v2_2048_des_sha512: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem -+ -+keys_rsa_enc_pkcs8_v2_2048_sha512: keys_rsa_enc_pkcs8_v2_2048_3des_sha512 keys_rsa_enc_pkcs8_v2_2048_des_sha512 -+ -+### 4096-bit -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem -+keys_rsa_enc_pkcs8_v2_4096_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem -+ -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der -+rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem: rsa_pkcs1_4096_clear.pem -+ $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -+all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem -+keys_rsa_enc_pkcs8_v2_4096_des_sha512: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem -+ -+keys_rsa_enc_pkcs8_v2_4096_sha512: keys_rsa_enc_pkcs8_v2_4096_3des_sha512 keys_rsa_enc_pkcs8_v2_4096_des_sha512 -+ -+### -+### Rules to generate all RSA keys from a particular class -+### -+ -+### Generate basic unencrypted RSA keys -+keys_rsa_unenc: rsa_pkcs1_1024_clear.pem rsa_pkcs1_2048_clear.pem rsa_pkcs1_4096_clear.pem -+ -+### Generate PKCS1-encoded encrypted RSA keys -+keys_rsa_enc_basic: keys_rsa_enc_basic_1024 keys_rsa_enc_basic_2048 keys_rsa_enc_basic_4096 -+ -+### Generate PKCS8-v1 encrypted RSA keys -+keys_rsa_enc_pkcs8_v1: keys_rsa_enc_pkcs8_v1_1024 keys_rsa_enc_pkcs8_v1_2048 keys_rsa_enc_pkcs8_v1_4096 -+ -+### Generate PKCS8-v2 encrypted RSA keys -+keys_rsa_enc_pkcs8_v2: keys_rsa_enc_pkcs8_v2_1024 keys_rsa_enc_pkcs8_v2_2048 keys_rsa_enc_pkcs8_v2_4096 keys_rsa_enc_pkcs8_v2_1024_sha224 keys_rsa_enc_pkcs8_v2_2048_sha224 keys_rsa_enc_pkcs8_v2_4096_sha224 keys_rsa_enc_pkcs8_v2_1024_sha256 keys_rsa_enc_pkcs8_v2_2048_sha256 keys_rsa_enc_pkcs8_v2_4096_sha256 keys_rsa_enc_pkcs8_v2_1024_sha384 keys_rsa_enc_pkcs8_v2_2048_sha384 keys_rsa_enc_pkcs8_v2_4096_sha384 keys_rsa_enc_pkcs8_v2_1024_sha512 keys_rsa_enc_pkcs8_v2_2048_sha512 keys_rsa_enc_pkcs8_v2_4096_sha512 -+ -+### Generate all RSA keys -+keys_rsa_all: keys_rsa_unenc keys_rsa_enc_basic keys_rsa_enc_pkcs8_v1 keys_rsa_enc_pkcs8_v2 -+ -+ -+ -+################################################################ -+### Generate certificates for CRT write check tests -+################################################################ -+ -+### The test files use the Mbed TLS generated certificates server1*.crt, -+### but for comparison with OpenSSL also rules for OpenSSL-generated -+### certificates server1*.crt.openssl are offered. -+### -+### Known differences: -+### * OpenSSL encodes trailing zero-bits in bit-strings occurring in X.509 extension -+### as unused bits, while Mbed TLS doesn't. -+ -+test_ca_server1_db = test-ca.server1.db -+test_ca_server1_serial = test-ca.server1.serial -+test_ca_server1_config_file = test-ca.server1.opensslconf -+ -+server1.csr: server1.key server1_csr.opensslconf -+ $(OPENSSL) req -keyform PEM -key server1.key -config server1_csr.opensslconf -out $@ -new -+all_final += server1.csr -+ -+server1.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 version=3 output_file=$@ -+server1.noauthid.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20110212144406 not_after=20210212144406 md=SHA1 authority_identifier=0 version=3 output_file=$@ -+server1.der: server1.crt -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+all_final += server1.crt server1.noauthid.crt server1.der -+ -+server1.key_usage.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 key_usage=digital_signature,non_repudiation,key_encipherment version=3 output_file=$@ -+server1.key_usage_noauthid.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 key_usage=digital_signature,non_repudiation,key_encipherment authority_identifier=0 version=3 output_file=$@ -+server1.key_usage.der: server1.key_usage.crt -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+all_final += server1.key_usage.crt server1.key_usage_noauthid.crt server1.key_usage.der -+ -+server1.cert_type.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 ns_cert_type=ssl_server version=3 output_file=$@ -+server1.cert_type_noauthid.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 ns_cert_type=ssl_server authority_identifier=0 version=3 output_file=$@ -+server1.cert_type.der: server1.cert_type.crt -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+all_final += server1.cert_type.crt server1.cert_type_noauthid.crt server1.cert_type.der -+ -+server1.v1.crt: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) -+ $(MBEDTLS_CERT_WRITE) request_file=server1.csr issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20110212144406 not_after=20210212144406 md=SHA1 version=1 output_file=$@ -+server1.v1.der: server1.v1.crt -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+all_final += server1.v1.crt server1.v1.der -+ -+# OpenSSL-generated certificates for comparison -+# Also provide certificates in DER format to allow -+# direct binary comparison using e.g. dumpasn1 -+server1.crt.openssl server1.key_usage.crt.openssl server1.cert_type.crt.openssl: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_server1_config_file) -+ echo "01" > $(test_ca_server1_serial) -+ rm -f $(test_ca_server1_db) -+ touch $(test_ca_server1_db) -+ $(OPENSSL) ca -batch -passin "pass:$(test_ca_pwd_rsa)" -config $(test_ca_server1_config_file) -in server1.csr -extensions v3_ext -extfile $@.v3_ext -out $@ -+server1.der.openssl: server1.crt.openssl -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+server1.key_usage.der.openssl: server1.key_usage.crt.openssl -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+server1.cert_type.der.openssl: server1.cert_type.crt.openssl -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+ -+server1.v1.crt.openssl: server1.key server1.csr $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_server1_config_file) -+ echo "01" > $(test_ca_server1_serial) -+ rm -f $(test_ca_server1_db) -+ touch $(test_ca_server1_db) -+ $(OPENSSL) ca -batch -passin "pass:$(test_ca_pwd_rsa)" -config $(test_ca_server1_config_file) -in server1.csr -out $@ -+server1.v1.der.openssl: server1.v1.crt.openssl -+ $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ -+ -+server1_all: server1.csr server1.crt server1.noauthid.crt server1.crt.openssl server1.v1.crt server1.v1.crt.openssl server1.key_usage.crt server1.key_usage_noauthid.crt server1.key_usage.crt.openssl server1.cert_type.crt server1.cert_type_noauthid.crt server1.cert_type.crt.openssl server1.der server1.der.openssl server1.v1.der server1.v1.der.openssl server1.key_usage.der server1.key_usage.der.openssl server1.cert_type.der server1.cert_type.der.openssl -+ -+ -+ - ################################################################ - #### Meta targets - ################################################################ -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..4d55a591130415c2fe32e3b9152471b3c9c5d8e5 -GIT binary patch -literal 728 -zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UmRshQ@;Gp-Q= -z0tf&w3gmBIG`st_(NFpncKNK%a4x_6kDwR@_XtXQZJaw -z&-O|Gw}*kdOXWz?X4G$ni$U&XTx|*XzG*1wLqX9(kO!B{C}yEaZrh*7sIQd9BQ4L~ -z>FQNEAJS!#FVi})RcG(;mRJk=1`X$GC7s#_d$|dO9wKINpuFejF;ZUh!`o7RzVf4- -zDED92{rGHXHg9D~fY_MTe;XEKuWFx+)%p(fFL@p=s@cc_!DhFNnVt+67on=NrmJML -zTQZ)H4u|aW*=RXuj~?R4TWH^pMJ{SlSubvRs{a^t=lMMx6@3W7C9tTra_+0Ru5hbi -zT$X>L3G2mw|Bi?krWsj3OX!Lrhvv)Ptp_d>AjWj;J}aL{y4s*C15-%p?_p_jPB&kd -zpOg8K9+rWxJ|TpR=dN|Hv6%xx-miqchQslXgpn{$lzoIhv|vjN<2XUbD+t)D@=b%e -zhE2>`^{<~qC88w`Nu4!7t}XuS*!bA1?83YXwTf8QCXyvL$b41=gm1#1X&;~zCTC+3 -zHF%Lau?Xce!O=JXfFCN!RPj;aoGd^Yr=b__;=-q8dTC9y!kv8b;~5Gpb(*b`+c^!a -ze~opsFVK7Np4K$Y_;;5-JYd2}K=+`u8E!F(-LpZfnvy-Gea15iYN4aylyr$={Al^n -z5e_js& - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem -new file mode 100644 -index 00000000..b47b5e8f ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc1vbNC/8pHsCAggA -+MAwGCCqGSIb3DQIIBQAwFAYIKoZIhvcNAwcECLMkF/Djhb0fBIICgAg/jv44TuAQ -+yB+WMkHpvVS25ZLJabHUyHLS+vqhEkz2AqvJNETL/L6bIHRD1o4BJ8Fcrc339Bz+ -+zuFHnK7JG0PzRKl9RcO/SY9lfLFNkXtyPxB6DtSXeYTV49NtAvWPV46LSBnMqnP5 -+/Tkmk+sE3Lx+sBMqe/rpBeZM31fB9ShS9FgDGfE+ARvzcuQslYNazdT2KVeu+5Tp -+qSN1lhAW18Dwo3r1IpnhWGZ5r66TEEunhGI+mX9GdkDhhFiHHn3tUPiWSh9UAPH2 -+W59/c7sY0Rn5AmqeHu6F2b99ScRaLhkt6aFNnBAcnrjHhqZJOl4UOR7OGL3WlNjN -+FXfCzJ3/+lA+NNEVWScb4xs6RNQRnJ9NHyfdSJuQQM/HXhaW1nSYoFS8nKDpenXA -+8hb3gbrGeB0MybmpGtiR4MhJD7FWnH0uQsA4dOrrx2XYaPUBZGtqzvrIDmzO6jv1 -+ixmuSyw7nZSYqT554tPT97oBRPHhQVdz7fGBEqxrBNJR1cQjS35Q3oes6jarzTsu -+z8REC1QXZtgbWZvlm2m0iwKhQItqOfSnlNkL0IUJGUF8j3Ijz/fbNsfPOObpQCic -+ARz1Mnq9ZaDMrvMMpJHcMhYe3y75zuv9WODuPl9vNVc7KRRWgqVDmBHYZqHh4M2w -+T86WrEbnbNEHHPhXgSsaKYXvBD7zWocfQ3r2HEstHj9AmoqslxIDptqJv/8Lye9E -+kbv+d48oEkStDIfa032Ha95zsMp7BuvWStwnOG2q5sCexNpQdw3Mp7Y2oejVKRS8 -+Vc/icnFu35VxZLq/vBEFEDjzbCQ0ayk+GKYWyAxW7gsmWtSWDskv0WaJ0cNj5u2L -++BsyzY8Hw7s= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der -new file mode 100644 -index 0000000000000000000000000000000000000000..2ec275f143a9bcd1b9f17cb220140bbc17ff95d7 -GIT binary patch -literal 728 -zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlY;ErM%$%NVh -z0tf&w3BtR;`W9zJI|G!laEfJ_H!|*Cm-l2p`RH`2!_XMk4~o3ci2pZXjycH4$nZ8@`B#winYFo=w5k1=PHeFC|u2{9HpVGXm74;h03D^Btq -zw}#aR+nl}1Tf9g2a{N(3&_8HUW%kXeyx*A`wbj*LIZxfH? -zfy0w}pa@HReT1;U6o{mzLHBc7uNX(_2ZKeJKpOk!3lRJydc{T1SasXspCP0zQiuzMvlc{bd^{DDb99*VW(syC- -zj+=va7!K9qEc(s%pXdWKVsLROPWhR4g#cCO^4D>~l{?!>vVo*0FGvBUbh+8BbA&tO -zGT~(mhpEUc$k*y}pr$PitycW1U4_TgQ9=0S8*?9_ifH%|O8nABYYVOM{tLTkXi<** -zqq#Wjw;!j^jpSzrc-HM);*WEk|g`|wj^R%mzA~W(Xgiu+eaIEDbRLCEbnmQkY -KfKkKkx^K4em|dj+ - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem -new file mode 100644 -index 00000000..95934548 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI9ROEj7BZDIsCAggA -+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECD8QzMKCoJNPBIICgG/g7EGQ8k7c -+5j0huNkV3WdtH4a3b5w3xD5mzGy2LoTaM+iLdatb7JSA63v5KmWwYI9WDqGsbAfE -+gApGcoAkXtb2FlnMOb1azjDHVkHkMGkINKD8LvwGEb5/eqW6Qk1GS6WH2q7IuruG -+y77wsxkk2gLJcdO8+k0aLMZTQ5lyTm3d2ap2f5QA78NGo0n9zJJs6JAWsoXfdMZk -+ShrYwJWaAYDlFVn3vne55mC54Omx1wCqNM+0kkTvbCS1U96FYNzbvIZe1gaULxAc -+GkRIan8Mo5da+2jI0GZf6w9S5E3f8zi7lltGlfmcN4bMZR3fGwpAdPx7oW9j0GVc -+162Dmn8SS9tgT2pWeDb1DjjabeSc5YzMIJpblMJM6KB4g2GpKhuWNtfHLIxR0M+7 -+YTvmwE25L4Oq6bOzuM4lX8rp1fTqnOQDmXHIB7PO3w+kh2nxUwOoB/9nXNlkdUw6 -+CbsKOr0MV98Ab8pTvwhZUm3UhHzONInDkHH5POHqqWc5XCfpW1fekUuOIkr3yPrt -+F1lY0KBMq6FMcMm/aZDAaM6rB2yLzfe8ErtA7zwkfb3j44bYFFjo3WiaaBUnpmps -+oAHdDqJMpsfs2sQeEa7jMb6dGUjlUU/3S+nf9cpQAH2spWbDMhM5Sewc9JpGDk4w -+6KD9ICHr+FgT0sF8hTbBZifxAeuXuaq6r3LGaYNs6EvADC3MzSNu0dt2ZK4i804O -+y3LSXX/5zVqSbmtQ6NW5oL0bAR4SP+QLCJtXYLI0n7WWJwesFokW3ZWgvOJe40gk -+9oNQ8DyBRlK8ier9K/nyS0VVo6QGxPAKr2Th960ekBWleHr4UGnTUFM/iuTuOTJu -+l6dmAeTEdaE= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der -new file mode 100644 -index 0000000000000000000000000000000000000000..106aa99de7e8238acfef03a40dcbf05d2d0123ff -GIT binary patch -literal 728 -zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UkX_7#pQ_8xu$ -z0tf&w3 -zA|V}I@JRieAOg*4O-`E|X};Wd==p2=Gukmo@{-VwoIC^}vIldWf>tFnw|y6oFUJCO -z{11~q6}Cu-nCOdEraPy&i(ccG&J%9Pug~%`0dZv=?0kn!+Q;Xzf2->zDt$v(b9_w` -ztcela+b%f4^o#oy;PRS8?3T9jE&pS6OW?#H9mH@<>ML!$OJ;tkCJ*9+m{Q^pht^j+I(&+gr4XI=?`u+RO}{F`-`7Wz -zW)x)LLDHHSQNtuS%Zh{9)u}!bJZpx3Bl~v8Jf<1ioZy($*cFLpKTZVdB=PhDX*8Ju -z26GsqLIBec*>)8c&4f|FPozxFbPONn|4{5{EaA^$lw=gmLk?suJBxUKbvObA37wsj -zscr1hm;{9%B3J7J>?kyiqbHZ#dMwhEzX_jq`3_VnAv1JVKDQk>P?BIm_Bkh(=uuZi -ztJJ(K{|S^?MKK2!Xjom;`~YdX>T#3xt=q^QXGAoih*2x-M|T2A=^BF*+pd;ncvvPl -zPQEM_V%TVnM<6WT6&%SB@Wk6Su8j$CFy4f(&k$e%y$MPK-k>GN`-?vj^PVcdGQD9A -K`Vc1nEizwUwM>2h - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem -new file mode 100644 -index 00000000..3baddefe ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIwD3fpS8RxVkCAggA -+MAwGCCqGSIb3DQIKBQAwFAYIKoZIhvcNAwcECOmyF+CEzwvIBIICgPFC3z4bUVPM -+EgLGuLP6CiDPSKuCx3VdAu5/G5WjjU+dDvEYDtOrVfbBpVhgGAYYuhXlI2bzoO2Z -+RPZLwmaVZMUUPqHjNZHND0BPsHnb54Lyw+xnhIvipYpt7m3+swL9JUzbK4bImhzD -+3UdVYaCwwnpnAcTy9gleqoQ2ikCX28Oc+bZ0VUUIX+KVbVOv3gNN4w5uTyUDRGgl -+AW2E2IKoNNW8oQzZYatdSMMb4Qu09HRevWpUkB//XGrCcC8aAwynxHrz7hSrJYbt -+SJVNsyl+djFRcKg8sudGUPua+mYWEecCs9/MVataWfpnT8hPtPUAQpyRpC9Yxa+c -+yYfl+7jHvJk54Lw92P9YAb5k0T57+G7Fpxi6MaXn6FAMqFHY2dJO7cxsg41qkF6A -+sc3nvcxAxj4gtCgV0d0vVLDjbgjcAevLbzOsJVDzB8y2i6V5l+2/ffV6DjjYO8Hb -+jVl6psDscX4VfX1zkEIyTF2P77luZ1gvXuFDw3+y+HpUAAE11vvFH1hmj7RR7uH+ -+Y1Y7gUvUA9KSvIStsSzfdcQwaZTMNdfUNkPzKHMVZJNQ2KYkv8F4QSA7qpC07Kt9 -+4iCj+D+8nMxS9s2xsZo3lgksB3srmn6ryQimEcLb/cFWbkTSGAah81UOIVtNJT1l -+Tmwv35rSTELD4YVWz7CHh9nE2JxeLg6WmtlzF5ALxi5L/grZUN8lx6jNeC8/O8fy -+twXR/LD1xmAn6wxcxraqnctBqzknpOP3Eize7pCDpOJR0Z1WaHvULez8G2CedEo2 -+SvU8YqnJ44ceom2V3wDS4+005Xq3zKDY6xL2htnDHd2vOPstGLfHxEppNpjBqa9A -+qj22QdMCv58= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der -new file mode 100644 -index 0000000000000000000000000000000000000000..cb158b59e3855c228ad6bfcf280904f87a26e0d9 -GIT binary patch -literal 728 -zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90Ul3NPR|`k?;2c -z0tf&w3Kb>NmbbK?H&T*kc>;_L^5E1>6idd%d5sG%| -zDZwYjAm|0hRd0gw16$l`k1Z?vZ@~;cv39-n`z)-%13|*;?sd|gvrjh_kJLSBCpSo? -zMj*=Z4?n5ExksT7)r<9OkywX%(UNCsP!}x5^hlR8W$ccUn-tk+11{q8R<^PB2fv_n -z7nVy4-i@!(fwwZ25f3YZbXO;tjVNhgR3oU5T0#XD79l?^K+eW7+0enQiL~KbTY}|T0P%xntz|&oJ!dWqQPuT%>Z`MbtDMJUc+`iuUyYB-H -z)`2$KMgBo(%iauwddm@l=e84 -z=VkYcot@CDYnj?E+bt0GbS=jA6x5Nn$SV=`x^R#<7H-CJ2$e%G36D{w(MU?PnG=9N -z`#n+hDbuR*x6ybM#bee~ncw3mm1o2i|LF(24cZ}=ca{#a&Djp;bVEQONL6XAz86%L -z!`KG)EQ5Z}25(hkJfDzIoj9#R_cE_| -K7fa|51{f%?KunPU - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem -new file mode 100644 -index 00000000..95d946bc ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQINtUwWQJ0GUACAggA -+MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECADq8lFajhVgBIICgJfbFYo4Pk6o -+m0FhCL1/6VwE8oNU8iRbzYLs+ZjpHDKKs72N97M6FkPgwYQmcLBiJgYDfk+otjIy -+Sv2QOklnEi8Vu22c+5P7UQxbobSf26hGgRlvue9xwBWylnBj9VwvgUAhbKUKJDW2 -+lcUryZBQM9vX3cpeJUN7DsRFA0gyYjuoNTm1+Y1G4UqZcQUJyIVqSHA/dKpitnhR -+xRNP/IkkY4GxTE3VXSoOm9KecA72iAnBdzrO3yMx7PkWUotZolMXK//5eacginYw -+dSQIZDCnodaC0ugH/7QuKbe3UUyMt9b/a7Fx6c8CiR3xA1sJt0N9xGK0M1+JFBqr -+cewSxvF7I+IRRE6buo1S5rqzBTZFfGArvyklBKgC0UmSFu9B25HcQzrBEXMPneG7 -+W736jjfwclwKwboCXt/gHJBM69Pf2Y/Otjf1HGFcly9D+P8SPq8dkBSp49Ua9RpH -+gtXpaBiNZ9Q3DIXMu1U9wLYhYJZQxU+FQHuO4wGR7h1KdSzZCg84E/T232qDr1Rf -+7vLo7OHsAtQGU1pZGGorlTcY8KKwdeyo9Qk31jIZf4DwLKu+Zk1zICHrE1kuwNVE -+5dcIIKA86Pu4iw2i91At2GJbGJku9j173rSL4IHV4ESUKKoHMH2ncBfjcTtjBXXj -+FyauFwU6qFo71WXRMGKZpZgRenK2Lyr8/e1g/nEbHDfqN9ntgDlJhqku6ROP1Jns -+WzqnWRquSk93p0xDMZAXxUZSmCzGlBr5xPhCOmHp7YWZrLmKVdWXM/6MFWpj5KeW -+raxqwtiL0gU5wkKUkIxvIrjp0PqtU2q2dzwoL0blAXKEqU4v1nMeW2qhY30qz/rT -+wu95SzZgh+Q= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..d29a1e69c87016dfda7bf260d80a2b721bc56b4a -GIT binary patch -literal 725 -zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UkP{*EfDX^(&c -z0tf&w3ikSmuYucgkjNL^8_S!!!$t@lKzZ?Q&su4^tGj(KiMcy -z>AieN0cZCBzLh?3`5lJ>4Xn`;1P076HZM0eo8_)iy=}2^#s?jP&h{Kda%*s|8YAXv -z3ZlN22OyP4pXH!J)4t_v*AP)N2P^=uJQssptRwPfN_%6W!`~LNHLS;V9IJ;Z!*ECt -zHPO&r8X038Qj}R4x6NIxsXkE^B4<6&KoyP(KVlDmJCu%E?^R6XJ

@Ahzpo>#Fp}wVx$N+d`grh7@@H1X-X?X0p -zcTKONM~r8UQm_u$9qOHK#&Ocph{A|0dlu#7>jc2e%Q6cF0huL-O#eMaxs`%R4ebij -zDZi0yN9qz5fusDQ7QAc_{fPHfxL{98k^mNV6$JvY#47rNxC(JKc>ky>La82F?30r~ -zJ#RZbJ)($aZW4a#Z3qB&+uvKB+?;R{x*ScKXtuIl -zMj1@AKGu^{V~L&knK$FehRq>N8F;F(EolHwm{T_(6Tl0c*O46blK~GwijE)lzjng0 -H>vXWe(bq*~ - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem -new file mode 100644 -index 00000000..9fd035c5 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIoN4P/1fEZkUCAggA -+MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECJntwhGUq6HXBIICgB4ql0o/M9lv7Px6 -+DUZBn1QFddPrr0slxLK7CoR1gabr9FI91o+dpyejeLHF2VFUYY3F56Q7f0P0b6Fo -++OekgX1ySvsM5EPGZBopXaAnAaoiYuZRSfiLeauHHCC/eJx5SH58pwqy0rY4j2ND -+U1dYB+AVsdpRVv/MOSn6MblqauywTo3rIleK8SsuywV7NqIDLb3CHWEkUQEHJoFB -+NfNb51u3GETcrYWf49V1WCbftPHj6YHlsfmUwivGCieAnNckJvUXa2TTXq+tWpO3 -+8ar1cRHCFZSgx2chTgY+S5KoXcSmTp1ilNb0XADQYyWGVH3FUo1BBVk+iwNWM6vA -+d6yhtdAATsdaA8e26ehXsWDUV5OVxctgjX6NVem7hJJEmGxRLQIYfR1Z2bsJp/eG -+ZiweIIhsSMyKQI1jTBV10VwX8M2ovffHfAmtxbZKGVPVLnxW+ilBy6YMR6viZW/1 -+EPVKeKjqlgZkhLVBNgu9WsIeP0I+RvNPMaRE8j028NW71WGdgwJ4Qb+Z3687Ob9q -+tgNwp32isZ0K99UX6fUj9sR+kEcF0yMaysE1PXJd56HNydftORdq9o0jetZadlE4 -+WYEvIfUd6U4nHK6OcUsNVNLua0XB1hH+K1CcPgY6JV90apsE05fP6oncPwDQT25s -+8wzGpitug30N8CtH/fS+4WjJo5qa8To/JZibg3KhufeRMYKLyflfV0cp7nMtdbtd -+e1CI6KFhD+oBLzsSdG0BrwaSVfxsayQQGuz3FYx2NlcTRhgXeM13pmqmv/xoMYqE -++BC0kiRhZ0yIh7Xpzg/FZNjbuQpQvqbYmlqFdKsz6YjeKcqvGMI9iav9nRA+ag3Q -+qUmDliI= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der -new file mode 100644 -index 0000000000000000000000000000000000000000..7f576bd16f29b70f450f515fae3912e520ce9c3a -GIT binary patch -literal 725 -zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UkwRi6VL+AS -zhhqw|Y6L;U58(5&u~ZS60S>504z9S!{-M9I|A!jBMaw%2N7kZd`>oc`44(Ud>I6G; -zeibpq4KDm<&+^zw+BcWtnoysd{27%KB|nx4Trc}bL@ae%6v!%VxZ=mr*2$k?B7Qzp -z5C+baLOI{*NXzV%@KFqC3ug;8_PXsBJDorKG=IGuzIU#Y|Bn2lncj1;eBfq~KCX@m -zw4sHXVhol~t_%5eb{tK`0eD4D*l?2!aIta^FMM7)jY#3WY4H%X{ZX%j3O|LGP5RN@ -zPj`ms2R0J6m=kYE0`lyK3yOuoq_ABF+pB^CcJI1_Thx-l4H=`u=HH@Wr!sk###k~@ -zNuSChRwe-0c$r7nB%33AZ2Dh8w_peNurm)7!?e4vzi6o=DR$r#9JYYw+sLM^pLKPc -z4lmu{6VpwpCt1TN7qC}?meG0*p#LHQR302Jjkr)-F5KX+){F_eo4XpJb@HMnZ&>Xc -zr?|pri~>0B*E@*w)@s;3CFCs!@6cX6U}3xB_*dL{`1ykbDm{tVi4dL=`NNV}+_3JR -zoHdmN0snUCUlRP}bD|9gDrt(r3{}p{GB=mBv|Acg?N->SL(wvU^n(+-dT!A{Xds#UkpxB9O0-OH#+l5j^DZ*AG!&O!fuUj!Lm&5s4LU -zu|O85j?wavhPw1Y)&xJwN>sd*&_1wTX_6>CATbRm|_{C%ldmM{qmbP#g0cFV5MA~xiBYr@N -HjSb}5LornW - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem -new file mode 100644 -index 00000000..22d39e3e ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIDhZ7Qmf2HYACAggA -+MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECHj4bQ/zjLVVBIICgOZGVB9PiB/MTUYA -+HdiMnbJ3ackg1x5NBk4Jxlae/4WWBX9Cg6uGMA5CP6XlzhlFSDji+L7+OatW51/A -+0nREuJWAoAAlayQujwuXN5YWOHzlf8007IHzKQqGtRTjhgGSa5kddXzfYvqLVsdV -+MAb+8UZgc+6wO0Ag27rEWjvx4HKUzS03sqVqF/Rl22oK0VMbVWU12PqLMMBpL6BA -+19MKsKDe6yO4fRbipT3aJ0fv6RW6RESWAXc/9dG/P/0kEZXvi4OwR0dkT0s9m2D3 -+7r9Z+0AK5uSRU/ftcYIf5ARvIOLltfNN0TUo58I+f7CTKCDLUQbEfDLsHNuGaAfA -+YRLyZukS1fppZiog/JtwGQsIWMChxE4SVThmYhqJ4mCUA3I2SXKSaS4TMAPrEJm4 -+onOG2NSgHQWdf9cHNMHeGj4Ey+qgDHMYUC49ScsZQecdd395j5T0znIJk4ysawGr -+34vt8HIn6iCxp2ZbHzqLm1qeV2Lgme+G9IxJi9+UR+eL0BZdaCt6tdyF9/4HXXTz -+hrcHC7vFVVe1HnK4B2AzO2uitGE3aEodRertqJbafWyOfip6Agjbx/Eu5IDFFrCU -+KxgZxV4agc3/zjwmwapVEZdTr9pyP/6HBxIhhd0KEX9cVMauCcOA83U+iezBaZHS -+frP3GVqBs+CzCx4nIXiCRacc/pf6tec9nL7mbrUtT+lQoCOPcJKcUAZyW305+5Nq -+mGho5y6i+AsF1M1l/Ar2gUGMN9//VscombNMRFXUE2Q8yL5//gJRS1rN7U3w5dRI -+3Bk6pbMp+RlbtzeS2zA9cuLGWtxvdblYCo90p2iam8zqfDKEZ4dFfJlPZvRw2hot -+7BkFp/Q= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der -new file mode 100644 -index 0000000000000000000000000000000000000000..4445235c8391ac6a9b16a1999cc4b6e422272567 -GIT binary patch -literal 725 -zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UlQX*^4p%k*Oc -z0tf&w3A -z>|>be$lU!@4zr56BT&_O-^jC)e6^{yur#KJ&I_H5kRCr&a0jeSF>*4*?9%XO;qvQj -zF83p9d2>=jYjsau9FbBHM3OpqPZjdgl2nAz8 -z+`|7UV2DW+ -zRI|Vj-Ua)H?0Pfk$fML{OA1%z%Xg{5QlqqQD|!j-!*7odE`)@pAi^Hlnsh|13uX>I -zfOg3Tcl(U&i7&(av-rA)98lFo+We*&beP2|!k@F!QQe2zQ)aqJ{ox?)4OVx<|Hlpq -zEru22&;q|QeE6@RvzG{Jr6#jLSN+VV>Lj(HqD0jxyY7bGbB7>^`9$87k$%2Bg6Y;8 -zl#kCzeI5+pmtT{xdDiq5F+>}6iJsMH*usFLsjlC)K#p=r$Bp-xMsbgWtP1#WeEcr+T -zl!~w?eMG~3_;u(660^;g)^bv;YsszqWyo9lU(?2b)_57(O3_0Eg2AtDvMN6ix4M&w -ze|5Pw)p{&LNQU&90UmPfR3^TK>=w3 -z0tf&w3!B1cCy9k1yIyRo$2Rqx`}d -z#_Fb}F-5QZq!`>&U_Kfekbb!hBNTTL>y;s?48oi~UEPWFNm-NsM -z_6~C`#+MiP*gANV86KKnJeWA3FDxPgvgdrT(-@*(u796YfE9hdXQ0yuuG<@`tXrMJ -znfGAUB*JG{d#dLIVy}e -z%wBOXoivu(V9*PVUP`T~MzOu_&)QT_lvRMg+c~}{ -zG%AL>5LS1VkVzNs6J*GEU%%k)Js=g5)OGJM0-~boX$j;QG4Mo*(8S05z*A-!zy4`L -zjv;x|ZLQ0D_8fHXT7o}Gw=qg*(w9ghtwwpF<*a>C9%ykwt4^NLsHvG<{qoxR3(lNN -ze_yVEJPB>NOIW_Va+9rV*;vs`M%n|bWL6vJ1M@Np8J{-xV~?$f1x{U|k0=*sp2uS% -z5CV3V*X2R@m&{b(*2ngpXRQDjU7^WLhzA#y9UjWS0)z-@x7@=%hZ)&OL_O`fs3CP9 -HX^QSdO(Io5 - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem -new file mode 100644 -index 00000000..12725abe ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem -@@ -0,0 +1,18 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIEfr61PLRSswCAggA -+MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECIis3kdV3MqyBIICgN8cVWWhMwix1YF1 -+5atoT1U1EWGOUokVtb+oTlqJfMvnZeCHc6kYMwbWvTqga88AUhSssFL9WaXPb67a -+BlhYYkijNdOcu7m0V331RWdzxGAYHHv6Zb+43+/a3fx0hYwWsAKBLKnYXbxAckA1 -+NSuItKnyrWCprvhelNLJRBY3aJG9EeqjIeh0MLFMbIhFJosnB7oMliYVu4DxnMNq -+JzWoiBHllgidjZm/vTTmfH9gL0ya6TwBgmj4gOvRu30P9wdBPxS7IZi0xj618SMm -+eOSVdRpuxvX4gzQ0TuWTzFIRdhCFx5fL366tVca/YZ+9qRO5oOqAucVKWZ5zcMVp -+yD1SOjMDP7x+3LBzIYAYb74kHol8ejIQM3IrO0nzANer5M/KWIRbXoDuyLzeiqrG -+FbzpL/kAQ37L7o+GS6gyYgN0lQoZxlgTt4t1+DCNAMWh4xmFTNJgXB6a846u6c41 -+K4GQrwOXGAr0pYdNg44fB5fqw+594VKxHEa+7MpMvzos4wsISkrCjbFRVCuO78HY -+rwsD6pWtac02fg+8+a8cTmUXGkzoEKE80hTC0r1SO2w0RabyjTHxRQyZtcCgavkr -+E6Avbabq3GDdxT4IpTI6LiDKFaRUpxMnTyToTlGzsi7sjELHDqgOw4/PbTeNeyJH -+PPqoB71p9Djitpw0plUoO9MWQQPWB7ro3W0g+2lS1782wTk+9jWBDVdgDV8+FYJG -+cr4GxoADHFOt2viKf+7cq5ZP8HxvLfHF4kULslea2AM+3yTQ5TTAahCbGOPVJgaA -+tcqOZIGpIxk+aRceZRrKPerXRmZvRItbgZ+QUCw3kRxgzanOHB671jp+VORMFzJR -+jhpl0rs= -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..56e17ea30dde27fecc6a96a819772e07593e7d20 -GIT binary patch -literal 1312 -zcmV+*1>gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UjmEypNdV`bk0 -z0tf&w3|i(fyyQD+flhtUi@@ -zOulBXzC0ixz1cpN5PXcXr4JLCKKm`G6|Thzl|Va32%EQ8TA9n5w2P!yQULQDYCJb0 -zwTi}BXu)Tk7wb#p#CaO!T&>Xis5 -z0kn&or^6du;RKZ)tBHB`6a(_(;%<^GFn1L+qI87x}h!JuyxM#e}wH -zvmAQM?DesX72Z2Wjt6BAe-Hxyb-YYQ?gG{eQFB1e6p*`uoW&Cxt}4`ZY5vG)Y?_0T -z>`8XXOyg3u?B8cXhTQoD*8=q%lFY8IJn5pQIT)!AoT`+u*+M`B&P8u{Bkg;ch`~?C -z3{ri(mM@^@-`DREhrIhkIdeavzr7*@isY2vKu8H%;c@Y -zC6~YF0^rvw*gada|2#hE4px#%O{v1j(xJRQeQBh>ziw|MorlWMdO*1ulArXcosc8XMA)+L-F15~W2c76Csr)w)GRdF!WY -zv7=1ydC~x0UVHwEtzpL=iM=aPJ|28)G>?=$$kU}{cBJH~GL+@&`#6}jEVTKRX7I7~ -zV@gTeEG@Td=p<>XB!=11azoTHgGP^~aMA;&*&+fSinf%esvWzZ~IwF>=9C`Y2o~`^Evsey;6u-ib`*mS#+!ogg -zo{WW|8$Ga)FvM(Yp!MPu9t -zHXE1CH8a>^?)1=v!Dg_pp&!?Ypgqh+@(?Vw$~?@72-ZcipeE8#+ojr*nMfB;_7h{F -z9F(F5%Q1ugWN{54m`BaHiZ?28N|F7C!_t=7#f#cQD33;AyVfA_;(n+j9gwiltUr66 -z&d2$hO8?ug7q_Ju&{E%qiJfjJltFR1eI_%*sE|j(a<4<<>VdI#TZ08oQ;%Ukk!MVr -zs%VlTie^!h86pQJ5xhMh#|$#5oHP$D1c+~I?<7PDI^-!ljaZY#7KqfI^-hX>pw*KP -zN6pGAEt8=rEH4>kYmtEr%|eFU-lR`x52v)qFr^s0t{OgL_XD%8sBZ|NK4FFR^?sN< -z{%1FU*v82^c4S!M9yXX8{wvGpVxGyv7Uho7?;Pz4V{b92LHg*LW}qvvH&4B|)wIXp -WhoI(N_@%t?rO{Ptb=-5^4%Ic2`EcO? - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem -new file mode 100644 -index 00000000..8ed64603 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIur3B1wRZWJ0CAggA -+MAwGCCqGSIb3DQIIBQAwFAYIKoZIhvcNAwcECEnKPmr6wiNuBIIEyKNZuEXIk0Eo -+AC7KnJWaEhSDsr4zte/uGDTeOGRVT6MreaWUH3i/zwHXsavEBsw9ksLYqxXsIeJ9 -+jfbn24gxlnKC4NR/GyDaIUBnwGlCZKGxoteoXBDXbQTFGLeHKs0ABUqjLZaPKvNB -+qt9wQS+zQ8I6zSQyslUfcDr3CZNgHADdmDFiKisAmT1pbtBgPgzmxLNSmx9C1qwG -+ejuZ/SJ0YYAdRPkDh1p2yEiAIfRVFTgWcjltcd69yDk7huA/2VCxWJyVDCGrEnlm -+UJyybUcXXofneBp/g0J3njaIbIftmYIC+763EKD/dqVIRXVxrkHyYcvZ2nVNUT73 -+Uflk+JuHIjTO4jHXiPcaPdAEPLeB2D3Geq5ISYOvTzOeurfD16Y9hrN3IHi9gedm -+JTcEPkAx2hcb19h74XlV5tcQ5ImsPgLRl0euODN07+nj14AFxCQhuoGx+Yj04NkK -+dV/l1rLsbmLiqr4n+y5ezGr0GJARVinLCBehptzxaipXPzRW71IQSddbtlSl1rz5 -+Npv0HlwGgwTacv7T0ZdWncaw0VjxjXAwHBD82fCiuH3qZAXEa0M4drxROeIncart -+MIky9qIRjfImr3oh6GLxNBB3FEFFf+23CO+Qt3vrh0j8sVYn3cpbgHcqv0q4fca7 -+Sq2okw4RjxcDHyLgWiR20tUkqJT8FYQr0u0Ay+LT2YVVO7+EQVqvlraQcOS4Fkfa -+Vnggn6sdyhWWCV1rab0v81qZYBvRoUK/ynICKCbXaJ8d1mirdNGgs3FxpVAiUPZ6 -+LYZ21Uwtj9OoeEQ06GPKq60xHjUmTsNiEkh31AIlSAgdsN/0+pUiD6f1lCWfiLUi -+8MuFUDXqkqXAvnJW2/mKrLvcx7Ebm02rkNw7AdAnUnEx9BGxD1B0TVZtRid6mPSO -+kXv7adNyBH7qoI9vGGQ1ptNRcNxhxqgGgtfwI+0mV6P6G8BJMl8urZYN8aAC7dJX -+/k9EICTUcOU6nIyFFe8tk4kkcjdo9BNkgB4JjANT4ptR2w950tYVqDMHBm1eKPBC -+bL3SnDDm4Cplsy7zAdUPsCe7/Zk3K2SJwUj/lDUTDGCTtq4RplfDEBWb218XWgA6 -+rHgi9/EFH3YCZM8EiE9Mnx9UafdnfKhk3tm3I5nKo56C54os/EKL8W+lhXYdK9dz -+peehTsjEQjF0/1OE0097XlCShP8E0bdluoFkD8mKYC7mGv0muJLuHdGMEaCKzKoS -+LBKpZNYdOu2wlFfCkf8zSWO4eZYKbSUL88AoEM7A/kquQsQnb80FkciPFazlF9lb -+ihxh3YD+TNH58zpYvqgOZkBflW4kKIYbyWOm+ARMq+eVph1aNKMdzeW7Gmf1Fab3 -+SQmfuEBAfS8u5ghW3J57q8gSJSGB8bpYWAmNGGeQE2g8C6HTxJ34kU2HoFLo8a1/ -+cqrExWl0/lkhwqc7PpvJbKIMxVOOXtVMrzG2XBCkfQSmtwwOqH1g6AZv+6sXyLZJ -+PmvQ+R/23+eDqp/lymz0G6F6B10pldgqt5FHYxGaVEp7GIx6L+GtI6G2qGxpHJA9 -+x//r3gdd21Fd6y7qHYOLO4fEYAe2sN0mJVjxFLsg9AhCzfxKEHsit5LMdTkGFRG0 -+XGP/QsVNcWJaYyaKTXaTCQ== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der -new file mode 100644 -index 0000000000000000000000000000000000000000..847de7a637e15dbd40950541ff5fbfb251255f45 -GIT binary patch -literal 1312 -zcmV+*1>gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90Uj-fseZxA@*@Yn9f&|FNIhn)_E9dY` -zp5IA#Zal1)@vtOnxxy;BbmTxQ01}Ya5+>nzV>(Y?(m7^?C(PU*LVhthb!rd)diuXobR$#L;YuS^BoIghj{H -zEn9YWg1Wa+E_v&UR#FcbBMAnukZ4Vl9^*QH909)9s?-qcj+l^UdagC~OaLyC)A@md -zG&J2;LsE11UN;oDeBuO8kUq&hLKP+(DgB0^y_Ey^ONH*xmNCx}Ysf!G?hMBJ7yqcAWCizgJWoN-W{(= -zk(lvMO)sivA_$bAe}|ZVeFY+`uA(L=(_t5}AP^Bh(EsZ8Wc5cgBxb0($N7cz&EYt4 -z9Kc}cAzv7@qm@QI*R4qMZS=XueMG_zJzEis5}~vhU6WJ(jYUmS+2crQL7YKPNSD<; -zD0$b8=E9Qs^lx~Cc?&S~)GfdctPZ)cSw+!V$_?kKcl^#>Ibp%SDja~FOx3+pLF}Lj -zN86_Ina&4$Gi#09V!d5CVbmJzg$lY1D22d>D*mU1N$b8>$fsuYO<_cMn1G++7_5Lr -zxLf1hJp*TCQTL^)JA;7v!vlfyPZi7BS(%&}c!s!_D+LmR_aM(jK{pLCLIZ_{3MLIr -z>)2?d7*)6Wh&tIXYzA0)6!*XAhHS{=W((4cvEbbYQWtQ>A!=pTkmUJ0(~U*5n=<){RKnXKo#T76sl9%Hq+Fxf#1W*x -z!u3#41Xjq|RjA&9Djr_lG&1l2>Zsn(A-PaUYi6C@1I8%Be4S|>Twt^pV|_0k46~9w -zAt}OlURULK9CoOGLrO?uHaI~YUKvgrj`arT;;S3Qg}dc0(_bwm!EbC%_ePy}RV~v8 -zteUnd>et&;k#LV+oImtGO4|CAwSKp%ijHjH%W1D|;)oq~UD;^pbGkBe#}BKUZ-XBw -z-iGPhfNjVuo|tnyQ&ZNfMX_yh#DZK6J^PCfq3!tE%&d6;^wR~GD04(0!s<&FnJ`p> -z(;C%gz_UydfW0{phP-8F+D8eCkw(jJ14KTvYR`<~!NFsPFI|vr6#@X$GPw9O$V5p} -zsM#|HO85Q|5_zwJ0hKVeCZ@8DS&j)Bwn=6EzzB1q_)mPVyMQvznrjxVb$1Da#N~L| -zqz-x(5fA~guC~*oL3vH(klZA3%Jo>-LLv8^IfLN&2GiBX$D`*AX+byg01=u*lxU)% -z;!V%n|Hicy17L=|*ipFp&dN6&#bKy&7*pVCaA#O#x*glfaI;w1V#Wg@H5HeLR>!kk -W;TSo@PCc5A#R2q^wKv(pKESQ$cy#6f - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem -new file mode 100644 -index 00000000..33a770e2 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIv/X98EPvjcYCAggA -+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECO5EBOummZrzBIIEyG+qrKhGE4TX -+ch9QUfLBhcklrpcd4xOF0FfwVfaO17gWAOp2Ukdm1MBof1fF2wU0hNG+dX+wIMhM -+/MFZWx5J0PLULmAe+m5rEVqRVY13Kxa5UJ8W4oglXVfeRkTvyuWr0Ov8E4wrh193 -+jmGXA+jAjMZaAgHWZzmHDX0NwEeoitkFEXJc3tt7WAaq93/QmtTYKH5eoae17M1o -+yiSAxI1uNzHryPRt+6hp1z+sCAcniIe0fF6GrmkS9KcFzO99yehhrxyojiFPLSDr -+Cfv8mWY7nUSFAW5UBR6KA6Ggp27FyKXKc/k9fvZzASJzyjxG90FHyIEdxw5KsWU5 -+NAAO+P2Da8aX2xctAnKxY78cFB9Iu5RSCGc92pp+G7OcdFUjXsYXr9KEX9s5bObh -+TuYGtepHEKLajFZ9JvhjQm/t2lYa0GGBNH5j1wwmfdIqZZR82mYgsgVVhyp8NC+Y -+Yw7K/rjZDgpQYSrUHGxlPYoxZwAHvbTHuTuGI3N3mS6kK4Y2NY0OLQOrVnFGNT57 -+ER2LK2PDUrk3tqTwpIcRKIqeMRayqNQ9MUsjjQ+v+yPcbwbZ78Ci2niq4vclq+84 -+tReLs/JBo4WHfdtFdzCnIqLVx2K6mjkaGL5q7tKYQoDjHxaU7Rp8cqy4d3EFovZr -+W15EZaFo70vsxN6Dkr7lkJdBbDbeQCdkTyL4sLimYKselKZZLUl/gKw2hCC8vfoU -+Jjs7td4IQ0vhBtVT46PUdLnvxcqpGoYBMiVNlGYowP0ugd2MHISFeMYytSSq4Kqn -+0OnbqG262WnuxXIufm86KTs9c/x1+ZTrAKrk6XarmbF8I7pB0jBjObZntGmZ05bF -+vJgRUDAx9sheNwPPiIM/7ttCDoxU1escT+u4l675FkHMhZDUSLSRqVNvGmt/ES2F -+c/dIq4iDGgG+MZP85S09ah5KKruDE7wvZdpA7NTWzSN/FL6JokU+GsaWGt32Hmia -+OK8F/CRtUfHFUjLIk/+v5wzqYWqI3LjorXQSV9pWmtahp1cLQ5Wba9vsPP/Wvi+2 -+m7FyBEJtgKP813YOND5ZG+NndlkUahwditGJ2XtpS4sDhFyQ50oQm6vVY3nxlkyi -+7gcCE8xOI8ufFS7CBl12pFys5XS6htkmBbMSncOoNo7P1kuu/n+CcjCnWAY1iFsN -+OkYOKDZlRdkbish4JqTe0LdRV2CcpGmDoZkMqAo/gacweT1OswgxPZqRAlaakDsk -+0z+wy1wNgJlLF6Mhub1zT15e1Q+/wHUNsAcIRbEsq4vfSVn562/umqqVZleHUfoB -+tAKAAIwee5aNB8fBcUFCqiNPFGnyuJdEy2QCu/xiFQ4M5EGGApPOoQpSCu40X8kx -+tIsIihquALlL2nx7jPvBIpasKq9SRRg54VYp+5WQBVxUSAY9EsaRSuNrkTJTG88q -+4WO5rHW3WFZOwfU2LGvjhz7SY+9H7B/A5aRuTuU9BkVnm5w9WtkS5pHU24WJ34MY -+LESH1yE99OtvHuz5PwX1kcoYKdGnd6OeNkRLWl72GeTiU8bTJkB8SHx9Ol4kVTuH -+fPsY/ekPh0rSuhj7L0kCTPJqU0+Xfl3rqWAKlpXLFzMKyIEhu9kGgGRAr7kB9ACL -+ocX/IfJDcGRqP9cpBI04aA== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der -new file mode 100644 -index 0000000000000000000000000000000000000000..5a7c60fe590ee880278ade7eccfce546bcc15bd9 -GIT binary patch -literal 1312 -zcmV+*1>gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlC%Q{Y!e{4MB0{=p!!Yqp`4SQ-}}lNLuPKwhOY?4 -zNglW(sA9M}h~_=5oZF#93sRm#*2yPC9uDw|YcQpYFOoKC&p$q=R#a)Yn*Y~BDjQ;i -ztl!Rj%;X%O70|{{Jy3BrEE!5Phk^=SK$^5m1`c^)$7P!&w8b}nZ5vE}qvL1lZmvwv`y8B;S=UL> -zp#b-&VoDtl$bAfs-#ugfavEEt`uf+&--8a*%{Tw7^MtF&DE&hv1Y -zB#SWy(Y@HkuiN|T(JUSf7~a@&+}s8~Y*4^iw7kViBMZ*NE7zjTxNI|#@Tgh2x!TX! -zxDy&XuvlX)NDh41tBC$?l!+{n(;v7;(fyuAN&kFctVSD)Y#L|jCe>XqK=yresc~Sg -zry9JhHx94dW<|r{ZXwLA{lW|)+_h1LeARhVn0)scTU~2*7rm0M -zCXn;#+nfmh+IQ0tkpFHsnMSWeSWPD3i0N0D%%AHXOAxVPR>H0(fNz(#{W$ew8oc7> -z88W=rtj;XXJ+8+w(mo`E3h$=~`!Ap@eO*4m2I96#<75Wk9Cf{|e6dqGK1BwkT;mi@ -zN=ba26A}HyQKuyDToTp#_rz3I&u{mxiw}FL!P_zzF){!BET`DK2lkze?DQAOI{nHG -zo1M({SIN-61dN6!l)4f){?e$Ar?xi0(8>rsabWh1X{rsq -z5BedQsX>-By{%>bzozQrMv)QJujxLL7WXy0Y+2F1LV^LrSGH3Lmf$ExGf)rjT7eTw -zat0>n0yReol9_lmL)%T>?G6*UhJ;BNc~RHJHzKe2vw^upIpG -zggLQu7)hglR)w`^@6^q4w-5;0X0K=&^^3fz%2_<0-4_cRedkp|TDC7kT<^YGDX3mx -z+32gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlZEa)UBEJ>CE -z0tf&w3?Q7#nW7FGvSTouMJ{j%o&M$T>MSs -zcZ!}KIi?eAOU>j>jhQ-B -z)5|mQ!lazCs=^k+D3vqvP+~eqLD>usN8+AtsRx1Eh9-b1;;LaMF@J!1`SKwjwD$}k -zBavcAJo>=Gob)=s8a}gVLt2g+Gb$FtL#Xv$(4=EI>)I&CJ`9zE-LV-ESyN8*8OaIo -zwqqAwd9HyRy(t>uVE!)ICFeuGuv85pAxbmwj0dVWIH9XVPkL9%AJY|Q5LBDG6D3xj -zhEkl#Mx>gT{p|@#kk*ON$;RyJv -zbv{ZNi>zQ5{fEI^_DL(5$EF0@Of7O}pckuaes>^)4hfqJ$uYdE%>me4t12uq6pucY -zc}M|SAh=>oq$r@f1Ktn-3my0Mzs2H%^=XR@mblzl0;vs%K*woV2e^T^br#G3sO~A# -z^xP8P)2%*-WmlhU18jmM4-; -zwCnS}(s5Ar0otJi9kYaA^3nA}-IIO_O|Fj#o}P1R4RTNdaPEpW4D1E(jqx_S=_^Z~ -z1xRRQ;C^dJyBe2ez8)o3Ww6r;<;>0AUsZ-3{Z~jNQY16v8o;bQsll|LI9!L8jnQ1K -zD{4UTV>%|krENZ8FAl|)r{`%v>uJU%y+waN<75Q>-W&LpI{rbfs@Uli^TvJj6Iv+T%4ulpF)iwC24CHc7wvNa@lTBXjZ -zZm!=29rkWP5hvaLYVz-8)w;A3X2ehykybmqcbAQus+S7xCI)_2h=oc~P_%EJ1Kjgw6&fFs?n^yoI5O{t=X221qT(*^eRevWi4dbG%Ai@) -zpg*UP;FRi~PX~}gv`HpYj~zPxMYG($FKO|1*I$}&I^ikkkz(#qNwEfJ3;_J -z;j>9IS1%OL%GPwCha`M}Fb-FzzjNxu5#gjhBFMgj%{wc4NV1l)cFR*0@pvu_;6Z1T -Wb#3`U=?D9U1ao!fEa9LXbvP}kJ8Uxm - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem -new file mode 100644 -index 00000000..dd9897b3 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI9z8gVJbtqxwCAggA -+MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECCQqQHRFeFdeBIIEyMJpY0A21GrC -+pKBL07F7zOyuFIdwQT2f0wnL6lPWvUg02M2jlHCLDYlciCeUhE9fHUDA67814lvM -+dlZ8KgCsp+2mqkoZB/hRvvS+ZdUqkwSI1J3Wt5hz4dKq0cebJWpDAcY/+031+zTU -+9iCshfsWAGdlcAIBZOEXDwejNfIayp5cFKvQqg7kmED+KN71QmSVmVyKafh5m0SC -+2Y3CoZTQ1982VImx4ZOfh+r86XNkrKLj3KYC1K6DR64Uwq2yLNoypTjdUig81ste -+Dhqm+0YXVN4dxXCLF4desKWxN9v78VmCuHvYkRyunj9Q43GVp51cMQfFRBLWIqnB -+OrT8k020lne0MxO1xju2sr3GWA4Wn6MLqrxSdfTq+P7ZYcSh2BchkDPslxi5gNPS -+Hv5o28rkVW/K34UQw72Kur5JGMRNwJpye2rSPUbtLKb0z81nPzJMP+BCl9DttTr2 -+zDkkn/AFBRuKH0uWrKv+9f7FDu4hxsdFFnLcD6kWlX/V37b5tYAcy9Atd7lykw8F -+K8wAoYZHyzYaIR5otYV5XgjMcw+z9U+5t4ouXSYght88Y10Tq1IYnIx0I55KaV44 -+uCdrptsKnXXWvIux8h8p/SUwvJOrECc/nYxyfS42diH3V3VGV78fw6n74nDOYnLK -+ruIASg92TXUp3Qd8xdoiqdTfx8ZCgNy0mmrYycrP3cUciAYURuKWjjdTN++fk2Vx -+Rw1KTFgTf0Z3dxEMIKDHHDiGUbO9cE8oEMWCv0YJ9n97suoIN3vOcifxG/93RE5M -+1xe91IEY494/DdgsMqb0D4T0G5rbFHnNY8bTDKIDpvZKzcbnm9vnxPi7Q1S1kkJG -+230apDz1Rln0AFO51SAVS8QoF5wP69cL9vrC5miVh3mwqkDVoHnLNpJrT1o/XcVR -+Jl1j1t9lgFNJhVTltTPza4FydXRe2ZBCNKpDci1jFtD8KYZGOCc+PQtJ0Wtcx4qJ -+KVGO52gUT+DSxmaKd+3RyG7MsDw1CPT8inHkACa2G+GGQvqukbjLppQDkvmUPkTa -+fEotMYqnlvqznwiWURl962lyRJJsxClC6Q9R7Pe7pxohsthIHgZFMMuECenUdhYj -+3TdqtKKdbShoF2SBnwYUVScH2VR2ZE8ZLlldNIA+WswG4x242NoemE76JC6DyUQN -+WaxFLL813TmiLYtRq1QZsiqCqr2jRBMJA4cdCt4jMZXpLd8heviNtcPmf6uEpHV6 -+VBQmun8dCQAUeCHKsrkOLnAcnrIl9gPlyR6qVAI8tnfs4IezjnvAh7+cN8cQ1AZw -+xRvoAHJfR7GMT7Rp/GTLrSYU+swlnjrDLQ7DwZ6seOVyzmKo1zRjysQ7qF5m6ELp -+hlu6ED1/VZZw2kSbv6BVzYmWHCGnuyl/n9zXImMR9vcM/uTogjc/38F4zBlSyz78 -+wHy4EWMn2jWyRYYFfwwLvrxmU1IHkNUKYfaM6qeq7F8R7cqbZhZ1cCrAGcIhPrPy -+ig7iEmTblRw+ARmY+cjUuJtbU/a38kEfCMIbKKnUg4vUnO6s2XCGG9TpmcLR1Ti/ -+80tOsEuvg5ZJB3FFGHhSH1gDMAKQwCkcP4wbP/YhzBhq9WU24AA82RtOsFV4xjFV -+ptyV+PmEpJl0DpDeIv0I+w== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..40026f98b436bb2da5a04dd12d8b9ca3ab7818cb -GIT binary patch -literal 1309 -zcmV+&1>*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ukd<|>*gFq+f? -z0tf&w3aL~@X%DZ6N -zP*KA2!@$u20EKj011qhd)gn9IKhN+?3c~_}jfE=7_7<_ygXt~RWA{y^XHmauOn3K0 -zrXj}9@bg6Ggpg~dN8H#_rJ7G3VO`yM7bZ~n7K5MB2Sln7Q8~ZsJBxZVBLC)3XJL}L -zpTDE=34pJ&P!-2W9lEUPaDKKD7#tD1ANC@J(ZV@b2=PC9Z>Wpzii=S5f -zO98X3IPwx%ms0<%o%Y^v_zQA3)6ugpv&rXno3g8-9-ma^Yr1?}1{j~Wk5;~#-F467 -zr5^`U7J0C7gDPNy93E_pYx9T+aN8Q;h(&fX>IZoL@m`4QEgC*@_zaiE-D1>BvX=^F -z8SgsOoFE$xU%=oU|MQ+_Ljd%3FmHIKS!Tb%Jt@yD@Fp0reIXp@M4m`G7pm -zzPwq=YhEGOldcHx-pq<;n8-YvB*2ub^|BnE+K)m1pqTv&7&>**LC85)5poj=x(a~n -zJ<0|2V73CIBhK1X2d0>Xkff2>Gordd=8C}=+GC+NX0Jkq-hTv~hvH9pQ-yCSE7lww -z1DU10CT2b+TxBr&|4uThr4G5sGy9hnaEP#J+Mne9AWk`$2@d0c -za?1g2PCB*VM4yhY(O7mjYkgBa#B{19y?iUFVa?|!xv!A^AzxViOu)&G)z_bhLFxVH -zK`qR6c0|;GULiWjvq(q1^?n3ppX#Tw(@|$w_Dlpf;`7h3*kLb)7e3{wJFl<+p?R#n -zrToXD!y*iuYZ7-bQ - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem -new file mode 100644 -index 00000000..af4c4132 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQI/++dnhs4VZYCAggA -+MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECI5DLMkayM1pBIIEyEJHtZlUPIPn6DB6 -+Z017kFJdaF29AqSatT5tukN862+b+0bGwoda5aR5lr4edgmmwMhR+1pTewsWyZK1 -+xCYHwn0Jna1HXKRLfsoNdKCFPyvJkx9OdbNfop2uqbS/vrsriMKMloKV1KXUGqCI -+zZ7BVEgfgH4hZu7cX5HH0tMw2/CzrC5OjMhFq/OyRe4retfACxN34WVAqMM4/N0S -+S0ciNYR4C3vKu5+Nfk4R3GGMmmz1WejkYH0QMXFtq9IU8vbMUhAaBXIo7xwkAbQA -+UJF5lurXLJELCIR1KQVEjfYCXViH2ZbhAZuk2BV0B8qIKhh9GhvL+y2nporiEhN4 -+ddE7PdAmZPgi9vJ34+jY8E2UiXpXDkSr/8LpLRVQ/UISttARVkW49cOQ7oOV9hOB -+R+0K9fyZWAJI7cZQSsuIPSO5DwDkXclWUFYaa9C0BcHRaz8ACkHu2vSF94LwG1th -+WBvVvm9kTqznq2tNoAk18b4RKN2nVUkfhBJeR2GaJhzsshnpTo356kYNKpSUIm+S -+4bg087Zovrsf0C+49mr+9uGNbDQ2EfG2BJ31faBJ4bwRNata7l3FvqlMLBFJEpUf -+l2EIlr4qX9wfF9OnkmT0gGuuxwB9njCpe7XHbvjmvKalo9s9iP1z5rd9f6UPzDQh -+XdV9pooBusM2Z/VjkrUxRdyurlewD+UQn2MLiRF7t4Rgx5+4g6nooIQlcV49JhEP -+4Of5uDkWzHQ4G6TbffU/sd7THcwTp5wTot0BT2IPuP6qgLFRSQYwx5zplraVfTOm -+GmXD8Y0I8DP3bymMVSuJWFQrSL/8X5b3snOhzF1J9o21NqetXY+YkGIZPfL80jUm -+7ZRSsjz7A4M3MGhsD2i/gwGAUdkJ0kacdnBYCZjfvhEiMtyJhrtpRDT7pSFHCN4z -+jCok/m94d+mPXcI7dSCfQ+4FUSMXDX6IKv7ivsoJ8wqI3YiR9cHdK+EZLWPKb0xE -+I9Y1H93K9pQFlew3U7TzoFEJcee0JHlyM7JGShPQP/mPEoPsHTRoGjYwYp8OHEol -+GAjRutyMS5/pEL3zqT0nWsr8rEEwtm8tpPKuMclPt/p2LCpVBVgTpuVF/Hfnr8Ab -+teL2bpC/D0W0OOOMU3MlfU822vlm1gC5Yh+I/+b3jsgd4xH84PZUBGDLO5+Wrslw -+f5BPuO/DHADonB+DeGqwSFol7zxqYWufdI1jb1YE5pWV7dO2e0vTD7463o6V907+ -+Zfc4k7h5ohS/W+RGQDBM5lplssWcOPK5Rx8LpP/vXHFp6+EPnGJTFBg6I4fUYAZK -+HbJAnLkjWjfy7F4AEBkx8jBjYyDqNx3r4WLMU5ds06C5nzG0usTpAtoJk6k3G/Hr -+l/jMr/za+6TrtXyNBDGpZohgxP0wT4+hAMyLGymYnSWFlRVkkf0BANbtcJBszbAZ -+EvNvJaCecjVw2ZsnLo+rapA5V87wR6Rzpc5Yh6IxLQs/pNOcl8S9HhC+EzwcErLk -+J1LB5piJy64kLmzxC/wmJYvR5hY8GjMU8Q8cHOD5SVk0B87SOCt9LHuskl8j5/3/ -+tLEjJ4T6nHSf8swXl4B2e0td8/5Cf6mnyqiuOyQK1yGhMjXbi6taYaxb2fNHBV68 -+d6QDbGs8iCwGsp6ssw== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der -new file mode 100644 -index 0000000000000000000000000000000000000000..e25b4fb9c308623d9c7bdb0b8bebb48501c6be46 -GIT binary patch -literal 1309 -zcmV+&1>*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ulvi-eaBbXR%; -z0tf&w3$K-B+F7cPWJD#?kWM*0`QxfEuJ=Z*u -zC|lSMhVlY3Hn5v4*j}cM!PAx_5X3+D^h~1I0wJ##K?D}rnyNX*;Woy -zm{sf;2>xr&cKE*%SzL~p`^1&0QVy1gzGJaJu$kM~j5xYDmOy07RHcHY=DlgENR?JS -zn*N2@ks4L+r-%qLXI6|v^-_8DU-Wi1zO~P+*>vxFPq+sLr^M|utY-U(oh_Q$&QUd(h?*Tsu?7?y1C?DVtE(j85j@SzBbl*`Q6)zw5RoZD-M -z!=PWIP~acCJU?y(9Fq!{AKtqi>U~m94P~v%u6QCdMtr#JU>x1O8KOn$-TKYl)>&3NG@$p=5-@&=JWhYCQ`kIQz -z*EE{X^ug#30AM%0(ARhq(sv1pVsXEhU -zT$306K}H$MTB*+QKBoEiG3yPFvCoh+hXs*}ZD6W!<-dia6~q;f>LoZ9*h1znHYd== -z>fNa&m-*^rh&A4V_$8`!!6UdWa^MmxM%q*X=TL^mY{Z_^ -T$p#g`9VgTVL$n0dF>&=Da_4?b - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem -new file mode 100644 -index 00000000..717d3ffb ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIkkRHl74lgxACAggA -+MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECAGUDJYAr+n6BIIEyOthlgMNgyfjvQd8 -+ZqQYF52juYrlvEdk/NY2xlEfa7NKUdEBS6jvL0lHOaCcn0dRbykqs+Do9yiWsW2A -+cQ5BLrie7C/IeZSaF90Dh90QUe/aFvE/1fBjwuSdLj6Rf12MRXxtyCJb0WkStrUB -+Rgb6ReGUiUVz7fJu0ePZeNKqVtCa+LDenaUaqo82L7y05KLoQP+qrQb94UK2B6IS -+xUSORehQZnf6dpoXHMS5CFCv4Lw/C2VusBIZnAhEVWm3MljxMycOJz27YMLXiczj -+H//rm8BhZQ5X2jYTvo8S0BPgRXPnxasvIAYLbAFvK3KP0umX7THVoYsXpwBgphS3 -+penm9HExXsyYLNbefq9jPL4LlatNDi2LAg1QOr30jxGC73xESbYsM1WYIB24RSNL -+ZKyhINxxsqcSkvuce5dtShWXkqD7P0nUNzygT1uSD4AJEKOaDL/YtA4dsTt/LCT7 -+Ct8w9TR2+QkQdxgZri1S9+jSmPQgcg0BobPMncysTjTyC59Oh9KPcJCThR4BXitz -+cvocqt1CsiKiMGR51xHfMs+p06DwTTz2LRYiLdXco72D57O4lixOk5LqXF0qiBfV -+mN7LTqBIvuYiK9aEBZ53HRRurAhrOWBJ/UxM/VYi+lyCAUBhRu9XI02g0HA2UrlX -+9RnuB/a44Ce5mgQWdEYdQIkI7JB0Kj05ktWdiXeLCPtTG0ytfQ0Cv/EwbWCG2tu6 -+PEEmayz3KqMR/Av9jqsnk2qU7kKqR7hySMfoTuaMGpjcxCpj3Lg6Tmo0Nrvn5svc -+NNChDlrgwyp4dX5ub1bwYYzibG8x23+fKKkil7NqZ3gqZ5ecmgX5XiU6VdBCz2kJ -+k1xGGiyt89+gDdmoc+HyjRTJgfChZWiI6EhV3LZOnMa0ZUpQiM4lmq0SlQ78zSmY -+ZyqG9dSEFWg6BMrOUpZbuY63wjvrxSHrHLAbCTlI9BRkFhmfwiyJ90FfMBUjBt6w -+yCPW2r5aFPIhngNS3EayJKhAwchGHN2XdfeDj9GFhWZAIQsXS8R7JuGDIug7+QMj -+WL77m1jy0K4PiGf3lt7PVy8KOqbiOHyzYQsuAuuMD7NZdV4+dVzznTe3HbXLWtxj -+itPFNuSudfFBotAWDV2yOF4B7XbcTw4CEGv9bVJoGatJdaubzidUHPJUozWYQX8K -+cw0LqdR8yxMtHOc9FYyawLbQMzcMzt/lijS75iO+vspT9TYXxf9rC5yX8xlSHHa0 -+jlgvjnTDyEsrUnGHk9kNe906GV42YDO9MUJPvUmlv6/bAKA5iWX2+Jo5rwIWk6sg -+vW33g7NPMn0I0pwzaWDaLd1XNP3JpjODwkL/5n9F2x1+LsbPpuk48DOnXQi7MV0J -+2ZWSSxZltTLpObG8mI4dWrh5DXeswJIIta4ki1lSyFLu+hMY+PUVozyd6GVd4T0o -+cVepNU1rHqxvsLHVkMsixypHpZwnkQigrE8EYeuMZQKPq7luHwh1AkTASr3SJF0/ -+uztq0vmtn/0+lg7rI0pW+oFAlscmcRMrcOCLaX/TkvgX1JvO5lspIjP6IdaXsYNJ -+14GImtXxQaPgAtWJ48o/AzF8KPez98DfnmpXKBM0K/kK5OGuxHvNCJ3eTDYS6X8I -+Sj6Qf6Z9cjwB2xRFkw== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der -new file mode 100644 -index 0000000000000000000000000000000000000000..6674c48a7ccdf918b248467c985a132cc019cc43 -GIT binary patch -literal 1309 -zcmV+&1>*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ul&C~s*CLpu5b -z0tf&w3`RdZJiQq1TSxeJ`1`tPC44q1#n -zB4Ikf2R#QptSWJb{k~?9`?v9r=A6Y@SGm6wUAVI`=w)GOvpv5zzDqXi7r*5`j2mCI -z2W{&nMa!N?dv0=htZ&CVoB_mTIW9?Z^W&hlq1WC1qJ<1$Dox$Th<}9#=TwZFDSVxfFqAkNy4$=0> -zUA>azHFB{G{%zP~lZ*x5d-WCF(pXMp)|{m#U&=h(dAH -z6ap!#3j#&@Rk!R2LNq+b!Dq1y3p@o$^Gw%`!Ou8vCSLa{zA93cix>}bdx-Znna -zcBbSb!7XJLV(S{B+OR*ST2`copwC=$K_Mwy^h7%=sTr?sv6`Rwb2*^M+W=L~7?xC( -zdYKroHA?SZ4E(4f?PrhwH^~d%8QAV(mU~;oD`6Ac>Iu-LREEUB}=6gXb;s>kZHsVWbHH?1J~r_?R1D>!h;4;Be@#2c2_<95#Kc@V#}x)iz?jEv|W> -z`PT7i3zNSk+=i}kA$dRo5bn5cu|nHrttz`BN#ex@!xsJ3oslZ>@}Q}|M^37`wO=+K -zJW^2-hsj=n3K>D@`ETj22xlmI`ksht4+YF?s#rV5z?&v(!Q1A`w@IlN5>7JzJ7*O8 -z=&|77E`;(a=iShPpcRXJro1qdk+v$`>_O}B%Jta#h<@$-1ZZ`&)YHHxa(etD8!wRr -z42#&%_`$iuJO7oJTOQzKbiB+xPe%fF)!6fIZLj^up4+}JIOlU-TK@Z|9(h{ZX1jWt -zt7i{?Bm5=g?)ldWBg$jPug{-ngz%6Id6X0ScAQvH{69+w|I|aB%hvGb!dP*^dxktQ -zSbB!qARZp;Ygqp1CNSA{(|+f4{{%z?0Xr)6ik>uT@NS_|;Dd)NE2nS4a7dl8bim!*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ul=q}f&OAA`jL -z0tf&w39@EMx|aB7s_f -z^JOy=u`ZcrMG9{?H&S)V<3~%sIblXjGf*k_RzbvNiUDYMFEcg{JI9A|tHT1v;vTxB^ -z?+56}D_*G>dbXDTn2Ae$hg2R?36*cDQ!*iI&!Nwdh%s8l6v374{7i7EW0{3tQKlR; -zJPM&dF7p)UH7w>GT&pai!4;7N+7(z;Lb#~oVCZsM=hotiA%;EFxmx4hYyNP9V9V20 -zZ2IZ&ypmP)vmc%yv@1ka$8%axQ=qLgYZAUM#AVh)*vc;U%$g8>L=lFPQa0q(-EY6J^Cfg8A9Umyz>Xay%$_6w|$%5Bj>?h;c4bX<^P^}S-bakIzSn% -zw=xp8#RT&N`7+-q|5QI3Cx=)1uIb%QA;Y*Chj}Y4oEr~@g-3APvtzSYp9=(<>hg(_A{Tp*{Cc-x~di~+6 -zzXe2OeJA`^WUVS=yy1Y04F{e-6I_PJpfsiq9nX!2o<)P6uNGfL*ekEaEg`>P!HPUi -z7gcY$F<%CmWgyznwjob-zzC`;+kqrn@satUiRF)Y2`D+QNFS4L2;j*Syi0ay7o_-P -z8Ja#No+#IU?(g{hn$)4GhBKv;%hI_gL#g(N -zFP}SDckbc}jmx#=4eUtDP%r+n>T&)=2V%=^*j34Ofv@e14-*V^5xh+Q$|q@uC_O^& -zcLmB;t|S53wbcWqrQx(c+y8H@5&TmU_gMR02xz{R5Ozg11PA#cO0J00V?Pf8V&n;J -z-HfOjv>ZYe@=h)))li=vDGdHwN+h?K7MUZ3CV(tq;$!oSvrKYQNMA{blk=X|HU%W! -z8UCiX4@L8jsdhL3rYjN;(UItQi*(0_^>;?w5Oaq#Z3=KwN8llY=sW1u-4~7po;a^o -z=s%BOtLLc9@%{$00&3+FE5$_k@=nzuDt!cCm_|u{DWYBGj7H-{D(> -TNEhrykb)NZ27EFE-xwT~zU6qK - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem -new file mode 100644 -index 00000000..15521d43 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem -@@ -0,0 +1,30 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIzK6kx/qbJD8CAggA -+MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECD74OAvJ1+LsBIIEyOekZ0qcxeX6hEYZ -+4ONCHu41tmOKSvByGeUBZvenjJQ48AgTGYUXNoYri1ohnbQ3bcqiP0TUDfT4zRcQ -+ZFZLuzAtwV8ZfZcYRCQ7kKxGfkciZJhjeHeuBy3moEbznzg9TEPCVzoOD+k3f6+W -+7/bSycV7jk89CdaWU3FKU/W/RLZarpm99Uzat0Ecc2KOa/TckNTBvD9Ysj2j3D7Y -+UmdmfUGORvwQhJG0mwv7OpkLFbFbYBehWp8/Fk5izJVdJs+77c2qiQvgeend1D41 -+ZUBKtbKCoc3Inp83cSkl2XonncCUxBKLiWHAzZxhPiIHwZXGXHjCOUqbs/sXEogs -+3HT5PHVQjqPGIbl5B8NYetelB1h1Udq4Py1VZqjLhZFH8q2SnjRxC9to4bXaiW9N -+451NL5S8bJrcaun6E5cD74p32F8IOjR2Ojr3ofEFHQFVUFlLPY3gQ+IZs34hQBNR -+QY75ffQDykZPBpLw0hIJkr1LoYfuEMdN0tPRRxYVO1lKAW0xbOAd0UEslFcsyXCY -+oUnQP50nVpG44TI6bNfLj5y07EyMFo6vB/XiDXh9/Az8jIfsPeYOGIVMYFSnourw -+3cjTPFrJnEQd8CHxjLLnB3ZeXIo4l03hZBy+qFOIF2Ezke0fmRtjO+OUVm8lAy2Z -+J1wSTThBlsWX2/JOzh7kiWDipX0fN8sTGeepazxI8nNANX7ALcxwuLrjvPOmTxfX -+ElpwebOvCxonwWR0C1gyZ0feOI8kh0dKwe0xi2fqxCwxWzPxN3EQZ+FtoUdtzPoF -+7QRBFERPefUpO6214t1PgJMWvLjjCsOFy4tnF46nWI/r1XLOQlLP5cwAIXZlnSXz -+ky6YqPm2OniXq5XqvyLOMy1RoLINJY1dhgBXFtC5I1ZQAmGJGmX9IxVjrRky9kKt -+362X98edUUMMmW48L8RcyYOOVLpFewAmU/fr3qoUDjusOtC8O66J/V4vjI3G8Ve9 -+kNLiPxQqbyfHHdbC2Pp6rXZXcl7L5FW/fc2YaZRqCuFpuGXZQ+SKrMXKY8oLa4tL -+Emf4isvdlRQjuveXoebxPsoG9Ww3pz3nl7NQ40cnSxb1zxm/heQmAczPE0faDsOi -+pGAQP7jAefh2XwJ6RWRqzyuA3bDWC7E4ASYODIJ1IAogMMOlg940hlmCXZ/8993C -+aTncCQO10ibemZsWvD/X2+gL3LSgBi2Q6NjHqj4MPAe6yAOA2USc1GzwSW4WEpIg -++ttJpKZFnnnxzCfUU+pTz2ONGV7J5a50BiRLgslPawm0lbYl2BvjbSZJul9oqqy/ -+7FI5Jy83OaHrqyMSRNKZbkPWy58zrhQNaiUaCrLE3C+hzj1k9BXrWm39AQM7olnp -+T0yi7pivXYEff0/d8tClqQAzy0DnKEW58xQODxhFkZm70X0HkUABD3QObHb2DSjG -+PE1XV9pXP/3pci+SFznuvn0p6CN3l+rIXW+pb6O4KW65go0LTo1evIuKTFjVtZyf -+KqbgDrdu/Fd0KJJy7S2cg/i02x7TfcSJE8C3EDyyESpGegE8XAH2NEltO1yt0+/z -+26d06Hr2livL87yVpzW8b4H1SlifZmPhy082InF65W1w4hAmmsWARfPmZUG0LWoG -+6zRPj13ojxpLPr8kyw== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..52ac321438292452b55de644c0893a40c4027c22 -GIT binary patch -literal 2464 -zcmV;R319Xwf(e{3P6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UklbL~GWDau;{ -z0tf&w3zf#JzW08QCe!zTM}0hvt-dVemYKeS*}+4Pf-99hgW*VS{j>!`s}UPPazuLYAkHk0 -zILr@FnOj&vzVzQjdzQ@ -z@fL7i4OAR%Vbflzi~)ImbHci-UwVS`ii)wW05t}MP@MxY_XyGXvBwF$emCEM{6bnE -zjIiac2WhC;wExm$p7_BOPCQoqrLX~RkH0sKgf -z{+J$5=LLmYFxW-hc^u!c&v#XCGp-cx7y#D;4NIB}RnHHdg5^Hjs2Q;2-vacONU$Ks -zzP&6uD{QEbIAv$BCjUjjEEHdnqFXBoPn@=oPJ+A -z^#VPmGiWA9e)b(qaOdBjncsedb(ad60h%yh6}RNM(5+__N6zIi -z1;pBx6==3|7K}+3h3+LT5%#Q9pZpkuhM=9b(BsO14O}Czm{mj@f>BCh%POzPA9Y`! -zTGbQwMc}0js(OTbyt6#!cuov~UVwD(hx*I)1?L{*K7)M^Y0xByZimF?Iy>X<_GHbN -zK0y7(XI7i)#?=#G?1FemmDym2Tr|^v -zni3PE8gQ2=?*-c@ToUQ**DGpxy+PZdCTQOYD=AFUcEj?J(R6KB@~j7S*FH~Tmj+Vg -zdQUVe0G~8Zbc%?(!+NLin*)Z^kg1U_C@tfZ8{;}q(u -z!YmUx`lxB9{EA5#Qm9?)5+^QoYyb_(B<2-F<%FuGC3%KGQmvcwazE-2{8<~J^`;p! -z47S966~#RE#c1T!h;yI$K3@xbY-muv{~ixHEvAxb815HjxZBa(gQS*$&1K|VPBsR-KcYZt!f(K;3q%p -zywGn5YY`%)Ym5NL$0~}W+kJ***=x2yFSR-~DPWiitJMRQ6SU&yWes_?@i?hGiv@v0 -zI3ULah(n98eRi!@La3$E)-gAXF|o`fxkZ$<-8vUKhY+{f9C*cBiYr5drB~9o+>TjG -zBH&aoljO2G7c=C_hnmgm!=k?%d9=74Vxku1kO9d@qgJt#iDp$eD{rUHY5ow6(G`FA -zy0u@cwpRK}r{Uu}a!prlL~)q+`eLb^tKF@MIv1@OVlKKP2-zMy8a-WNLCs+|7<-?y -zN#yo~M({67a7As?eCv;;5OZ@N#2C%W0RH#K2QeIZUV+1|&7?Ft!^(@(5MG!NTogj; -zz$gF}B_r5$ZAAIf!2&`izQ?_Ikh}NVU)5*oGu#i_Gx%uRX?mTw~~UecHos#EO|b>Q-=QkU7!dNr!zGpW}3izmpL=eUvN<1kBEoyEhJDG -zxseHOa2L3neHFTdhTg{?v>6*v-Qal(2g`^>@~SaTq?h|=#-{WBm8c7f{%cP|`F#!^ -z0^4wN2c*qzuvm6&*PB7*>a+nmo6`lKJuZ5qhx3HfK=@!?pa53e*UtB-J#^nU?}V|R -z4jxuxJYr|oBTI8K40q_lp9fi21YNyQ89U2mC}hn40V7{>?y5oHYE@kr5B+?_|8iX1 -zKx4f2m;Ai^a;`f}E`D0dCvY;X)AdECJ?ys3maq>)s|+q^p@El$P6jSU*?|E{0(3kU -zT*dM6I5bV(M_UTcV!9p`8{qHmiLmmj&D^KZ`2!!lDLF!htLmdgU@-}4e6YAPPO;Xn -z#|`L26>OZq+i%xIbJX+Q9-MCUYi$p$A2Sd7GT46x)%`!XyB -zkIJ}wnXT(?6Y4Wu_xDWEU!`NESjXG)FL -z5lZ(XHGDt;V9JHKI~pkm-xQD4+vq>*JQlt?>Zw44J|}=NW1Mxg|G67(agp%7LhgsD -z<&J|Q6&OYL71Vhbj^CT4uxK9Gw@|5SH;Y?ZgBtAV0De@nf9!s%w0Ah|4T2SFJcj&N -zzmGj>@TM@V)ACL -zC1l|@*EN;$KNF!e`N^)s=8|2sC-c>MN5tF;t -zD|Cwzo~FHjCrs$>3Y`9?UM>Nk`y{cV!2r;1E%xqRN}`pAb*&)rs5E235D`gZ+^BlW -zfZYY5R}kAz>JVB;8SCp6^!Jcd3?4D&_P_YlCX>|1{dLi-bJ#BZnd5D_2#(`=)9^hD -e_tA4>9CWHIP~w&LNQU&90UmVz(!H58B4AL -z0tf&w3s-a5SVRdRD=Xeh5N>IJa#WUH18q~G{; -z({tM(Zr=U%4sK~~I`UQ&82?JM+ju4&SaLNfuOqqQBpk^+gv$$LlT}}}F_xnz^+R|? -z00S@v70%z)0WOr80YU_FIK|Bc^nk7^F6wy2tYmYjyB5c^d})@N9Sgs0o-0U>$Tyca -zyMidC;bmhz&9OgIKMD{}zeEym14MoB+SSQaui(T__SoI}<+3A)RbyWSljIuFk~QhS -zGer8|y=u2UB@l`Q$X)X+E2mEj)w?&2^#gf!31;am#V6^;g?V@lDU3MjAA;0ZpIrS>Y96F4rpt -zUMBkoI|ewF1!ugd4R)Su&I&=0$Q{VX|1=8bK!D?}Xb -zhn_Dl=X6fh;+3P=8Os}H8c1QzOYAtlp(j`w^|}&Bhha7 -z*F2{1R>F}N_r}Fodl(WKzcE#1hq>b{855s*$03XOy&;t?t$mZNBs`GlHBtv; -zlph3dH3G1>C(pV`=YlO4c8-OxFErX<>I8ZfK*f2%b8iG{S%;e>@Q;t?k&@*v^9kt# -zf1N^yO6YM|`uo4y87*Mj*pelH^SMAf4Y2_s%F7;`;GVJ?{POziy4Z172NTrlY2_OR -zLsK8J$TU)c^M3HNoC`INjMincOJEmVJ}+H>2zI7BUl=D&>f%G?4mv@iX>F-6aDd2{ -zy{Hco#fV9ku-x}dpWh^=AY=6|p=M3*z+S=~#aas12HbhC{#v#xm6fOYmdL9agsfe} -zV{4lXghf64YsP8S1(0mvkuLly+Imr}Qxef}Rfy`nirD4vgdx;y;Rb;r5L37?n|L+U -zD6JZBgpOl8$-Enu8HaY3I=iMM?6PrRUIywF0NosR?dHb;`fm(fzvV06Di&RF5R4t;H6JqBDG!Tg{S-spvzB-|oyp-?&3P?C;x~7q~6qI?3Hl_zP`0 -zR!h`Su|rLR6v=1jTg7}{_iO9Q3Gz;O|=FLYon -z)ED3W&ItYVOs??3Ni6X3zT*U-=r0}5Jw2`%P!SAjdrB{@Jc4b7bR}~2^eO;m!5L4X -zVYnb_98(iY;v3Lfh?_1qp);gdT2j3OCyWq -z720-moX6CbXbDNB8y_%RbdT<@J`8?4QoO8FOCiVv4Z}?L**U -zLIt%rg3ZK9B1kk4iUoJZA-PQW5Y%}BiVt$>uW-Zq=7YXK83%@*%fh*h0o|7>a^eouG0ieqULf(}43SvZCDM@Jh~{Zq2u`WS7FcdM)wA-=g|l=K{^()0 -zc_oif17?d=ni@lJuGFw9p)h#9lzp;VV@B}*%#@`l=MS0{p>o+h`9xHa+UFh_f%HNm -z-VbQ>ZMl1$CNE7e#QqM_#piVJC3oE1Uz2@Lt^kF}3@TmYUSMt{QuV4_kr_eKUL2#p -zGN?vnz=kNraDipK)mN`bkZNxqh74$EaPDsPZ3HI>Go0LXsW0A$X>b8e``5Ltm|kF$ -z_&>x4jd8e#X0FVK5s053wS5F)nFP;pDlrc?U~=Ve`E61K@cTX|!ZCrP*nybmk|Em5 -zWt8{iOCGsiT%pscYr1I=m-_HFeWbakzulj)4Fz%OF$Lkrdv=h^;eVBas%1Jl=fL4p -zw~y(n3aK5`i0iHQ&PI55zP7XkRJ>(F<(CBMU8ZbHtPEOaQ)w0py-{SfUY_N=;g`)o -z$RBu(Fxw<|Y5&25C~a6rMBF$#mGA44lJklb-7s$ZBbX-*l(`sljc)wJZ8ACqGQu2kZ9?G)PB0mr}($0n9#g^FLEr3SJtPz2}F^zukoRQ?KEqe5iinS5!Pe#TFJHY~KW83EI7~X|I1s -zo2GHp-K+QD9$0z|Y`5skMq=v|NFF&yoo-(d8Io^2PBt;UAIEyGJ(maFtP_WR5Va4c -zY}YJ#RCj0{-sk|14=?kiPJ{^63u(!(jYjvI0x -eeJBLQnG4K@p@xW=*%a(SGm`(}4;`;~T>;)MrLfTe - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem -new file mode 100644 -index 00000000..c3c0635a ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem -@@ -0,0 +1,54 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI/PTNX5reUuICAggA -+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECNepsPdfwKiMBIIJSHRy7kOzfWTH -+O9Lp0TcHFXh2dkB3d9v8HDTquWY5brLGRVquXKEJo7DOK3MY/0Kaq3/s2hmwsAtG -+XzsC7nKuYfeAaL/vC4065g8LWxXoCczkwLyJ8wl+i5lB9UYZO7UQ17ZQOvQquvYA -+KKqe+IxFBJP7QLpI+iSYh6RGoqltU2CVW6rnVpA6mB1J5fR/w913bfkq/F8eLD3k -+HIiUvKf71zu9YZNX1eMo4kCQJh5gV83D0oXo18RRe7uzcBq9ZVs90oKSuMKArqKp -++yiawCBmzUU8NVelWfpfdTAxRDgIj+5EzLd/Y94MHeie0GCPk8V4uDuoqnT8z9mG -+IQPRe1x5IYpK+/6hcvEj3SSJlW7WVOkKxQfaTTxNVhXaSnfCwIUfHO+gYvGjN0HX -+6P9gF9+LNlnHRA0dCdHpGFlvw/N5TZ/rmFmzqxLGmuLfocbVmYG5t2lZtBb7oEnl -+D3Yx7tk2GtKg5uWXCLN1tGf22syzyLsNuHoUFLce8QzIgW8MJbeTu29vBTV7YJRY -+akmJDkl1SX8GmkbemxN7jSRGQD0c8vHjnGdVevoc4z011gL+bEhzJu+dGlbpzLB2 -+VGmhptvc0iTHFHVzeYJhvRfdG60lB7P1/XbTUVmZ5bPsrW+FgGNr0Vs670csFXIS -+khTIC15Ey3kvyuB9BNoYE2l/kKyd1FeHqS+ISHriG2KGHO44Bak62Ol10DBv1/ks -+YV0/3AQes39hoxGSqrTXxAoJDa3kttRz4/7lyrTCjRZoB66FD/q+hV93rzBBwPCU -+PWva8LxcsYmF3VAIIudxfW68CuV8oq8p8+pJ1JjdZ8uyr8j+YuuX60o0vHRQAr6v -+n4/zph9ssbThv22pN64MbGkZGpfC1r/8SXqMdmEu8mjvwLiC+S6+CDdUkZB1jPYa -+JX6oEcextSvIivTlMC3AAff1ZZLDjotlchu/Ky3/ugu9oNC6zhzPWug69aUctumO -+ahXbhAOjswkTjBp0TPvsIIylTNDwWNEfB9q16Tfj3I0d3VKCZOaJM7iDll/rM8M/ -+AWBJ0L4dDuhvsM2TjMzJ8p4JXaxfX9OjgR1+cuRe2YzQPUDBeOt+mz2SCjgOCW6j -+r1k76ilGmUD1JQby8T8MScSp9H2zi3RIuaDVJwHMPu5KooUR8eF7w4cTqsS0FhdI -+n91M+o0TDcOzOjmDj0vH2tP2HPMlqMOHUut+Tm0J9flTtxQoAlftPq3bXhFjT7Wp -+ry8JPZuzQDUMdQvi2+J4yXnc0+ElWAdSkaqpEpkOekgY0lTj3W/+GuxPPPqAxLF5 -+GaZ5fCLFJF/ioQ55J3cnChfZRXrlQw08zsQiLdCyFq4Tnbx6Hmgt48jKhPddvxhu -+b/StlvaRV+UaMdlnl3Mr3DwWjwIVgOEe8/c6T0TA7rhlh2muoO4dT1t42stGQZAy -+rB5PoKJwLtzoyQKdk+LCvgrrdLmIQmK0AB14OhEAoWwnOyz9XZ7QM7Zi2j/msZXj -+ipmzwdxn2+Zfl4g83dn3pXy0+X8MugcXLUfgRtNEk6ZAk8P1PaQZtiOT2DS+Khuj -+WvnalHKoNYSeOfq1MJJkZ5kG6wriJewXtyRZtyXolTW0WbKNpcs/EtHbPxCceONe -+CcYPPXnnQQ4Fwl8jNxUUs9vO2uLXOs4yKPkwgX7KBmGIlYLBjM1isNhi88fVXBvd -+RTLFblxlnRHhjQmBQaLdkWwR7hN3TwdcxtobaRw7w7A3Pg76ktY+Y1jAuqu3HqTi -+q+k7dicH29LFKs/ry5dAFJPgpG9EHPVemS/PIMKHp0wRLlHmP5+LvdRgSNKLUoyy -+wlz+aZJXKobk5MIcLRZRAm7KF/hHfwldLMybrzobwwteTl8MtvQYpHc1cqAFtqEd -+V49YwFCX0SNQLOcdJZyRoltcftiINsnoTzOKDN4y4NaHpU69lO8AA9TUx1UyH83o -+jGUGAtAHQwUwmwygr+NRzq+1OHGA1JKLLfdwGKct2SY2smicjnOOgjF/x0wiSwyo -+HjuARsdR0pc9ancPQ0KnD/6eqc2AcHXiCFi/xu7rCTwsmO5crSXRL1U/5CF8K29g -+olCXV8cS6X7gqyARQMHXWN0Qx4vN6TqT7vuzLaaiC8cYiiKvDo63GPyT6qRZ5uY4 -+u05ZLr18xzRM4hjUbxZaDyefOkL1DE9CO3rJDGX6njSLh3IxSNQVXNh6lu0Tx8CC -+HA1S3a8eR9Da/tBD8PLwaQ0xvpHHQWsdX58Nb3AFu+W+ee4NFq0ZrPqlhLpSOGRn -+bW+U25YFdIMsO41VhafsFKSd+/l7VwJqOSZzMgxLEr3p9ASFBbuzQeDVWr0kMYum -++Wf6ISkwu/s7hpnMibSACV3x1Fawwie8vH8zH6rg1aw2AITfb5RuIdA3h0uX7r/o -+6MTUEgy21T14z/KPDfhJ5jP6ZNuVzpQJGgQfAsJzPKVZg2DramRvgSvdLw+/LB7J -+FedNAXSgdeSJyLiwy9glD+1dWVj7gc0cj+HBQzAwSMdwoX5E7Rk7UX0O0S7y1+Q6 -+w+Gd8yxl4NDaM/5PH9TSKC5oroPot4qH+oTUw/y32Kl5TXfJvWHaKDcluIQyB+4Z -+ABvuEaxz3NR3yI5Xe+KDtprRtfI9IK8p0tFVYpZfFUULzjK+JGKi8g1CcDnqIM+S -+1HdSJP/qsMMlb1iL619nXhWqO/hcVZvIffhYzKZJFAurqcEkc393zxnxkiA1ZaY4 -+1sCBLnQWsmLeSKQ3rmzr4iPlG34Is5GsuV57s6w6NvmU11BTFh91psdpJ0iQLJm0 -+jrUvZCTShcaV+lAGkqvnx5AIbPdZYSec6/J7J0OpmSypEfXITXO0Ihr8c7LMzPmL -+AIHef/8cqJqJnM0pIZcptrdya3OTItfjZbOJ39Zkm+Vs0h6rpkpn5sfTBPONYti+ -+JnB9yq6lWqo2wW4p9pyE5XXWcABMeq0uPoGXrZPY9It/aPB9RUCxID020Ehz7J1B -+Y4yZjEx3Vii+LAg+AykB/0FL1Xe4SIn1/ShmEzan2wPxt3oNdCF5+6t/hgU1z+zE -+hwpGnZfL8aMTSk4U2q1SJs3MQk9BlTmbKsOvajN+Cj8ZLa0X2oHjEV4o5Qc4Ggs5 -+EZ/BJxGBwOFWkN41XE2DUW5E4Kq3AYShVAqmq24KIh1rOxrXebzEdn9+Jt+VWz4s -+WqDsuRKobaoDpFFCQBLvQA== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der -new file mode 100644 -index 0000000000000000000000000000000000000000..5dec3c8b3c5da6dc9cc4009dce20a08b77d6898c -GIT binary patch -literal 2464 -zcmV;R319Xwf(e{3P6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UmJ`u9=H99wS! -z0tf&w3My>{W-d$o+TFUy)b3zyHOu!WJ9_*et!Q-f`# -zV~M7%bR4|Gp+SUQENPpvC)683y*njoZH809Mm>pTPr8+k{I+c~C$u_#k@+Zi(fM-? -z18a0^mJfWK;VU&Mo%YDB+H1Gb)I}%m_a#BM4d7)>OVAPq)vN+pB4P02{WXFl0-si@ -z!g^9qw;Ko_UD((nUzKH2sCtV(Z5@*str=tCPpJ$H7O_2=eE7d+R1bj3SA|!mk -zW)c&)IO^1cLemc-?v<@FJmU-Nn11UOvL=%#&vnQ?Ol+s#5I=%x06i?gWF>G)Na;Gj -zF@n~m@l@)GEbw|Q@Cqc_0>BXF&^J~TfKjY75SmVF7*cKkE+~(wMnkiLXo>(iqRyYd -zVxxP>zo5y~I^1@(UM6!Uci`4%n2A-QHzJ`eIkvVzqECcDf{I-?6$wz$xO%gMVH?3? -zVI<1{;bOgK%bDQ2-dy;&ebisdL38boEp#(kYXK*`+$gh32*ofYAGH)D2eboy;gCYQ -zR6wZlT;(WRX+NxLhDOxsoJ0M!tI(kZB5fNj$sMm`rrJ2!L17z~D?|5!s~)^C;4zMH -zb~})G|IfaaoZDu_Ch; -zM-h9D$c0vsw{wmX(gT6S>fy-op3zc*QEw3s!nWFST?zD^XnMyD9Xns5ts7tIq8#$= -zHCy&i0tmt$+wuq;Q&Fa-zj1-UYX$$?KvJfgMcE{cf0bQ}%FXa1YCP}3OF)g9jfM*c -zaG_kNghpSTYm|GIEixk#}GdMx8BlPLBB*PZa#%E9U1ykj2HJh -zLZ90RYvP^}j`1XC0N<7Omc6LZvb{@q*!pe2LU^fro)ooYt+zcutSj4FzQQt|o;Vy3 -zK_#L^2pCRElbXkc>ENH?wlE=_pFqGp|AU@@-?nkHAoNiA|N7!rsLM=?z~EvdG8nON -zP|vF{UHUJg^mysQ)iYBR`pjKYAdzNG=>>=p@v7QJuZd&d3i}|xyUr1;Gm~z9*1TD> -z!Pnv8<>lr0x(8b=-JS|Tq?b7~=ZM){44&hM`5?z2^m?ri?HHx`2sNRtYpuY5lPzN> -z(>eWl&O#%dNMBmJ25wS4{hQf9OO3B%+lVX4qH3< -z(MjyTxZ*y`jNfSSphT2A1U?mru+69r#!rS>WZU{~=E~@_d4&duGTY=-t3m73FLdv< -zGX73%ZDNRnfZ)6jiJBqLtP*^FL~m9sr2vI4;L~>o)V$wUn?^EH)x3=jPoXj7UjIKpK>>RyuP$ttA%8u*rA#$EpT% -zs;MlhqdnnNUB`!Ekm3hbd^CxVbuVZggXWxxoZbf65P$`U3Z-osNFYhNNk~P^8<*|_ -zcuL%0PvO#z^Ci*K+-7{Xf^N&+S~j=9HI&8On*D58b2?pgbxS!o9Z^P-&*dd_+hJ&; -zz(pxf7;#Z9`V+5=zmmd|L2%BCTiI+m0ar5}qcKV0f1~?+9jE{AJ6Y-RNzSRbup05P -zyKR$f;Q%wlI~0K6##3HFUjnaJQw{^hoCYes=uuur7qLW5X;1u*t?fq`?OcE5%lhQv -zm`Q9zORjx1X}~c}ee4=U7rIL;9?Qhh-I!~~YTs^}bDJ)5m0rm*!>WfrbUOpyyGo;g -z+%b&6f8{!|a;sJwgOL}!1dXp|r+#r21kcX_FI1f*Pb7qMK7|sSKITo+tlP+BvoUAm -z{C?Z$T9%sr2o2HkA0$O-(Wb}cats95DH3NlV;`rDHu+S3$rF5JVjgJ8Yl1Q{$@9p_ -zBI08vb}VMv&Y9?cbF=?l!8?Ct(3a2SJu8zbMl_u&&PX#CH?f5%NvH^3iha`=OuQ#O -z#W^rlje@1;4bL>w#PaViN-$~^YxQ3MMVBgSo`?l>-uDViOV!AQdVyx~;Zwo~;Z(1L* -zEo5cIIIjq(aov9Mw!e|09IZeLGVkwT{*p+v+63o!3n0s${VV;?U9z7thk@@;gVzoay}tBQfQ6I6#fn=)bdT`bT}sqTFPY3EEj1M%5_7U+EPOt43hQHojXPP-%i -zl{-$?OCY=JQ~F(8uXt>748}t)K{tgujt`$u2IcgGK+szN`dGJva7Y&S>Hxe9HeDJz -zh0QC`|Lg0(cJl15Qur44VjkZ`efjQx1&TPhiUZiymZAhj=qx45z*Ajgio?8&LNQU&90Uk%_7`Zhv -z&G3*KQCUaP^_nbiXRyXwF1{7J$|(46Bi6`qs-HBYP%%u9TLjNk0gh2%I5HKdOTd@SNa`h?bkdAhW>elC+_8_&6lr6hv>hHY -zYQR~q&90LS2>-LDdK$YG!*C}*I_p` -zj)zkp6x`;*izL>$Rl}63A}nb|9)#8;kc|nL2gJ30lr$lc$=~ -z=sWHrJ*vk!s6(~?ZLf5pFdH^5b%Cz9kVTcx_!Q_5H -z+k%ioc0h`U!jAvP(;m#7@*Ln15h_nD4`}OY`&?9)7gBtYMrq#NKAI5_-`$6X^~sI4 -z?8fGUrqK#+*CwsT%d6hVLXmn2;W#^p?siq_09kw}9ZkH_FdG}33ulA~9JDp9#Av%k -zopVFS&2Uwd4{ab9Mfjav!s6tnq|mGK*6uvP@A^to3NV0OXAuokUT+%z|#}4K#-@n^tbC^Ap3gK5fg+2zQBe -z8ijA~0(`ilp{j$_j2Kohx9>fx{T(ENq9p`^8p0MEY(T;oKZtY7B(br8a#IP+^+-fr -zIgW%;pju#r!!*h6ZA+9*DA&dcYq^6A5S&c}53q;|LJD(|acETCOmADF)@_2QO{ADM -z6A5<2v*7BC-6<{V=ax|LfF3O>Ht$NS5`%^oxxvjRzA&AS|2F!|(tNfc%ZK;W;AMRY -z%j@BB%m#5Gt4ci?x?Q@|)(wW=rfZcrTu$ttWBX1M1CQeWrJ=|H?YCI(M4u9-#DxpG -zPU-#&oXaBGXTK?-zL<)P>p3Q2VLHms%r5b5d2G1=9b(caZ|rY5%(d?}HAy6zO*w9# -zm``)~ak5BOV@PP5$z&xN)=U{HOk!5Sr-S*>w5yIMmwy|-laIXVEnw=!`kuAkJzoK)ZN0u(?^*=NsQQ82qxz-$}7m!|}y0)u0vZIjeGCy*jQ7Fo#S6iSAKAG|Q -zycuF}N^k480&ol97cEo$?*hVgJ}KP_d1dgNv<)f{WF^@^`CXeP3i4BVL`#<{?J^I~ -zXj*okL~~->t++P6v^Xe2>rYkbCN}6=Sud! -z#hHAWo+93u@*>{~5b){U_(3XoT#hjswYMH9P@@*-&~Y^0D&-+quN~E{>3(G9meErf -z!B)fDxX!sVACJBHE|qCM+oj8Nt%!6*2MlQ+T3j~O3#wU@7@yz$q@@z|KcTZy{JM|0#r#{h&E2y||jJHB$&6W!7V?lIE3{C4um^ -zLD%VqGQroR#cBJ>Fl}7z*?-_9F%CjK=Oy7W~{Q8%BHexLYW(j7D4G@b|tqKrh@U|pAv@{s~r|7 -z@rFLBKMsW1Iy7`eMxXg8TH(meOn`iU&(6{Aloau}E;Im!l?r<)XhqZqk4L9ZRS}l? -z9zWV!N4JCVzRnZq#|jS*?X4kHDH(m2-Rh&S0q*l*fx)}KkYW$7 -zK13nR^$5}M_)bgmrZ(7BLcJZ)(Mhx}!N3zSjhPS6)CSM|z)ud%kMU8}F=dJ6mHi`m -z&}{8LhaLY!T4X3Y^JfC5hExt@h+N!YG31jJ?3PMlMO)nkU#r~l_f -zHsx_XEq1uA9O_(L0CG4GRV($yTKFPOqlrG&e$0EsB1>$4fq^9^5m!7hksbCBFvbax -zzNH9pQ225`<0aT30qBOyD!q=ohSLyvqjcz5Tr~>||K>Ei?L3-?|7fpTmsO+1c?`^>&m2n{b%DWY9%DE#|2Tl0EG(RFvPc -e{6Tu9c+Zhuq%Ff|0yiDFj-7}y3{5}ZgZP}Xt*&4I - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem -new file mode 100644 -index 00000000..194a8952 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem -@@ -0,0 +1,54 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIoWPVdNPvfTECAggA -+MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECLYc1CA1Gf4IBIIJSG4dPOE6vprB -+zPJLrO1hdLj3za2tdK/QlDbqMScFUC2mXq5cJ9rwwa7AyKtL0U4Q1O07Vw5GB92L -+FVbY4hIRC0XtutCwhqlr0kUaIqH/IjyY6jy62Keu5KYYvkjPMFBkYBQD1UA/BT48 -++yIPH/RSXbpKU6z1KaW9FiEtPoXfw7kxyXHIglAEQtPaN+aeEvpuDiRAN38SU8Ci -+j+Ub7spft4D7X5oARaAgQCNuhO7Lr9FD4OuxhurWoiFb7NJPuwTr35PK6wWYfjwC -+kpd4iRCAhi4cl1z0ZofSmTyS21lz7uc3xJy6ztVMqOo52mIr3lFHatpC75/c0L3d -+Cwcz0UNvkMOR1u1Z5iZhoqsFaysrKeddM/6iBWP2osuz7lTZ7z95hgksBF1wnPSh -+5goSu7ZVbYnsn3WZGVQyDKbCcz2BzPj/RLzSYwjrr48h0ROj1acvZTdfFVioiiKg -+t0w97W5h6DgnDZO0/yiN5Q/GLD+Laizawu2HD8e8dlkaMCD3rEl4RL7iigh4Co+F -+8Raw+UPma/rdHX1mZttnk/bkOrpNVcrEL+ZxmQFn5it0Vn+U75sNHem3c4A+Hhzj -+JaQtCPwChYTb8AZmNw/vFrKkUtNpMILHB/1sBHS7TIo0sEXJwWDEtrPLJDLvhojv -+JIIpGQmoCqDHZpsYLGqI/kHtWRl3jAXGmVlqkt+QgjbkDxxr7kSBAcqEouuFcKKa -+m2My3XxGMJrOP8iWuWpZx1p77oQcpIoIvnF06eq66x1H1oJaqYTgn4W/WBd7qScv -+ILCTh3ceWYCh5Co/S+MonwqM2Ppc7JWIVinnrpduFWbuvvB/sugrjEoSAFNh+cqT -+jTxM8+1tAVv7xyuOdFbR3TgiUeEfsK6E1+1Y6YKsqtiXpYN9PMpaLg+Gbw4+5esx -+z4Mn2JSsYSejohhSZikrUMHE3Z8RgxMn2WkQ3hMNjaFetD45xUTla2v5yRgYd7yr -+AQK7Chej4wtLx6yi5sTaiebxrrAunL4jBe2JpBeYg3J2dJjjPDr9Ym+YSSoc3s90 -++yplLoPxszvMfFaEAKrBI2lm3kemij7chtzSNAnkW/x02yxKcgwriNGHppojUQR6 -+j4Bf9kvfZX1opyA/JSysGRDj99FHop4E4lHriwFNWMfoYj63BKluQFfmsCOptokf -+9W/nAw+XTSFu9ojlXTSPtlyn3jPsSflYtO3UjMJsm9DHuRA/ZLpQ7Q11pOvI0hqj -+XfLuQ4dhDTHpFE7Lfla4tOwz/lAOSqeuqUfYKqa9heH/LlpUBbsAQM+XSLqh2cVE -+M5FXvRTcqdU9yJlMVo5+Asq5iK1cb18e3BSgAaHloJ3UaxiOaR8Ad26ryZsjAQXk -+vKlqGQ2nvYmn7i9z7hYcVZRbXnDYsyA7tFHSYLTDUlOjtC4YjdmnAjRojezRHUoz -+l1bceyBUGSKASMF08fHdMu3U1ffvze/GYr+uj5XyR4gZn1w2lkVYCC0GWAYuwdD/ -+4xVR1qxDb1trdui+FNS/ET6FzlMtHHEO9f/veEPV8hsIgAouUVncN0bW0GKS0Fsp -+N72r3bNHfv8tE9W5HPF+/ATh6zD0InHqOyX2wc51wFWnSWdC00DluZl5KS5wPi3S -+MsLsRK6STboeOXgr8MhsmASGX1yUBWEs/G6jLAUDexM3FCQgYWCgCdPnMKvtesXn -+3qOhdi6On1BPqvATyXndyQ4D2SLYv1mJ6CLTPO7PTyuCWobL9Is+S+D923+CpuI+ -+1POOKOLgex8sflOa4bSkpWo36JvQOOp6dXYJ+5IUlA1MZphgtKzInz+WYar2hdHR -+o6fuGzdne79XZrKSveK9L0r3H3h4n5JEZ9A6cd8bDAiYQp6w5yl7vXU7P0NL9HwR -+XiSGHaoHlRIOr4wbIqNTnX681hq62S8dPtajukz8QOhgOox/gLULgTpSDMXhTN1q -+NV/Bft6+lU9+PC0Dye3YesJWykuQFt2hM3Og4eWB9Ha/ACsGmzbgTAMtNLCD0Mud -+m2DYCO/GpUDL6dDHJDzB2qBao5zSq+zoeYpP7d9Qs4amVxFwenLPf90BI0IV+D8N -+0kh6rh9e1j/rmPv1qKzj2WvTqdBWmqOZvU5TBwAozeRI58JoSRiQLs1DfZ9o6V2H -+bRvmVxdPHTryevrFqL8jEMypBNgB+A9x5VzhnD3y1z7rxKr4+7WW3Yu60EP5irVa -+EjoKBE2hoGCuFfLGJn4xkpOzjN12SVGzL8NfXRtbkC8IBsOr13njFLNVLwzy7EwA -+LFM9QN04KV6Z9AEX8d92NqT7w/9Su2ZgFe5aPTlPW/23uwL4o41U+FFrZU53/Pyu -+e3vNy1AAh4INqP0urpy9Gnp4LP/u/AwrbdzmvJt8yjnKk03AaKNjNgFuprdplvqY -+9TUFlr7sCf/TQ4w3BTZYI1VQNrduur5FwZblI9Q6obGunMPy3IYGeV6CcCchYkXp -+u9vbe4hFFrsPlpOz5DHZT/5gI0g1ZYFJq+H73Ku78syDrWHiTGYJinj1s+Aceiak -+J0sId66GMtunyojveJOUwfxliIKXUn37TqH8HLjEYk09Uy1yXBZVLaMhXIShGMs2 -+aSL3nXv2KmGDGSFTBto1R69DPsHsb/oVDLUwgF5xyZFum2UE+D17mCK1RMczsWFz -++RIHc5SYwipdn1jBfJa/r3Gg7l7bM6/Fy2oAdrhcdB2oPV9cXF/Afyfu1yyXZfVu -+Z6MWhorqZGvJ7HY+G5JFxumubE3u2x1EkrqAaFIjDc7NQQwHKxGyMTKg9I04WQew -+8wcbSuvCcI4NVt9HMy0fR5+3QkSeZnoKI6CwqRqLEsexNO6N6l3V7dFgDUOFqe1b -+Yl/81bS6b072jskkIsbFXTn76S95G3UYrEiYdn22+6KPLyOWQLczmVvztdVh6sOw -+WRoiKYXdW2UnO2AYOXCQyUxUjW06m6BJ8F0NLJ3HVuJazKouF7iZsLpHBzI8luNz -+VF4t0NLX60wv5G0AZLivVmVAadB4JIyT17ufud6sH0oSyVRid42zfBNzfn7L9rIv -+vmjfhI7SeoT2MsE7l/QtQy9hJFSh+DpdWw2taJmxP210qXA8tgGgLjDqHJ+k0wvE -+laqHGOzY4J/y4OPsGN2fiW8nRCoravNz26Ff9PZ0S35WJ46qxcMH3pIfxvIdtXZS -+HESFHzL1ejv9Y4y0O56l+w== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der -new file mode 100644 -index 0000000000000000000000000000000000000000..efd8b5c98f282ee9beb9b90e6e0a7d2691da2cbc -GIT binary patch -literal 2461 -zcmV;O31apzf(e;0O9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Uk-v=6{XhaepS -z0tf&w3qza|(a(0bR?ZJnY} -zN6F@+l55rJg-#c$rPi -z=yIaX<5XFGv!|JOrBl5rc`BgKoIp~j5=JqvEyv{PEt;0M5@Nqf&FO5|)Q8S8HMWv9 -zhl~IlZsZABy#lHnHYXqr+Q>>KZs<3J81;!Lq)Rt0r1soU1|8L}B2p-vS@olXX79F% -z9~&GBNZGiiCWHjT){6D340&%VByy=N#5;V==>Zrp!I?uW8vid8t`h*$cXJ05`hRbF -zF1Ir?E2?Flf&KMZne5M+gA4Vqxpe0q>x0?Fn4@sf(T1sbZlnOgT+G -ze>9vpEXD(hQbFAN-*~#;&h&|OHrH!t%%*&}X9rNW6Llsni!?nj8W+A$%V4JQ<2D31 -z&wJ`cVEO)VkFH$yU^X4ZaB|qWxVCEn{jL8`z!;`;)o_;xm%`n96hV0sw4X|I%!}%H -z)k^k7JFSy2anEqQ@E*3Y-YP05<`{w42Zke&PF~=FfElbCF-g5dR_rm#g=s5940s__ -zZaStFnrA=Vg4PtMNHe72&e4%2-bZ7%8FTlGkl&A{X!zd$scMbBdDD@4kO`Yn`lNBf -zgVHrdNW5b0Jg-u!sTdb5Nn;0kFkLs$^beC6Xf&5I$f31zU0;Xx!OcO%`#r@|I;fsH -z5g$tY$%?MCE4PU)WyIXw17{|q{6n?IL6F1xa|g;h3x5Xj3JFK}8zMu)J7a?tRTjEx -z!YZxfvU8}jZyI_yEZD;Fdhj^fz>Iq}n4Gi%vpZ+7X3pVBJN9P&kjH^st6Z<)_lQqKv?7)fEOYk{)$f!w -zl48Yz2+-nCbk{MLrH3|`s3-e1z}t&|ay<~_0dQs^{OG?j?}DB%6A -z_ICIKn)qHn@*(szTgUOIH9Y1U;*j#hyYx|cxJW(~JlW-6jEVQGI3Ydt7Ue4RB5cl+ -zV$BDSESQm|B~I_kCk#VB*o|9##M1{```2@nq)q)zU!Wi-f2a&r5Be<}GSJi}JiD*xv -zlRUpuq6z6!2eI8`^J55?n^n=(C=7s@!mCw7JQLNjY<1(L5N!azdQ>IyKkK~dal9EY9!)i?tCj^f -zmW$O%DN3#4om0=}NLSt3Ql%*``;$d?_ZpLsAwK4pY|n{h(Zt4-tb9>$|2#+9hbEsLbt+ -zyqH1j9Ud4d84i(RK&tzIrGW`#Zsmhq7+vGF(H@u{BWGvrmo>J@C+=7i)a@_E?(Ld? -zhIHnb9tJAGXPTeUEG!jQ#z!v-60>)zL|uhYrjba9?Db66Q^6(r+`WJRXVcq5?)!V` -z8C%^=%FGnvW%e@jm$-Fci -zIv$|XW!2!FDv$nscT94!1WJezs?Qjhg6)8BF6;`2*P>%1^X1zvR1E#CDz|if*5deP -z_G;wu2;-m2i7cCZEe58Y)Km1Rc&1E+P<{b|WT^R$}h+0KASd$24A+c#qi?7VN -z8~(N+s5u$NoPnpyHJ^WweCFHZw}~2r^_V`VcWqQDq%y%AWZ}i*+HKmmjb!$24A6(K -zfIkcL>&~~2t2LJbl!5N6JjS)!g?nz%F?U2%9W>o6#NWs+Ew||o$=UL5QL|vQaqlUTi -zn||nh%w6Wn_FQtNUAJ#4x&qzkS?@V4vKhBFmeJVZ`x^g7ehw>OJ`K51=RGHYa$%XC0u~@mo{@ -zQnu8wE9=)p$6pLq>;0yIarD;!8OnLCw`XbG>G$6J=uo+1YDT}DMTA^5k(lGsj8Gd$ -z7Td{+9a^@rosAa;-T7+9{MQz6D&01tH+zY$;!U$jyvKb+aC@K+)fyoiLH4~m0Dhbk -z;!xrEU)vs;b9g~qTI@kgV8+8+t*9$cpCFh({szEZ@s|lh9J61Pe50P~Exc5TejXKu -zHvn8$ZhIj|o20Fic5J*cm(BE1_g9(>aF^@*(dB}huc`CTnIpmK!&{K7z -z2@ni;9W;wYsC_0bVc0@T9a9;xqq_dVgBT!ODqO{#O&tJ -z=nMX79Fd(BNtD_anv21Q_ERM3$n}H0{GfregQRsub=|oc34^1E1-Qk+Bua}}9)_M$ -zAP1{i;0_sVwG|t~L25LK?UfI-q+ubx*MXPCTHN`NP$&<^;0;!UgRcWsVKpZHa~tv9 -bPsEJav4jTW#X4ZBiEWB47NnWeA!0cUWns1? - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem -new file mode 100644 -index 00000000..16b13a45 ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem -@@ -0,0 +1,54 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIJmTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIVI1x10/M7+ACAggA -+MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECPtdOOUMWuSbBIIJSAksArEUkFkTphQT -+0c8tc3j45tJKHXFXhtt4V4pX26Ydh4cjenAveKvrawKhmpSW7O0n6A81nwwOxUH5 -+VaPDrA20Uz61+S5BbC8bDa7U6IhA2g6nr5qERb9rCl4eUvm3RWyzEqbLeiUER1Rw -+XrxiMva7wIZhZJNMdq5Bb9yhI1XMLlowf2WvNJGCgGC4aKbr1hp3AqJ3O79iRckF -+XP0fyLt5u8CSU/1NWGAUkQbnqAXYpE0gN7tzDLbBcAyRet7njaplj0XaZlOdOofT -+JQ8db7bavSGe7PeGjC2EZUNElgbHUbb2P31rNN76YR6JqN9cvj8gCGV1DETjEbgY -+theTtptT7/f7UWzR2xrts1iieYRy0luPo5xPOa4UDvbYcHtUVgSkrblw4A0Id9R2 -+8dRN8pW/7GPeaV6eqgUYVrqx76zVu8l7QtiZuA05tH2eVrTsMe9DnsvFV/kZIVpb -+8fnkokxp5OZOIIsUxIQdA4fxHA5k3Dw6/0bXVgYHXJTpdIlA8yHFgAkOFkhi9Wl0 -++d02COhFQUMB8vqsHc61aFAvKTMwMIs8/ui34rTSBnBLsmMQlNxgNzc14Dz3fGcj -+LU1lHosX+l9M+vEtiMD+lp3szj7b2+o1apc41L38CWo8XXVLyZ2lmQSHXz+PRWSl -+afjR1chBzlulvELqIMZkjsBazv4jHJOD7Alwcg9pb/i0QqFTbZzDyRmHW2Vfjn7f -+ZzfXZvnW0KLjH4BvRiSpkum/9PbXxQnxryMC36MHmEFUS2vwi5UUjSM9Ak1sdeUH -+b3D00kcERPREb8Pru9+aqK7fBmV+QTAhG5UqJ1E+Zx1YZp5791At4oC7udTud7eE -+n/1zKs1JWh/u8QZkLzHBkBZDIaRSCN6E/zSDmx4VjwCRv08fJK1ChkJJKs6mtCSA -+mQ5noc1kqy8Osaj56FpOxV6Jgr6vpEO7vYpBnQ0DGU5lkE1ij3puyaODR0CMgWXO -+DdoYWW1F53Sewu9MSpSf0/AZZZ4S2lQGhsH7Kfco/hXKV+/9Sj/8Mw82MDVojPvT -+vCc23ORArMRzWFItdDR0jkFVj3sV3csjvjG7/uuRtnapHqqhwiNbfRYoW8cL0y3O -+NO5179OE8Xmo0hHKYaDs3Nr+3dnFwQJ9HEJnKrH5MM2G1qUFknBYFqYEkmCXO87G -+ZtEIywtFEGElGymGWWhlg6tJxEcObN8sNHf0hqv7kH/jN6JuEFLQlfLz1b20XNka -+3rv5WKj7lMrpII9agGO7VR+zbpJ2RYv0a4N+D46SZGIoWKjravmrMzFhXju54HMR -+OKrL06njAoRE0TfpqGzv3InPJg7L8Bb9FtXMdficQ8BM5f62b7u8xcce7VLyhz+6 -+1cboaTywfD9mbGteysdoooFihVThc49/DPSi01jqZ4PE937tGDlt5GWFiIOaobF/ -+zfWxJq3BWA1LaVj44r9P4jORcP0fWvabcgzlD7vewvSk7cp+g8fGYipN8t4oqynp -+DGXYVCTzckllwNnVlCRcOpwYgdaz/2dEMqh4UH5bPI86Lu2J6Mr9iTuQ3CL967Lg -+hEVmb7HTO2Tr5mnAIkAUveJbLXqPGynh6d3k39m56h5DyPKDPBidjkXFnLlSJwO4 -+RPoAyVB3JOMEJ5Am/pXauj7NXErNTKRuWVQVspszi6ycoaiPGfXWYypZXy9W6hJ9 -+NWif4SKTpVVYBWH39YXBfyHwnSHeggsvUpmVzRldXuLRags82i4bVd6AjXZRQLfg -+SuvH/RPshm1CUwt+TArl6FM9MjdIOQM/8YUbyk/BcZsdM9ChHa+1soMXAhjz59ge -+T19BzvZWeDIuw9uatqSL/QWAENQcKalo1zFphkFLkHCQnvs3+cwPLo8AP9ES1W4G -+4KyiO+5e/04XqFDOg2iRYoaHEhM0zGTJpU9TDJQ1AQAmHj8TJ4eL6s5OaSzWN3dP -+C4d4V9Ay2y4VFNacVuOTAI945+yi6GN+63sL4FB723Jkruma9vhOhqGht5WOltXl -+yBjcMFmxhsvk9yErnPN/lUIpvy/BlAfPkTmSzTcam/ZfCOgIfFarbR5Hahynf6u4 -+x2ECWJtELt5jhxs1gnepZRh71WJbjo25SJO/PSI13uMhd0cBIlhu0iiVtGzucgeU -+PzUC6PO1gB2WgkFXaF839TO/dVpgbK2sBjRUjzqnYs+YMSVwiNY8gc2VAnXQu+oV -+NdNaPEF79JTp14Tq0rmhcjczdVQ7gCNUD5g8ehovAkp6DkKCoMmbKgagP9MnKrhS -+0tkaZwpLxRYiz7vZJhZvz1i64C7auy90fJxVAmsl0sC97dWsbcLaQoIKuwfn0kO8 -+q2Rx4xRMixI5uoWDYamNL5RAo1nmsvCQCWO/E5pKzEyykFZfQ+iX5/cFgjXmMBcJ -+1PRRrQcHvtAV51GhPXxPnskltHDUEV1xovYGH0yk20NZPEIVLf2OVGpcQICDzLyB -+IwxufeHMkakAcQO1ngz6czBMMPFhEqaTBDafybw94ObpVrpjO8bEuj96nmFh5hc0 -+o/dnMsU8q7syRIinjZTMcvwYLE1C6BSdY0j9TwDdFvH0IhmPaKgCxgoKuyiS2UtD -+G8JPZI9ymOKMnzaqLc5F56j2LSsOIf1o6svHWG2nGGCLCMgLaDCl1rkVYOhQ56Bf -+/a/iPfzkz1IYCO6zvq7AfImGHS7HLCk2Iusc2Oicf3fpjJ8TuMDwgUauGx9RKN2b -+znBUQeI1d6PWflz/Xl1L8GTDc/YI344axYvi3F9HND+gcOEpfcw8jxy/yMYHv2RT -+S4bGyRodGrVZDg7AjFyzLuwapM+GS09Qxdr/4cdEzLT+cuD+K9NsOr/TSvZD7YO8 -+09yVbXWBIHOXoVKPz8PSg6bb+Wzk73btacNRgaWlqa2EhT2g5pwSAcDwrTqN9GG7 -+0MiyEsWd2uCET8LBXmLPC4U0iHg85X0jC/fdM7xpRAKayuh5omYwyxxunZhAZ18H -+1meJbao8mCqDopih6HYgDbH3sQvk2BUIr0wX3MC7ITLAiIiziJdvXWYaIrDf+y61 -+gCf+0REpAKV0uaH1/PkOp7vmjeOHdUdSOOSH5AkyqBt4jNJDwi2yth3XJoyH+b+6 -+XGuzvCFDuwIZa9PPsAXkg7lb7+n9L0LSddUChVZQ0NVirNRGTek8p8Y8SYPJZHk3 -+ZuoG/kXvaiCSaP0ceg== -+-----END ENCRYPTED PRIVATE KEY----- -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der -new file mode 100644 -index 0000000000000000000000000000000000000000..460fec89132938172b51bcda4afe83ff843b8ba8 -GIT binary patch -literal 2461 -zcmV;O31apzf(e;0O9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UlMC7T~- -z0tf&w3m^ -zr{$Ny<8nj!Dy|+OMn1|Tfj5Kt8v1!R>8tFWkk1%`k{$+jJwWLE!b$8Q~K0H -zLeVxt1Xfn!o$8L0nVDazUfw+BDV+jxV&!KN_6@Ots=_;Z8oXyP_^zw_K3U!phj8*nLi{uN+8jd8#Un}>(PjCf=iWdK2Z~1_-g|RS{1&jyVuVsi18)tP+MYt$6)!{l -zKt>1~pp=WLhh9OOnkL{`EXTded^;Ro3*qBWUAd&Y&}Gblmm@eNz4dgNW$O=e*g%A4 -zt1o!xM0xK!m%=q^P@;tmL|pHyt(1$PLen1Z&w&M#!_ -zlgeR1`VeamsHnMcl~LB9J}gPwV3+6*W4OGW6=YP@)n?(LXO$Pw9Gi0Wdc|6?`@kNt -zCNkv1RoRM59jck$`dyr5${^i~(*OES#5nj8o)mY)V}2tCT?VFMALJ>lb&fUQQyX;F -zZUAPCVNAad-3!xP&u>g{wx3Fb-q-Sg6mGy|qC&mxOYam(-4@;R?c0hqD9 -zO6MD6+|}v0dy;mrCESA4QW>m9XwrY6c61O!j;Wa|F~M(g>PR?KJjTnL2D=4L8U(l! -z4U7x&nHQo&AqHMSG$9f1k%@Gu8Vb`2>*^wdPp$=fS#RZCSF=^SiPuxD0Ne|;gzh<0 -z4hK-UxiXa{g$B#ULzkBnAwf42=YbA8#uba_?UTU>xpOGgW0iQP|7=t?pFqX1vI~yX -zcfdoigQ0!*Opc4mq5XWM%;lA=Vkq~<86o5oy?Ql59@FS|O#s?tmSKxR)3JD!2` -z7dH;12VEQ7eC;cWj<_#tDpE*ke+}amX0jQ>gwl8ml>Kt8!I3Z$4LFkH_Rk_r4pjwY -zMR7YR8`s0w;BbBQ1vGmB8MZ~Q10j;!heK5nPuvdG)X%zXiddXyJmpcHit<{AS|+D8F^GAuIo?DzWfVOS*%ZQ6Pg -z{kBW-yPtcvg7lNh$njs!Lpl)1TE@1+wW5147#p7oh1$+ALPIViwIBHNyZ~5eOy&+sHdl*NCTcc2E@xd -zAHRhIEw0P?FQI;Iq2>k9jb5wY9wI<<$0xri5-wTqL3&qa17m&AvkvqndSJ+dj!!G* -z3lByR2w_4+XtOO4>V4teZs;XoL@F%Q!{(ixqMm_3PJy%BjKsR^_G;&xn>}(+fdli1a-K_oS&n!GJ^BjM+A7{p%SMoATeuGtI?(>Kj -zlQ*&t-+m`AHr)|}s?4K=st1?{4)<6SXZ4@OvrPKxZ*~rUHD&MGUh~q$I)LZwJ63l& -zOSWAmv2(QCOa-TfY)t-IxMMj4Iiz3Om+I8a(LL-&L(x4W7qLGWX|il4UN<&2HV1pS -zB^3wb&n8*n^jdti(%o4^Bp_n2+=iuTnPGV`8|jxa|{zvvjbv -zh4sbJ;`yqBsW1dbdFgXakvDsgk1|ag&!*JcAg4HnElNvu-UpVSU`-0*f>n+B0M{O| -zpa-}W0%WU9Ho<8k3Ysf5R0d4UVwh&0rDN6WcV7`cCG6D1YnGFx3RIApWD%U -zDUYyT@0RBo=DDY7oyWM`5BP+U7eR#!!(PNL12=-#~|5N@V3#v#*YRB!+=0but}DD -zy5J|UFnjv*=TFLYTH~ZSF+wsdOL={Y}evgU$Q&azcts*kzx|{BN*FOkUC*lrZ -z{|1K!Nvs>OV@5@D9xqC-cFx?h4ShjdAbr~RH~=)*1rCb>5TS(^6!u?n{Tg6LJ&qmR -zmYQ6IaJwRFtnG&=XeT4j#W|G_F%w|jod%*MWbChhRZLx|y|>>g4I#9&jT4RP<`(Pj -zR(y<=q5(MFA(M8qnqX_>je7uNSq&LNQU&90Ukfd>gP-s=TEF -z0tf&w30);2uZtdzVR%lF|5+^1Ie)Q>mP}jD37A4&q{Ceq4xYuW}hgDbkYhu`>sDV&R0mxH^D5EWY -z>Or*S)JU(x(v5xkx$%vxbV<)CTU51)MokvMq6|c>qzO@iqE$Tv81MLuZHC!i7g)th -zIEQ7kEbXEQ0Nwu6!6tXUDj-Bg@31jn^H$G?0!=;7_qG#!52_G#D43`TPi`o(OulDx -zRziR{fvxn{2DsZBGn64SvK*1t+Rba~?rTdazZ3bEest6c%Xu%?I(JS5zMwIkT7~pG -zAl%GWa%Zp}Rh+l`2MVOPuo@Oi$NTEpN@xL9jB^m7D*exI0!0fC$%mc=T?nUMiY;`L -z|4zU=XnWGiZ6*SI^2492&nXl}V-@t}k+g@dq<0t-0vI7Uw?5|b33iGs4d%h=Zx{l@ -z)~_y_iB;@rnp~UY^O{V%=oDMZ#5QjU88b_iv;cBc^U9tkjJIJoSVqX1>WbDffT_aa -z+u}U-*}c@Cz*`l9*|b`xK*Wj*Km4$W`w1qj!q$lt|BiKXc$G|co5Znj5``bt&M!s`I{f9lz)l3Jq{Dq@lY0u_%^FhtIfmIPQ#40k%yo})zsi2ph -z8$z3d-v(&w>upisv8wgje(_ShU;ilVWDsUnr+^AnZx;tolGM93S(r)+XAzRzr|>N@ -zxX*7YFD0ZcE~|mKjMX2z3&Y0J6uT`I -z7RGc%!A!vK;~&D9zk73rClHV3Mq=|yAc|axf7pNTu0T;ubz)OeQV=%htfmi#kT$lw -zBnxenh@wx7X?A-<0KLI8LVt`wiN%IV37nAf5Zar9Gu@gd?}pTwl0H*(`hJT>?2T_$ -z1&}gpP5Yx#&o}~3Ou-RykhS>If|LNfHfsWFc1{Y@H_-Q~)w~l}x$i}GuS|4nWk;hCL5LisY(R7Y4qR_nD -z!)AE{qFb0FrJ`0)?MJalV-E>cql>pW1tV9g0CA;Qynwns_5*9@Dw{Nik$1tTkUdPD -zrGw7iiXZe;OG05~Ku7jqu^a(cW8hk6Pl6TNK@=W}PJnzMpV>9Lz_foLrFHP<8Pxi0 -zT`E+}d1c9(VdkRO54p1i+bwmw?`QQuAD$q}zl)K$B2UZKhc%1!erjcgmr~K~gknh2 -zqqA|1QfBjw7`qn%2q#t~)hk|moU*91EgJaH?pm#%k&PYftMU+izn*n>h+ztS6VMfI -zNk-z=1{UMC<SgC3F(j=WC&uGQaW{VylKhrPfqkE-X -z;2!W1J8dVUH(kPyso;W^FVCrOsc3aSfqURL{nH2%`~TUaPTs|I&#}=SVSZiRH$&(x -z{2w0dHlt`Pi+9L)T4bl+lIQ#i#X`rXM}8#t#$f_tVit_dxt7XG*c)ERxan~^o3?G7 -zEcNW=ivfl9!&#emEvC%)FjV3*Ekm6Rmr8z{@5Qjz>fLCY1f+UH_KowCO;vB{7N!=g -zD*eVFOCin5s?mNQLuVh1sbW_tNrUO1iZ$iwL5%j -zC5iNZ43BagH@LzsQPj)!B6>uot$`D$LA5%bCqXOz59l>6qRY%aNUar!#ww;JA}sAA -z#`6YmNf`aqW^z=QGa^6{CC$C5Us0DX9UczYDBoY<1*dJ5BxYrOH@|?{F9mKl!JL0R -zM>otoFFHDwVB%Z~gJd3!fvj*6I&cPU>X_UF|Bh^bjCc`I&Ip%q8~y0rLA(%rfBL_L -zSkW^vynN>2`|*}Zvu^MrRL@Kv4QzSk0@H?(bhmu}A$?gzh#o76wkV#0TW`;ulf;w8 -zXch*qyx;M{LumP{X{M%K>##@n?+x?NPWj+WG*acS87=!v?*X-eyRZ>Eu`5Lrlq4p^et6}_Ru -bSm+*sM*?^b>6&LNQU&90Ul(W|R5lgs$ZR -z0tf&w3k)74gr*hPTEhw{;BX20s@JZrB34{{>hzz6}L% -zn=6JPWzl%~B<=c31?speFn)D$ySTX%YM957Z6{@w5vEA20k*sIxu1$MacjPW$G31g -zejJgxhd0Cnhlu!+=uWfKQeAHN$ -zcTZ!Ul7NNHk4T)<2xYGAV>FC~%@dT=>}4&)c{Hgdnw^Bwe&QSu-(I)|;B*`;g+VA% -zey#CjaTQ@IJ7tMpr3?{~Oa5^AF2=_(YFKTb^IGqZoA4iIrgFQ-z+RPG!mZ}xOUOvA -zZz+(f(bIqpVwCoq_Uv6RAHGZOfC6WI#4M47-5}Z?5VKw}G&WI(W0>RzuEKES6;Q^e -zFjcwtwQ|sr6En*jH8902xfWY9*_-&}-dG_ka&MJVEhSKwrTX_G%bMzAkOXBV{MzDu -z#p)u@#1YI*Io9aPfByxjf>E`5A=3wfCR@BGrvU@1we*9Gbucy7A+|Q$pVrO`5t9hx -z{Jq`F=d}hO!b1_3)8ft}7r2F!Es&Ee@9Nxy-~J{cQLt`S<$*n;OKk2?T@#>I7DsTU -z%Fr&Gl)y^6roi|$0{YmoU6!CBulUPw2y+7@CxHPXRw-R(4aSL_eOlkqji1iCu1!O7 -zdhC6+NWhWRT}Z3`2*UWZ_^y@Q2xY>pi)VmmQUZyiG{}+MGHHncbldKsP?0wivxS&p -zyS_d0l%Dlb4<$FOa`oKsWq=NtzJVQ>s#7JY@)_mG~KzpeQp}osE}>?WJMK@w8|-nKT7dH -zadk$qwvG?MOf0cC7_$rc6jF{6!+_ebroQ6@(hQ_E6jp%}G)J#HLFQDr) -zhW5J$3w(_V;Z%~w@8AkTn!OQ2<`6b3kMK}clbYTWib|ab2L>OJZk*tbk0a^t8y`yJ -zK%crYXUyz2cum?wrpHGW6;Q!GCPA(4ea%BKQ=mXqHb=m9Oiidje|EhSQUJ-r#!Ihi -zZTp&EGtgV)D4Qf>&}J6aatRZ3wP0aH)VOwu0Pv}WGt^u$f5z -z==k{eE1HQ0^Ly3LF>XFveeD~JC0RbSOIb_f0oOK!h<%!8G<&8u?di&u!3=)^8f+Ml -zxPr=%pH51S5~G5~{GQLi=x9}=OMLR!QVw|?!y-o_IP7*Ai5MueNf9OfpDHnk{JGGL -z&Qm*rEqf=+eslMhE+A!+f4TvJjs+Y_Xf;*;5xt^L#{YapFWIA|LPp#bUag#>!TY>^*TMtt -zk?98H(g*P#YRRe~Q70%WIAiPa&gT-|A^SDjATGQ1p_YB?f-QVpq~)%D^>$S6H3fQpqQSsfamy}q76!;AI -z0QG(~giSZJPQFXF{php`+t*9zgWI?Vx%=;`RrQSax^ZI&7F7t$ppS&C_+sCJ>oz`- -zX@hzR+FLDQsAkYuZzV`GE&<4AYP4)#=7Et2 -zMxZSqibR)W41AiE*wB!*c3*_9$7P!zmzYu}0D!_;2PTa-qjF33hGckuOb3#ew1)MA -z(B|ZF-s**H5a6YD%G;kvt91O-%WKlA -z%*MIn#x@?&K4sQ;9Xu6&SMv(Zsw~iUe%({MKrsVIU6Fu+@v4p)O3{%p38BNL$9;BA -zAA3sa6JSR^L9Q3ximkDIXeg)FV#u}`Iw%N|Uc5hD#G3bK?UED>wmRTGUpls$xn*{Q -zfW`kY3}$wC!L*A@0@|>f;K1lyeEhuE6YuXPn;UVaRV%BffvmygLr%0+4}zlheoIpj -zLA!UpkGnDS>pKLg%PMd)SDgywWFxmRDKD~BJIXbC{Y -z8#-7M-24LT)M2hXILppKsC$}OletU_bUe-ik7Tr%cNV~g%uNh7 -zaOaA>H^9#y_=))N)jcWW5RKryzTA#F#8}mNyF!$d7~chQc!Ly^NMdv&_d_0A5}J8c=av|2P_8(+3S@>2dl^&Sxl?;brbK7^=SCO#K3DIk@NAW -z45y?~VN+OWLNj2|GIuECiB7Bv_e(}|CpLm&kocOJEbkch$K5D5tZYy3ehkxEXTs34 -zBMDQ@Q;ToXBv8dqvklzjqf^4-G2oj`43QU)t~jk?^AaY8(a(4WQWdTwSQNqbi_Pdx -zzJNjWuQHByvS(i`6|M~3%YkC^Evw*RZk@1{N*3RR*nLB!_{y_s{=~DoTp5)iEa<=H -bj>dCj?&mAXi&F{ARYpAz$k=4#E_aPOF5T4# - -literal 0 -HcmV?d00001 - -diff --git a/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem -new file mode 100644 -index 00000000..11504a6c ---- /dev/null -+++ b/tests/data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem -@@ -0,0 +1,54 @@ -+-----BEGIN ENCRYPTED PRIVATE KEY----- -+MIIJmTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIGOnVLKvKgHACAggA -+MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECIGG28/TJRaGBIIJSFh6ZJN8xJaH30k1 -+rH+L1DyTH4CELsRd164RoqfUq8rp6+XcNG/S41PdI3efK28iyLx85AcqFArqHHUM -+7yGA6vmuSVz39ZXdu1CVMi7OQ4dTdg3KBXaz96cnyZ1EsoruibQDn6mQq1D0LG1u -+5phVLsnfQLDiOFUFm6X4q9FdJj6NUJdOY5XRJZEu6q3wEmVXDfL7zYXJl2gZuiGO -+eDp/d0IVcYFd1od0V8qI90nWPCeZziMcnR8wAloV2p8xiqHuVhV/4+I53ENqbqxo -+v+0aObO3JsaxLVML6JGhabd2k1v3QAZLawMVGBNa/7IEOBVeD4j6VSiZPdKN473i -+oXxRsya6HqCD4kx+zbofbL4dEZliLDmISoHRl9ipQfr1+Y//JYhEf6gLzmdFqP3q -+N92+rVwdRWfmVdIsgdLiinJWO1xZ1dUnWvGOYZNjurGVHqv2IrDBd8FDjl/yMU6z -+osnOynXspoSA53kQ46ZvArln8QGzWt1bD466nu86dXOkrfbAmS59VaNY4Y1D033l -+p+d94eEjRwFUsQbRWv8mvb+KPn+nYcWZFNCg2RhTUKnU0Od1SHY5f9jfGFUyobYp -+/tg6eizo7T+rU9PZoTkGnCf1qOwNPpbSh5FcLVajeDiYokoyc17VQJcc1xzKeIOs -+tcU7kK/jA1GofCVhH3S1OPYqdjGvvoTVAYyXH3SuH04a8UJvFsRl8XdTNYOyecqi -+tH17PADDa2UTvKE2dLhxxVUoO9dZVeEorNiFWCQ/rsl5M1eT9KXh2lvZRM+Yxo3+ -+NPP1/CGa5sDYx9aZQPoJc6aTJicmqx/srRtMR/RuwBUUH/1AENHdNLBL2IPfYjsL -+xKU/ox62cs2sCIywkBkR9WHPTqaU7HU6rlD8phinfljA5rMj3P3zrNk8XqfHNTpV -+BVA2Eczf1HNizvLxE3+vp/eGYCecuLfnqwRj5zAjiYPcy8s1vETDkXSWdc9vQf2c -+zky7tdAMS2WLFIulBIqYFDhicdlp9LTaeUOiwNIbPLVMzKy8zzW3UhMXyVi9EBCt -+IDhkUTdaLmiHB0F14NISRK6/isa4Vfe+/Z9ML/z9iFm8eC6LMy+/YgWZD0vYIwow -+JKHuEuuUuDR7gkHgZ/cvjMsyOI26uiW/W8qfAk7OR/qlZXMgWCQTgVBEcgmZio8U -+BcVDRPKFqLCKOINQ4poxt45Ez+xRlYdwExPnSRD7ZMFPYcUllO+S72JYGsYdGs60 -+i529HgXKp/bS+1JKK/zxQmjApZ5kWGmc7kAUU76zprd7NKmdpWv1nbDJBtNU1bmW -+nzE/GXyNMYVGuxGnu/9scKSRATLzvLXtviRKoZVFm+6m7gR8J4GVSu8TxaXlYxg9 -+NR+UujQJeoChR2dHvAZXc5g3j9rjQXZYlMm6M5rq0CbMlfeAFSwyG3Gm6D/cRxJg -+MHPaU7HpeZL5r7rJwNfUt/c/cuQ5C8CadgTgDd1NW50uEUoJh3QGE2K3Jq+0wG9h -+sk72lnVzH0bnMbJDXEV1btrs2qnnSots74+8F24gQb9PRQliuk50LGNddgrGoSgB -+b9eaBl7cgcy7T1XUv4I+aEW+sfa8bGBffIF2nk3oCrkW9Sbdeh8qSE9uthewpGvK -+WxBhCn6zUryHmt5ppiC6JrHJridCSu4RNbYL2umAM4DNh4lE5rBvFrCHaqet7hdy -+wheQGRQnRzNru5alCxfNWXXuOp9naFmF5RFDWvSXukn8qfxzRcjMhvNS+z21O9nK -+LPRaX9AICLGC+1C++Ka4pjVJVT/WhElXVap313Oj/Rc6KvRCdGpqMLVxPIrPFvbj -+vzNFa/YEU3RK/wjO6/kQPtlcfwMzZFkDHMWiYMCUoi6Dpvze/mKSTA9G9lmc+/BF -+sgqLZM7yltTmiGKQUDSlUOs08ZmPw1+HSOu2DZKWQ+2XoHSMih5ezu7GZ0xvUt4T -+BHV95sRDCAvUywGTIPhx5xa+gICVeL97DOUCS+Y+WJYmeSlZ5r+dyg2V7+CX+qjr -+ENMpouV8bIMpN05qXez8MuO4vJdDDsjqxq+y5kwN/ugb+DOq5okeRIaWRPWdyceT -+NCayiE+5nnfdPMQAAJqZ/LGSx09fyamJqhcG3RJosFfrVPjj7aASUWi1BFjxIe1L -+3fFSU9UDh9hfJczZx+hNKb56vhgrO+DaIbDMNMQqh6C2zdCirBT6M1NXhWvHKjkj -+/MNyLBwnCWTUZ7gufn/0MAr1DaeoE6TzcwDCpW6ntXF9tG7L4DVbA8Cqy+M0HnQL -+Pi2BCh4KrRiV1G4N8xDDCQw6IkfKRGGO6wCJ1HTnA2xmKqCzE2Ul8S/3+aEEpRNT -+3FrcrEi+nzAkzBBkPcHaxayx3mR00Wv/mwcI7SoYKKfuidESQy+VBAHqekTmSELw -+YRTdrXTKNWYlyms7pKMOgdqZAhFVOYxKBVaiuUeOGtvCNZ2qf7TOG/pT3nqTAbAg -+UeP7kvf2BaYlKoFog3uvRypcWLomQqY6hwvWW7IwquHwxeFdCHHeNrr9CoBrF2lz -+Z162/inTRzSbUhjumhLGEiJSzZyrEErjBjF5jE07TioEgmnXyCFWoc4nBnZ2+KXb -+J7/QWMsCJwb/CsvQxegd8X6SwLDfH/28py+UAqSTi/HA2GY/68Q3PQ17V7fyg5l0 -+h6FShhYOKmForUNwqn2TwGPH+0swtOU2fKFq0NMHPSvta6U0wpaRZMCojw8AV3y+ -+lUdKesz2siioxfeIxhD1Rm1KZ5p1N/FgyAEu6wpWj8okQjxRiGe+GQLheQpsL/ZW -+HsljSq73o9v/F7xNE9xqIxEGnUDYIAQCX47CiQOTTR9Lz6N/t36Eew1+KjiI4Xda -+VCu207ipFQPpNkvc13z2NWC/4NeRQg82LCYep4y+ZblcyqLqvMwOhJro2Kxoe1e1 -+rv1Mwzd0ShUosb/2CChCRdirLJFXaXzm+PzBZoCyJEWcSxi56By58jh6H+XeUxCj -+0fl7eXLHb4sv8kf7P0KJGCxNY7ik3TLJjncsA9gLmFAeRcYWKq5SuSEW3DmfDSXZ -+CC1pSsvFBvV60ZFm2r96xqFHKFHOb15qm9DBXphr870nZQB7+QgRwp+jd+xdXUDS -+PelVGau5uoRN2tFPNvoeGyww9lkuNAJWK4U+LdLwHsQOUIKTf1rgwz5C077omOh4 -+3u+3zMTCMRDNhiJb3g== -+-----END ENCRYPTED PRIVATE KEY----- --- -2.16.2 - diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0006-tests_suite_pkparse-new-PKCS8-v2-keys-with-PRF-SHA1.patch b/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0006-tests_suite_pkparse-new-PKCS8-v2-keys-with-PRF-SHA1.patch deleted file mode 100644 index b5b1614..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0006-tests_suite_pkparse-new-PKCS8-v2-keys-with-PRF-SHA1.patch +++ /dev/null @@ -1,604 +0,0 @@ -From 7ed2575f310fd889fba025aa760f74ec1b41924b Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Thu, 1 Feb 2018 14:03:36 +0800 -Subject: [PATCH] tests_suite_pkparse: new PKCS8-v2 keys with PRF != SHA1 - -Extend the pkparse test suite with the newly created keys -encrypted using PKCS#8 with PKCS#5 v2.0 with PRF being -SHA224, 256, 384 and 512. - -Signed-off-by: Antonio Quartulli ---- - tests/suites/test_suite_pkparse.data | 576 +++++++++++++++++++++++++++++++++++ - 1 file changed, 576 insertions(+) - -diff --git a/tests/suites/test_suite_pkparse.data b/tests/suites/test_suite_pkparse.data -index 416f9dfe..1bf06270 100644 ---- a/tests/suites/test_suite_pkparse.data -+++ b/tests/suites/test_suite_pkparse.data -@@ -362,6 +362,582 @@ Parse RSA Key #49.2 (PKCS#8 encrypted v2 PBKDF2 DES DER, 4096-bit, no PW) - depends_on:MBEDTLS_DES_C:MBEDTLS_SHA1_C:MBEDTLS_PKCS5_C - pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT - -+Parse RSA Key #50 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #50.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #50.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #51 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #51.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #51.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #52 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #52.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #52.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #53 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #53.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #53.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #54 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #54.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #54.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #55 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #55.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #55.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #56 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #56.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #56.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #57 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #57.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #57.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #58 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #58.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #58.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #59 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #59.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #59.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #60 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #60.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #60.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #61 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":"PolarSSLTest":0 -+ -+Parse RSA Key #61.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #61.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #62 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #62.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #62.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #63 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #63.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #63.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #64 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #64.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #64.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #65 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #65.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #65.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #66 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #66.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #66.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #67 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #68.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #68.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #69 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #69.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #69.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #70 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #70.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #70.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #71 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #71.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #71.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #72 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #72.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #72.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #73 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #73.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #73.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #74 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":"PolarSSLTest":0 -+ -+Parse RSA Key #74.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #74.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA256_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #75 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #75.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #75.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #76 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #76.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #76.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #77 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #77.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #77.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #78 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #78.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #78.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #79 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #79.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #79.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #80 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #80.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #80.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #81 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #81.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #81.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #82 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #82.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #82.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #83 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #83.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #83.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #84 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #84.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #85.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #86 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #86.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #86.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #87 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":"PolarSSLTest":0 -+ -+Parse RSA Key #87.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #87.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #88 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #88.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #88.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #89 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #89.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #89.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #90 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #90.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #90.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #91 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #91.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #91.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #92 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #92.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #92.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #93 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #93.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #93.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #94 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #94.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #94.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #95 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #95.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #95.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #96 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":"PolarSSLTest":0 -+ -+Parse RSA Key #96.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #96.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PEM_PARSE_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":"":MBEDTLS_ERR_PK_PASSWORD_REQUIRED -+ -+Parse RSA Key #97 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #97.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #97.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #98 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #98.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #98.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ -+Parse RSA Key #99 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":"PolarSSLTest":0 -+ -+Parse RSA Key #99.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit, wrong PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C:MBEDTLS_CIPHER_MODE_CBC:MBEDTLS_CIPHER_PADDING_PKCS7 -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":"PolarSSLTes":MBEDTLS_ERR_PK_PASSWORD_MISMATCH -+ -+Parse RSA Key #99.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit, no PW) -+depends_on:MBEDTLS_DES_C:MBEDTLS_SHA512_C:MBEDTLS_PKCS5_C -+pk_parse_keyfile_rsa:"data_files/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":"":MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -+ - Parse Public RSA Key #1 (PKCS#8 wrapped) - depends_on:MBEDTLS_MD5_C:MBEDTLS_PEM_PARSE_C - pk_parse_public_keyfile_rsa:"data_files/format_gen.pub":0 --- -2.16.2 - diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hexstr.hpp b/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hexstr.hpp deleted file mode 100644 index eb3f927..0000000 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hexstr.hpp +++ /dev/null @@ -1,258 +0,0 @@ -// OpenVPN -- An application to securely tunnel IP networks -// over a single port, with support for SSL/TLS-based -// session authentication and key exchange, -// packet encryption, packet authentication, and -// packet compression. -// -// Copyright (C) 2012-2017 OpenVPN Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License Version 3 -// as published by the Free Software Foundation. -// -// 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 Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program in the COPYING file. -// If not, see . - -// A collection of functions for rendering and parsing hexadecimal strings - -#ifndef OPENVPN_COMMON_HEXSTR_H -#define OPENVPN_COMMON_HEXSTR_H - -#include -#include -#include - -#include -#include - -namespace openvpn { - - inline char render_hex_char(const int c, const bool caps=false) - { - if (c < 10) - return '0' + c; - else if (c < 16) - return (caps ? 'A' : 'a') - 10 + c; - else - return '?'; - } - - inline int parse_hex_char(const char c) - { - if (c >= '0' && c <= '9') - return c - '0'; - else if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - else - return -1; - } - - class RenderHexByte - { - public: - RenderHexByte(const unsigned char byte, const bool caps=false) - { - c[0] = render_hex_char(byte >> 4, caps); - c[1] = render_hex_char(byte & 0x0F, caps); - } - - char char1() const { return c[0]; } - char char2() const { return c[1]; } - - const char *str2() const { return c; } // Note: length=2, NOT null terminated - - private: - char c[2]; - }; - - inline std::string render_hex(const unsigned char *data, size_t size, const bool caps=false) - { - if (!data) - return "NULL"; - std::string ret; - ret.reserve(size*2+1); - while (size--) - { - const RenderHexByte b(*data++, caps); - ret += b.char1(); - ret += b.char2(); - } - return ret; - } - - inline std::string render_hex(const void *data, const size_t size, const bool caps=false) - { - return render_hex((const unsigned char *)data, size, caps); - } - - inline std::string render_hex_sep(const unsigned char *data, size_t size, const char sep, const bool caps=false) - { - if (!data) - return "NULL"; - std::string ret; - ret.reserve(size*3); - bool prsep = false; - while (size--) - { - if (prsep) - ret += sep; - const RenderHexByte b(*data++, caps); - ret += b.char1(); - ret += b.char2(); - prsep = true; - } - return ret; - } - - inline std::string render_hex_sep(const void *data, const size_t size, const char sep, const bool caps=false) - { - return render_hex_sep((const unsigned char *)data, size, sep, caps); - } - - template - inline std::string render_hex_generic(const V& data, const bool caps=false) - { - std::string ret; - ret.reserve(data.size()*2+1); - for (size_t i = 0; i < data.size(); ++i) - { - const RenderHexByte b(data[i], caps); - ret += b.char1(); - ret += b.char2(); - } - return ret; - } - - inline std::string dump_hex(const unsigned char *data, size_t size) - { - if (!data) - return "NULL\n"; - const unsigned int mask = 0x0F; // N bytes per line - 1 - std::ostringstream os; - os << std::hex; - std::string chars; - size_t i; - for (i = 0; i < size; ++i) - { - if (!(i & mask)) - { - if (i) - { - os << " " << chars << std::endl; - chars.clear(); - } - os << std::setfill(' ') << std::setw(8) << i << ":"; - } - const unsigned char c = data[i]; - os << ' ' << std::setfill('0') << std::setw(2) << (unsigned int)c; - if (string::is_printable(c)) - chars += c; - else - chars += '.'; - } - if (i) - os << string::spaces(2 + (((i-1) & mask) ^ mask) * 3) << chars << std::endl; - return os.str(); - } - - inline std::string dump_hex(const std::string& str) - { - return dump_hex((const unsigned char *)str.c_str(), str.length()); - } - - template - inline std::string dump_hex(const V& data) - { - return dump_hex(data.c_data(), data.size()); - } - - OPENVPN_SIMPLE_EXCEPTION(parse_hex_error); - - template - inline void parse_hex(V& dest, const std::string& str) - { - const int len = int(str.length()); - int i; - for (i = 0; i <= len - 2; i += 2) - { - const int high = parse_hex_char(str[i]); - const int low = parse_hex_char(str[i+1]); - if (high == -1 || low == -1) - throw parse_hex_error(); - dest.push_back((high<<4) + low); - } - if (i != len) - throw parse_hex_error(); // straggler char - } - - // note -- currently doesn't detect overflow - template - inline bool parse_hex_number(const char *str, T& retval) - { - if (!str[0]) - return false; // empty string - size_t i = 0; - T ret = T(0); - while (true) - { - const char c = str[i++]; - const int hd = parse_hex_char(c); - if (hd >= 0) - { - ret *= T(16); - ret += T(hd); - } - else if (!c) - { - retval = ret; - return true; - } - else - return false; // non-hex-digit - } - } - - template - inline bool parse_hex_number(const std::string& str, T& retval) - { - return parse_hex_number(str.c_str(), retval); - } - - template - inline T parse_hex_number(const std::string& str) - { - T ret; - if (!parse_hex_number(str.c_str(), ret)) - throw parse_hex_error(); - return ret; - } - - template - inline std::string render_hex_number(T value, const bool caps=false) - { - unsigned char buf[sizeof(T)]; - for (size_t i = sizeof(T); i --> 0 ;) - { - buf[i] = value & 0xFF; - value >>= 8; - } - return render_hex(buf, sizeof(T), caps); - } - - inline std::string render_hex_number(unsigned char uc, const bool caps=false) - { - RenderHexByte b(uc, caps); - return std::string(b.str2(), 2); - } - -} // namespace openvpn - -#endif // OPENVPN_COMMON_HEXSTR_H diff --git a/OpenVPNAdapter.podspec b/OpenVPNAdapter.podspec new file mode 100644 index 0000000..9df2af5 --- /dev/null +++ b/OpenVPNAdapter.podspec @@ -0,0 +1,150 @@ +Pod::Spec.new do |s| + + # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.name = "OpenVPNAdapter" + s.version = "0.1.0" + s.summary = "Objective-C wrapper for OpenVPN library. Compatible with iOS and macOS." + s.description = <<-DESC + OpenVPNAdapter is an Objective-C framework that allows to easily configure and establish VPN connection using OpenVPN protocol. + It is based on the original openvpn3 library so it has every feature the library has. The framework is designed to use in conjunction + with NetworkExtension framework and doesn't use any private Apple API. Compatible with iOS and macOS and also Swift friendly. + DESC + + s.homepage = "https://github.com/ss-abramchuk/OpenVPNAdapter" + + + # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.license = "AGPLv3" + + + # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.author = { "Sergey Abramchuk" => "personal@ss-abramchuk.me" } + + + # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.ios.deployment_target = "9.0" + s.osx.deployment_target = "10.11" + + + # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.source = { :git => "https://github.com/ss-abramchuk/OpenVPNAdapter.git", :tag => "#{s.version}" } + + + # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + framework_path = "Sources/OpenVPNAdapter" + vendors_path = "#{framework_path}/Libraries/Vendors" + + s.source_files = "#{framework_path}/*.{h,m,mm}" + + s.public_header_files = "#{framework_path}/*.h" + s.private_header_files = [ + "#{framework_path}/*+Internal.h", + "#{framework_path}/OpenVPNReachabilityTracker.h", + "#{framework_path}/OpenVPNClient.h", + "#{framework_path}/OpenVPNNetworkSettingsBuilder.h", + "#{framework_path}/OpenVPNPacket.h", + "#{framework_path}/OpenVPNPacketFlowBridge.h", + "#{framework_path}/NSError+OpenVPNError.h", + "#{framework_path}/NSArray+OpenVPNAdditions.h" + ] + + s.module_map = "Configuration/OpenVPNAdapter.modulemap" + + + # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.ios.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration", "UIKit" + s.osx.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration" + + s.libraries = "lz4", "mbedcrypto", "mbedtls", "mbedx509" + + + # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.requires_arc = true + s.prefix_header_file = false + + s.xcconfig = { + "APPLICATION_EXTENSION_API_ONLY" => "YES", + "CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14", + "CLANG_CXX_LIBRARY" => "libc++", + "GCC_WARN_64_TO_32_BIT_CONVERSION" => "NO", + "CLANG_WARN_DOCUMENTATION_COMMENTS" => "NO" + } + + + # ――― Subspecs ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # + + s.subspec "lz4" do |lz4| + lz4_path = "#{vendors_path}/lz4" + + lz4.preserve_paths = "#{lz4_path}/include/*.h" + + lz4.ios.vendored_libraries = [ + "#{lz4_path}/lib/ios/liblz4.a" + ] + + lz4.osx.vendored_libraries = [ + "#{lz4_path}/lib/macos/liblz4.a" + ] + + lz4.xcconfig = { + "HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{lz4_path}/include/**" + } + end + + s.subspec "mbedtls" do |mbedtls| + mbedtls_path = "#{vendors_path}/mbedtls" + + mbedtls.preserve_paths = "#{mbedtls_path}/include/**/*.h" + + mbedtls.ios.vendored_libraries = [ + "#{mbedtls_path}/lib/ios/libmbedcrypto.a", + "#{mbedtls_path}/lib/ios/libmbedtls.a", + "#{mbedtls_path}/lib/ios/libmbedx509.a" + ] + + mbedtls.osx.vendored_libraries = [ + "#{mbedtls_path}/lib/macos/libmbedcrypto.a", + "#{mbedtls_path}/lib/macos/libmbedtls.a", + "#{mbedtls_path}/lib/macos/libmbedx509.a" + ] + + mbedtls.xcconfig = { + "HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{mbedtls_path}/include/**" + } + end + + s.subspec "asio" do |asio| + asio_path = "#{vendors_path}/asio" + + asio.preserve_paths = "#{asio_path}/asio/include/**/*.{hpp,ipp}" + + asio.xcconfig = { + "HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{asio_path}/asio/include/**" + } + end + + s.subspec "openvpn" do |openvpn| + openvpn_path = "#{vendors_path}/openvpn" + + openvpn.source_files = "#{openvpn_path}/client/*.{hpp,cpp}" + openvpn.private_header_files = "#{openvpn_path}/client/*.hpp" + + openvpn.preserve_paths = "#{openvpn_path}/openvpn/**/*.hpp" + + openvpn.compiler_flags = "-x objective-c++" + + openvpn.xcconfig = { + "HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{openvpn_path}/**", + "OTHER_CPLUSPLUSFLAGS" => "$(OTHER_CFLAGS) -DUSE_ASIO -DUSE_ASIO_THREADLOCAL -DASIO_STANDALONE -DASIO_NO_DEPRECATED -DHAVE_LZ4 -DUSE_MBEDTLS -DOPENVPN_FORCE_TUN_NULL -DUSE_TUN_BUILDER" + } + end + +end diff --git a/OpenVPN Adapter.xcodeproj/project.pbxproj b/OpenVPNAdapter.xcodeproj/project.pbxproj similarity index 85% rename from OpenVPN Adapter.xcodeproj/project.pbxproj rename to OpenVPNAdapter.xcodeproj/project.pbxproj index cacf628..57aed9b 100644 --- a/OpenVPN Adapter.xcodeproj/project.pbxproj +++ b/OpenVPNAdapter.xcodeproj/project.pbxproj @@ -35,6 +35,11 @@ C915F2231F61B0E700B3DF23 /* keyfile-decrypted.3des in Resources */ = {isa = PBXBuildFile; fileRef = C915F2211F61B0E700B3DF23 /* keyfile-decrypted.3des */; }; C915F2251F61B22300B3DF23 /* test-ca.crt in Resources */ = {isa = PBXBuildFile; fileRef = C915F2241F61B22300B3DF23 /* test-ca.crt */; }; C915F2261F61B22300B3DF23 /* test-ca.crt in Resources */ = {isa = PBXBuildFile; fileRef = C915F2241F61B22300B3DF23 /* test-ca.crt */; }; + C924E19E215CEBFC00AEDEB5 /* VPNProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C924E19D215CEBFC00AEDEB5 /* VPNProfile.swift */; }; + C924E19F215CEBFC00AEDEB5 /* VPNProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C924E19D215CEBFC00AEDEB5 /* VPNProfile.swift */; }; + C9310BBE20FF63A400838910 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9310BBD20FF63A400838910 /* UIKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + C9310BC120FF6E9700838910 /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9310BC020FF6E9700838910 /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9310BC220FF6E9700838910 /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9310BC020FF6E9700838910 /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9354F451F1E4A4500F4C935 /* OpenVPNReachabilityStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B795681F1D219C00CF35FE /* OpenVPNReachabilityStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9354F461F1E4A4600F4C935 /* OpenVPNReachabilityStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B795681F1D219C00CF35FE /* OpenVPNReachabilityStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9354F471F1E4AE200F4C935 /* OpenVPNReachabilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9354F431F1E49A500F4C935 /* OpenVPNReachabilityTests.swift */; }; @@ -88,17 +93,16 @@ C9657A681EB0D73200EFF210 /* OpenVPNMinTLSVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = C9657A661EB0D73200EFF210 /* OpenVPNMinTLSVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9657A6A1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = C9657A691EB0D75700EFF210 /* OpenVPNTLSCertProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9657A6B1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = C9657A691EB0D75700EFF210 /* OpenVPNTLSCertProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9659C3D2042CE67006FEFA8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9659C3C2042CE66006FEFA8 /* UIKit.framework */; }; - C98467A21EAA559B00272A9A /* local_vpn_server.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C98467A11EAA559B00272A9A /* local_vpn_server.ovpn */; }; - C98467A31EAA559B00272A9A /* local_vpn_server.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C98467A11EAA559B00272A9A /* local_vpn_server.ovpn */; }; C98467A61EAA5B7700272A9A /* OpenVPNConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; C98467A71EAA5B7700272A9A /* OpenVPNConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; C98467A81EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */; }; C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */; }; C98467AB1EAA5BE100272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; C98467AC1EAA5BE200272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; - C9B03A7C1EABA82200268B85 /* ProfileLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B03A7A1EABA6B500268B85 /* ProfileLoader.swift */; }; - C9B03A7D1EABA82300268B85 /* ProfileLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B03A7A1EABA6B500268B85 /* ProfileLoader.swift */; }; + C9A50F2D21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */; }; + C9A50F2E21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */; }; + C9A50F2F21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */; }; + C9A50F3021763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */; }; C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B795601F1D16AA00CF35FE /* OpenVPNReachability.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */; }; @@ -109,7 +113,6 @@ C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9B795631F1D182500CF35FE /* OpenVPNReachabilityTracker.mm */; }; C9B7956B1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B795691F1D26C900CF35FE /* OpenVPNReachability+Internal.h */; }; C9B7956C1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B795691F1D26C900CF35FE /* OpenVPNReachability+Internal.h */; }; - C9BB47601E71663A00F3F98C /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9BB47711E7171A100F3F98C /* OpenVPNError.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB476F1E7171A100F3F98C /* OpenVPNError.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9BB47721E7171A100F3F98C /* OpenVPNAdapterEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB47701E7171A100F3F98C /* OpenVPNAdapterEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */; }; @@ -121,8 +124,6 @@ C9BCE25B1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */; }; C9BCE25E1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */; }; C9BCE25F1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */; }; - C9C1E4101FA47117006ECA7D /* remote_vpn_server.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C9C1E40F1FA47117006ECA7D /* remote_vpn_server.ovpn */; }; - C9C1E4111FA47117006ECA7D /* remote_vpn_server.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = C9C1E40F1FA47117006ECA7D /* remote_vpn_server.ovpn */; }; C9C1E4141FA475B7006ECA7D /* CustomFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C1E4131FA475B7006ECA7D /* CustomFlow.swift */; }; C9C1E4151FA475B7006ECA7D /* CustomFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C1E4131FA475B7006ECA7D /* CustomFlow.swift */; }; C9C2B2B7200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C2B2B6200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -145,7 +146,6 @@ C9D2ABE01EA20F99007EDF9D /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C912BB241E7C3339002B9414 /* NetworkExtension.framework */; }; C9D2ABE11EA20F99007EDF9D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */; }; C9D2ABE41EA20F99007EDF9D /* OpenVPNAdapterEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB47701E7171A100F3F98C /* OpenVPNAdapterEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9D2ABE61EA20F99007EDF9D /* Umbrella-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9D2ABE81EA20F99007EDF9D /* OpenVPNError.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB476F1E7171A100F3F98C /* OpenVPNError.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9D2ABEA1EA20F99007EDF9D /* ovpncli.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9FD92181E9A667600374FC4 /* ovpncli.hpp */; }; C9D2ABF61EA212A3007EDF9D /* OpenVPNAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */; }; @@ -177,12 +177,12 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNNetworkSettingsBuilder.h; sourceTree = ""; }; - ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OpenVPNNetworkSettingsBuilder.m; sourceTree = ""; }; - ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNPacketFlowBridge.h; sourceTree = ""; }; - ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNPacketFlowBridge.mm; sourceTree = ""; }; - ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNAdapter.h; sourceTree = ""; }; - ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNAdapter.mm; sourceTree = ""; }; + ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNNetworkSettingsBuilder.h; path = OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h; sourceTree = ""; }; + ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OpenVPNNetworkSettingsBuilder.m; path = OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m; sourceTree = ""; }; + ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNPacketFlowBridge.h; path = OpenVPNAdapter/OpenVPNPacketFlowBridge.h; sourceTree = ""; }; + ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNPacketFlowBridge.mm; path = OpenVPNAdapter/OpenVPNPacketFlowBridge.mm; sourceTree = ""; }; + ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNAdapter.h; path = OpenVPNAdapter/OpenVPNAdapter.h; sourceTree = ""; }; + ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNAdapter.mm; path = OpenVPNAdapter/OpenVPNAdapter.mm; sourceTree = ""; }; C90BAD261E73F47E00DEFB32 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; C90BAD271E73F47E00DEFB32 /* Info-Tests.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Tests.plist"; sourceTree = ""; }; C90BAD291E73F56800DEFB32 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; }; @@ -199,70 +199,73 @@ C915F21E1F6199E300B3DF23 /* keyfile-encrypted.3des */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "keyfile-encrypted.3des"; sourceTree = ""; }; C915F2211F61B0E700B3DF23 /* keyfile-decrypted.3des */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "keyfile-decrypted.3des"; sourceTree = ""; }; C915F2241F61B22300B3DF23 /* test-ca.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "test-ca.crt"; sourceTree = ""; }; + C924E19C215CE9BC00AEDEB5 /* vpn_profile_template.erb */ = {isa = PBXFileReference; lastKnownFileType = text; path = vpn_profile_template.erb; sourceTree = ""; }; + C924E19D215CEBFC00AEDEB5 /* VPNProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNProfile.swift; sourceTree = ""; }; + C924E1A0215CEDE600AEDEB5 /* fill_vpn_profile.rb */ = {isa = PBXFileReference; lastKnownFileType = text.script.ruby; path = fill_vpn_profile.rb; sourceTree = ""; }; + C924E1A1215CF37300AEDEB5 /* environment.rb.example */ = {isa = PBXFileReference; lastKnownFileType = text; path = environment.rb.example; sourceTree = ""; }; + C9310BBD20FF63A400838910 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + C9310BC020FF6E9700838910 /* Umbrella-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Umbrella-Header.h"; path = "OpenVPNAdapter/Umbrella-Header.h"; sourceTree = ""; }; C9354F431F1E49A500F4C935 /* OpenVPNReachabilityTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenVPNReachabilityTests.swift; sourceTree = ""; }; - C93779D31EAE32670030A362 /* OpenVPNCredentials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNCredentials.h; sourceTree = ""; }; - C93779D41EAE32670030A362 /* OpenVPNCredentials.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNCredentials.mm; sourceTree = ""; }; - C93779D91EAE32880030A362 /* OpenVPNCredentials+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNCredentials+Internal.h"; sourceTree = ""; }; - C93A4F611EE18009004DC561 /* OpenVPNError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpenVPNError.m; sourceTree = ""; }; + C93779D31EAE32670030A362 /* OpenVPNCredentials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNCredentials.h; path = OpenVPNAdapter/OpenVPNCredentials.h; sourceTree = ""; }; + C93779D41EAE32670030A362 /* OpenVPNCredentials.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNCredentials.mm; path = OpenVPNAdapter/OpenVPNCredentials.mm; sourceTree = ""; }; + C93779D91EAE32880030A362 /* OpenVPNCredentials+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNCredentials+Internal.h"; path = "OpenVPNAdapter/OpenVPNCredentials+Internal.h"; sourceTree = ""; }; + C93A4F611EE18009004DC561 /* OpenVPNError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenVPNError.m; path = OpenVPNAdapter/OpenVPNError.m; sourceTree = ""; }; C94605E81EAA656B00971516 /* OpenVPNConfigurationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenVPNConfigurationTests.swift; sourceTree = ""; }; - C9657A151EB0A7F800EFF210 /* OpenVPNConnectionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNConnectionInfo.h; sourceTree = ""; }; - C9657A161EB0A7F800EFF210 /* OpenVPNConnectionInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNConnectionInfo.mm; sourceTree = ""; }; - C9657A1B1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNConnectionInfo+Internal.h"; sourceTree = ""; }; - C9657A231EB0B60200EFF210 /* OpenVPNTransportStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNTransportStats.h; sourceTree = ""; }; - C9657A241EB0B60200EFF210 /* OpenVPNTransportStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNTransportStats.mm; sourceTree = ""; }; - C9657A291EB0B6FA00EFF210 /* OpenVPNTransportStats+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNTransportStats+Internal.h"; sourceTree = ""; }; - C9657A321EB0BA3900EFF210 /* OpenVPNInterfaceStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNInterfaceStats.h; sourceTree = ""; }; - C9657A331EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNInterfaceStats.mm; sourceTree = ""; }; - C9657A381EB0BAAB00EFF210 /* OpenVPNInterfaceStats+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNInterfaceStats+Internal.h"; sourceTree = ""; }; - C9657A3E1EB0CAC200EFF210 /* OpenVPNServerEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNServerEntry.h; sourceTree = ""; }; - C9657A3F1EB0CAC200EFF210 /* OpenVPNServerEntry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNServerEntry.mm; sourceTree = ""; }; - C9657A441EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNServerEntry+Internal.h"; sourceTree = ""; }; - C9657A4A1EB0CD6C00EFF210 /* OpenVPNProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNProperties.h; sourceTree = ""; }; - C9657A4B1EB0CD6C00EFF210 /* OpenVPNProperties.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNProperties.mm; sourceTree = ""; }; - C9657A501EB0CD9200EFF210 /* OpenVPNProperties+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNProperties+Internal.h"; sourceTree = ""; }; - C9657A5D1EB0D60700EFF210 /* OpenVPNTransportProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNTransportProtocol.h; sourceTree = ""; }; - C9657A601EB0D64E00EFF210 /* OpenVPNIPv6Preference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNIPv6Preference.h; sourceTree = ""; }; - C9657A631EB0D6AD00EFF210 /* OpenVPNCompressionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNCompressionMode.h; sourceTree = ""; }; - C9657A661EB0D73200EFF210 /* OpenVPNMinTLSVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNMinTLSVersion.h; sourceTree = ""; }; - C9657A691EB0D75700EFF210 /* OpenVPNTLSCertProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNTLSCertProfile.h; sourceTree = ""; }; - C9659C3C2042CE66006FEFA8 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - C98467A11EAA559B00272A9A /* local_vpn_server.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = local_vpn_server.ovpn; sourceTree = ""; }; - C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNConfiguration.h; sourceTree = ""; }; - C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNConfiguration.mm; sourceTree = ""; }; - C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OpenVPNConfiguration+Internal.h"; sourceTree = ""; }; - C9B03A7A1EABA6B500268B85 /* ProfileLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileLoader.swift; sourceTree = ""; }; - C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNReachability.h; sourceTree = ""; }; - C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNReachability.mm; sourceTree = ""; }; - C9B795621F1D182500CF35FE /* OpenVPNReachabilityTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNReachabilityTracker.h; sourceTree = ""; }; - C9B795631F1D182500CF35FE /* OpenVPNReachabilityTracker.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNReachabilityTracker.mm; sourceTree = ""; }; - C9B795681F1D219C00CF35FE /* OpenVPNReachabilityStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNReachabilityStatus.h; sourceTree = ""; }; - C9B795691F1D26C900CF35FE /* OpenVPNReachability+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNReachability+Internal.h"; sourceTree = ""; }; + C9657A151EB0A7F800EFF210 /* OpenVPNConnectionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNConnectionInfo.h; path = OpenVPNAdapter/OpenVPNConnectionInfo.h; sourceTree = ""; }; + C9657A161EB0A7F800EFF210 /* OpenVPNConnectionInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNConnectionInfo.mm; path = OpenVPNAdapter/OpenVPNConnectionInfo.mm; sourceTree = ""; }; + C9657A1B1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNConnectionInfo+Internal.h"; path = "OpenVPNAdapter/OpenVPNConnectionInfo+Internal.h"; sourceTree = ""; }; + C9657A231EB0B60200EFF210 /* OpenVPNTransportStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNTransportStats.h; path = OpenVPNAdapter/OpenVPNTransportStats.h; sourceTree = ""; }; + C9657A241EB0B60200EFF210 /* OpenVPNTransportStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNTransportStats.mm; path = OpenVPNAdapter/OpenVPNTransportStats.mm; sourceTree = ""; }; + C9657A291EB0B6FA00EFF210 /* OpenVPNTransportStats+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNTransportStats+Internal.h"; path = "OpenVPNAdapter/OpenVPNTransportStats+Internal.h"; sourceTree = ""; }; + C9657A321EB0BA3900EFF210 /* OpenVPNInterfaceStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNInterfaceStats.h; path = OpenVPNAdapter/OpenVPNInterfaceStats.h; sourceTree = ""; }; + C9657A331EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNInterfaceStats.mm; path = OpenVPNAdapter/OpenVPNInterfaceStats.mm; sourceTree = ""; }; + C9657A381EB0BAAB00EFF210 /* OpenVPNInterfaceStats+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNInterfaceStats+Internal.h"; path = "OpenVPNAdapter/OpenVPNInterfaceStats+Internal.h"; sourceTree = ""; }; + C9657A3E1EB0CAC200EFF210 /* OpenVPNServerEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNServerEntry.h; path = OpenVPNAdapter/OpenVPNServerEntry.h; sourceTree = ""; }; + C9657A3F1EB0CAC200EFF210 /* OpenVPNServerEntry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNServerEntry.mm; path = OpenVPNAdapter/OpenVPNServerEntry.mm; sourceTree = ""; }; + C9657A441EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNServerEntry+Internal.h"; path = "OpenVPNAdapter/OpenVPNServerEntry+Internal.h"; sourceTree = ""; }; + C9657A4A1EB0CD6C00EFF210 /* OpenVPNProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNProperties.h; path = OpenVPNAdapter/OpenVPNProperties.h; sourceTree = ""; }; + C9657A4B1EB0CD6C00EFF210 /* OpenVPNProperties.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNProperties.mm; path = OpenVPNAdapter/OpenVPNProperties.mm; sourceTree = ""; }; + C9657A501EB0CD9200EFF210 /* OpenVPNProperties+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNProperties+Internal.h"; path = "OpenVPNAdapter/OpenVPNProperties+Internal.h"; sourceTree = ""; }; + C9657A5D1EB0D60700EFF210 /* OpenVPNTransportProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNTransportProtocol.h; path = OpenVPNAdapter/OpenVPNTransportProtocol.h; sourceTree = ""; }; + C9657A601EB0D64E00EFF210 /* OpenVPNIPv6Preference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNIPv6Preference.h; path = OpenVPNAdapter/OpenVPNIPv6Preference.h; sourceTree = ""; }; + C9657A631EB0D6AD00EFF210 /* OpenVPNCompressionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNCompressionMode.h; path = OpenVPNAdapter/OpenVPNCompressionMode.h; sourceTree = ""; }; + C9657A661EB0D73200EFF210 /* OpenVPNMinTLSVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNMinTLSVersion.h; path = OpenVPNAdapter/OpenVPNMinTLSVersion.h; sourceTree = ""; }; + C9657A691EB0D75700EFF210 /* OpenVPNTLSCertProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNTLSCertProfile.h; path = OpenVPNAdapter/OpenVPNTLSCertProfile.h; sourceTree = ""; }; + C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNConfiguration.h; path = OpenVPNAdapter/OpenVPNConfiguration.h; sourceTree = ""; }; + C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNConfiguration.mm; path = OpenVPNAdapter/OpenVPNConfiguration.mm; sourceTree = ""; }; + C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "OpenVPNConfiguration+Internal.h"; path = "OpenVPNAdapter/OpenVPNConfiguration+Internal.h"; sourceTree = ""; }; + C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSArray+OpenVPNAdditions.h"; path = "Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h"; sourceTree = SOURCE_ROOT; }; + C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSArray+OpenVPNAdditions.m"; path = "Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m"; sourceTree = SOURCE_ROOT; }; + C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachability.h; path = OpenVPNAdapter/OpenVPNReachability.h; sourceTree = ""; }; + C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNReachability.mm; path = OpenVPNAdapter/OpenVPNReachability.mm; sourceTree = ""; }; + C9B795621F1D182500CF35FE /* OpenVPNReachabilityTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachabilityTracker.h; path = OpenVPNAdapter/OpenVPNReachabilityTracker.h; sourceTree = ""; }; + C9B795631F1D182500CF35FE /* OpenVPNReachabilityTracker.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNReachabilityTracker.mm; path = OpenVPNAdapter/OpenVPNReachabilityTracker.mm; sourceTree = ""; }; + C9B795681F1D219C00CF35FE /* OpenVPNReachabilityStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachabilityStatus.h; path = OpenVPNAdapter/OpenVPNReachabilityStatus.h; sourceTree = ""; }; + C9B795691F1D26C900CF35FE /* OpenVPNReachability+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNReachability+Internal.h"; path = "OpenVPNAdapter/OpenVPNReachability+Internal.h"; sourceTree = ""; }; C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenVPNAdapter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Umbrella-Header.h"; sourceTree = ""; }; - C9BB476F1E7171A100F3F98C /* OpenVPNError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OpenVPNError.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - C9BB47701E7171A100F3F98C /* OpenVPNAdapterEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNAdapterEvent.h; sourceTree = ""; }; + C9BB476F1E7171A100F3F98C /* OpenVPNError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OpenVPNError.h; path = OpenVPNAdapter/OpenVPNError.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + C9BB47701E7171A100F3F98C /* OpenVPNAdapterEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNAdapterEvent.h; path = OpenVPNAdapter/OpenVPNAdapterEvent.h; sourceTree = ""; }; C9BB478E1E71821A00F3F98C /* OpenVPNAdapterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenVPNAdapterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenVPNAdapterTests.swift; sourceTree = ""; }; C9BB47A11E7183DB00F3F98C /* Bundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; - C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNSessionToken.h; sourceTree = ""; }; - C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNSessionToken.mm; sourceTree = ""; }; - C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNSessionToken+Internal.h"; sourceTree = ""; }; - C9C1E40F1FA47117006ECA7D /* remote_vpn_server.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = remote_vpn_server.ovpn; sourceTree = ""; }; + C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNSessionToken.h; path = OpenVPNAdapter/OpenVPNSessionToken.h; sourceTree = ""; }; + C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNSessionToken.mm; path = OpenVPNAdapter/OpenVPNSessionToken.mm; sourceTree = ""; }; + C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OpenVPNSessionToken+Internal.h"; path = "OpenVPNAdapter/OpenVPNSessionToken+Internal.h"; sourceTree = ""; }; C9C1E4131FA475B7006ECA7D /* CustomFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomFlow.swift; sourceTree = ""; }; - C9C2B2B6200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNAdapterPacketFlow.h; sourceTree = ""; }; - C9C2B2B9200CC42A00CA0FF3 /* OpenVPNPacket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNPacket.h; sourceTree = ""; }; - C9C2B2BA200CC42A00CA0FF3 /* OpenVPNPacket.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNPacket.mm; sourceTree = ""; }; + C9C2B2B6200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNAdapterPacketFlow.h; path = OpenVPNAdapter/OpenVPNAdapterPacketFlow.h; sourceTree = ""; }; + C9C2B2B9200CC42A00CA0FF3 /* OpenVPNPacket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNPacket.h; path = OpenVPNAdapter/OpenVPNPacket.h; sourceTree = ""; }; + C9C2B2BA200CC42A00CA0FF3 /* OpenVPNPacket.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNPacket.mm; path = OpenVPNAdapter/OpenVPNPacket.mm; sourceTree = ""; }; C9CA4DD11F602F7B00C4F184 /* OpenVPNCertificate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNCertificate.h; sourceTree = ""; }; C9CA4DD21F602F7B00C4F184 /* OpenVPNCertificate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpenVPNCertificate.m; sourceTree = ""; }; C9CA4DE01F603A5300C4F184 /* OpenVPNCertificateTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenVPNCertificateTests.swift; sourceTree = ""; }; - C9CDFDD9200781AF00323B73 /* OpenVPNClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNClient.h; sourceTree = ""; }; - C9CDFDDA200781AF00323B73 /* OpenVPNClient.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNClient.mm; sourceTree = ""; }; + C9CDFDD9200781AF00323B73 /* OpenVPNClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OpenVPNClient.h; path = OpenVPNAdapter/OpenVPNClient.h; sourceTree = ""; }; + C9CDFDDA200781AF00323B73 /* OpenVPNClient.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNClient.mm; path = OpenVPNAdapter/OpenVPNClient.mm; sourceTree = ""; }; C9D2ABF01EA20F99007EDF9D /* OpenVPNAdapter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenVPNAdapter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C9D2ABFF1EA212A3007EDF9D /* OpenVPNAdapterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenVPNAdapterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+OpenVPNError.h"; sourceTree = ""; }; - C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSError+OpenVPNError.m"; sourceTree = ""; }; - C9FD92181E9A667600374FC4 /* ovpncli.hpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ovpncli.hpp; path = Vendors/openvpn/client/ovpncli.hpp; sourceTree = ""; }; - C9FD92191E9A667600374FC4 /* ovpncli.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ovpncli.cpp; path = Vendors/openvpn/client/ovpncli.cpp; sourceTree = ""; }; + C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSError+OpenVPNError.h"; path = "../NSError+OpenVPNError.h"; sourceTree = ""; }; + C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSError+OpenVPNError.m"; path = "../NSError+OpenVPNError.m"; sourceTree = ""; }; + C9FD92181E9A667600374FC4 /* ovpncli.hpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ovpncli.hpp; path = client/ovpncli.hpp; sourceTree = ""; }; + C9FD92191E9A667600374FC4 /* ovpncli.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ovpncli.cpp; path = client/ovpncli.cpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -270,7 +273,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C9659C3D2042CE67006FEFA8 /* UIKit.framework in Frameworks */, + C9310BBE20FF63A400838910 /* UIKit.framework in Frameworks */, C912BB251E7C3339002B9414 /* NetworkExtension.framework in Frameworks */, C90BAD311E73FF6C00DEFB32 /* SystemConfiguration.framework in Frameworks */, ); @@ -322,8 +325,9 @@ isa = PBXGroup; children = ( C90BAD251E73F47E00DEFB32 /* Configuration */, - C9BB475D1E71663A00F3F98C /* OpenVPN Adapter */, - C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */, + C924E19B215CE76600AEDEB5 /* Scripts */, + C9BB475D1E71663A00F3F98C /* Sources */, + C9BB478F1E71821A00F3F98C /* Tests */, C91031031E47237A0004DFFE /* Products */, C91031361E472C870004DFFE /* Frameworks */, ); @@ -343,7 +347,7 @@ C91031361E472C870004DFFE /* Frameworks */ = { isa = PBXGroup; children = ( - C9659C3C2042CE66006FEFA8 /* UIKit.framework */, + C9310BBD20FF63A400838910 /* UIKit.framework */, C912BB241E7C3339002B9414 /* NetworkExtension.framework */, C90BAD301E73FF6C00DEFB32 /* SystemConfiguration.framework */, ); @@ -372,6 +376,7 @@ C9657A4B1EB0CD6C00EFF210 /* OpenVPNProperties.mm */, ); name = Configuration; + path = ..; sourceTree = ""; }; C9235AC51EB24F1100C7D303 /* Stats and Info */ = { @@ -391,6 +396,39 @@ C9657A331EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm */, ); name = "Stats and Info"; + path = ..; + sourceTree = ""; + }; + C924E19A215CE50B00AEDEB5 /* Extensions */ = { + isa = PBXGroup; + children = ( + C9BB47A11E7183DB00F3F98C /* Bundle.swift */, + ); + name = Extensions; + sourceTree = ""; + }; + C924E19B215CE76600AEDEB5 /* Scripts */ = { + isa = PBXGroup; + children = ( + C924E19C215CE9BC00AEDEB5 /* vpn_profile_template.erb */, + C924E1A1215CF37300AEDEB5 /* environment.rb.example */, + C924E1A0215CEDE600AEDEB5 /* fill_vpn_profile.rb */, + ); + path = Scripts; + sourceTree = ""; + }; + C9310BBF20FF667F00838910 /* OpenVPNAdapter */ = { + isa = PBXGroup; + children = ( + C9CA4DD01F602D8300C4F184 /* Certificates and Keys */, + C9B7955B1F1D165700CF35FE /* Reachability */, + C9235AC41EB24F0100C7D303 /* Configuration */, + C9235AC51EB24F1100C7D303 /* Stats and Info */, + C9BB47671E7169F000F3F98C /* Adapter */, + C9BB47641E7169AF00F3F98C /* Libraries */, + C9BB47651E7169B700F3F98C /* Framework */, + ); + path = OpenVPNAdapter; sourceTree = ""; }; C9B7955B1F1D165700CF35FE /* Reachability */ = { @@ -404,20 +442,15 @@ C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */, ); name = Reachability; + path = ..; sourceTree = ""; }; - C9BB475D1E71663A00F3F98C /* OpenVPN Adapter */ = { + C9BB475D1E71663A00F3F98C /* Sources */ = { isa = PBXGroup; children = ( - C9CA4DD01F602D8300C4F184 /* Certificates and Keys */, - C9B7955B1F1D165700CF35FE /* Reachability */, - C9235AC41EB24F0100C7D303 /* Configuration */, - C9235AC51EB24F1100C7D303 /* Stats and Info */, - C9BB47671E7169F000F3F98C /* Adapter */, - C9BB47641E7169AF00F3F98C /* Libraries */, - C9BB47651E7169B700F3F98C /* Framework */, + C9310BBF20FF667F00838910 /* OpenVPNAdapter */, ); - path = "OpenVPN Adapter"; + path = Sources; sourceTree = ""; }; C9BB47641E7169AF00F3F98C /* Libraries */ = { @@ -426,15 +459,16 @@ C9FF73B71EB7421600E995AC /* Helpers */, C9BB47681E716ABF00F3F98C /* Vendors */, ); - name = Libraries; + path = Libraries; sourceTree = ""; }; C9BB47651E7169B700F3F98C /* Framework */ = { isa = PBXGroup; children = ( - C9BB475E1E71663A00F3F98C /* Umbrella-Header.h */, + C9310BC020FF6E9700838910 /* Umbrella-Header.h */, ); name = Framework; + path = ..; sourceTree = ""; }; C9BB47671E7169F000F3F98C /* Adapter */ = { @@ -456,6 +490,7 @@ ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */, ); name = Adapter; + path = ..; sourceTree = ""; }; C9BB47681E716ABF00F3F98C /* Vendors */ = { @@ -463,7 +498,7 @@ children = ( C9BB47691E716AC500F3F98C /* OpenVPN */, ); - name = Vendors; + path = Vendors; sourceTree = ""; }; C9BB47691E716AC500F3F98C /* OpenVPN */ = { @@ -473,16 +508,17 @@ C9FD92191E9A667600374FC4 /* ovpncli.cpp */, ); name = OpenVPN; + path = openvpn; sourceTree = ""; }; - C9BB478F1E71821A00F3F98C /* OpenVPN Adapter Tests */ = { + C9BB478F1E71821A00F3F98C /* Tests */ = { isa = PBXGroup; children = ( C9BB479D1E71837200F3F98C /* Adapter Tests */, C9BB479E1E7183B800F3F98C /* Libraries */, C9BB479A1E71836100F3F98C /* Resources */, ); - path = "OpenVPN Adapter Tests"; + path = Tests; sourceTree = ""; }; C9BB479A1E71836100F3F98C /* Resources */ = { @@ -510,9 +546,8 @@ C9BB479E1E7183B800F3F98C /* Libraries */ = { isa = PBXGroup; children = ( - C9C1E40E1FA470EB006ECA7D /* Configuration */, - C9C1E4121FA47586006ECA7D /* Base */, C9BB479F1E7183C200F3F98C /* Helpers */, + C924E19A215CE50B00AEDEB5 /* Extensions */, ); name = Libraries; sourceTree = ""; @@ -520,37 +555,12 @@ C9BB479F1E7183C200F3F98C /* Helpers */ = { isa = PBXGroup; children = ( - C9BB47A01E7183CA00F3F98C /* Utils */, + C9C1E4131FA475B7006ECA7D /* CustomFlow.swift */, + C924E19D215CEBFC00AEDEB5 /* VPNProfile.swift */, ); name = Helpers; sourceTree = ""; }; - C9BB47A01E7183CA00F3F98C /* Utils */ = { - isa = PBXGroup; - children = ( - C9BB47A11E7183DB00F3F98C /* Bundle.swift */, - C9B03A7A1EABA6B500268B85 /* ProfileLoader.swift */, - ); - name = Utils; - sourceTree = ""; - }; - C9C1E40E1FA470EB006ECA7D /* Configuration */ = { - isa = PBXGroup; - children = ( - C98467A11EAA559B00272A9A /* local_vpn_server.ovpn */, - C9C1E40F1FA47117006ECA7D /* remote_vpn_server.ovpn */, - ); - name = Configuration; - sourceTree = ""; - }; - C9C1E4121FA47586006ECA7D /* Base */ = { - isa = PBXGroup; - children = ( - C9C1E4131FA475B7006ECA7D /* CustomFlow.swift */, - ); - name = Base; - sourceTree = ""; - }; C9CA4DD01F602D8300C4F184 /* Certificates and Keys */ = { isa = PBXGroup; children = ( @@ -568,6 +578,8 @@ children = ( C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */, C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */, + C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */, + C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */, ); name = Extensions; sourceTree = ""; @@ -605,12 +617,12 @@ C9B7956B1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */, ABD6EF101F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h in Headers */, C9657A2B1EB0B6FA00EFF210 /* OpenVPNTransportStats+Internal.h in Headers */, - C9BB47601E71663A00F3F98C /* Umbrella-Header.h in Headers */, C9657A5E1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1D1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, C915F1F41F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A171EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, + C9310BC120FF6E9700838910 /* Umbrella-Header.h in Headers */, C9BB47711E7171A100F3F98C /* OpenVPNError.h in Headers */, C9B795641F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */, ABD6EF091F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */, @@ -626,6 +638,7 @@ C9657A6A1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A461EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A251EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, + C9A50F2D21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -651,12 +664,12 @@ C9B7956C1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */, ABD6EF111F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h in Headers */, C9657A2F1EB0B79500EFF210 /* OpenVPNTransportStats+Internal.h in Headers */, - C9D2ABE61EA20F99007EDF9D /* Umbrella-Header.h in Headers */, C9657A5F1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1E1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, C915F1F51F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A181EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, + C9310BC220FF6E9700838910 /* Umbrella-Header.h in Headers */, C9D2ABE81EA20F99007EDF9D /* OpenVPNError.h in Headers */, C9B795651F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */, ABD6EF0A1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */, @@ -672,15 +685,16 @@ C9657A6B1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A471EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A261EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, + C9A50F2E21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - C9BB475B1E71663A00F3F98C /* OpenVPN Adapter iOS */ = { + C9BB475B1E71663A00F3F98C /* OpenVPNAdapter iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter iOS" */; + buildConfigurationList = C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPNAdapter iOS" */; buildPhases = ( C9BB476E1E716E7000F3F98C /* Check Warning And Error Tags */, C9BB47571E71663A00F3F98C /* Sources */, @@ -692,15 +706,16 @@ ); dependencies = ( ); - name = "OpenVPN Adapter iOS"; + name = "OpenVPNAdapter iOS"; productName = OpenVPNAdapter; productReference = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; productType = "com.apple.product-type.framework"; }; - C9BB478D1E71821A00F3F98C /* OpenVPN Adapter iOS Tests */ = { + C9BB478D1E71821A00F3F98C /* OpenVPNAdapter iOS Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter iOS Tests" */; + buildConfigurationList = C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPNAdapter iOS Tests" */; buildPhases = ( + C924E1A5215D15C600AEDEB5 /* Fill VPN Profile */, C9BB478A1E71821A00F3F98C /* Sources */, C9BB478B1E71821A00F3F98C /* Frameworks */, C9BB478C1E71821A00F3F98C /* Resources */, @@ -710,14 +725,14 @@ dependencies = ( C9D2AC021EA214D3007EDF9D /* PBXTargetDependency */, ); - name = "OpenVPN Adapter iOS Tests"; + name = "OpenVPNAdapter iOS Tests"; productName = "OpenVPN Adapter Tests"; productReference = C9BB478E1E71821A00F3F98C /* OpenVPNAdapterTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - C9D2ABD81EA20F99007EDF9D /* OpenVPN Adapter macOS */ = { + C9D2ABD81EA20F99007EDF9D /* OpenVPNAdapter macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = C9D2ABED1EA20F99007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPN Adapter macOS" */; + buildConfigurationList = C9D2ABED1EA20F99007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPNAdapter macOS" */; buildPhases = ( C9D2ABD91EA20F99007EDF9D /* Check Warning And Error Tags */, C9D2ABDA1EA20F99007EDF9D /* Sources */, @@ -729,15 +744,16 @@ ); dependencies = ( ); - name = "OpenVPN Adapter macOS"; + name = "OpenVPNAdapter macOS"; productName = OpenVPNAdapter; productReference = C9D2ABF01EA20F99007EDF9D /* OpenVPNAdapter.framework */; productType = "com.apple.product-type.framework"; }; - C9D2ABF21EA212A3007EDF9D /* OpenVPN Adapter macOS Tests */ = { + C9D2ABF21EA212A3007EDF9D /* OpenVPNAdapter macOS Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = C9D2ABFC1EA212A3007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPN Adapter macOS Tests" */; + buildConfigurationList = C9D2ABFC1EA212A3007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPNAdapter macOS Tests" */; buildPhases = ( + C924E1A4215D021B00AEDEB5 /* Fill VPN Profile */, C9D2ABF51EA212A3007EDF9D /* Sources */, C9D2ABF81EA212A3007EDF9D /* Frameworks */, C9D2ABFA1EA212A3007EDF9D /* Resources */, @@ -747,7 +763,7 @@ dependencies = ( C9D2AC041EA214DF007EDF9D /* PBXTargetDependency */, ); - name = "OpenVPN Adapter macOS Tests"; + name = "OpenVPNAdapter macOS Tests"; productName = "OpenVPN Adapter Tests"; productReference = C9D2ABFF1EA212A3007EDF9D /* OpenVPNAdapterTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; @@ -781,7 +797,7 @@ }; }; }; - buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Adapter" */; + buildConfigurationList = C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPNAdapter" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; @@ -794,10 +810,10 @@ projectDirPath = ""; projectRoot = ""; targets = ( - C9BB475B1E71663A00F3F98C /* OpenVPN Adapter iOS */, - C9D2ABD81EA20F99007EDF9D /* OpenVPN Adapter macOS */, - C9BB478D1E71821A00F3F98C /* OpenVPN Adapter iOS Tests */, - C9D2ABF21EA212A3007EDF9D /* OpenVPN Adapter macOS Tests */, + C9BB475B1E71663A00F3F98C /* OpenVPNAdapter iOS */, + C9D2ABD81EA20F99007EDF9D /* OpenVPNAdapter macOS */, + C9BB478D1E71821A00F3F98C /* OpenVPNAdapter iOS Tests */, + C9D2ABF21EA212A3007EDF9D /* OpenVPNAdapter macOS Tests */, ); }; /* End PBXProject section */ @@ -814,10 +830,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C98467A21EAA559B00272A9A /* local_vpn_server.ovpn in Resources */, C915F2221F61B0E700B3DF23 /* keyfile-decrypted.3des in Resources */, C915F2251F61B22300B3DF23 /* test-ca.crt in Resources */, - C9C1E4101FA47117006ECA7D /* remote_vpn_server.ovpn in Resources */, C915F21F1F6199E300B3DF23 /* keyfile-encrypted.3des in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -833,10 +847,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C98467A31EAA559B00272A9A /* local_vpn_server.ovpn in Resources */, C915F2231F61B0E700B3DF23 /* keyfile-decrypted.3des in Resources */, C915F2261F61B22300B3DF23 /* test-ca.crt in Resources */, - C9C1E4111FA47117006ECA7D /* remote_vpn_server.ovpn in Resources */, C915F2201F6199E300B3DF23 /* keyfile-encrypted.3des in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -844,6 +856,42 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + C924E1A4215D021B00AEDEB5 /* Fill VPN Profile */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Fill VPN Profile"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "ruby \"${SRCROOT}/Scripts/fill_vpn_profile.rb\"\n"; + }; + C924E1A5215D15C600AEDEB5 /* Fill VPN Profile */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Fill VPN Profile"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "ruby \"${SRCROOT}/Scripts/fill_vpn_profile.rb\"\n"; + }; C9BB476E1E716E7000F3F98C /* Check Warning And Error Tags */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -856,7 +904,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/OpenVPN Adapter\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; + shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/Sources/OpenVPNAdapter\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; }; C9D2ABD91EA20F99007EDF9D /* Check Warning And Error Tags */ = { isa = PBXShellScriptBuildPhase; @@ -870,7 +918,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/OpenVPN Adapter\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; + shellScript = "TAGS=\"TODO:|FIXME:|\\?\\?\\?|\\!\\!\\!\"\nERRORTAG=\"ERROR:\"\nfind \"${SRCROOT}/Sources/OpenVPNAdapter\" \\( -name \"*.h\" -or -name \"*.mm\" -or -name \"*.m\" -or -name \"*.swift\" \\) ! -path \"*/Vendors/*\" -print0 | xargs -0 egrep --with-filename --line-number --only-matching \"($TAGS).*\\$|($ERRORTAG).*\\$\" | perl -p -e \"s/($TAGS)/ warning: \\$1/\" | perl -p -e \"s/($ERRORTAG)/ error: \\$1/\""; }; /* End PBXShellScriptBuildPhase section */ @@ -893,6 +941,7 @@ C9CDFDDD200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F61F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9FD921B1E9A667600374FC4 /* ovpncli.cpp in Sources */, + C9A50F2F21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */, C9657A361EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A211EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BD200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, @@ -907,10 +956,10 @@ buildActionMask = 2147483647; files = ( C9C1E4141FA475B7006ECA7D /* CustomFlow.swift in Sources */, + C924E19E215CEBFC00AEDEB5 /* VPNProfile.swift in Sources */, C94605E91EAA656B00971516 /* OpenVPNConfigurationTests.swift in Sources */, C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */, C915F1F91F615BB400B3DF23 /* OpenVPNPrivateKeyTests.swift in Sources */, - C9B03A7C1EABA82200268B85 /* ProfileLoader.swift in Sources */, C9CA4DE11F603A5300C4F184 /* OpenVPNCertificateTests.swift in Sources */, C9BB47A21E7183DB00F3F98C /* Bundle.swift in Sources */, ); @@ -934,6 +983,7 @@ C9CDFDDE200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F71F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9D2ABDE1EA20F99007EDF9D /* ovpncli.cpp in Sources */, + C9A50F3021763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */, C9657A371EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A221EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BE200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, @@ -947,12 +997,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C924E19F215CEBFC00AEDEB5 /* VPNProfile.swift in Sources */, C94605EA1EAA65F200971516 /* OpenVPNConfigurationTests.swift in Sources */, C9D2ABF61EA212A3007EDF9D /* OpenVPNAdapterTests.swift in Sources */, C9CA4DE21F603A5300C4F184 /* OpenVPNCertificateTests.swift in Sources */, C9354F471F1E4AE200F4C935 /* OpenVPNReachabilityTests.swift in Sources */, C915F1FA1F615BB400B3DF23 /* OpenVPNPrivateKeyTests.swift in Sources */, - C9B03A7D1EABA82300268B85 /* ProfileLoader.swift in Sources */, C9C1E4151FA475B7006ECA7D /* CustomFlow.swift in Sources */, C9D2ABF71EA212A3007EDF9D /* Bundle.swift in Sources */, ); @@ -963,12 +1013,12 @@ /* Begin PBXTargetDependency section */ C9D2AC021EA214D3007EDF9D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = C9BB475B1E71663A00F3F98C /* OpenVPN Adapter iOS */; + target = C9BB475B1E71663A00F3F98C /* OpenVPNAdapter iOS */; targetProxy = C9D2AC011EA214D3007EDF9D /* PBXContainerItemProxy */; }; C9D2AC041EA214DF007EDF9D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = C9D2ABD81EA20F99007EDF9D /* OpenVPN Adapter macOS */; + target = C9D2ABD81EA20F99007EDF9D /* OpenVPNAdapter macOS */; targetProxy = C9D2AC031EA214DF007EDF9D /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1441,7 +1491,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPN Adapter" */ = { + C91030FB1E471D760004DFFE /* Build configuration list for PBXProject "OpenVPNAdapter" */ = { isa = XCConfigurationList; buildConfigurations = ( C91030FC1E471D760004DFFE /* Debug */, @@ -1450,7 +1500,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter iOS" */ = { + C9BB47631E71663A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPNAdapter iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( C9BB47611E71663A00F3F98C /* Debug */, @@ -1459,7 +1509,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPN Adapter iOS Tests" */ = { + C9BB47961E71821A00F3F98C /* Build configuration list for PBXNativeTarget "OpenVPNAdapter iOS Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( C9BB47971E71821A00F3F98C /* Debug */, @@ -1468,7 +1518,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C9D2ABED1EA20F99007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPN Adapter macOS" */ = { + C9D2ABED1EA20F99007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPNAdapter macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( C9D2ABEE1EA20F99007EDF9D /* Debug */, @@ -1477,7 +1527,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C9D2ABFC1EA212A3007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPN Adapter macOS Tests" */ = { + C9D2ABFC1EA212A3007EDF9D /* Build configuration list for PBXNativeTarget "OpenVPNAdapter macOS Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( C9D2ABFD1EA212A3007EDF9D /* Debug */, diff --git a/OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenVPNAdapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 73% rename from OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to OpenVPNAdapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 83a2ed5..0069910 100644 --- a/OpenVPN Adapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/OpenVPNAdapter.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:/Users/ss.abramchuk/Sources.localized/open-source.localized/openvpn-adapter/OpenVPNAdapter.xcodeproj"> diff --git a/OpenVPN Adapter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/OpenVPNAdapter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from OpenVPN Adapter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to OpenVPNAdapter.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/OpenVPN Adapter.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/OpenVPNAdapter.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from OpenVPN Adapter.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to OpenVPNAdapter.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter iOS.xcscheme b/OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter iOS.xcscheme similarity index 83% rename from OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter iOS.xcscheme rename to OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter iOS.xcscheme index 9c44bd0..11230dc 100644 --- a/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter iOS.xcscheme +++ b/OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter iOS.xcscheme @@ -16,8 +16,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter iOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter iOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -35,8 +35,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9BB478D1E71821A00F3F98C" BuildableName = "OpenVPNAdapterTests.xctest" - BlueprintName = "OpenVPN Adapter iOS Tests" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter iOS Tests" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -45,8 +45,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter iOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter iOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -67,8 +67,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter iOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter iOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -85,8 +85,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9BB475B1E71663A00F3F98C" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter iOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter iOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> diff --git a/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter macOS.xcscheme b/OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter macOS.xcscheme similarity index 82% rename from OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter macOS.xcscheme rename to OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter macOS.xcscheme index 419f6cc..77d4e25 100644 --- a/OpenVPN Adapter.xcodeproj/xcshareddata/xcschemes/OpenVPN Adapter macOS.xcscheme +++ b/OpenVPNAdapter.xcodeproj/xcshareddata/xcschemes/OpenVPNAdapter macOS.xcscheme @@ -16,8 +16,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter macOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter macOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -27,7 +27,7 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" codeCoverageEnabled = "YES" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "NO"> @@ -35,8 +35,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9D2ABF21EA212A3007EDF9D" BuildableName = "OpenVPNAdapterTests.xctest" - BlueprintName = "OpenVPN Adapter macOS Tests" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter macOS Tests" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -45,8 +45,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter macOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter macOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -67,8 +67,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter macOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter macOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> @@ -85,8 +85,8 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D" BuildableName = "OpenVPNAdapter.framework" - BlueprintName = "OpenVPN Adapter macOS" - ReferencedContainer = "container:OpenVPN Adapter.xcodeproj"> + BlueprintName = "OpenVPNAdapter macOS" + ReferencedContainer = "container:OpenVPNAdapter.xcodeproj"> diff --git a/README.md b/README.md index df49ade..b42dd12 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,22 @@ To install OpenVPNAdapter with Carthage, add the following line to your `Cartfil github "ss-abramchuk/OpenVPNAdapter" ``` -Then run `carthage update` command. For details of the installation and usage of Carthage, visit [its project page](https://github.com/Carthage/Carthage). +Then run `$ carthage update` command. For details of the installation and usage of Carthage, visit [its project page](https://github.com/Carthage/Carthage). + +### Cocoapods +To install OpenVPNAdapter with Cocoapods, add the following lines to your `Podfile`. + +```ruby +target 'Your Target Name' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + + # Pods for iOSOpenVPNTunnel + pod 'OpenVPNAdapter', '~> 0.1' +end +``` + +And run `$ pod install`. ## Usage At first, you need to add a Packet Tunnel Provider extension to the project and configure provision profiles for both the container app and the extension. There are official documentation and many tutorials describing how to do it so we won't dwell on this in detail. diff --git a/Scripts/environment.rb.example b/Scripts/environment.rb.example new file mode 100644 index 0000000..86f6e62 --- /dev/null +++ b/Scripts/environment.rb.example @@ -0,0 +1,64 @@ +# Your OpenVPN username +if ENV["OPENVPN_USERNAME"].nil? + ENV["OPENVPN_USERNAME"] = "Username" +end + +# Your OpenVPN password +if ENV["OPENVPN_PASSWORD"].nil? + ENV["OPENVPN_PASSWORD"] = "Password" +end + +# Your OpenVPN configuration +if ENV["OPENVPN_CONFIGURATION"].nil? + ENV["OPENVPN_CONFIGURATION"] = <<~END + client + dev tun + proto udp + + remote X.X.X.X 1194 + + remote-random + resolv-retry infinite + nobind + cipher AES-256-CBC + auth SHA512 + comp-lzo no + verb 3 + + tun-mtu 1500 + tun-mtu-extra 32 + mssfix 1450 + persist-key + persist-tun + + reneg-sec 0 + + remote-cert-tls server + auth-user-pass + pull + fast-io + + + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- + + + key-direction 1 + + + # 2048 bit OpenVPN static key + -----BEGIN OpenVPN Static key V1----- + ... + -----END OpenVPN Static key V1----- + + END +end + +if ENV["OPENVPN_REMOTE_HOST"].nil? + ENV["OPENVPN_REMOTE_HOST"] = "Remote Host Address" +end + +if ENV["OPENVPN_REMOTE_PORT"].nil? + ENV["OPENVPN_REMOTE_PORT"] = "Remote Host Port" +end diff --git a/Scripts/fill_vpn_profile.rb b/Scripts/fill_vpn_profile.rb new file mode 100644 index 0000000..9259968 --- /dev/null +++ b/Scripts/fill_vpn_profile.rb @@ -0,0 +1,35 @@ +environment_file = File.join(ENV["SRCROOT"], "Scripts", "environment.rb") +if File.exist?(environment_file) + require "#{environment_file}" +end + +require "erb" + +if ENV["OPENVPN_USERNAME"].nil? || ENV["OPENVPN_PASSWORD"].nil? || ENV["OPENVPN_CONFIGURATION"].nil? + puts "warning: VPN profile data is missing, you need to fill VPNProfile.swift manually." + exit(true) +end + +template_file = File.join(ENV["SRCROOT"], "Scripts", "vpn_profile_template.erb") +unless File.exist?(template_file) + puts "error: Template file does not exist." + exit(false) +end + +output_file = File.join(ENV["SRCROOT"], "Tests", "VPNProfile.swift") +unless File.exist?(output_file) + puts "error: Output file does not exist." + exit(false) +end + +OPENVPN_USERNAME = ENV["OPENVPN_USERNAME"] +OPENVPN_PASSWORD = ENV["OPENVPN_PASSWORD"] +OPENVPN_CONFIGURATION = ENV["OPENVPN_CONFIGURATION"] +OPENVPN_REMOTE_HOST = ENV["OPENVPN_REMOTE_HOST"] +OPENVPN_REMOTE_PORT = ENV["OPENVPN_REMOTE_PORT"] + +template_content = File.read(template_file) +erb_template = ERB.new(template_content, nil, ">") + +result = erb_template.result +File.write(output_file, result) diff --git a/Scripts/vpn_profile_template.erb b/Scripts/vpn_profile_template.erb new file mode 100644 index 0000000..4aa7336 --- /dev/null +++ b/Scripts/vpn_profile_template.erb @@ -0,0 +1,25 @@ +// +// VPNProfile.swift +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 27/09/2018. +// +// Do not commit changes of this file to the repo! + +import Foundation + +struct VPNProfile { + + static let username: String = "<%= OPENVPN_USERNAME %>" + static let password: String = "<%= OPENVPN_PASSWORD %>" + + static let configuration: String = """ +<% OPENVPN_CONFIGURATION.each_line do |line| %> + <%= line %> +<% end %> + """ + + static let remoteHost: String = "<%= OPENVPN_REMOTE_HOST %>" + static let remotePort: Int = <%= OPENVPN_REMOTE_PORT %> + +} diff --git a/OpenVPN Adapter/Vendors/asio/.appveyor.yml b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/.appveyor.yml similarity index 100% rename from OpenVPN Adapter/Vendors/asio/.appveyor.yml rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/.appveyor.yml diff --git a/OpenVPN Adapter/Vendors/asio/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/.travis.yml b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/.travis.yml similarity index 100% rename from OpenVPN Adapter/Vendors/asio/.travis.yml rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/.travis.yml diff --git a/OpenVPN Adapter/Vendors/asio/asio/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/COPYING b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/COPYING similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/COPYING rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/COPYING diff --git a/OpenVPN Adapter/Vendors/asio/asio/INSTALL b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/INSTALL similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/INSTALL rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/INSTALL diff --git a/OpenVPN Adapter/Vendors/asio/asio/LICENSE_1_0.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/LICENSE_1_0.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/LICENSE_1_0.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/LICENSE_1_0.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/README b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/README similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/README rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/README diff --git a/OpenVPN Adapter/Vendors/asio/asio/asio.manifest b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/asio.manifest similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/asio.manifest rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/asio.manifest diff --git a/OpenVPN Adapter/Vendors/asio/asio/autogen.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/autogen.sh similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/autogen.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/autogen.sh diff --git a/OpenVPN Adapter/Vendors/asio/asio/boost_asio.manifest b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/boost_asio.manifest similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/boost_asio.manifest rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/boost_asio.manifest diff --git a/OpenVPN Adapter/Vendors/asio/asio/boostify.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/boostify.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/boostify.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/boostify.pl diff --git a/OpenVPN Adapter/Vendors/asio/asio/configure.ac b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/configure.ac similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/configure.ac rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/configure.ac diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/associated_allocator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/associated_allocator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/associated_allocator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/associated_allocator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/associated_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/associated_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/associated_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/associated_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/async_result.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/async_result.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/async_result.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/async_result.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_datagram_socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_datagram_socket.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_datagram_socket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_datagram_socket.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_deadline_timer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_deadline_timer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_deadline_timer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_deadline_timer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_io_object.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_io_object.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_io_object.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_io_object.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_raw_socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_raw_socket.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_raw_socket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_raw_socket.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_seq_packet_socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_seq_packet_socket.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_seq_packet_socket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_seq_packet_socket.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_serial_port.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_serial_port.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_serial_port.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_serial_port.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_signal_set.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_signal_set.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_signal_set.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_signal_set.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_socket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp index 0d1b0d2..4343016 100644 --- a/OpenVPN Adapter/Vendors/asio/asio/include/asio/basic_socket.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp @@ -865,8 +865,6 @@ public: asio::error_code ec; const protocol_type protocol = peer_endpoint.protocol(); this->get_service().open(this->get_implementation(), protocol, ec); - if (!ec) - async_connect_post_open(protocol, ec); if (ec) { async_completionai_family == AF_INET6) - { - sockaddr_in6* a6 = (sockaddr_in6*)(*result)->ai_addr; - if (a6->sin6_scope_id && !(IN6_IS_ADDR_LINKLOCAL(&a6->sin6_addr) || IN6_IS_ADDR_MC_NODELOCAL(&a6->sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&a6->sin6_addr))) - a6->sin6_scope_id = 0; - } - return ec = translate_addrinfo_error(error); #else int error = ::getaddrinfo(host, service, &hints, result); diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_executor_service.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_service.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_service.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/strand_service.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/strand_service.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/throw_error.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/throw_error.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/throw_error.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/throw_error.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/timer_queue_set.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/timer_queue_set.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/timer_queue_set.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/timer_queue_set.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_event.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_event.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_event.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_event.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_mutex.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_mutex.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_mutex.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_mutex.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_static_mutex.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_static_mutex.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_static_mutex.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_static_mutex.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_thread.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_thread.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_thread.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_thread.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winsock_init.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winsock_init.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/impl/winsock_init.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/impl/winsock_init.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/io_control.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/io_control.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/io_control.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/io_control.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/is_buffer_sequence.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/is_buffer_sequence.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/is_buffer_sequence.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/is_buffer_sequence.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/is_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/is_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/is_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/is_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/keyword_tss_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/keyword_tss_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/keyword_tss_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/keyword_tss_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/kqueue_reactor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/kqueue_reactor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/kqueue_reactor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/kqueue_reactor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/limits.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/limits.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/limits.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/limits.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/local_free_on_block_exit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/local_free_on_block_exit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/local_free_on_block_exit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/local_free_on_block_exit.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/macos_fenced_block.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/macos_fenced_block.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/macos_fenced_block.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/macos_fenced_block.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/memory.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/memory.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/memory.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/memory.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/noncopyable.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/noncopyable.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/noncopyable.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/noncopyable.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_event.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_event.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_event.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_event.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_fenced_block.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_fenced_block.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_fenced_block.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_fenced_block.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_global.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_global.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_global.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_global.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_reactor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_reactor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_reactor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_reactor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_signal_blocker.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_signal_blocker.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_signal_blocker.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_signal_blocker.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_static_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_static_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_static_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_static_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_tss_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_tss_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/null_tss_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/null_tss_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/object_pool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/object_pool.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/object_pool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/object_pool.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/old_win_sdk_compat.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/old_win_sdk_compat.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/old_win_sdk_compat.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/old_win_sdk_compat.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/op_queue.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/op_queue.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/op_queue.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/op_queue.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/operation.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/operation.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/operation.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/operation.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/pipe_select_interrupter.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/pipe_select_interrupter.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/pipe_select_interrupter.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/pipe_select_interrupter.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/pop_options.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/pop_options.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/pop_options.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/pop_options.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_event.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_event.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_event.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_event.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_global.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_global.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_global.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_global.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_signal_blocker.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_signal_blocker.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_signal_blocker.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_signal_blocker.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_static_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_static_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_static_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_static_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_tss_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_tss_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/posix_tss_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/posix_tss_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/push_options.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/push_options.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/push_options.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/push_options.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_descriptor_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_descriptor_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_descriptor_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_descriptor_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_serial_port_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_serial_port_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_serial_port_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_serial_port_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_send_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_send_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_send_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_send_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_service_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_service_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_socket_service_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_socket_service_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_wait_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_wait_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactive_wait_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactive_wait_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_fwd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_fwd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_fwd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_fwd.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_op_queue.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_op_queue.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/reactor_op_queue.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/reactor_op_queue.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/recycling_allocator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/recycling_allocator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/recycling_allocator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/recycling_allocator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/regex_fwd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/regex_fwd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/regex_fwd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/regex_fwd.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_endpoint_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_endpoint_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_endpoint_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_endpoint_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_query_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_query_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolve_query_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolve_query_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolver_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolver_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolver_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolver_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolver_service_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolver_service_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/resolver_service_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/resolver_service_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler_operation.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler_operation.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler_operation.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler_operation.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler_thread_info.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler_thread_info.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scheduler_thread_info.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scheduler_thread_info.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scoped_lock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scoped_lock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scoped_lock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scoped_lock.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scoped_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scoped_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/scoped_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/scoped_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/select_interrupter.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/select_interrupter.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/select_interrupter.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/select_interrupter.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/select_reactor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/select_reactor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/select_reactor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/select_reactor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/service_registry.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/service_registry.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/service_registry.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/service_registry.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_blocker.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_blocker.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_blocker.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_blocker.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_init.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_init.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_init.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_init.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_set_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_set_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/signal_set_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/signal_set_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_holder.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_holder.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_holder.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_holder.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_ops.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_ops.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_ops.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_ops.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_option.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_option.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_option.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_option.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_select_interrupter.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_select_interrupter.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_select_interrupter.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_select_interrupter.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/socket_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/socket_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/solaris_fenced_block.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/solaris_fenced_block.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/solaris_fenced_block.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/solaris_fenced_block.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/static_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/static_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/static_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/static_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_event.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_event.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_event.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_event.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_fenced_block.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_fenced_block.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_fenced_block.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_fenced_block.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_global.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_global.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_global.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_global.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_static_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_static_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_static_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_static_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/std_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/std_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/strand_executor_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/strand_executor_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/strand_executor_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/strand_executor_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/strand_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/strand_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/strand_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/strand_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/string_view.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/string_view.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/string_view.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/string_view.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_group.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_group.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_group.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_group.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_info_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_info_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/thread_info_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/thread_info_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/throw_error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/throw_error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/throw_error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/throw_error.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/throw_exception.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/throw_exception.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/throw_exception.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/throw_exception.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_ptime.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_ptime.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_ptime.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_ptime.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_set.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_set.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_queue_set.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_queue_set.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_scheduler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_scheduler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_scheduler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_scheduler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/tss_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/tss_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/tss_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/tss_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/type_traits.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/type_traits.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/type_traits.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/type_traits.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/variadic_templates.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/variadic_templates.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/variadic_templates.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/variadic_templates.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wait_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wait_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wait_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wait_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wait_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wait_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wait_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wait_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_event.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_event.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_event.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_event.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_fd_set_adapter.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_fd_set_adapter.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_fd_set_adapter.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_fd_set_adapter.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_fenced_block.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_fenced_block.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_fenced_block.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_fenced_block.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_global.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_global.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_global.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_global.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_io_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_io_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_io_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_io_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_operation.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_operation.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_operation.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_operation.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_thread_info.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_thread_info.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_thread_info.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_thread_info.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_wait_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_wait_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_iocp_wait_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_iocp_wait_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_object_handle_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_object_handle_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_object_handle_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_object_handle_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_static_mutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_static_mutex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_static_mutex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_static_mutex.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_tss_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_tss_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/win_tss_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/win_tss_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winapp_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winapp_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winapp_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winapp_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wince_thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wince_thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wince_thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wince_thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_async_manager.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_async_manager.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_async_manager.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_async_manager.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_async_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_async_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_async_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_async_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_resolve_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_resolve_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_resolve_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_resolve_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_resolver_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_resolver_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_resolver_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_resolver_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_send_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_send_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_socket_send_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_socket_send_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_utils.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_utils.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winrt_utils.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winrt_utils.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winsock_init.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winsock_init.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/winsock_init.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/winsock_init.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/work_dispatcher.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/work_dispatcher.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/work_dispatcher.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/work_dispatcher.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wrapped_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wrapped_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/detail/wrapped_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/detail/wrapped_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/dispatch.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/dispatch.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/dispatch.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/dispatch.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/error.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/error_code.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/error_code.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/error_code.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/error_code.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/execution_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/execution_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/execution_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/execution_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/executor_work_guard.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/executor_work_guard.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/executor_work_guard.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/executor_work_guard.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/basic_endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/basic_endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/basic_endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/basic_endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/datagram_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/datagram_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/datagram_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/datagram_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/detail/endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/detail/endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/detail/endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/detail/endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/detail/impl/endpoint.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/detail/impl/endpoint.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/detail/impl/endpoint.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/detail/impl/endpoint.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/raw_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/raw_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/raw_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/raw_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/seq_packet_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/seq_packet_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/seq_packet_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/seq_packet_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/stream_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/stream_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/generic/stream_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/generic/stream_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_alloc_hook.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_alloc_hook.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_alloc_hook.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_alloc_hook.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_continuation_hook.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_continuation_hook.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_continuation_hook.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_continuation_hook.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_invoke_hook.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_invoke_hook.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_invoke_hook.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_invoke_hook.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_type.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_type.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/handler_type.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/handler_type.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/high_resolution_timer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/high_resolution_timer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/high_resolution_timer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/high_resolution_timer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/buffered_read_stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/buffered_read_stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/buffered_read_stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/buffered_read_stream.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/buffered_write_stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/buffered_write_stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/buffered_write_stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/buffered_write_stream.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/connect.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/connect.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/connect.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/connect.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/defer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/defer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/defer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/defer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/dispatch.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/dispatch.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/dispatch.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/dispatch.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/error.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/error.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/error.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/error.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/error_code.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/error_code.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/error_code.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/error_code.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/execution_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/execution_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/execution_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/execution_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/execution_context.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/execution_context.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/execution_context.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/execution_context.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/executor.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/executor.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/executor.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/executor.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/handler_alloc_hook.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/handler_alloc_hook.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/handler_alloc_hook.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/handler_alloc_hook.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/io_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/io_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/io_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/io_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/io_context.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/io_context.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/io_context.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/io_context.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/post.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/post.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/post.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/post.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read_at.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read_at.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read_at.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read_at.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read_until.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read_until.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/read_until.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/read_until.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/serial_port_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/serial_port_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/serial_port_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/serial_port_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/serial_port_base.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/serial_port_base.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/serial_port_base.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/serial_port_base.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/spawn.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/spawn.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/spawn.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/spawn.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/src.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/src.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/src.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/src.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/src.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/src.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/src.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/src.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_context.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_context.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_context.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_context.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/system_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/system_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/thread_pool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/thread_pool.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/thread_pool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/thread_pool.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/thread_pool.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/thread_pool.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/thread_pool.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/thread_pool.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/use_future.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/use_future.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/use_future.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/use_future.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/write.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/write.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/write.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/write.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/write_at.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/write_at.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/impl/write_at.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/impl/write_at.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/io_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/io_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/io_context_strand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_context_strand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/io_context_strand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_context_strand.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/io_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/io_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/io_service_strand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_service_strand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/io_service_strand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/io_service_strand.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4_iterator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4_iterator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4_iterator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4_iterator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4_range.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4_range.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v4_range.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v4_range.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6_iterator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6_iterator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6_iterator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6_iterator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6_range.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6_range.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/address_v6_range.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/address_v6_range.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/bad_address_cast.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/bad_address_cast.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/bad_address_cast.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/bad_address_cast.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_entry.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_entry.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_entry.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_entry.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_iterator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_iterator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_iterator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_iterator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_query.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_query.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_query.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_query.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp index f0ae258..4146a46 100644 --- a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp @@ -18,7 +18,6 @@ #include "asio/detail/config.hpp" #include #include -#include #include "asio/detail/socket_ops.hpp" #include "asio/detail/socket_types.hpp" #include "asio/ip/basic_resolver_iterator.hpp" @@ -300,12 +299,6 @@ public: return !a.equal(b); } - template - void randomize(Random& r) - { - std::shuffle(this->values_->begin(), this->values_->end(), r); - } - private: typedef std::vector > values_type; }; diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/impl/endpoint.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/impl/endpoint.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/impl/endpoint.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/impl/endpoint.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/socket_option.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/socket_option.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/detail/socket_option.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/detail/socket_option.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/host_name.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/host_name.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/host_name.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/host_name.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/icmp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/icmp.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/icmp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/icmp.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v4.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v4.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v4.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v4.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v4.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v6.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v6.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v6.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v6.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v6.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/address_v6.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/address_v6.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/basic_endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/basic_endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/basic_endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/basic_endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/host_name.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/host_name.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/host_name.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/host_name.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v4.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v4.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v4.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v4.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v4.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v6.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v6.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v6.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v6.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v6.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/impl/network_v6.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/impl/network_v6.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/multicast.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/multicast.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/multicast.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/multicast.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/network_v4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/network_v4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/network_v4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/network_v4.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/network_v6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/network_v6.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/network_v6.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/network_v6.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_query_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_query_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_query_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_query_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/resolver_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/resolver_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/tcp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/tcp.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/tcp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/tcp.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/udp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/udp.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/udp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/udp.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/unicast.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/unicast.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/unicast.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/unicast.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/v6_only.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/v6_only.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ip/v6_only.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/v6_only.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/is_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/is_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/is_read_buffered.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_read_buffered.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/is_read_buffered.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_read_buffered.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/is_write_buffered.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_write_buffered.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/is_write_buffered.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/is_write_buffered.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/basic_endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/basic_endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/basic_endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/basic_endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/connect_pair.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/connect_pair.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/connect_pair.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/connect_pair.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/datagram_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/datagram_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/datagram_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/datagram_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/detail/endpoint.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/detail/endpoint.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/detail/endpoint.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/detail/endpoint.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/detail/impl/endpoint.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/detail/impl/endpoint.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/detail/impl/endpoint.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/detail/impl/endpoint.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/local/stream_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/stream_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/local/stream_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/local/stream_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/packaged_task.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/packaged_task.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/packaged_task.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/packaged_task.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/placeholders.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/placeholders.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/placeholders.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/placeholders.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/basic_descriptor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/basic_descriptor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/basic_descriptor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/basic_descriptor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/basic_stream_descriptor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/basic_stream_descriptor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/basic_stream_descriptor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/basic_stream_descriptor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/descriptor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/descriptor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/descriptor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/descriptor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/descriptor_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/descriptor_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/descriptor_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/descriptor_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/stream_descriptor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/stream_descriptor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/stream_descriptor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/stream_descriptor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/stream_descriptor_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/stream_descriptor_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/posix/stream_descriptor_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/posix/stream_descriptor_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/post.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/post.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/post.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/post.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/raw_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/raw_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/raw_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/raw_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/read.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/read.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/read_at.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read_at.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/read_at.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read_at.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/read_until.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read_until.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/read_until.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/read_until.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/seq_packet_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/seq_packet_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/seq_packet_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/seq_packet_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/serial_port_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/serial_port_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/signal_set.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/signal_set.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/signal_set.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/signal_set.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/signal_set_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/signal_set_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/signal_set_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/signal_set_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/socket_acceptor_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/socket_acceptor_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/socket_acceptor_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/socket_acceptor_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/socket_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/socket_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/socket_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/socket_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/spawn.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/spawn.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/spawn.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/spawn.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/context_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/context_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/context_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/context_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/engine.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/engine.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/engine.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/engine.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/handshake_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/handshake_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/handshake_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/handshake_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/impl/engine.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/impl/engine.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/impl/engine.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/impl/engine.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/io.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/io.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/io.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/io.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/openssl_init.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/openssl_init.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/openssl_init.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/openssl_init.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/openssl_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/openssl_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/openssl_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/openssl_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/password_callback.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/password_callback.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/password_callback.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/password_callback.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/read_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/read_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/read_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/read_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/shutdown_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/shutdown_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/shutdown_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/shutdown_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/stream_core.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/stream_core.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/stream_core.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/stream_core.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/verify_callback.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/verify_callback.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/verify_callback.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/verify_callback.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/write_op.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/write_op.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/detail/write_op.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/detail/write_op.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/error.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/context.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/context.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/context.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/context.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/error.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/error.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/error.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/error.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/src.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/src.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/impl/src.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/impl/src.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/rfc2818_verification.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/rfc2818_verification.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/rfc2818_verification.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/rfc2818_verification.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/stream.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/stream_base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/stream_base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/stream_base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/stream_base.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/verify_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/verify_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/verify_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/verify_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/verify_mode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/verify_mode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ssl/verify_mode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ssl/verify_mode.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/steady_timer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/steady_timer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/steady_timer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/steady_timer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/strand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/strand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/strand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/strand.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/stream_socket_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/stream_socket_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/stream_socket_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/stream_socket_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/streambuf.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/streambuf.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/streambuf.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/streambuf.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/system_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/system_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/system_error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/system_error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_error.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/system_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/system_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/system_timer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_timer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/system_timer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/system_timer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/thread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/thread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/thread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/thread.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/thread_pool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/thread_pool.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/thread_pool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/thread_pool.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/time_traits.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/time_traits.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/time_traits.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/time_traits.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/buffer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/buffer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/buffer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/buffer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/internet.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/internet.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/internet.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/internet.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/io_context.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/io_context.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/io_context.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/io_context.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/net.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/net.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/net.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/net.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/netfwd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/netfwd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/netfwd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/netfwd.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/socket.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/socket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/socket.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/timer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/timer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/ts/timer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ts/timer.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/unyield.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/unyield.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/unyield.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/unyield.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/use_future.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/use_future.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/use_future.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/use_future.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/uses_executor.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/uses_executor.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/uses_executor.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/uses_executor.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/version.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/version.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/version.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/version.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/wait_traits.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/wait_traits.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/wait_traits.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/wait_traits.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/waitable_timer_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/waitable_timer_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/waitable_timer_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/waitable_timer_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_object_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_object_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_object_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_object_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_random_access_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_random_access_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_random_access_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_random_access_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_stream_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_stream_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/basic_stream_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/basic_stream_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/object_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/object_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/object_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/object_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/object_handle_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/object_handle_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/object_handle_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/object_handle_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/overlapped_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/overlapped_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/overlapped_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/overlapped_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/overlapped_ptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/overlapped_ptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/overlapped_ptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/overlapped_ptr.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/random_access_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/random_access_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/random_access_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/random_access_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/random_access_handle_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/random_access_handle_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/random_access_handle_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/random_access_handle_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/stream_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/stream_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/stream_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/stream_handle.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/stream_handle_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/stream_handle_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/windows/stream_handle_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/windows/stream_handle_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/write.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/write.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/write.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/write.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/write_at.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/write_at.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/write_at.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/write_at.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/include/asio/yield.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/yield.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/include/asio/yield.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/yield.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/release.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/release.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/release.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/release.pl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/Makefile.mgw b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.mgw similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/Makefile.mgw rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.mgw diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/Makefile.msc b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.msc similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/Makefile.msc rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/Makefile.msc diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/asio.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/asio.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/asio.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/asio.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/asio_ssl.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/asio_ssl.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/asio_ssl.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/asio_ssl.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/Jamfile.v2 b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/Jamfile.v2 similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/Jamfile.v2 rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/Jamfile.v2 diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/asio.png b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asio.png similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/asio.png rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asio.png diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/asio.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asio.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/asio.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asio.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/asioref.sty b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asioref.sty similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/asioref.sty rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asioref.sty diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/asioref.xsl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asioref.xsl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/asioref.xsl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/asioref.xsl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/boost_bind_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/boost_bind_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/boost_bind_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/boost_bind_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/doxy2qbk.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/doxy2qbk.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/doxy2qbk.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/doxy2qbk.pl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/examples.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/examples.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/examples.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/examples.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/history.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/history.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/history.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/history.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/index.xml b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/index.xml similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/index.xml rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/index.xml diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/makepdf.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/makepdf.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/makepdf.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/makepdf.pl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/net_ts.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/net_ts.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/net_ts.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/net_ts.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/noncopyable_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/noncopyable_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/noncopyable_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/noncopyable_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/allocation.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/allocation.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/allocation.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/allocation.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op1.dot b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op1.dot similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op1.dot rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op1.dot diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op1.png b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op1.png similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op1.png rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op1.png diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op2.dot b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op2.dot similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op2.dot rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op2.dot diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op2.png b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op2.png similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/async_op2.png rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/async_op2.png diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/basics.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/basics.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/basics.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/basics.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/bsd_sockets.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/bsd_sockets.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/bsd_sockets.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/bsd_sockets.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/buffers.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/buffers.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/buffers.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/buffers.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/concurrency_hint.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/concurrency_hint.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/concurrency_hint.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/concurrency_hint.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/coroutine.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/coroutine.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/coroutine.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/coroutine.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/cpp2011.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/cpp2011.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/cpp2011.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/cpp2011.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/handler_tracking.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/handler_tracking.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/handler_tracking.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/handler_tracking.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/implementation.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/implementation.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/implementation.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/implementation.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/iostreams.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/iostreams.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/iostreams.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/iostreams.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/line_based.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/line_based.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/line_based.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/line_based.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/other_protocols.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/other_protocols.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/other_protocols.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/other_protocols.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/posix.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/posix.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/posix.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/posix.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/proactor.dot b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/proactor.dot similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/proactor.dot rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/proactor.dot diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/proactor.png b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/proactor.png similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/proactor.png rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/proactor.png diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/protocols.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/protocols.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/protocols.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/protocols.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/rationale.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/rationale.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/rationale.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/rationale.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/reactor.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/reactor.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/reactor.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/reactor.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/serial_ports.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/serial_ports.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/serial_ports.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/serial_ports.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/signals.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/signals.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/signals.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/signals.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/spawn.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/spawn.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/spawn.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/spawn.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/ssl.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/ssl.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/ssl.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/ssl.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/strands.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/strands.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/strands.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/strands.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/streams.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/streams.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/streams.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/streams.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/sync_op.dot b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/sync_op.dot similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/sync_op.dot rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/sync_op.dot diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/sync_op.png b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/sync_op.png similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/sync_op.png rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/sync_op.png diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/threads.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/threads.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/threads.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/threads.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/timers.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/timers.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/timers.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/timers.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/windows.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/windows.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/overview/windows.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/overview/windows.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/project-root.jam b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/project-root.jam similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/project-root.jam rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/project-root.jam diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/quickref.xml b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/quickref.xml similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/quickref.xml rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/quickref.xml diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.dox b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.dox similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.dox rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.dox diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.xsl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.xsl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/reference.xsl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/reference.xsl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/release_checklist.htm b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/release_checklist.htm similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/release_checklist.htm rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/release_checklist.htm diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AcceptHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AcceptHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AcceptHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AcceptHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AcceptableProtocol.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AcceptableProtocol.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AcceptableProtocol.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AcceptableProtocol.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncReadStream.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncReadStream.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncReadStream.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncReadStream.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncWriteStream.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncWriteStream.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/AsyncWriteStream.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/AsyncWriteStream.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/CompletionCondition.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/CompletionCondition.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/CompletionCondition.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/CompletionCondition.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/CompletionHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/CompletionHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/CompletionHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/CompletionHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConnectCondition.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConnectCondition.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConnectCondition.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConnectCondition.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConnectHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConnectHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConnectHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConnectHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConstBufferSequence.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConstBufferSequence.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ConstBufferSequence.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ConstBufferSequence.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/DynamicBuffer.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/DynamicBuffer.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/DynamicBuffer.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/DynamicBuffer.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Endpoint.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Endpoint.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Endpoint.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Endpoint.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/EndpointSequence.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/EndpointSequence.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/EndpointSequence.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/EndpointSequence.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ExecutionContext.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ExecutionContext.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ExecutionContext.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ExecutionContext.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Executor.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Executor.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Executor.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Executor.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/GettableSocketOption.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/GettableSocketOption.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/GettableSocketOption.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/GettableSocketOption.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Handler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Handler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Handler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Handler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/HandshakeHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/HandshakeHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/HandshakeHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/HandshakeHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/InternetProtocol.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/InternetProtocol.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/InternetProtocol.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/InternetProtocol.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IoControlCommand.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IoControlCommand.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IoControlCommand.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IoControlCommand.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IoObjectService.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IoObjectService.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IoObjectService.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IoObjectService.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/MutableBufferSequence.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/MutableBufferSequence.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/MutableBufferSequence.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/MutableBufferSequence.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ProtoAllocator.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ProtoAllocator.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ProtoAllocator.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ProtoAllocator.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Protocol.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Protocol.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Protocol.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Protocol.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/RangeConnectHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/RangeConnectHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/RangeConnectHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/RangeConnectHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ReadHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ReadHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ReadHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ReadHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ResolveHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ResolveHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ResolveHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ResolveHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Service.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Service.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/Service.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/Service.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SettableSocketOption.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SettableSocketOption.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SettableSocketOption.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SettableSocketOption.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ShutdownHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ShutdownHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/ShutdownHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/ShutdownHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SignalHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SignalHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SignalHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SignalHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncReadStream.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncReadStream.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncReadStream.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncReadStream.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncWriteStream.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncWriteStream.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/SyncWriteStream.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/SyncWriteStream.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/TimeTraits.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/TimeTraits.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/TimeTraits.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/TimeTraits.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WaitHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WaitHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WaitHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WaitHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WaitTraits.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WaitTraits.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WaitTraits.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WaitTraits.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WriteHandler.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WriteHandler.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/WriteHandler.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/WriteHandler.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/asynchronous_operations.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/asynchronous_operations.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/asynchronous_operations.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/asynchronous_operations.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/read_write_operations.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/read_write_operations.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/read_write_operations.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/read_write_operations.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/std_exception_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/std_exception_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/std_exception_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/std_exception_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.dox b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.dox similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.dox rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.dox diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.xsl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.xsl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/tutorial.xsl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/tutorial.xsl diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/doc/using.qbk b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/using.qbk similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/doc/using.qbk rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/doc/using.qbk diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/allocation/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/allocation/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/allocation/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/allocation/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/allocation/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/allocation/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/allocation/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/allocation/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/buffers/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/buffers/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/buffers/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/buffers/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_message.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_message.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_message.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_message.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/chat_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/chat_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/daemon.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/daemon.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/daemon.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/daemon.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/async_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/async_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/async_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/async_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/sync_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/sync_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/client/sync_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/client/sync_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/main.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/main.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/main.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/main.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/mime_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/reply.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/reply.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/reply.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/reply.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/reply.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/reply.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/request_parser.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/server.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/server.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server/server.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server/server.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/connection.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/main.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/main.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/main.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/main.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/reply.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/server.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/server.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server2/server.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server2/server.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/connection.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/main.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/main.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/main.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/main.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/reply.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/server.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/server.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server3/server.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server3/server.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/main.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/main.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/main.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/main.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/reply.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/server.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/server.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/http/server4/server.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/http/server4/server.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/ping.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/ping.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/icmp/ping.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/icmp/ping.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/invocation/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/invocation/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/invocation/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/invocation/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/http_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/http_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/iostreams/http_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/iostreams/http_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/connect_pair.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/connect_pair.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/connect_pair.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/connect_pair.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/iostream_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/iostream_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/iostream_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/iostream_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/stream_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/stream_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/stream_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/stream_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/stream_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/stream_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/local/stream_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/local/stream_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/receiver.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/receiver.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/receiver.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/receiver.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/sender.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/sender.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/multicast/sender.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/multicast/sender.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/nonblocking/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/nonblocking/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/nonblocking/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/nonblocking/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/protocol.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/porthopper/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/porthopper/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/connection.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/connection.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/connection.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/connection.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/stock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/stock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/serialization/stock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/serialization/stock.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/basic_logger.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/basic_logger.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/basic_logger.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/basic_logger.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/daytime_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/daytime_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/daytime_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/daytime_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger_service.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger_service.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/services/logger_service.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/services/logger_service.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/socks4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/socks4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/socks4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/socks4.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/sync_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/sync_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/socks4/sync_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/socks4/sync_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/README b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/README similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/README rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/README diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/ca.pem b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/ca.pem similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/ca.pem rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/ca.pem diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/dh2048.pem b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/dh2048.pem similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/dh2048.pem rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/dh2048.pem diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/server.pem b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/server.pem similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/ssl/server.pem rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/ssl/server.pem diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timeouts/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timeouts/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/tick_count_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/tick_count_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/tick_count_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/tick_count_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/index_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/index_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/index_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/index_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/windows/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/windows/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/windows/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/windows/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/windows/transmit_file.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/windows/transmit_file.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp03/windows/transmit_file.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp03/windows/transmit_file.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/allocation/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/allocation/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/allocation/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/allocation/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/allocation/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/allocation/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/allocation/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/allocation/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/buffers/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/buffers/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/buffers/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/buffers/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_message.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_message.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_message.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_message.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/chat/chat_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/chat/chat_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/actor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/actor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/actor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/actor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/fork_join.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/fork_join.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/fork_join.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/fork_join.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/pipeline.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/pipeline.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/pipeline.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/pipeline.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/daemon.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/daemon.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/daemon.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/daemon.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/futures/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/futures/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/futures/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/futures/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/futures/daytime_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/futures/daytime_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/futures/daytime_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/futures/daytime_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/header.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/main.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/main.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/main.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/main.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/mime_types.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/reply.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/reply.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/reply.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/reply.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/reply.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/reply.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_handler.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/request_parser.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/server.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/server.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/http/server/server.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/http/server/server.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/invocation/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/invocation/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/invocation/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/invocation/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/iostreams/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/iostreams/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/iostreams/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/iostreams/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/iostreams/http_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/iostreams/http_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/iostreams/http_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/iostreams/http_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/connect_pair.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/connect_pair.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/connect_pair.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/connect_pair.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/iostream_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/iostream_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/iostream_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/iostream_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/stream_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/stream_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/stream_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/stream_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/stream_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/stream_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/local/stream_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/local/stream_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/receiver.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/receiver.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/receiver.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/receiver.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/sender.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/sender.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/multicast/sender.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/multicast/sender.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/nonblocking/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/nonblocking/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/nonblocking/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/nonblocking/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/actor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/actor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/actor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/actor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/async_1.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/async_1.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/async_1.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/async_1.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/async_2.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/async_2.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/async_2.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/async_2.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/fork_join.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/fork_join.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/fork_join.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/fork_join.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/pipeline.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/pipeline.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/pipeline.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/pipeline.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/iostreams/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/iostreams/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/iostreams/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/iostreams/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/iostreams/http_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/iostreams/http_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/examples/cpp14/iostreams/http_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/examples/cpp14/iostreams/http_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/Makefile.am b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/Makefile.am similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/Makefile.am rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/Makefile.am diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/allocator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/allocator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/allocator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/allocator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/high_res_clock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/high_res_clock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/high_res_clock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/high_res_clock.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/tcp_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/tcp_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/tcp_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/tcp_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/tcp_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/tcp_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/tcp_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/tcp_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/udp_client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/udp_client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/udp_client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/udp_client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/udp_server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/udp_server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/latency/udp_server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/latency/udp_server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/client.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/client.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/client.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/client.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/handler_allocator.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/handler_allocator.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/handler_allocator.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/handler_allocator.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/server.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/server.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/performance/server.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/performance/server.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/async_ops.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/async_ops.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/async_ops.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/async_ops.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/async_result.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/async_result.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/async_result.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/async_result.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_ops.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_ops.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_ops.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_ops.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_result.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_result.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_result.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/deprecated_async_result.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/io_control_command.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/io_control_command.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/io_control_command.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/io_control_command.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/associated_allocator.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/associated_allocator.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/associated_allocator.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/associated_allocator.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/associated_executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/associated_executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/associated_executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/associated_executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/async_result.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/async_result.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/async_result.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/async_result.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_datagram_socket.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_datagram_socket.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_datagram_socket.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_datagram_socket.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_deadline_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_deadline_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_deadline_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_deadline_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_raw_socket.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_raw_socket.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_raw_socket.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_raw_socket.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_serial_port.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_serial_port.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_serial_port.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_serial_port.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_signal_set.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_signal_set.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_signal_set.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_signal_set.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_socket_acceptor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_socket_acceptor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_socket_acceptor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_socket_acceptor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_stream_socket.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_stream_socket.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_stream_socket.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_stream_socket.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_streambuf.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_streambuf.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_streambuf.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_streambuf.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_waitable_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_waitable_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/basic_waitable_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/basic_waitable_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/bind_executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/bind_executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/bind_executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/bind_executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_read_stream.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_read_stream.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_read_stream.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_read_stream.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_stream.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_stream.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_stream.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_stream.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_write_stream.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_write_stream.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffered_write_stream.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffered_write_stream.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffers_iterator.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffers_iterator.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/buffers_iterator.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/buffers_iterator.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/completion_condition.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/completion_condition.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/completion_condition.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/completion_condition.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/connect.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/connect.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/connect.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/connect.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/coroutine.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/coroutine.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/coroutine.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/coroutine.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/datagram_socket_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/datagram_socket_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/datagram_socket_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/datagram_socket_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/deadline_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/deadline_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/deadline_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/deadline_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/deadline_timer_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/deadline_timer_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/deadline_timer_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/deadline_timer_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/defer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/defer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/defer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/defer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/dispatch.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/dispatch.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/dispatch.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/dispatch.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/error.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/error.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/error.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/error.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/execution_context.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/execution_context.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/execution_context.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/execution_context.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/executor_work_guard.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/executor_work_guard.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/executor_work_guard.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/executor_work_guard.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/basic_endpoint.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/basic_endpoint.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/basic_endpoint.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/basic_endpoint.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/datagram_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/datagram_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/datagram_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/datagram_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/raw_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/raw_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/raw_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/raw_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/stream_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/stream_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/generic/stream_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/generic/stream_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/high_resolution_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/high_resolution_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/high_resolution_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/high_resolution_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/io_context.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/io_context.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/io_context.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/io_context.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4_iterator.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4_iterator.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4_iterator.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4_iterator.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4_range.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4_range.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v4_range.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v4_range.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6_iterator.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6_iterator.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6_iterator.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6_iterator.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6_range.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6_range.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/address_v6_range.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/address_v6_range.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_endpoint.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_endpoint.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_endpoint.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_endpoint.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/host_name.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/host_name.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/host_name.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/host_name.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/icmp.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/icmp.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/icmp.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/icmp.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/multicast.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/multicast.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/multicast.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/multicast.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/network_v4.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/network_v4.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/network_v4.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/network_v4.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/network_v6.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/network_v6.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/network_v6.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/network_v6.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/resolver_query_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/resolver_query_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/resolver_query_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/resolver_query_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/resolver_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/resolver_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/resolver_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/resolver_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/tcp.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/tcp.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/tcp.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/tcp.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/udp.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/udp.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/udp.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/udp.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/unicast.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/unicast.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/unicast.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/unicast.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/v6_only.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/v6_only.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ip/v6_only.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ip/v6_only.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/is_read_buffered.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/is_read_buffered.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/is_read_buffered.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/is_read_buffered.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/is_write_buffered.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/is_write_buffered.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/is_write_buffered.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/is_write_buffered.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/basic_endpoint.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/basic_endpoint.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/basic_endpoint.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/basic_endpoint.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/connect_pair.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/connect_pair.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/connect_pair.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/connect_pair.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/datagram_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/datagram_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/datagram_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/datagram_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/stream_protocol.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/stream_protocol.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/local/stream_protocol.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/local/stream_protocol.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/packaged_task.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/packaged_task.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/packaged_task.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/packaged_task.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/placeholders.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/placeholders.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/placeholders.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/placeholders.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/basic_descriptor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/basic_descriptor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/basic_descriptor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/basic_descriptor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/descriptor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/descriptor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/descriptor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/descriptor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/descriptor_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/descriptor_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/descriptor_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/descriptor_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/posix/stream_descriptor_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/post.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/post.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/post.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/post.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/raw_socket_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/raw_socket_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/raw_socket_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/raw_socket_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read_at.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read_at.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read_at.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read_at.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read_until.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read_until.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/read_until.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/read_until.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/seq_packet_socket_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/seq_packet_socket_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/seq_packet_socket_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/seq_packet_socket_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/serial_port_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/serial_port_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/signal_set.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/signal_set.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/signal_set.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/signal_set.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/signal_set_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/signal_set_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/signal_set_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/signal_set_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/socket_acceptor_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/socket_acceptor_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/socket_acceptor_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/socket_acceptor_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/socket_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/socket_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/socket_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/socket_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/context.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/context.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/context.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/context.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/context_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/context_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/context_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/context_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/error.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/error.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/error.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/error.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/stream.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/stream.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/stream.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/stream.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/stream_base.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/stream_base.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ssl/stream_base.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ssl/stream_base.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/steady_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/steady_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/steady_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/steady_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/strand.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/strand.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/strand.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/strand.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/stream_socket_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/stream_socket_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/stream_socket_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/stream_socket_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/streambuf.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/streambuf.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/streambuf.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/streambuf.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_context.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_context.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_context.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_context.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/system_timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/system_timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/thread.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/thread.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/thread.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/thread.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/time_traits.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/time_traits.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/time_traits.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/time_traits.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/buffer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/buffer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/buffer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/buffer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/internet.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/internet.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/internet.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/internet.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/io_context.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/io_context.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/io_context.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/io_context.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/net.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/net.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/net.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/net.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/netfwd.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/netfwd.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/netfwd.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/netfwd.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/socket.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/socket.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/socket.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/socket.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/timer.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/timer.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/ts/timer.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/ts/timer.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/unit_test.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/unit_test.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/unit_test.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/unit_test.hpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/use_future.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/use_future.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/use_future.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/use_future.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/uses_executor.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/uses_executor.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/uses_executor.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/uses_executor.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/wait_traits.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/wait_traits.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/wait_traits.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/wait_traits.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/waitable_timer_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/waitable_timer_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/waitable_timer_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/waitable_timer_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/.gitignore diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_object_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_object_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_object_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_object_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/object_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/object_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/object_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/object_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/object_handle_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/object_handle_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/object_handle_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/object_handle_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/overlapped_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/overlapped_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/overlapped_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/overlapped_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/random_access_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/random_access_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/random_access_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/random_access_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/random_access_handle_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/random_access_handle_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/random_access_handle_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/random_access_handle_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/stream_handle.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/stream_handle.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/stream_handle.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/stream_handle.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/stream_handle_service.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/stream_handle_service.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/windows/stream_handle_service.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/windows/stream_handle_service.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/write.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/write.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/write.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/write.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/write_at.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/write_at.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tests/unit/write_at.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tests/unit/write_at.cpp diff --git a/OpenVPN Adapter/Vendors/asio/asio/src/tools/handlerviz.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tools/handlerviz.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/src/tools/handlerviz.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/src/tools/handlerviz.pl diff --git a/OpenVPN Adapter/Vendors/asio/asio/tsify.pl b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/tsify.pl similarity index 100% rename from OpenVPN Adapter/Vendors/asio/asio/tsify.pl rename to Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/tsify.pl diff --git a/OpenVPN Adapter/Vendors/lz4/include/lz4.h b/Sources/OpenVPNAdapter/Libraries/Vendors/lz4/include/lz4.h similarity index 100% rename from OpenVPN Adapter/Vendors/lz4/include/lz4.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/lz4/include/lz4.h diff --git a/OpenVPN Adapter/Vendors/lz4/lib/ios/liblz4.a b/Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/ios/liblz4.a similarity index 100% rename from OpenVPN Adapter/Vendors/lz4/lib/ios/liblz4.a rename to Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/ios/liblz4.a diff --git a/OpenVPN Adapter/Vendors/lz4/lib/macos/liblz4.a b/Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/macos/liblz4.a similarity index 100% rename from OpenVPN Adapter/Vendors/lz4/lib/macos/liblz4.a rename to Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/macos/liblz4.a diff --git a/OpenVPN Adapter/Vendors/lz4/lib/sim/liblz4.a b/Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/sim/liblz4.a similarity index 100% rename from OpenVPN Adapter/Vendors/lz4/lib/sim/liblz4.a rename to Sources/OpenVPNAdapter/Libraries/Vendors/lz4/lib/sim/liblz4.a diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/.gitignore diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/aes.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/aes.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/aes.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/aes.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/aesni.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/aesni.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/aesni.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/aesni.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/arc4.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/arc4.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/arc4.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/arc4.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/asn1.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/asn1.h similarity index 96% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/asn1.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/asn1.h index fde328a..96c1c9a 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/asn1.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/asn1.h @@ -88,6 +88,21 @@ #define MBEDTLS_ASN1_PRIMITIVE 0x00 #define MBEDTLS_ASN1_CONSTRUCTED 0x20 #define MBEDTLS_ASN1_CONTEXT_SPECIFIC 0x80 + +/* + * Bit masks for each of the components of an ASN.1 tag as specified in + * ITU X.690 (08/2015), section 8.1 "General rules for encoding", + * paragraph 8.1.2.2: + * + * Bit 8 7 6 5 1 + * +-------+-----+------------+ + * | Class | P/C | Tag number | + * +-------+-----+------------+ + */ +#define MBEDTLS_ASN1_TAG_CLASS_MASK 0xC0 +#define MBEDTLS_ASN1_TAG_PC_MASK 0x20 +#define MBEDTLS_ASN1_TAG_VALUE_MASK 0x1F + /* \} name */ /* \} addtogroup asn1_module */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/asn1write.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/asn1write.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/asn1write.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/asn1write.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/base64.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/base64.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/base64.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/base64.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/bignum.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/bignum.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/bignum.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/bignum.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/blowfish.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/blowfish.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/blowfish.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/blowfish.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/bn_mul.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/bn_mul.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/bn_mul.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/bn_mul.h index 354c1cc..956b0bc 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/bn_mul.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/bn_mul.h @@ -49,7 +49,14 @@ /* armcc5 --gnu defines __GNUC__ but doesn't support GNU's extended asm */ #if defined(__GNUC__) && \ ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) -#if defined(__i386__) + +/* + * Disable use of the i386 assembly code below if option -O0, to disable all + * compiler optimisations, is passed, detected with __OPTIMIZE__ + * This is done as the number of registers used in the assembly code doesn't + * work with the -O0 option. + */ +#if defined(__i386__) && defined(__OPTIMIZE__) && (!defined(__ANDROID_API__) || defined(__clang__)) #define MULADDC_INIT \ asm( \ @@ -142,7 +149,7 @@ "movl %%esi, %3 \n\t" \ : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ - : "eax", "ecx", "edx", "esi", "edi" \ + : "eax", "ebx", "ecx", "edx", "esi", "edi" \ ); #else @@ -154,7 +161,7 @@ "movl %%esi, %3 \n\t" \ : "=m" (t), "=m" (c), "=m" (d), "=m" (s) \ : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ - : "eax", "ecx", "edx", "esi", "edi" \ + : "eax", "ebx", "ecx", "edx", "esi", "edi" \ ); #endif /* SSE2 */ #endif /* i386 */ @@ -521,7 +528,7 @@ "swi r3, %2 \n\t" \ : "=m" (c), "=m" (d), "=m" (s) \ : "m" (s), "m" (d), "m" (c), "m" (b) \ - : "r3", "r4" "r5", "r6", "r7", "r8", \ + : "r3", "r4", "r5", "r6", "r7", "r8", \ "r9", "r10", "r11", "r12", "r13" \ ); diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/camellia.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/camellia.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/camellia.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/camellia.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ccm.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ccm.h similarity index 96% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ccm.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ccm.h index 5a9ee4a..630b7fd 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ccm.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ccm.h @@ -105,7 +105,7 @@ void mbedtls_ccm_free( mbedtls_ccm_context *ctx ); * Must be at least \p length Bytes wide. * \param tag The buffer holding the tag. * \param tag_len The length of the tag to generate in Bytes: - * 4, 6, 8, 10, 14 or 16. + * 4, 6, 8, 10, 12, 14 or 16. * * \note The tag is written to a separate buffer. To concatenate * the \p tag with the \p output, as done in RFC-3610: @@ -131,10 +131,13 @@ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, * \param iv_len The length of the IV in Bytes: 7, 8, 9, 10, 11, 12, or 13. * \param add The additional data field. * \param add_len The length of additional data in Bytes. + * Must be less than 2^16 - 2^8. * \param input The buffer holding the input data. * \param output The buffer holding the output data. + * Must be at least \p length Bytes wide. * \param tag The buffer holding the tag. * \param tag_len The length of the tag in Bytes. + * 4, 6, 8, 10, 12, 14 or 16. * * \return 0 if successful and authenticated, or * #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match. diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/certs.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/certs.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/certs.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/certs.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/check_config.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/check_config.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/check_config.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/check_config.h index 1143aa2..be80332 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/check_config.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/check_config.h @@ -78,6 +78,10 @@ #error "MBEDTLS_DHM_C defined, but not all prerequisites" #endif +#if defined(MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT) && !defined(MBEDTLS_SSL_TRUNCATED_HMAC) +#error "MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT defined, but not all prerequisites" +#endif + #if defined(MBEDTLS_CMAC_C) && \ !defined(MBEDTLS_AES_C) && !defined(MBEDTLS_DES_C) #error "MBEDTLS_CMAC_C defined, but not all prerequisites" diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cipher.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cipher.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cipher.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cipher.h index d1f4efe..1c453a1 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cipher.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cipher.h @@ -43,7 +43,7 @@ #define MBEDTLS_CIPHER_MODE_WITH_PADDING #endif -#if defined(MBEDTLS_ARC4_C) +#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) #define MBEDTLS_CIPHER_MODE_STREAM #endif diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cipher_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cipher_internal.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cipher_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cipher_internal.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cmac.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cmac.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cmac.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cmac.h index 628c9da..24839a2 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/cmac.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/cmac.h @@ -26,7 +26,7 @@ #ifndef MBEDTLS_CMAC_H #define MBEDTLS_CMAC_H -#include "mbedtls/cipher.h" +#include "cipher.h" #ifdef __cplusplus extern "C" { diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/compat-1.3.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/compat-1.3.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/compat-1.3.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/compat-1.3.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/config.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/config.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/config.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/config.h index fc4bd16..9feb49b 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/config.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/config.h @@ -1049,7 +1049,8 @@ /** * \def MBEDTLS_RSA_NO_CRT * - * Do not use the Chinese Remainder Theorem for the RSA private operation. + * Do not use the Chinese Remainder Theorem + * for the RSA private operation. * * Uncomment this macro to disable the use of CRT in RSA. * @@ -1411,6 +1412,30 @@ */ #define MBEDTLS_SSL_TRUNCATED_HMAC +/** + * \def MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT + * + * Fallback to old (pre-2.7), non-conforming implementation of the truncated + * HMAC extension which also truncates the HMAC key. Note that this option is + * only meant for a transitory upgrade period and is likely to be removed in + * a future version of the library. + * + * \warning The old implementation is non-compliant and has a security weakness + * (2^80 brute force attack on the HMAC key used for a single, + * uninterrupted connection). This should only be enabled temporarily + * when (1) the use of truncated HMAC is essential in order to save + * bandwidth, and (2) the peer is an Mbed TLS stack that doesn't use + * the fixed implementation yet (pre-2.7). + * + * \deprecated This option is deprecated and will likely be removed in a + * future version of Mbed TLS. + * + * Uncomment to fallback to old, non-compliant truncated HMAC implementation. + * + * Requires: MBEDTLS_SSL_TRUNCATED_HMAC + */ +//#define MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT + /** * \def MBEDTLS_THREADING_ALT * @@ -2793,7 +2818,7 @@ /* \} name SECTION: Customisation configuration options */ /* Target and application specific configurations */ -//#define YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE "mbedtls/target_config.h" +//#define YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE "target_config.h" #if defined(TARGET_LIKE_MBED) && defined(YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE) #include YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ctr_drbg.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ctr_drbg.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ctr_drbg.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ctr_drbg.h index 121575a..e554a0a 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ctr_drbg.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ctr_drbg.h @@ -31,7 +31,7 @@ #include "aes.h" #if defined(MBEDTLS_THREADING_C) -#include "mbedtls/threading.h" +#include "threading.h" #endif #define MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034 /**< The entropy source failed. */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/debug.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/debug.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/debug.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/debug.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/des.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/des.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/des.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/des.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/dhm.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/dhm.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/dhm.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/dhm.h index da2e66b..00fafd8 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/dhm.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/dhm.h @@ -372,7 +372,7 @@ MBEDTLS_DEPRECATED typedef char const * mbedtls_deprecated_constant_t; * in RFC-5114: Additional Diffie-Hellman Groups for Use with * IETF Standards. */ -#define MBEDTLS_DHM_RFC5114_MODP_P \ +#define MBEDTLS_DHM_RFC5114_MODP_2048_P \ MBEDTLS_DEPRECATED_STRING_CONSTANT( \ "AD107E1E9123A9D0D660FAA79559C51FA20D64E5683B9FD1" \ "B54B1597B61D0A75E6FA141DF95A56DBAF9A3C407BA1DF15" \ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecdh.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecdh.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecdh.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecdh.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecdsa.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecdsa.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecdsa.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecdsa.h index aa23d67..ff6efbc 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecdsa.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecdsa.h @@ -272,8 +272,8 @@ int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, * * \return \c 0 on success, * #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if signature is invalid, - * #MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH if the signature is - * valid but its actual length is less than \p siglen, + * #MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH if there is a valid + * signature in sig but its length is less than \p siglen, * or an \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_ERR_MPI_XXX * error code on failure for any other reason. * diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecjpake.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecjpake.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecjpake.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecjpake.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp.h index b00ba4d..7b8ffff 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp.h @@ -36,7 +36,7 @@ #define MBEDTLS_ERR_ECP_ALLOC_FAILED -0x4D80 /**< Memory allocation failed. */ #define MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 /**< Generation of random value, such as (ephemeral) key, failed. */ #define MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 /**< Invalid private or public key. */ -#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< Signature is valid but shorter than the user-supplied length. */ +#define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< The buffer contains a valid signature followed by more data. */ #define MBEDTLS_ERR_ECP_HW_ACCEL_FAILED -0x4B80 /**< ECP hardware accelerator failed. */ #if !defined(MBEDTLS_ECP_ALT) diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp_internal.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp_internal.h index 8a6d517..1804069 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ecp_internal.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ecp_internal.h @@ -48,7 +48,7 @@ * [6] Digital Signature Standard (DSS), FIPS 186-4. * * - * [7] Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer + * [7] Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer * Security (TLS), RFC 4492. * * diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/entropy.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/entropy.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/entropy.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/entropy.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/entropy_poll.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/entropy_poll.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/entropy_poll.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/entropy_poll.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/error.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/error.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/error.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/error.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/gcm.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/gcm.h similarity index 77% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/gcm.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/gcm.h index 1e5a507..00ed421 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/gcm.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/gcm.h @@ -106,20 +106,41 @@ int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, * If the buffers overlap, the output buffer must trail at least 8 Bytes * behind the input buffer. * + * \warning When this function performs a decryption, it outputs the + * authentication tag and does not verify that the data is + * authentic. You should use this function to perform encryption + * only. For decryption, use mbedtls_gcm_auth_decrypt() instead. + * * \param ctx The GCM context to use for encryption or decryption. - * \param mode The operation to perform: #MBEDTLS_GCM_ENCRYPT or - * #MBEDTLS_GCM_DECRYPT. - * \param length The length of the input data. This must be a multiple of 16 except in the last call before mbedtls_gcm_finish(). + * \param mode The operation to perform: + * - #MBEDTLS_GCM_ENCRYPT to perform authenticated encryption. + * The ciphertext is written to \p output and the + * authentication tag is written to \p tag. + * - #MBEDTLS_GCM_DECRYPT to perform decryption. + * The plaintext is written to \p output and the + * authentication tag is written to \p tag. + * Note that this mode is not recommended, because it does + * not verify the authenticity of the data. For this reason, + * you should use mbedtls_gcm_auth_decrypt() instead of + * calling this function in decryption mode. + * \param length The length of the input data, which is equal to the length + * of the output data. * \param iv The initialization vector. * \param iv_len The length of the IV. * \param add The buffer holding the additional data. * \param add_len The length of the additional data. - * \param input The buffer holding the input data. - * \param output The buffer for holding the output data. + * \param input The buffer holding the input data. Its size is \b length. + * \param output The buffer for holding the output data. It must have room + * for \b length bytes. * \param tag_len The length of the tag to generate. * \param tag The buffer for holding the tag. * - * \return \c 0 on success. + * \return \c 0 if the encryption or decryption was performed + * successfully. Note that in #MBEDTLS_GCM_DECRYPT mode, + * this does not indicate that the data is authentic. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT if the lengths are not valid. + * \return #MBEDTLS_ERR_GCM_HW_ACCEL_FAILED or a cipher-specific + * error code if the encryption or decryption failed. */ int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, int mode, @@ -142,18 +163,23 @@ int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, * behind the input buffer. * * \param ctx The GCM context. - * \param length The length of the input data. This must be a multiple of 16 except in the last call before mbedtls_gcm_finish(). + * \param length The length of the ciphertext to decrypt, which is also + * the length of the decrypted plaintext. * \param iv The initialization vector. * \param iv_len The length of the IV. * \param add The buffer holding the additional data. * \param add_len The length of the additional data. - * \param tag The buffer holding the tag. - * \param tag_len The length of the tag. - * \param input The buffer holding the input data. - * \param output The buffer for holding the output data. + * \param tag The buffer holding the tag to verify. + * \param tag_len The length of the tag to verify. + * \param input The buffer holding the ciphertext. Its size is \b length. + * \param output The buffer for holding the decrypted plaintext. It must + * have room for \b length bytes. * - * \return 0 if successful and authenticated, or - * #MBEDTLS_ERR_GCM_AUTH_FAILED if tag does not match. + * \return \c 0 if successful and authenticated. + * \return #MBEDTLS_ERR_GCM_AUTH_FAILED if the tag does not match. + * \return #MBEDTLS_ERR_GCM_BAD_INPUT if the lengths are not valid. + * \return #MBEDTLS_ERR_GCM_HW_ACCEL_FAILED or a cipher-specific + * error code if the decryption failed. */ int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, size_t length, diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/havege.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/havege.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/havege.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/havege.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/hmac_drbg.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/hmac_drbg.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/hmac_drbg.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/hmac_drbg.h index e0821cf..2608de8 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/hmac_drbg.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/hmac_drbg.h @@ -27,7 +27,7 @@ #include "md.h" #if defined(MBEDTLS_THREADING_C) -#include "mbedtls/threading.h" +#include "threading.h" #endif /* diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md2.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md2.h similarity index 86% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md2.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md2.h index 2ff3f17..0fd8b5a 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md2.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md2.h @@ -39,11 +39,6 @@ #define MBEDTLS_ERR_MD2_HW_ACCEL_FAILED -0x002B /**< MD2 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #if !defined(MBEDTLS_MD2_ALT) // Regular implementation // @@ -187,11 +182,7 @@ int mbedtls_internal_md2_process( mbedtls_md2_context *ctx ); * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md2_starts( - mbedtls_md2_context *ctx ) -{ - mbedtls_md2_starts_ret( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_md2_starts( mbedtls_md2_context *ctx ); /** * \brief MD2 process buffer @@ -207,13 +198,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md2_starts( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md2_update( - mbedtls_md2_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md2_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_md2_update( mbedtls_md2_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief MD2 final digest @@ -228,12 +215,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md2_update( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md2_finish( - mbedtls_md2_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md2_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md2_finish( mbedtls_md2_context *ctx, + unsigned char output[16] ); /** * \brief MD2 process data block (internal use only) @@ -247,11 +230,7 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md2_finish( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md2_process( - mbedtls_md2_context *ctx ) -{ - mbedtls_internal_md2_process( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_md2_process( mbedtls_md2_context *ctx ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -304,12 +283,9 @@ int mbedtls_md2_ret( const unsigned char *input, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md2( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md2_ret( input, ilen, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md2( const unsigned char *input, + size_t ilen, + unsigned char output[16] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md4.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md4.h similarity index 85% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md4.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md4.h index a2ab57f..23fa95e 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md4.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md4.h @@ -40,11 +40,6 @@ #define MBEDTLS_ERR_MD4_HW_ACCEL_FAILED -0x002D /**< MD4 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #if !defined(MBEDTLS_MD4_ALT) // Regular implementation // @@ -188,11 +183,7 @@ int mbedtls_internal_md4_process( mbedtls_md4_context *ctx, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md4_starts( - mbedtls_md4_context *ctx ) -{ - mbedtls_md4_starts_ret( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_md4_starts( mbedtls_md4_context *ctx ); /** * \brief MD4 process buffer @@ -208,13 +199,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md4_starts( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md4_update( - mbedtls_md4_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md4_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_md4_update( mbedtls_md4_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief MD4 final digest @@ -229,12 +216,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md4_update( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md4_finish( - mbedtls_md4_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md4_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md4_finish( mbedtls_md4_context *ctx, + unsigned char output[16] ); /** * \brief MD4 process data block (internal use only) @@ -249,12 +232,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md4_finish( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md4_process( - mbedtls_md4_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_md4_process( ctx, data ); -} +MBEDTLS_DEPRECATED void mbedtls_md4_process( mbedtls_md4_context *ctx, + const unsigned char data[64] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -309,12 +288,9 @@ int mbedtls_md4_ret( const unsigned char *input, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md4( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md4_ret( input, ilen, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md4( const unsigned char *input, + size_t ilen, + unsigned char output[16] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md5.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md5.h similarity index 85% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md5.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md5.h index d49391f..06ea4c5 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md5.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md5.h @@ -43,11 +43,6 @@ // Regular implementation // -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #ifdef __cplusplus extern "C" { #endif @@ -188,11 +183,7 @@ int mbedtls_internal_md5_process( mbedtls_md5_context *ctx, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md5_starts( - mbedtls_md5_context *ctx ) -{ - mbedtls_md5_starts_ret( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_md5_starts( mbedtls_md5_context *ctx ); /** * \brief MD5 process buffer @@ -208,13 +199,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md5_starts( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md5_update( - mbedtls_md5_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md5_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_md5_update( mbedtls_md5_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief MD5 final digest @@ -229,12 +216,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md5_update( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md5_finish( - mbedtls_md5_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md5_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md5_finish( mbedtls_md5_context *ctx, + unsigned char output[16] ); /** * \brief MD5 process data block (internal use only) @@ -249,12 +232,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_md5_finish( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md5_process( - mbedtls_md5_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_md5_process( ctx, data ); -} +MBEDTLS_DEPRECATED void mbedtls_md5_process( mbedtls_md5_context *ctx, + const unsigned char data[64] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -309,12 +288,9 @@ int mbedtls_md5_ret( const unsigned char *input, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_md5( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md5_ret( input, ilen, output ); -} +MBEDTLS_DEPRECATED void mbedtls_md5( const unsigned char *input, + size_t ilen, + unsigned char output[16] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md_internal.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/md_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/md_internal.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/memory_buffer_alloc.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/memory_buffer_alloc.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/memory_buffer_alloc.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/memory_buffer_alloc.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net.h similarity index 91% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net.h index 28ae821..6c13b53 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net.h @@ -1,7 +1,7 @@ /** * \file net.h * - * \brief Deprecated header file that includes mbedtls/net_sockets.h + * \brief Deprecated header file that includes net_sockets.h * * \deprecated Superseded by mbedtls/net_sockets.h */ @@ -25,7 +25,7 @@ */ #if !defined(MBEDTLS_DEPRECATED_REMOVED) -#include "mbedtls/net_sockets.h" +#include "net_sockets.h" #if defined(MBEDTLS_DEPRECATED_WARNING) #warning "Deprecated header file: Superseded by mbedtls/net_sockets.h" #endif /* MBEDTLS_DEPRECATED_WARNING */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net_sockets.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net_sockets.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net_sockets.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net_sockets.h index 54e612c..52bb8de 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/net_sockets.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/net_sockets.h @@ -118,9 +118,10 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char * * \param bind_ctx Relevant socket * \param client_ctx Will contain the connected client socket - * \param client_ip Will contain the client IP address + * \param client_ip Will contain the client IP address, can be NULL * \param buf_size Size of the client_ip buffer - * \param ip_len Will receive the size of the client IP written + * \param ip_len Will receive the size of the client IP written, + * can be NULL if client_ip is null * * \return 0 if successful, or * MBEDTLS_ERR_NET_ACCEPT_FAILED, or diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/oid.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/oid.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/oid.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/oid.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/padlock.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/padlock.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/padlock.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/padlock.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pem.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pem.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pem.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pem.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pk.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pk.h similarity index 97% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pk.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pk.h index 1059bda..ee06b2f 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pk.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pk.h @@ -63,7 +63,7 @@ #define MBEDTLS_ERR_PK_INVALID_ALG -0x3A80 /**< The algorithm tag or value is invalid. */ #define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE -0x3A00 /**< Elliptic curve is unsupported (only NIST curves are supported). */ #define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE -0x3980 /**< Unavailable feature, e.g. RSA disabled for RSA key. */ -#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH -0x3900 /**< The signature is valid but its length is less than expected. */ +#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH -0x3900 /**< The buffer contains a valid signature followed by more data. */ #define MBEDTLS_ERR_PK_HW_ACCEL_FAILED -0x3880 /**< PK hardware accelerator failed. */ #ifdef __cplusplus @@ -269,8 +269,8 @@ int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ); * \param sig_len Signature length * * \return 0 on success (signature is valid), - * MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is - * valid but its actual length is less than sig_len, + * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid + * signature in sig but its length is less than \p siglen, * or a specific error code. * * \note For RSA keys, the default padding type is PKCS#1 v1.5. @@ -300,10 +300,10 @@ int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, * \param sig_len Signature length * * \return 0 on success (signature is valid), - * MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be + * #MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be * used for this type of signatures, - * MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is - * valid but its actual length is less than sig_len, + * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid + * signature in sig but its length is less than \p siglen, * or a specific error code. * * \note If hash_len is 0, then the length associated with md_alg diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pk_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pk_internal.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pk_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pk_internal.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs11.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs11.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs11.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs11.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs12.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs12.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs12.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs12.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs5.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs5.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/pkcs5.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/pkcs5.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/platform.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/platform.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/platform.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/platform.h index ed10775..7c2835b 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/platform.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/platform.h @@ -31,7 +31,7 @@ #endif #if defined(MBEDTLS_HAVE_TIME) -#include "mbedtls/platform_time.h" +#include "platform_time.h" #endif #ifdef __cplusplus @@ -210,7 +210,7 @@ int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, #if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) #define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO #else -#define mbedtls_snprintf snprintf +#define mbedtls_snprintf MBEDTLS_PLATFORM_STD_SNPRINTF #endif /* MBEDTLS_PLATFORM_SNPRINTF_MACRO */ #endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/platform_time.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/platform_time.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/platform_time.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/platform_time.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ripemd160.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ripemd160.h similarity index 85% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ripemd160.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ripemd160.h index c21868b..3a8b50a 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ripemd160.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ripemd160.h @@ -35,11 +35,6 @@ #define MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED -0x0031 /**< RIPEMD160 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #if !defined(MBEDTLS_RIPEMD160_ALT) // Regular implementation // @@ -139,11 +134,8 @@ int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx, * * \param ctx context to be initialized */ -MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_starts( - mbedtls_ripemd160_context *ctx ) -{ - mbedtls_ripemd160_starts_ret( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_ripemd160_starts( + mbedtls_ripemd160_context *ctx ); /** * \brief RIPEMD-160 process buffer @@ -154,13 +146,10 @@ MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_starts( * \param input buffer holding the data * \param ilen length of the input data */ -MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_update( +MBEDTLS_DEPRECATED void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, const unsigned char *input, - size_t ilen ) -{ - mbedtls_ripemd160_update_ret( ctx, input, ilen ); -} + size_t ilen ); /** * \brief RIPEMD-160 final digest @@ -170,12 +159,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_update( * \param ctx RIPEMD-160 context * \param output RIPEMD-160 checksum result */ -MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_finish( +MBEDTLS_DEPRECATED void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, - unsigned char output[20] ) -{ - mbedtls_ripemd160_finish_ret( ctx, output ); -} + unsigned char output[20] ); /** * \brief RIPEMD-160 process data block (internal use only) @@ -185,12 +171,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_finish( * \param ctx RIPEMD-160 context * \param data buffer holding one block of data */ -MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160_process( +MBEDTLS_DEPRECATED void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_ripemd160_process( ctx, data ); -} + const unsigned char data[64] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -235,13 +218,9 @@ int mbedtls_ripemd160_ret( const unsigned char *input, * \param ilen length of the input data * \param output RIPEMD-160 checksum result */ -MBEDTLS_DEPRECATED static inline void mbedtls_ripemd160( - const unsigned char *input, - size_t ilen, - unsigned char output[20] ) -{ - mbedtls_ripemd160_ret( input, ilen, output ); -} +MBEDTLS_DEPRECATED void mbedtls_ripemd160( const unsigned char *input, + size_t ilen, + unsigned char output[20] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa.h index fb2f77f..5548f3c 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa.h @@ -518,6 +518,18 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, * * \note The input and output buffers must be large * enough. For example, 128 Bytes if RSA-1024 is used. + * + * \note Blinding is used if and only if a PRNG is provided. + * + * \note If blinding is used, both the base of exponentation + * and the exponent are blinded, providing protection + * against some side-channel attacks. + * + * \warning It is deprecated and a security risk to not provide + * a PRNG here and thereby prevent the use of blinding. + * Future versions of the library may enforce the presence + * of a PRNG. + * */ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa_internal.h similarity index 88% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa_internal.h index bcb3c94..53abd3c 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/rsa_internal.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/rsa_internal.h @@ -2,6 +2,37 @@ * \file rsa_internal.h * * \brief Context-independent RSA helper functions + * + * This module declares some RSA-related helper functions useful when + * implementing the RSA interface. These functions are provided in a separate + * compilation unit in order to make it easy for designers of alternative RSA + * implementations to use them in their own code, as it is conceived that the + * functionality they provide will be necessary for most complete + * implementations. + * + * End-users of Mbed TLS who are not providing their own alternative RSA + * implementations should not use these functions directly, and should instead + * use only the functions declared in rsa.h. + * + * The interface provided by this module will be maintained through LTS (Long + * Term Support) branches of Mbed TLS, but may otherwise be subject to change, + * and must be considered an internal interface of the library. + * + * There are two classes of helper functions: + * + * (1) Parameter-generating helpers. These are: + * - mbedtls_rsa_deduce_primes + * - mbedtls_rsa_deduce_private_exponent + * - mbedtls_rsa_deduce_crt + * Each of these functions takes a set of core RSA parameters and + * generates some other, or CRT related parameters. + * + * (2) Parameter-checking helpers. These are: + * - mbedtls_rsa_validate_params + * - mbedtls_rsa_validate_crt + * They take a set of core or CRT related RSA parameters and check their + * validity. + * */ /* * Copyright (C) 2006-2017, ARM Limited, All Rights Reserved @@ -21,31 +52,6 @@ * * This file is part of mbed TLS (https://tls.mbed.org) * - * - * This file declares some RSA-related helper functions useful when - * implementing the RSA interface. They are public and provided in a - * separate compilation unit in order to make it easy for designers of - * alternative RSA implementations to use them in their code, as it is - * conceived that the functionality they provide will be necessary - * for most complete implementations. - * - * End-users of Mbed TLS not intending to re-implement the RSA functionality - * are not expected to get into the need of making use of these functions directly, - * but instead should be able to use the functions declared in rsa.h. - * - * There are two classes of helper functions: - * (1) Parameter-generating helpers. These are: - * - mbedtls_rsa_deduce_primes - * - mbedtls_rsa_deduce_private_exponent - * - mbedtls_rsa_deduce_crt - * Each of these functions takes a set of core RSA parameters - * and generates some other, or CRT related parameters. - * (2) Parameter-checking helpers. These are: - * - mbedtls_rsa_validate_params - * - mbedtls_rsa_validate_crt - * They take a set of core or CRT related RSA parameters - * and check their validity. - * */ #ifndef MBEDTLS_RSA_INTERNAL_H @@ -213,4 +219,8 @@ int mbedtls_rsa_validate_crt( const mbedtls_mpi *P, const mbedtls_mpi *Q, const mbedtls_mpi *D, const mbedtls_mpi *DP, const mbedtls_mpi *DQ, const mbedtls_mpi *QP ); +#ifdef __cplusplus +} +#endif + #endif /* rsa_internal.h */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha1.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha1.h similarity index 86% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha1.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha1.h index e4f8650..05540cd 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha1.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha1.h @@ -39,11 +39,6 @@ #define MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED -0x0035 /**< SHA-1 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #if !defined(MBEDTLS_SHA1_ALT) // Regular implementation // @@ -190,11 +185,7 @@ int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha1_starts( - mbedtls_sha1_context *ctx ) -{ - mbedtls_sha1_starts_ret( ctx ); -} +MBEDTLS_DEPRECATED void mbedtls_sha1_starts( mbedtls_sha1_context *ctx ); /** * \brief SHA-1 process buffer @@ -210,13 +201,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha1_starts( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha1_update( - mbedtls_sha1_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha1_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_sha1_update( mbedtls_sha1_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief SHA-1 final digest @@ -231,12 +218,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha1_update( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha1_finish( - mbedtls_sha1_context *ctx, - unsigned char output[20] ) -{ - mbedtls_sha1_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, + unsigned char output[20] ); /** * \brief SHA-1 process data block (internal use only) @@ -251,12 +234,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha1_finish( * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha1_process( - mbedtls_sha1_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_sha1_process( ctx, data ); -} +MBEDTLS_DEPRECATED void mbedtls_sha1_process( mbedtls_sha1_context *ctx, + const unsigned char data[64] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -317,12 +296,9 @@ int mbedtls_sha1_ret( const unsigned char *input, * stronger message digests instead. * */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha1( const unsigned char *input, - size_t ilen, - unsigned char output[20] ) -{ - mbedtls_sha1_ret( input, ilen, output ); -} +MBEDTLS_DEPRECATED void mbedtls_sha1( const unsigned char *input, + size_t ilen, + unsigned char output[20] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha256.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha256.h similarity index 84% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha256.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha256.h index a2b6e11..ffb16c2 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha256.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha256.h @@ -35,10 +35,6 @@ #define MBEDTLS_ERR_SHA256_HW_ACCEL_FAILED -0x0037 /**< SHA-256 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif #if !defined(MBEDTLS_SHA256_ALT) // Regular implementation // @@ -156,12 +152,8 @@ int mbedtls_internal_sha256_process( mbedtls_sha256_context *ctx, *
  • 0: Use SHA-256.
  • *
  • 1: Use SHA-224.
*/ -MBEDTLS_DEPRECATED static inline void mbedtls_sha256_starts( - mbedtls_sha256_context *ctx, - int is224 ) -{ - mbedtls_sha256_starts_ret( ctx, is224 ); -} +MBEDTLS_DEPRECATED void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, + int is224 ); /** * \brief This function feeds an input buffer into an ongoing @@ -173,13 +165,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha256_starts( * \param input The buffer holding the data. * \param ilen The length of the input data. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha256_update( - mbedtls_sha256_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha256_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_sha256_update( mbedtls_sha256_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief This function finishes the SHA-256 operation, and writes @@ -190,12 +178,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha256_update( * \param ctx The SHA-256 context. * \param output The SHA-224or SHA-256 checksum result. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha256_finish( - mbedtls_sha256_context *ctx, - unsigned char output[32] ) -{ - mbedtls_sha256_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, + unsigned char output[32] ); /** * \brief This function processes a single data block within @@ -207,12 +191,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha256_finish( * \param ctx The SHA-256 context. * \param data The buffer holding one block of data. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha256_process( - mbedtls_sha256_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_sha256_process( ctx, data ); -} +MBEDTLS_DEPRECATED void mbedtls_sha256_process( mbedtls_sha256_context *ctx, + const unsigned char data[64] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -276,14 +256,10 @@ int mbedtls_sha256_ret( const unsigned char *input, *
  • 0: Use SHA-256.
  • *
  • 1: Use SHA-224.
*/ -MBEDTLS_DEPRECATED static inline void mbedtls_sha256( - const unsigned char *input, - size_t ilen, - unsigned char output[32], - int is224 ) -{ - mbedtls_sha256_ret( input, ilen, output, is224 ); -} +MBEDTLS_DEPRECATED void mbedtls_sha256( const unsigned char *input, + size_t ilen, + unsigned char output[32], + int is224 ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha512.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha512.h similarity index 84% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha512.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha512.h index 52ae204..8404a2d 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/sha512.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/sha512.h @@ -35,10 +35,6 @@ #define MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED -0x0039 /**< SHA-512 hardware accelerator failed */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif #if !defined(MBEDTLS_SHA512_ALT) // Regular implementation // @@ -156,12 +152,8 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx, *
  • 0: Use SHA-512.
  • *
  • 1: Use SHA-384.
*/ -MBEDTLS_DEPRECATED static inline void mbedtls_sha512_starts( - mbedtls_sha512_context *ctx, - int is384 ) -{ - mbedtls_sha512_starts_ret( ctx, is384 ); -} +MBEDTLS_DEPRECATED void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, + int is384 ); /** * \brief This function feeds an input buffer into an ongoing @@ -173,13 +165,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha512_starts( * \param input The buffer holding the data. * \param ilen The length of the input data. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha512_update( - mbedtls_sha512_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha512_update_ret( ctx, input, ilen ); -} +MBEDTLS_DEPRECATED void mbedtls_sha512_update( mbedtls_sha512_context *ctx, + const unsigned char *input, + size_t ilen ); /** * \brief This function finishes the SHA-512 operation, and writes @@ -190,12 +178,8 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha512_update( * \param ctx The SHA-512 context. * \param output The SHA-384 or SHA-512 checksum result. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha512_finish( - mbedtls_sha512_context *ctx, - unsigned char output[64] ) -{ - mbedtls_sha512_finish_ret( ctx, output ); -} +MBEDTLS_DEPRECATED void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, + unsigned char output[64] ); /** * \brief This function processes a single data block within @@ -207,12 +191,9 @@ MBEDTLS_DEPRECATED static inline void mbedtls_sha512_finish( * \param ctx The SHA-512 context. * \param data The buffer holding one block of data. */ -MBEDTLS_DEPRECATED static inline void mbedtls_sha512_process( +MBEDTLS_DEPRECATED void mbedtls_sha512_process( mbedtls_sha512_context *ctx, - const unsigned char data[128] ) -{ - mbedtls_internal_sha512_process( ctx, data ); -} + const unsigned char data[128] ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ @@ -278,14 +259,10 @@ int mbedtls_sha512_ret( const unsigned char *input, *
  • 0: Use SHA-512.
  • *
  • 1: Use SHA-384.
*/ -MBEDTLS_DEPRECATED static inline void mbedtls_sha512( - const unsigned char *input, - size_t ilen, - unsigned char output[64], - int is384 ) -{ - mbedtls_sha512_ret( input, ilen, output, is384 ); -} +MBEDTLS_DEPRECATED void mbedtls_sha512( const unsigned char *input, + size_t ilen, + unsigned char output[64], + int is384 ); #undef MBEDTLS_DEPRECATED #endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl.h index cc3c862..72374e3 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl.h @@ -53,7 +53,7 @@ #endif #if defined(MBEDTLS_HAVE_TIME) -#include "mbedtls/platform_time.h" +#include "platform_time.h" #endif /* @@ -932,14 +932,6 @@ extern int (*mbedtls_ssl_hw_record_read)(mbedtls_ssl_context *ssl); extern int (*mbedtls_ssl_hw_record_finish)(mbedtls_ssl_context *ssl); #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ -/** - * \brief Returns the list of ciphersuites supported by the SSL/TLS module. - * - * \return a statically allocated array of ciphersuites, the last - * entry is 0. - */ -const int *mbedtls_ssl_list_ciphersuites( void ); - /** * \brief Return the name of the ciphersuite associated with the * given ID @@ -975,8 +967,13 @@ void mbedtls_ssl_init( mbedtls_ssl_context *ssl ); * \note No copy of the configuration context is made, it can be * shared by many mbedtls_ssl_context structures. * - * \warning Modifying the conf structure after it has been used in this - * function is unsupported! + * \warning The conf structure will be accessed during the session. + * It must not be modified or freed as long as the session + * is active. + * + * \warning This function must be called exactly once per context. + * Calling mbedtls_ssl_setup again is not supported, even + * if no session is active. * * \param ssl SSL context * \param conf SSL configuration to use @@ -1591,6 +1588,10 @@ void mbedtls_ssl_conf_cert_profile( mbedtls_ssl_config *conf, /** * \brief Set the data required to verify peer certificate * + * \note See \c mbedtls_x509_crt_verify() for notes regarding the + * parameters ca_chain (maps to trust_ca for that function) + * and ca_crl. + * * \param conf SSL configuration * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) * \param ca_crl trusted CA CRLs @@ -1831,21 +1832,21 @@ void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, #if defined(MBEDTLS_X509_CRT_PARSE_C) /** - * \brief Set or reset the hostname to check against the received - * server certificate. It sets the ServerName TLS extension, + * \brief Set or reset the hostname to check against the received + * server certificate. It sets the ServerName TLS extension, * too, if that extension is enabled. (client-side only) * * \param ssl SSL context * \param hostname the server hostname, may be NULL to clear hostname - + * * \note Maximum hostname length MBEDTLS_SSL_MAX_HOST_NAME_LEN. * - * \return 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED on - * allocation failure, MBEDTLS_ERR_SSL_BAD_INPUT_DATA on + * \return 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED on + * allocation failure, MBEDTLS_ERR_SSL_BAD_INPUT_DATA on * too long input hostname. * * Hostname set to the one provided on success (cleared - * when NULL). On allocation failure hostname is cleared. + * when NULL). On allocation failure hostname is cleared. * On too long input failure, old hostname is unchanged. */ int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ); @@ -2391,7 +2392,6 @@ const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ss * \brief Save session in order to resume it later (client-side only) * Session data is copied to presented session structure. * - * \warning Currently, peer certificate is lost in the operation. * * \param ssl SSL context * \param session session context @@ -2399,7 +2399,18 @@ const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ss * \return 0 if successful, * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or - * arguments are otherwise invalid + * arguments are otherwise invalid. + * + * \note Only the server certificate is copied, and not the full chain, + * so you should not attempt to validate the certificate again + * by calling \c mbedtls_x509_crt_verify() on it. + * Instead, you should use the results from the verification + * in the original handshake by calling \c mbedtls_ssl_get_verify_result() + * after loading the session again into a new SSL context + * using \c mbedtls_ssl_set_session(). + * + * \note Once the session object is not needed anymore, you should + * free it by calling \c mbedtls_ssl_session_free(). * * \sa mbedtls_ssl_set_session() */ @@ -2525,15 +2536,19 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * or MBEDTLS_ERR_SSL_WANT_WRITE or MBEDTLS_ERR_SSL_WANT_READ, * or another negative error code. * - * \note If this function returns something other than a positive - * value or MBEDTLS_ERR_SSL_WANT_READ/WRITE, the ssl context - * becomes unusable, and you should either free it or call - * \c mbedtls_ssl_session_reset() on it before re-using it for - * a new connection; the current connection must be closed. + * \note If this function returns something other than 0, a positive + * value or MBEDTLS_ERR_SSL_WANT_READ/WRITE, you must stop + * using the SSL context for reading or writing, and either + * free it or call \c mbedtls_ssl_session_reset() on it before + * re-using it for a new connection; the current connection + * must be closed. * * \note When this function returns MBEDTLS_ERR_SSL_WANT_WRITE/READ, * it must be called later with the *same* arguments, - * until it returns a positive value. + * until it returns a value greater that or equal to 0. When + * the function returns MBEDTLS_ERR_SSL_WANT_WRITE there may be + * some partial data in the output buffer, however this is not + * yet sent. * * \note If the requested length is greater than the maximum * fragment length (either the built-in limit or the one set @@ -2542,6 +2557,9 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned. * \c mbedtls_ssl_get_max_frag_len() may be used to query the * active maximum fragment length. + * + * \note Attempting to write 0 bytes will result in an empty TLS + * application record being sent. */ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ); @@ -2634,6 +2652,9 @@ void mbedtls_ssl_session_init( mbedtls_ssl_session *session ); * \brief Free referenced items in an SSL session including the * peer certificate and clear memory * + * \note A session object can be freed even if the SSL context + * that was used to retrieve the session is still in use. + * * \param session SSL session */ void mbedtls_ssl_session_free( mbedtls_ssl_session *session ); diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_cache.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_cache.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_cache.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_cache.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h similarity index 99% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h index 545468a..1d2aabc 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_ciphersuites.h @@ -267,7 +267,7 @@ typedef enum { defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) #define MBEDTLS_KEY_EXCHANGE__CERT_REQ_ALLOWED__ENABLED #endif diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_cookie.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_cookie.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_cookie.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_cookie.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_internal.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_internal.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_internal.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_internal.h index 9f583a8..2b5a616 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_internal.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_internal.h @@ -71,6 +71,9 @@ #endif /* MBEDTLS_SSL_PROTO_TLS1 */ #endif /* MBEDTLS_SSL_PROTO_SSL3 */ +#define MBEDTLS_SSL_MIN_VALID_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_1 +#define MBEDTLS_SSL_MIN_VALID_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3 + /* Determine maximum supported version */ #define MBEDTLS_SSL_MAX_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3 @@ -627,7 +630,13 @@ static inline int mbedtls_ssl_safer_memcmp( const void *a, const void *b, size_t volatile unsigned char diff = 0; for( i = 0; i < n; i++ ) - diff |= A[i] ^ B[i]; + { + /* Read volatile data in order before computing diff. + * This avoids IAR compiler warning: + * 'the order of volatile accesses is undefined ..' */ + unsigned char x = A[i], y = B[i]; + diff |= x ^ y; + } return( diff ); } diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_ticket.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_ticket.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/ssl_ticket.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/ssl_ticket.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/threading.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/threading.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/threading.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/threading.h index 58e6db2..aeea5d0 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/threading.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/threading.h @@ -96,8 +96,12 @@ extern int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t *mutex ); /* * Global mutexes */ +#if defined(MBEDTLS_FS_IO) extern mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex; +#endif +#if defined(MBEDTLS_HAVE_TIME_DATE) extern mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex; +#endif #endif /* MBEDTLS_THREADING_C */ #ifdef __cplusplus diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/timing.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/timing.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/timing.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/timing.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/version.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/version.h similarity index 94% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/version.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/version.h index 961be59..aa2764b 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/version.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/version.h @@ -40,16 +40,16 @@ */ #define MBEDTLS_VERSION_MAJOR 2 #define MBEDTLS_VERSION_MINOR 7 -#define MBEDTLS_VERSION_PATCH 0 +#define MBEDTLS_VERSION_PATCH 5 /** * The single version number has the following structure: * MMNNPP00 * Major version | Minor version | Patch version */ -#define MBEDTLS_VERSION_NUMBER 0x02070000 -#define MBEDTLS_VERSION_STRING "2.7.0" -#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.7.0" +#define MBEDTLS_VERSION_NUMBER 0x02070500 +#define MBEDTLS_VERSION_STRING "2.7.5" +#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.7.5" #if defined(MBEDTLS_VERSION_C) diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_crl.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_crl.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_crl.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_crl.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_crt.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_crt.h similarity index 98% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_crt.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_crt.h index 46780bd..2e48991 100644 --- a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_crt.h +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_crt.h @@ -289,8 +289,15 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, * used to sign the certificate, CRL verification is skipped * silently, that is *without* setting any flag. * + * \note The \c trust_ca list can contain two types of certificates: + * (1) those of trusted root CAs, so that certificates + * chaining up to those CAs will be trusted, and (2) + * self-signed end-entity certificates to be trusted (for + * specific peers you know) - in that case, the self-signed + * certificate doesn't need to have the CA bit set. + * * \param crt a certificate (chain) to be verified - * \param trust_ca the list of trusted CAs + * \param trust_ca the list of trusted CAs (see note above) * \param ca_crl the list of CRLs for trusted CAs (see note above) * \param cn expected Common Name (can be set to * NULL if the CN must not be verified) diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_csr.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_csr.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/x509_csr.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/x509_csr.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/xtea.h b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/xtea.h similarity index 100% rename from OpenVPN Adapter/Vendors/mbedtls/include/mbedtls/xtea.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/include/mbedtls/xtea.h diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedcrypto.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedcrypto.a similarity index 52% rename from OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedcrypto.a rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedcrypto.a index 17ead60..b786c4a 100644 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedcrypto.a and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedcrypto.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedtls.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedtls.a new file mode 100644 index 0000000..60ad8f2 Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedtls.a differ diff --git a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedx509.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedx509.a similarity index 53% rename from OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedx509.a rename to Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedx509.a index c590a18..2cb06a8 100644 Binary files a/OpenVPN Adapter/Vendors/mbedtls/lib/ios/libmbedx509.a and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/ios/libmbedx509.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedcrypto.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedcrypto.a new file mode 100644 index 0000000..89bed92 Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedcrypto.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedtls.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedtls.a new file mode 100644 index 0000000..f2c031b Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedtls.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedx509.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedx509.a new file mode 100644 index 0000000..9c54dbe Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/macos/libmbedx509.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedcrypto.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedcrypto.a new file mode 100644 index 0000000..c618591 Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedcrypto.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedtls.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedtls.a new file mode 100644 index 0000000..cdb69d8 Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedtls.a differ diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedx509.a b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedx509.a new file mode 100644 index 0000000..f6159f8 Binary files /dev/null and b/Sources/OpenVPNAdapter/Libraries/Vendors/mbedtls/lib/sim/libmbedx509.a differ diff --git a/OpenVPN Adapter/Vendors/openvpn/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/.travis.yml b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis.yml similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/.travis.yml rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis.yml diff --git a/OpenVPN Adapter/Vendors/openvpn/.travis/build-check.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis/build-check.sh similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/.travis/build-check.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis/build-check.sh diff --git a/OpenVPN Adapter/Vendors/openvpn/.travis/build-deps.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis/build-deps.sh similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/.travis/build-deps.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/.travis/build-deps.sh diff --git a/OpenVPN Adapter/Vendors/openvpn/CLA.rst b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/CLA.rst similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/CLA.rst rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/CLA.rst diff --git a/OpenVPN Adapter/Vendors/openvpn/CONTRIBUTING.rst b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/CONTRIBUTING.rst similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/CONTRIBUTING.rst rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/CONTRIBUTING.rst diff --git a/OpenVPN Adapter/Vendors/openvpn/COPYRIGHT.AGPLV3 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/COPYRIGHT.AGPLV3 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/COPYRIGHT.AGPLV3 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/COPYRIGHT.AGPLV3 diff --git a/OpenVPN Adapter/Vendors/openvpn/LICENSE.rst b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/LICENSE.rst similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/LICENSE.rst rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/LICENSE.rst diff --git a/OpenVPN Adapter/Vendors/openvpn/README.rst b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/README.rst similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/README.rst rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/README.rst diff --git a/OpenVPN Adapter/Vendors/openvpn/VersionNumbering.rst b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/VersionNumbering.rst similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/VersionNumbering.rst rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/VersionNumbering.rst diff --git a/OpenVPN Adapter/Vendors/openvpn/client/ovpncli.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.cpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/client/ovpncli.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.cpp index 65b937c..656e16d 100644 --- a/OpenVPN Adapter/Vendors/openvpn/client/ovpncli.cpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.cpp @@ -88,6 +88,7 @@ #endif #include +#include #include #include #include @@ -321,20 +322,28 @@ namespace openvpn { { const std::string title = "remote-override"; ClientAPI::RemoteOverride ro; - parent->remote_override(ro); - if (!ro.error.empty()) - throw Exception("remote override exception: " + ro.error); + try { + parent->remote_override(ro); + } + catch (const std::exception& e) + { + ro.error = e.what(); + } RemoteList::Item::Ptr ri(new RemoteList::Item); - if (!ro.ip.empty()) - ri->set_ip_addr(IP::Addr(ro.ip, title)); - if (ro.host.empty()) - ro.host = ro.ip; - HostPort::validate_host(ro.host, title); - HostPort::validate_port(ro.port, title); - ri->server_host = std::move(ro.host); - ri->server_port = std::move(ro.port); - ri->transport_protocol = Protocol::parse(ro.proto, Protocol::CLIENT_SUFFIX, title.c_str()); - + if (ro.error.empty()) + { + if (!ro.ip.empty()) + ri->set_ip_addr(IP::Addr(ro.ip, title)); + if (ro.host.empty()) + ro.host = ro.ip; + HostPort::validate_host(ro.host, title); + HostPort::validate_port(ro.port, title); + ri->server_host = std::move(ro.host); + ri->server_port = std::move(ro.port); + ri->transport_protocol = Protocol::parse(ro.proto, Protocol::CLIENT_SUFFIX, title.c_str()); + } + else + throw Exception("remote override exception: " + ro.error); return ri; } else @@ -542,10 +551,12 @@ namespace openvpn { void setup_async_stop_scopes() { stop_scope_local.reset(new AsioStopScope(*io_context(), async_stop_local(), [this]() { + OPENVPN_ASYNC_HANDLER; session->graceful_stop(); })); stop_scope_global.reset(new AsioStopScope(*io_context(), async_stop_global(), [this]() { + OPENVPN_ASYNC_HANDLER; trigger_async_stop_local(); })); } diff --git a/OpenVPN Adapter/Vendors/openvpn/client/ovpncli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/client/ovpncli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.hpp index 0d5bc92..06575a4 100644 --- a/OpenVPN Adapter/Vendors/openvpn/client/ovpncli.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/client/ovpncli.hpp @@ -551,7 +551,7 @@ namespace openvpn { virtual bool remote_override_enabled(); virtual void remote_override(RemoteOverride&); - // Periodic convenience clock tick, controlled by Config::clock_tick_ms + // Periodic convenience clock tick, controlled by Config::clockTickMS virtual void clock_tick(); // Do a crypto library self test @@ -610,3 +610,4 @@ namespace openvpn { } #endif + diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/asio/build-asio b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/build-asio similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/asio/build-asio rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/build-asio diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0001-Added-Apple-NAT64-support-when-both-ASIO_HAS_GETADDR.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0001-Added-Apple-NAT64-support-when-both-ASIO_HAS_GETADDR.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0001-Added-Apple-NAT64-support-when-both-ASIO_HAS_GETADDR.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0001-Added-Apple-NAT64-support-when-both-ASIO_HAS_GETADDR.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0002-Added-randomize-method-to-asio-ip-tcp-resolver-resul.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0002-Added-randomize-method-to-asio-ip-tcp-resolver-resul.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0002-Added-randomize-method-to-asio-ip-tcp-resolver-resul.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0002-Added-randomize-method-to-asio-ip-tcp-resolver-resul.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0003-Added-user-code-hook-async_connect_post_open-to-be-c.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0003-Added-user-code-hook-async_connect_post_open-to-be-c.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/asio/patches/0003-Added-user-code-hook-async_connect_post_open-to-be-c.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/patches/0003-Added-user-code-hook-async_connect_post_open-to-be-c.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/asio/snapshot-asio b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/snapshot-asio similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/asio/snapshot-asio rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/asio/snapshot-asio diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/boost/atomic-1.55.0.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/atomic-1.55.0.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/boost/atomic-1.55.0.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/atomic-1.55.0.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/boost/build-boost b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/build-boost similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/boost/build-boost rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/build-boost diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/boost/intrusive_ptr.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/intrusive_ptr.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/boost/intrusive_ptr.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/intrusive_ptr.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/boost/page_size.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/page_size.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/boost/page_size.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/boost/page_size.patch diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/cityhash/build-cityhash b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/cityhash/build-cityhash new file mode 100755 index 0000000..d5835f6 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/cityhash/build-cityhash @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +set -e +if [ -z "$O3" ]; then + echo O3 var must point to ovpn3 tree + exit 1 +fi +if [ -z "$DEP_DIR" ]; then + echo DEP_DIR var must point to dependency build folder + exit 1 +fi +if [ -z "$DL" ]; then + echo DL var must point to the download folder + exit 1 +fi + +if [ -z "$TARGET" ]; then + echo TARGET var must be defined + exit 1 +fi + +# source vars +. $O3/core/vars/vars-${TARGET} +. $O3/core/deps/lib-versions + +# source helper functions +. $O3/core/deps/functions.sh + +FNAME=cityhash-${CITYHASH_VERSION}.tar.gz +PN=${CITYHASH_VERSION#*-} +URL=https://codeload.github.com/google/cityhash/tar.gz/${CITYHASH_VERSION} +CSUM=${CITYHASH_CSUM} + +download + +CC=cc +LD=ld +AR=ar +RANLIB=ranlib +[ "$GCC_CMD" ] && CC=$GCC_CMD +[ "$LD_CMD" ] && LD=$LD_CMD +[ "$AR_CMD" ] && AR=$AR_CMD +[ "$RANLIB_CMD" ] && RANLIB=$RANLIB_CMD + +if [ "$NO_WIPE" != "1" ]; then + rm -rf $CITYHASH_VERSION + tar xfz $DL/cityhash-$CITYHASH_VERSION.tar.gz +fi + +DIST=$(pwd)/cityhash/cityhash-$PLATFORM +rm -rf $DIST +mkdir -p $DIST/include +mkdir $DIST/lib +cd cityhash-$CITYHASH_VERSION +CMD=./configure +echo $CMD +$CMD +CMD="$CC $PLATFORM_FLAGS $OTHER_COMPILER_FLAGS $LIB_OPT_LEVEL $LIB_FPIC -I. -Isrc -c src/city.cc" +echo $CMD +$CMD +$AR rc $DIST/lib/libcityhash.a city.o +$RANLIB $DIST/lib/libcityhash.a +cp src/city.h $DIST/include/ +exit 0 diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/functions.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/functions.sh similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/functions.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/functions.sh diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/lib-versions b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lib-versions similarity index 65% rename from OpenVPN Adapter/Vendors/openvpn/deps/lib-versions rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lib-versions index a508af1..63a16eb 100644 --- a/OpenVPN Adapter/Vendors/openvpn/deps/lib-versions +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lib-versions @@ -4,8 +4,8 @@ export ASIO_CSUM=fa8c3a16dc2163f5b3451f2a14ce95277c971f46700497d4e94af6059c00dc0 export LZ4_VERSION=lz4-1.8.0 export LZ4_CSUM=2ca482ea7a9bb103603108b5a7510b7592b90158c151ff50a28f1ca8389fccf6 -export MBEDTLS_VERSION=mbedtls-2.7.0 -export MBEDTLS_CSUM=aeb66d6cd43aa1c79c145d15845c655627a7fc30d624148aaafbb6c36d7f55ef +export MBEDTLS_VERSION=mbedtls-2.7.5 +export MBEDTLS_CSUM=a1302ad9094aabb9880d2755927b466a6bac8e02b68e04dee77321f3859e9b40 export OPENSSL_VERSION=openssl-1.0.2h @@ -14,3 +14,6 @@ export JSONCPP_CSUM=c49deac9e0933bcb7044f08516861a2d560988540b23de2ac1ad443b219a export TAP_VERSION=0e30f5c13b3c7b0bdd60da915350f653e4c14d92 export TAP_CSUM=8ff65f9e741c5ecfe1af904eaa38713f05639ce9457ef92041fd8e6b2a170315 + +export CITYHASH_VERSION=8af9b8c2b889d80c22d6bc26ba0df1afb79a30db +export CITYHASH_CSUM=f70368facd15735dffc77fe2b27ab505bfdd05be5e9166d94149a8744c212f49 \ No newline at end of file diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/lz4/build-lz4 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lz4/build-lz4 similarity index 94% rename from OpenVPN Adapter/Vendors/openvpn/deps/lz4/build-lz4 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lz4/build-lz4 index 30a5c86..53777d0 100755 --- a/OpenVPN Adapter/Vendors/openvpn/deps/lz4/build-lz4 +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lz4/build-lz4 @@ -47,6 +47,11 @@ if [ "$NO_WIPE" != "1" ]; then tar xfz $DL/$LZ4_VERSION.tar.gz fi +if [ "x$NO_BUILD" == x1 ]; then + echo "Not building" + exit +fi + DIST=$(pwd)/lz4/lz4-$PLATFORM rm -rf $DIST mkdir -p $DIST/include diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/lz4/snapshot-lz4 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lz4/snapshot-lz4 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/lz4/snapshot-lz4 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lz4/snapshot-lz4 diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/lzo/build-lzo b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lzo/build-lzo similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/lzo/build-lzo rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/lzo/build-lzo diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/build-mbedtls b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/build-mbedtls similarity index 96% rename from OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/build-mbedtls rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/build-mbedtls index a12e376..a962ad9 100755 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/build-mbedtls +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/build-mbedtls @@ -54,6 +54,11 @@ else apply_patches "mbedtls" fi +if [ "x$NO_BUILD" == x1 ]; then + echo "Not building" + exit 0 +fi + if [[ "x$TARGET" == xlinux* || "x$TARGET" == xosx* ]]; then # run unit tests and then clean echo RUNNING CHECK diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch similarity index 80% rename from OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch index 2e5f61a..d5406e9 100644 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0001-relax-x509-date-format-check.patch @@ -1,7 +1,7 @@ -From 62dd1588a7ec3501edfaf9470cf7a1ca15cb4ba1 Mon Sep 17 00:00:00 2001 +From 0554efae4e27b6a764def80f600394519ef1addb Mon Sep 17 00:00:00 2001 From: Antonio Quartulli Date: Tue, 20 Mar 2018 09:35:47 +0800 -Subject: [PATCH] relax x509 date format check +Subject: [PATCH 1/2] relax x509 date format check Signed-off-by: Antonio Quartulli --- @@ -9,10 +9,10 @@ Signed-off-by: Antonio Quartulli 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/library/x509.c b/library/x509.c -index 371d6da1..df2cea81 100644 +index 264c7fb0c..9372bcb92 100644 --- a/library/x509.c +++ b/library/x509.c -@@ -565,13 +565,20 @@ static int x509_parse_time( unsigned char **p, size_t len, size_t yearlen, +@@ -556,13 +556,20 @@ static int x509_parse_time( unsigned char **p, size_t len, size_t yearlen, /* * Parse seconds if present */ @@ -34,7 +34,7 @@ index 371d6da1..df2cea81 100644 /* * Parse trailing 'Z' if present -@@ -581,6 +588,15 @@ static int x509_parse_time( unsigned char **p, size_t len, size_t yearlen, +@@ -572,6 +579,15 @@ static int x509_parse_time( unsigned char **p, size_t len, size_t yearlen, (*p)++; len--; } @@ -51,5 +51,5 @@ index 371d6da1..df2cea81 100644 /* * We should have parsed all characters at this point -- -2.16.2 +2.18.0 diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0008-Enable-allowing-unsupported-critical-extensions-in-r.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0002-Enable-allowing-unsupported-critical-extensions-in-r.patch similarity index 89% rename from OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0008-Enable-allowing-unsupported-critical-extensions-in-r.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0002-Enable-allowing-unsupported-critical-extensions-in-r.patch index da772f2..3b1d159 100644 --- a/OpenVPN Adapter/Vendors/openvpn/deps/mbedtls/patches/0008-Enable-allowing-unsupported-critical-extensions-in-r.patch +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0002-Enable-allowing-unsupported-critical-extensions-in-r.patch @@ -1,7 +1,8 @@ -From 13dd5f71dfe345787c3c44ef177009530983bf20 Mon Sep 17 00:00:00 2001 +From c6963e33209e7fd40d65513e06c1bbb20319abe3 Mon Sep 17 00:00:00 2001 From: Lev Stipakov Date: Fri, 23 Feb 2018 17:12:49 +0200 -Subject: [PATCH] Enable allowing unsupported critical extensions in runtime +Subject: [PATCH 2/2] Enable allowing unsupported critical extensions in + runtime When compile time flag MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION is not set, certificate parsing fails if certificate contains unsupported critical extension. @@ -10,23 +11,23 @@ This patch allows to modify this behavior in runtime. Signed-off-by: Lev Stipakov --- - include/mbedtls/oid.h | 13 ++++- - include/mbedtls/ssl.h | 22 ++++++++ + include/mbedtls/oid.h | 13 +++- + include/mbedtls/ssl.h | 22 ++++++ include/mbedtls/x509_crt.h | 2 + - library/oid.c | 81 +++++++++++++++++++++++++----- + library/oid.c | 81 ++++++++++++++++++---- library/ssl_tls.c | 8 +++ - library/x509_crt.c | 10 +++- - tests/data_files/test-ca-nc.crt | 20 ++++++++ - tests/suites/test_suite_x509parse.data | 6 +++ - tests/suites/test_suite_x509parse.function | 15 ++++++ + library/x509_crt.c | 10 ++- + tests/data_files/test-ca-nc.crt | 20 ++++++ + tests/suites/test_suite_x509parse.data | 6 ++ + tests/suites/test_suite_x509parse.function | 15 ++++ 9 files changed, 162 insertions(+), 15 deletions(-) create mode 100644 tests/data_files/test-ca-nc.crt diff --git a/include/mbedtls/oid.h b/include/mbedtls/oid.h -index fcecdafd..096b1b10 100644 +index 408645ece..b116736f8 100644 --- a/include/mbedtls/oid.h +++ b/include/mbedtls/oid.h -@@ -401,7 +401,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_b +@@ -410,7 +410,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_b #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) /** @@ -35,7 +36,7 @@ index fcecdafd..096b1b10 100644 * * \param oid OID to use * \param ext_type place to store the extension type -@@ -409,6 +409,17 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_b +@@ -418,6 +418,17 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_b * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND */ int mbedtls_oid_get_x509_ext_type( const mbedtls_asn1_buf *oid, int *ext_type ); @@ -54,10 +55,10 @@ index fcecdafd..096b1b10 100644 /** diff --git a/include/mbedtls/ssl.h b/include/mbedtls/ssl.h -index cc000700..cb779f86 100644 +index c6e453274..72374e36b 100644 --- a/include/mbedtls/ssl.h +++ b/include/mbedtls/ssl.h -@@ -695,6 +695,10 @@ struct mbedtls_ssl_config +@@ -696,6 +696,10 @@ struct mbedtls_ssl_config retransmission timeout (ms) */ #endif @@ -68,7 +69,7 @@ index cc000700..cb779f86 100644 #if defined(MBEDTLS_SSL_RENEGOTIATION) int renego_max_records; /*!< grace period for renegotiation */ unsigned char renego_period[8]; /*!< value of the record counters -@@ -2234,6 +2238,24 @@ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, +@@ -2275,6 +2279,24 @@ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, const unsigned char period[8] ); #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -94,10 +95,10 @@ index cc000700..cb779f86 100644 * \brief Return the number of data bytes available to read * diff --git a/include/mbedtls/x509_crt.h b/include/mbedtls/x509_crt.h -index 06166d8b..adc6474f 100644 +index ac23cffe8..2e489915f 100644 --- a/include/mbedtls/x509_crt.h +++ b/include/mbedtls/x509_crt.h -@@ -89,6 +89,8 @@ typedef struct mbedtls_x509_crt +@@ -90,6 +90,8 @@ typedef struct mbedtls_x509_crt mbedtls_pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. MBEDTLS_PK_RSA */ void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ @@ -107,7 +108,7 @@ index 06166d8b..adc6474f 100644 } mbedtls_x509_crt; diff --git a/library/oid.c b/library/oid.c -index f13826ed..7c50f24f 100644 +index edea950f8..a756d2801 100644 --- a/library/oid.c +++ b/library/oid.c @@ -254,38 +254,95 @@ FN_OID_GET_ATTR1(mbedtls_oid_get_attr_short_name, oid_x520_attr_t, x520_attr, co @@ -219,10 +220,10 @@ index f13826ed..7c50f24f 100644 static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = { diff --git a/library/ssl_tls.c b/library/ssl_tls.c -index 661ae706..ed1f7b67 100644 +index ca9b8c432..dba0d5122 100644 --- a/library/ssl_tls.c +++ b/library/ssl_tls.c -@@ -4468,6 +4468,9 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) +@@ -4656,6 +4656,9 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) mbedtls_x509_crt_init( ssl->session_negotiate->peer_cert ); @@ -232,7 +233,7 @@ index 661ae706..ed1f7b67 100644 i += 3; while( i < ssl->in_hslen ) -@@ -6344,6 +6347,11 @@ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, +@@ -6586,6 +6589,11 @@ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, } #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -245,10 +246,10 @@ index 661ae706..ed1f7b67 100644 #if defined(MBEDTLS_SSL_CLI_C) void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets ) diff --git a/library/x509_crt.c b/library/x509_crt.c -index c6209fb4..1a61e5e9 100644 +index 6751da0d2..149149b96 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c -@@ -526,6 +526,7 @@ static int x509_get_crt_ext( unsigned char **p, +@@ -530,6 +530,7 @@ static int x509_get_crt_ext( unsigned char **p, int ret; size_t len; unsigned char *end_ext_data, *end_ext_octet; @@ -256,7 +257,7 @@ index c6209fb4..1a61e5e9 100644 if( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) { -@@ -585,9 +586,9 @@ static int x509_get_crt_ext( unsigned char **p, +@@ -589,9 +590,9 @@ static int x509_get_crt_ext( unsigned char **p, /* * Detect supported extensions */ @@ -268,7 +269,7 @@ index c6209fb4..1a61e5e9 100644 { /* No parser found, skip extension */ *p = end_ext_octet; -@@ -595,6 +596,10 @@ static int x509_get_crt_ext( unsigned char **p, +@@ -599,6 +600,10 @@ static int x509_get_crt_ext( unsigned char **p, #if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) if( is_critical ) { @@ -279,7 +280,7 @@ index c6209fb4..1a61e5e9 100644 /* Data is marked as critical: fail */ return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); -@@ -948,6 +953,7 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu +@@ -952,6 +957,7 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu prev = crt; mbedtls_x509_crt_init( crt->next ); @@ -289,7 +290,7 @@ index c6209fb4..1a61e5e9 100644 diff --git a/tests/data_files/test-ca-nc.crt b/tests/data_files/test-ca-nc.crt new file mode 100644 -index 00000000..7e0c5613 +index 000000000..7e0c56134 --- /dev/null +++ b/tests/data_files/test-ca-nc.crt @@ -0,0 +1,20 @@ @@ -314,11 +315,11 @@ index 00000000..7e0c5613 +OwQ6w1HweApjB46bGyILpGUi9MZhvCnoLWg+cN3/wQ== +-----END CERTIFICATE----- diff --git a/tests/suites/test_suite_x509parse.data b/tests/suites/test_suite_x509parse.data -index b8c902e2..e7dcb61f 100644 +index 406cf5931..212a2825a 100644 --- a/tests/suites/test_suite_x509parse.data +++ b/tests/suites/test_suite_x509parse.data -@@ -1574,6 +1574,12 @@ X509 File parse (trailing spaces, OK) - depends_on:MBEDTLS_ECP_C:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C +@@ -1766,6 +1766,12 @@ X509 File parse (trailing spaces, OK) + depends_on:MBEDTLS_ECDSA_C:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C:MBEDTLS_RSA_C x509parse_crt_file:"data_files/server7_trailing_space.crt":0 +X509 File parse (unsupported critical ext Name Constraints, fail) @@ -331,10 +332,10 @@ index b8c902e2..e7dcb61f 100644 depends_on:MBEDTLS_X509_USE_C x509_get_time:MBEDTLS_ASN1_UTC_TIME:"500101000000Z":0:1950:1:1:0:0:0 diff --git a/tests/suites/test_suite_x509parse.function b/tests/suites/test_suite_x509parse.function -index 0dfdd61c..2be1defd 100644 +index 06f010828..75936010f 100644 --- a/tests/suites/test_suite_x509parse.function +++ b/tests/suites/test_suite_x509parse.function -@@ -395,6 +395,21 @@ exit: +@@ -437,6 +437,21 @@ exit: } /* END_CASE */ @@ -357,5 +358,5 @@ index 0dfdd61c..2be1defd 100644 void x509parse_crt( char *crt_data, char *result_str, int result ) { -- -2.14.3 (Apple Git-98) +2.18.0 diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0003-fix-gcc-android-build.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0003-fix-gcc-android-build.patch new file mode 100644 index 0000000..251de7b --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/mbedtls/patches/0003-fix-gcc-android-build.patch @@ -0,0 +1,13 @@ +Only in mbedtls-2.7.5/include/mbedtls: #bn_mul.h# +diff -ur mbedtls-2.7.5/include/mbedtls/bn_mul.h mbedtls-2.7.5.patch/include/mbedtls/bn_mul.h +--- mbedtls-2.7.5/include/mbedtls/bn_mul.h 2018-07-26 15:33:14.000000000 +0200 ++++ mbedtls-2.7.5.patch/include/mbedtls/bn_mul.h 2018-08-22 14:37:31.000000000 +0200 +@@ -56,7 +56,7 @@ + * This is done as the number of registers used in the assembly code doesn't + * work with the -O0 option. + */ +-#if defined(__i386__) && defined(__OPTIMIZE__) ++#if defined(__i386__) && defined(__OPTIMIZE__) && (!defined(__ANDROID_API__) || defined(__clang__)) + + #define MULADDC_INIT \ + asm( \ diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/aes-armv4.pl.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/aes-armv4.pl.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/aes-armv4.pl.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/aes-armv4.pl.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/arm-as-to-ios b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/arm-as-to-ios similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/arm-as-to-ios rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/arm-as-to-ios diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/arm-as-to-ios.orig b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/arm-as-to-ios.orig similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/arm-as-to-ios.orig rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/arm-as-to-ios.orig diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/build-minicrypto b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/build-minicrypto similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/build-minicrypto rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/build-minicrypto diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/build-minicrypto-osx b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/build-minicrypto-osx similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/build-minicrypto-osx rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/build-minicrypto-osx diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/sha512-armv4.pl.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/sha512-armv4.pl.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/minicrypto/sha512-armv4.pl.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/minicrypto/sha512-armv4.pl.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/openssl/build-openssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/openssl/build-openssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/openssl/build-openssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/openssl/build-openssl diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/CMakeLists.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/CMakeLists.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/CMakeLists.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/CMakeLists.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/README.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/README.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/README.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/README.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/android.cmake b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/android.cmake similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/android.cmake rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/android.cmake diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/apple.cmake b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/apple.cmake similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/apple.cmake rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/apple.cmake diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/bignum-arm.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/bignum-arm.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/bignum-arm.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/bignum-arm.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-detail-patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-detail-patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-detail-patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-detail-patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-mini-openssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-mini-openssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-mini-openssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-mini-openssl diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-polarssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-polarssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-polarssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-polarssl diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-polarssl-patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-polarssl-patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/build-polarssl-patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/build-polarssl-patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config.h b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config.h similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config.h diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config.h.orig b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config.h.orig similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config.h.orig rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config.h.orig diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config12.h b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config12.h similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/config12.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/config12.h diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/crypto-alt.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/crypto-alt.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/crypto-alt.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/crypto-alt.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/dhm.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/dhm.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/dhm.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/dhm.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/entropy-printf.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/entropy-printf.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/entropy-printf.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/entropy-printf.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/gitar b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/gitar similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/gitar rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/gitar diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/intel_cpu.c b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/intel_cpu.c similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/intel_cpu.c rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/intel_cpu.c diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/linux-arm.cmake b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/linux-arm.cmake similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/linux-arm.cmake rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/linux-arm.cmake diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/polar-openssl.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/polar-openssl.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/polar-openssl.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/polar-openssl.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/polarssl-minicrypto.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/polarssl-minicrypto.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/polarssl-minicrypto.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/polarssl-minicrypto.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/ref b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/ref similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/ref rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/ref diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/ref-aesni b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/ref-aesni similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/ref-aesni rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/ref-aesni diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/relaxed-x509-date.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/relaxed-x509-date.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/relaxed-x509-date.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/relaxed-x509-date.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/testpatch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/testpatch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/testpatch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/testpatch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-const-ciphersuite.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-const-ciphersuite.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-const-ciphersuite.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-const-ciphersuite.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-enum.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-enum.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-enum.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-enum.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-epki.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-epki.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-epki.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-epki.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-invalid-mac.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-invalid-mac.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/polarssl-invalid-mac.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/polarssl-invalid-mac.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/trustex.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/trustex.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/polarssl/unused/trustex.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/polarssl/unused/trustex.patch diff --git a/OpenVPN Adapter/Vendors/openvpn/deps/snappy/build-snappy b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/snappy/build-snappy similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/deps/snappy/build-snappy rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/deps/snappy/build-snappy diff --git a/OpenVPN Adapter/Vendors/openvpn/doc/openvpn-protocol-extensions.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/doc/openvpn-protocol-extensions.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/doc/openvpn-protocol-extensions.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/doc/openvpn-protocol-extensions.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/docker-build.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/docker-build.sh similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/docker-build.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/docker-build.sh diff --git a/OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.centos b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.centos similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.centos rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.centos diff --git a/OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.debian b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.debian similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.debian rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.debian diff --git a/OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.ubu b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.ubu similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/dockerfiles/Dockerfile.ubu rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/dockerfiles/Dockerfile.ubu diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/Client.java b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/Client.java similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/Client.java rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/Client.java diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/Main.java b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/Main.java similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/Main.java rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/Main.java diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/OpenVPNClientThread.java b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/OpenVPNClientThread.java similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/OpenVPNClientThread.java rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/OpenVPNClientThread.java diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/android/cpu.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/android/cpu.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/android/cpu.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/android/cpu.cpp diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/android/jellybean_hack.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/android/jellybean_hack.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/android/jellybean_hack.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/android/jellybean_hack.cpp diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/build-android b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/build-android similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/build-android rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/build-android diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/build-linux b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/build-linux similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/build-linux rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/build-linux diff --git a/OpenVPN Adapter/Vendors/openvpn/javacli/ovpncli.i b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/ovpncli.i similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/javacli/ovpncli.i rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/javacli/ovpncli.i diff --git a/OpenVPN Adapter/Vendors/openvpn/mac/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/mac/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj similarity index 92% rename from OpenVPN Adapter/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj index 642a62b..4df459d 100644 --- a/OpenVPN Adapter/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ DF380AE9201F0DB80003272D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF380AE8201F0DB80003272D /* IOKit.framework */; }; DF380AEB201F0DDC0003272D /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF380AEA201F0DDC0003272D /* CoreServices.framework */; }; DF380AED201F0E0E0003272D /* libmbedtls.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DF380AEC201F0E0E0003272D /* libmbedtls.a */; }; + DF838B412090AC2F00B68F90 /* liblz4.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DF838B402090AC2F00B68F90 /* liblz4.a */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -36,6 +37,7 @@ DF380AE8201F0DB80003272D /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; DF380AEA201F0DDC0003272D /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; DF380AEC201F0E0E0003272D /* libmbedtls.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbedtls.a; path = "../../../deps/mbedtls/mbedtls-osx/library/libmbedtls.a"; sourceTree = ""; }; + DF838B402090AC2F00B68F90 /* liblz4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liblz4.a; path = "../../../deps/lz4/lz4-osx/lib/liblz4.a"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -43,6 +45,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DF838B412090AC2F00B68F90 /* liblz4.a in Frameworks */, DF380AED201F0E0E0003272D /* libmbedtls.a in Frameworks */, DF380AEB201F0DDC0003272D /* CoreServices.framework in Frameworks */, DF380AE9201F0DB80003272D /* IOKit.framework in Frameworks */, @@ -83,6 +86,7 @@ DF380AE3201F0D4F0003272D /* Frameworks */ = { isa = PBXGroup; children = ( + DF838B402090AC2F00B68F90 /* liblz4.a */, DF380AEC201F0E0E0003272D /* libmbedtls.a */, DF380AEA201F0DDC0003272D /* CoreServices.framework */, DF380AE8201F0DB80003272D /* IOKit.framework */, @@ -267,13 +271,19 @@ USE_ASIO, ASIO_STANDALONE, USE_MBEDTLS, + HAVE_LZ4, + LZ4_DISABLE_DEPRECATE_WARNINGS, ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/../..\"", "\"$(SRCROOT)/../../../deps/asio/asio/include\"", "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/include\"", + "\"$(SRCROOT)/../../../deps/lz4/lz4-osx/include\"", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/library\"", + "\"$(SRCROOT)/../../../deps/lz4/lz4-osx/lib\"", ); - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/library\""; PRODUCT_NAME = "$(TARGET_NAME)"; STRINGS_FILE_OUTPUT_ENCODING = "UTF-8"; }; @@ -287,13 +297,19 @@ USE_ASIO, ASIO_STANDALONE, USE_MBEDTLS, + HAVE_LZ4, + LZ4_DISABLE_DEPRECATE_WARNINGS, ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/../..\"", "\"$(SRCROOT)/../../../deps/asio/asio/include\"", "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/include\"", + "\"$(SRCROOT)/../../../deps/lz4/lz4-osx/include\"", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/library\"", + "\"$(SRCROOT)/../../../deps/lz4/lz4-osx/lib\"", ); - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../deps/mbedtls/mbedtls-osx/library\""; PRODUCT_NAME = "$(TARGET_NAME)"; STRINGS_FILE_OUTPUT_ENCODING = "UTF-8"; }; diff --git a/OpenVPN Adapter/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/mac/ovpn3-core/ovpn3-core.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/addrlist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/addrlist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/addrlist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/addrlist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/addrpair.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/addrpair.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/addrpair.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/addrpair.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ip.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ip.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ip.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ip.hpp index 3712593..1fda545 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ip.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ip.hpp @@ -78,10 +78,16 @@ namespace openvpn { { } +#ifndef SWIGPYTHON + // When calling IP:Addr with None as the second parameter, Swig will + // always pick this function and complain about not being able to convert + // a null pointer to a const std::string reference. Hide this function, so + // swig is forced to take the const char* variant of this function instead Addr(const std::string& ipstr, const std::string& title, Version required_version = UNSPEC) : Addr(from_string(ipstr, title.c_str(), required_version)) { } +#endif void validate_version(const char *title, Version required_version) const { @@ -89,10 +95,12 @@ namespace openvpn { throw ip_exception(internal::format_error(to_string(), title, version_string_static(required_version), "wrong IP version")); } +#ifndef SWIGPYTHON void validate_version(const std::string& title, Version required_version) const { validate_version(title.c_str(), required_version); } +#endif static std::string validate(const std::string& ipstr, const char *title = nullptr, Version required_version = UNSPEC) { @@ -100,10 +108,12 @@ namespace openvpn { return a.to_string(); } +#ifndef SWIGPYTHON static std::string validate(const std::string& ipstr, const std::string& title, Version required_version = UNSPEC) { return validate(ipstr, title.c_str(), required_version); } +#endif static bool is_valid(const std::string& ipstr) { diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/iperr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/iperr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/iperr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/iperr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv4.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv4.hpp index aacadd7..03c7653 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv4.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv4.hpp @@ -58,6 +58,11 @@ namespace openvpn { typedef std::uint32_t base_type; typedef std::int32_t signed_base_type; + bool defined() const + { + return true; + } + static Addr from_addr(const Addr& addr) { return addr; @@ -498,6 +503,15 @@ namespace openvpn { h(u.addr); } +#ifdef HAVE_CITYHASH + std::size_t hashval() const + { + HashSizeT h; + hash(h); + return h.value(); + } +#endif + #ifdef OPENVPN_IP_IMMUTABLE private: #endif @@ -566,4 +580,8 @@ namespace openvpn { } } +#ifdef HAVE_CITYHASH +OPENVPN_HASH_METHOD(openvpn::IPv4::Addr, hashval); +#endif + #endif // OPENVPN_ADDR_IPV4_H diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv6.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv6.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv6.hpp index 99662c1..9fedb64 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/ipv6.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/ipv6.hpp @@ -55,6 +55,11 @@ namespace openvpn { public: enum { SIZE=128 }; + bool defined() const + { + return true; + } + static Addr from_addr(const Addr& addr) { return addr; @@ -540,6 +545,15 @@ namespace openvpn { h(u.bytes, sizeof(u.bytes)); } +#ifdef HAVE_CITYHASH + std::size_t hashval() const + { + HashSizeT h; + hash(h); + return h.value(); + } +#endif + #ifdef OPENVPN_IP_IMMUTABLE private: #endif @@ -825,4 +839,8 @@ namespace openvpn { } } +#ifdef HAVE_CITYHASH +OPENVPN_HASH_METHOD(openvpn::IPv6::Addr, hashval); +#endif + #endif // OPENVPN_ADDR_IPV6_H diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/macaddr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/macaddr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/macaddr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/macaddr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/pool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/pool.hpp similarity index 85% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/pool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/pool.hpp index b0b9062..b176f5d 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/pool.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/pool.hpp @@ -47,7 +47,7 @@ namespace openvpn { // Add range of addresses to pool (pool will own the addresses). void add_range(const RangeType& range) { - typename RangeType::Iterator iter = range.iterator(); + auto iter = range.iterator(); while (iter.more()) { const ADDR& a = iter.addr(); @@ -59,7 +59,7 @@ namespace openvpn { // Add single address to pool (pool will own the address). void add_addr(const ADDR& addr) { - typename std::unordered_map::const_iterator e = map.find(addr); + auto e = map.find(addr); if (e == map.end()) { freelist.push_back(addr); @@ -73,16 +73,23 @@ namespace openvpn { return map.size() - freelist.size(); } + // Return number of pool addresses currently in use. + size_t n_free() const + { + return freelist.size(); + } + // Acquire an address from pool. Returns true if successful, // with address placed in dest, or false if pool depleted. bool acquire_addr(ADDR& dest) { while (true) { + freelist_fill(); if (freelist.empty()) return false; const ADDR& a = freelist.front(); - typename std::unordered_map::iterator e = map.find(a); + auto e = map.find(a); if (e == map.end()) // any address in freelist must exist in map throw Exception("PoolType: address in freelist doesn't exist in map"); if (!e->second) @@ -100,7 +107,7 @@ namespace openvpn { // successful, or false if the address is not available. bool acquire_specific_addr(const ADDR& addr) { - typename std::unordered_map::iterator e = map.find(addr); + auto e = map.find(addr); if (e != map.end() && !e->second) { e->second = true; @@ -115,7 +122,7 @@ namespace openvpn { // (b) the address is not owned by the pool. void release_addr(const ADDR& addr) { - typename std::unordered_map::iterator e = map.find(addr); + auto e = map.find(addr); if (e != map.end() && e->second) { freelist.push_back(addr); @@ -126,6 +133,25 @@ namespace openvpn { // DEBUGGING -- get the map load factor float load_factor() const { return map.load_factor(); } + // Override to refill freelist on demand + virtual void freelist_fill() + { + } + + std::string to_string() const + { + std::string ret; + for (const auto& e : map) + { + if (e.second) + { + ret += e.first.to_string(); + ret += '\n'; + } + } + return ret; + } + private: std::deque freelist; std::unordered_map map; diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/quoteip.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/quoteip.hpp new file mode 100644 index 0000000..cab2b8b --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/quoteip.hpp @@ -0,0 +1,36 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include + +namespace openvpn { + + // return ip_addr in brackets if it is IPv6 + std::string quote_ip(const std::string& ip_addr) + { + if (ip_addr.find(':') != std::string::npos) + return '[' + ip_addr + ']'; + else + return ip_addr; + } +} diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/randaddr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/randaddr.hpp new file mode 100644 index 0000000..4de41c2 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/randaddr.hpp @@ -0,0 +1,67 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include +#include +#include + +namespace openvpn { + namespace IP { + + inline IPv4::Addr random_addr_v4(RandomAPI& prng) + { + return IPv4::Addr::from_uint32(prng.rand_get()); + } + + inline IPv6::Addr random_addr_v6(RandomAPI& prng) + { + unsigned char bytes[16]; + prng.rand_fill(bytes); + return IPv6::Addr::from_byte_string(bytes); + } + + inline Addr random_addr(const Addr::Version v, RandomAPI& prng) + { + switch (v) + { + case Addr::V4: + return Addr::from_ipv4(random_addr_v4(prng)); + case Addr::V6: + return Addr::from_ipv6(random_addr_v6(prng)); + default: + throw ip_exception("address unspecified"); + } + } + + inline Route random_subnet(const Route& templ, + const unsigned int prefix_len, + RandomAPI& prng) + { + if (!templ.is_canonical()) + throw Exception("IP::random_subnet: template route not canonical: " + templ.to_string()); + return Route(((random_addr(templ.addr.version(), prng) & ~templ.netmask()) | templ.addr) + & Addr::netmask_from_prefix_len(templ.addr.version(), prefix_len), + prefix_len); + } + } +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/range.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/range.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/range.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/range.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/regex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/regex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/regex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/regex.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/route.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/route.hpp similarity index 81% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/route.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/route.hpp index 0aa1fdd..d67c0d8 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/route.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/route.hpp @@ -40,8 +40,9 @@ namespace openvpn { namespace IP { // Basic route object template - struct RouteType + class RouteType { + public: typedef ADDR Addr; ADDR addr; @@ -89,6 +90,11 @@ namespace openvpn { return r; } + bool defined() const + { + return addr.defined(); + } + IP::Addr::Version version() const { return addr.version(); @@ -99,9 +105,19 @@ namespace openvpn { return addr.version_mask(); } + RouteType to_ipv4() const + { + return RouteType(addr.to_ipv4(), prefix_len); + } + + RouteType to_ipv6() const + { + return RouteType(addr.to_ipv6(), prefix_len); + } + ADDR netmask() const { - return ADDR::netmask_from_prefix_len(version(), prefix_len); + return netmask_(addr, prefix_len); } size_t extent() const @@ -119,6 +135,12 @@ namespace openvpn { addr = addr & netmask(); } + void verify_canonical() const + { + if (!is_canonical()) + throw route_error("route not canonical: " + to_string()); + } + bool is_host() const { return addr.defined() && prefix_len == addr.size(); @@ -134,7 +156,7 @@ namespace openvpn { bool contains(const ADDR& a) const // assumes canonical address/routes { - if (addr.defined() && addr.version() == a.version()) + if (addr.defined() && version_eq(addr, a)) return (a & netmask()) == addr; else return false; @@ -153,7 +175,7 @@ namespace openvpn { r1.addr = addr; r1.prefix_len = newpl; - r2.addr = addr + ADDR::netmask_from_prefix_len(addr.version(), newpl).extent_from_netmask(); + r2.addr = addr + netmask_(addr, newpl).extent_from_netmask(); r2.prefix_len = newpl; return true; @@ -176,6 +198,11 @@ namespace openvpn { return std::tie(prefix_len, addr) == std::tie(other.prefix_len, other.addr); } + bool operator!=(const RouteType& other) const + { + return std::tie(prefix_len, addr) != std::tie(other.prefix_len, other.addr); + } + bool operator<(const RouteType& other) const { return std::tie(prefix_len, addr) < std::tie(other.prefix_len, other.addr); @@ -196,6 +223,37 @@ namespace openvpn { return h.value(); } #endif + + private: + static IPv4::Addr netmask_(const IPv4::Addr&, unsigned int prefix_len) + { + return IPv4::Addr::netmask_from_prefix_len(prefix_len); + } + + static IPv6::Addr netmask_(const IPv6::Addr&, unsigned int prefix_len) + { + return IPv6::Addr::netmask_from_prefix_len(prefix_len); + } + + static IP::Addr netmask_(const IP::Addr& addr, unsigned int prefix_len) + { + return IP::Addr::netmask_from_prefix_len(addr.version(), prefix_len); + } + + static bool version_eq(const IPv4::Addr&, const IPv4::Addr&) + { + return true; + } + + static bool version_eq(const IPv6::Addr&, const IPv6::Addr&) + { + return true; + } + + static bool version_eq(const IP::Addr& a1, const IP::Addr& a2) + { + return a1.version() == a2.version(); + } }; template @@ -224,8 +282,7 @@ namespace openvpn { void verify_canonical() const { for (auto &r : *this) - if (!r.is_canonical()) - throw route_list_error("route not canonical: " + r.to_string()); + r.verify_canonical(); } template diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/addr/routeinv.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/routeinv.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/addr/routeinv.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/addr/routeinv.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cf.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cf.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cf.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cf.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfhelper.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfhelper.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfhelper.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfhelper.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfhost.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfhost.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfhost.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfhost.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfrunloop.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfrunloop.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfrunloop.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfrunloop.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfsec.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfsec.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfsec.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfsec.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfsocket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfsocket.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfsocket.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfsocket.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfstream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfstream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cfstream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cfstream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cftimer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cftimer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/cftimer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/cftimer.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/cf/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/cf/error.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/iosactiveiface.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/iosactiveiface.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/iosactiveiface.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/iosactiveiface.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/maclife.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/maclife.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/maclife.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/maclife.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/macsleep.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/macsleep.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/macsleep.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/macsleep.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/macver.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/macver.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/macver.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/macver.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/reach.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/reach.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/reach.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/reach.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/reachable.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/reachable.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/reachable.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/reachable.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/scdynstore.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/scdynstore.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/scdynstore.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/scdynstore.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/apple/ver.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/ver.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/apple/ver.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/apple/ver.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/api.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/api.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/api.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/api.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/cipher.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/cipher.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/cipher.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/cipher.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/digest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/digest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/digest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/digest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/hmac.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/hmac.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/crypto/hmac.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/crypto/hmac.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/ssl/sslctx.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/ssl/sslctx.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/ssl/sslctx.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/ssl/sslctx.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/util/rand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/util/rand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/applecrypto/util/rand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/applecrypto/util/rand.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioboundsock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioboundsock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioboundsock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioboundsock.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiocontext.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiocontext.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiocontext.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiocontext.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioerr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioerr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioerr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioerr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiopolysock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiopolysock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiopolysock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiopolysock.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioresolverres.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioresolverres.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asioresolverres.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asioresolverres.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiosignal.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiosignal.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiosignal.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiosignal.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiostop.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiostop.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiostop.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiostop.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiowork.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiowork.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/asiowork.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/asiowork.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/asio/scoped_asio_stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/scoped_asio_stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/asio/scoped_asio_stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/asio/scoped_asio_stream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/authcert.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/authcert.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/auth/authcert.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/authcert.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/authcreds.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/authcreds.hpp similarity index 93% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/auth/authcreds.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/authcreds.hpp index 43fec46..fcc3a4a 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/authcreds.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/authcreds.hpp @@ -55,15 +55,15 @@ namespace openvpn { return !username.empty(); } - bool is_valid_user_pass() const + bool is_valid_user_pass(const bool strict) const { - return ValidateCreds::is_valid(ValidateCreds::USERNAME, username) - && ValidateCreds::is_valid(ValidateCreds::PASSWORD, password); + return ValidateCreds::is_valid(ValidateCreds::USERNAME, username, strict) + && ValidateCreds::is_valid(ValidateCreds::PASSWORD, password, strict); } - bool is_valid() const + bool is_valid(const bool strict) const { - return defined() && is_valid_user_pass(); + return defined() && is_valid_user_pass(strict); } void wipe_password() diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/cr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/cr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/auth/cr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/cr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/validatecreds.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/validatecreds.hpp similarity index 73% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/auth/validatecreds.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/validatecreds.hpp index fe02f34..8a71afc 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/auth/validatecreds.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/auth/validatecreds.hpp @@ -38,22 +38,30 @@ namespace openvpn { }; template - static bool is_valid(const Type type, const STRING& cred) + static bool is_valid(const Type type, const STRING& cred, const bool strict) { size_t max_len_flags; - switch (type) + if (strict) { - case USERNAME: - // length <= 256 unicode chars, no control chars allowed - max_len_flags = 256 | Unicode::UTF8_NO_CTRL; - break; - case PASSWORD: - case RESPONSE: - // length <= 16384 unicode chars - max_len_flags = 16384; - break; - default: - return false; + // length <= 512 unicode chars, no control chars allowed + max_len_flags = 512 | Unicode::UTF8_NO_CTRL; + } + else + { + switch (type) + { + case USERNAME: + // length <= 512 unicode chars, no control chars allowed + max_len_flags = 512 | Unicode::UTF8_NO_CTRL; + break; + case PASSWORD: + case RESPONSE: + // length <= 16384 unicode chars + max_len_flags = 16384; + break; + default: + return false; + } } return Unicode::is_valid_utf8(cred, max_len_flags); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/asiobuf.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/asiobuf.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/asiobuf.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/asiobuf.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufclamp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufclamp.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufclamp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufclamp.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufcomplete.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufcomplete.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufcomplete.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufcomplete.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufcomposed.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufcomposed.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufcomposed.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufcomposed.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buffer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buffer.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buffer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buffer.hpp index 9ee1927..986d1cb 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buffer.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buffer.hpp @@ -82,6 +82,7 @@ namespace openvpn { buffer_headroom, buffer_underflow, buffer_overflow, + buffer_offset, buffer_index, buffer_const_index, buffer_push_front_headroom, @@ -108,6 +109,8 @@ namespace openvpn { return "buffer_underflow"; case buffer_overflow: return "buffer_overflow"; + case buffer_offset: + return "buffer_offset"; case buffer_index: return "buffer_index"; case buffer_const_index: @@ -144,6 +147,7 @@ namespace openvpn { template friend class BufferAllocatedType; public: + typedef T value_type; typedef T* type; typedef const T* const_type; typedef typename std::remove_const::type NCT; // non-const type @@ -177,6 +181,15 @@ namespace openvpn { size_ = 0; } + void reset_offset(const size_t offset) + { + const size_t size = size_ + offset_ - offset; + if (offset > capacity_ || size > capacity_ || offset + size > capacity_) + OPENVPN_BUFFER_THROW(buffer_offset); + offset_ = offset; + size_ = size; + } + void reset_size() { size_ = 0; @@ -519,6 +532,19 @@ namespace openvpn { OPENVPN_BUFFER_THROW(buffer_underflow); } + BufferType read_alloc_buf(const size_t size) + { + if (size <= size_) + { + BufferType ret(data_, offset_, size, capacity_); + offset_ += size; + size_ -= size; + return ret; + } + else + OPENVPN_BUFFER_THROW(buffer_underflow); + } + void reset(const size_t min_capacity, const unsigned int flags) { if (min_capacity > capacity_) diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufhex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufhex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufhex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufhex.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buflimit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buflimit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buflimit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buflimit.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buflist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buflist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/buflist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/buflist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufread.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufstr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufstr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufstr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufstr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufstream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufstream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/bufstream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/bufstream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/lz4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/lz4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/lz4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/lz4.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/memq.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/memq.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/memq.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/memq.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/safestr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/safestr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/safestr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/safestr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/zlib.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/zlib.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/buffer/zlib.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/buffer/zlib.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliconnect.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliconnect.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliconnect.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliconnect.hpp index 41851b1..7b6b68e 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliconnect.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliconnect.hpp @@ -52,6 +52,7 @@ #include #include +#include #include #include #include @@ -173,6 +174,7 @@ namespace openvpn { if (!halt) openvpn_io::post(io_context, [self=Ptr(this)]() { + OPENVPN_ASYNC_HANDLER; self->graceful_stop(); }); } @@ -220,6 +222,7 @@ namespace openvpn { restart_wait_timer.expires_after(Time::Duration::seconds(seconds)); restart_wait_timer.async_wait([self=Ptr(this), gen=generation](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->restart_wait_callback(gen, error); }); } @@ -230,6 +233,7 @@ namespace openvpn { if (!halt) openvpn_io::post(io_context, [self=Ptr(this), reason]() { + OPENVPN_ASYNC_HANDLER; self->pause(reason); }); } @@ -239,6 +243,7 @@ namespace openvpn { if (!halt) openvpn_io::post(io_context, [self=Ptr(this)]() { + OPENVPN_ASYNC_HANDLER; self->resume(); }); } @@ -248,6 +253,7 @@ namespace openvpn { if (!halt) openvpn_io::post(io_context, [self=Ptr(this), seconds]() { + OPENVPN_ASYNC_HANDLER; self->reconnect(seconds); }); } @@ -268,6 +274,7 @@ namespace openvpn { if (!halt) openvpn_io::post(io_context, [self=Ptr(this), msg=std::move(msg)]() { + OPENVPN_ASYNC_HANDLER; self->post_cc_msg(msg); }); } @@ -351,6 +358,7 @@ namespace openvpn { conn_timer.expires_after(Time::Duration::seconds(conn_timeout)); conn_timer.async_wait([self=Ptr(this), gen=generation](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->conn_timer_callback(gen, error); }); conn_timer_pending = true; @@ -399,6 +407,7 @@ namespace openvpn { restart_wait_timer.expires_after(Time::Duration::milliseconds(delay_ms)); restart_wait_timer.async_wait([self=Ptr(this), gen=generation](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->restart_wait_callback(gen, error); }); } @@ -602,6 +611,7 @@ namespace openvpn { server_poll_timer.expires_after(client_options->server_poll_timeout()); server_poll_timer.async_wait([self=Ptr(this), gen=generation](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->server_poll_callback(gen, error); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliconstants.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliconstants.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliconstants.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliconstants.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/clicreds.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clicreds.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/clicreds.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clicreds.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliemuexr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliemuexr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliemuexr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliemuexr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/clievent.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clievent.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/clievent.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clievent.hpp index d865646..26d4983 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/clievent.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clievent.hpp @@ -41,6 +41,7 @@ namespace openvpn { DISCONNECTED=0, CONNECTED, RECONNECTING, + AUTH_PENDING, RESOLVE, WAIT, WAIT_PROXY, @@ -93,6 +94,7 @@ namespace openvpn { "DISCONNECTED", "CONNECTED", "RECONNECTING", + "AUTH_PENDING", "RESOLVE", "WAIT", "WAIT_PROXY", @@ -210,6 +212,11 @@ namespace openvpn { Reconnecting() : Base(RECONNECTING) {} }; + struct AuthPending : public Base + { + AuthPending() : Base(AUTH_PENDING) {} + }; + struct GetConfig : public Base { GetConfig() : Base(GET_CONFIG) {} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/clihalt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clihalt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/clihalt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clihalt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/clilife.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clilife.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/clilife.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/clilife.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliopt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliopt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliopt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliopt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliopthelper.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliopthelper.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliopthelper.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliopthelper.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliproto.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliproto.hpp similarity index 95% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliproto.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliproto.hpp index 0ebb576..ba3a942 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/cliproto.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/cliproto.hpp @@ -649,6 +649,23 @@ namespace openvpn { else cli_events->add_event(std::move(ev)); } + else if (info && string::starts_with(msg, "INFO_PRE,")) + { + // INFO_PRE is like INFO but it is never buffered + ClientEvent::Base::Ptr ev = new ClientEvent::Info(msg.substr(9)); + cli_events->add_event(std::move(ev)); + } + else if (msg == "AUTH_PENDING") + { + // AUTH_PENDING indicates an out-of-band authentication step must + // be performed before the server will send the PUSH_REPLY message. + if (!auth_pending) + { + auth_pending = true; + ClientEvent::Base::Ptr ev = new ClientEvent::AuthPending(); + cli_events->add_event(std::move(ev)); + } + } else if (msg == "RELAY") { if (Base::conf().relay_mode) @@ -761,9 +778,22 @@ namespace openvpn { set_housekeeping_timer(); { - const Time::Duration newdur = std::min(dur + Time::Duration::seconds(1), - Time::Duration::seconds(3)); - schedule_push_request_callback(newdur); + if (auth_pending) + { + // With auth_pending, we can dial back the PUSH_REQUEST + // frequency, but we still need back-and-forth network + // activity to avoid an inactivity timeout, since the crypto + // layer (and hence keepalive ping) is not initialized until + // we receive the PUSH_REPLY from the server. + schedule_push_request_callback(Time::Duration::seconds(8)); + } + else + { + // step function with ceiling: 1 sec, 2 secs, 3 secs, 3, 3, ... + const Time::Duration newdur = std::min(dur + Time::Duration::seconds(1), + Time::Duration::seconds(3)); + schedule_push_request_callback(newdur); + } } } } @@ -780,6 +810,7 @@ namespace openvpn { push_request_timer.expires_after(dur); push_request_timer.async_wait([self=Ptr(this), dur](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->send_push_request_callback(dur, error); }); } @@ -855,6 +886,7 @@ namespace openvpn { housekeeping_timer.expires_at(next); housekeeping_timer.async_wait([self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->housekeeping_callback(error); }); } @@ -888,6 +920,7 @@ namespace openvpn { inactive_timer.expires_after(inactive_duration); inactive_timer.async_wait([self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->inactive_callback(error); }); } @@ -978,6 +1011,7 @@ namespace openvpn { info_hold_timer.expires_after(Time::Duration::seconds(1)); info_hold_timer.async_wait([self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->info_hold_callback(error); }); } @@ -1042,6 +1076,7 @@ namespace openvpn { bool first_packet_received_ = false; bool sent_push_request = false; + bool auth_pending = false; SessionStats::Ptr cli_stats; ClientEvent::Queue::Ptr cli_events; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/ipverflags.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/ipverflags.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/ipverflags.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/ipverflags.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/optfilt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/optfilt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/optfilt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/optfilt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/remotelist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/remotelist.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/remotelist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/remotelist.hpp index b9285bc..458a90a 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/remotelist.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/remotelist.hpp @@ -341,6 +341,7 @@ namespace openvpn { resolver.async_resolve(item.server_host, item.server_port, [self=Ptr(this)](const openvpn_io::error_code& error, openvpn_io::ip::tcp::resolver::results_type results) { + OPENVPN_ASYNC_HANDLER; self->resolve_callback(error, results); }); return; @@ -587,18 +588,19 @@ namespace openvpn { { if (remote_override) { - list.clear(); - index.reset(); Item::Ptr item = remote_override->get(); if (item) - list.push_back(std::move(item)); - } - else - { - index.increment(list.size(), secondary_length(index.primary())); - if (!enable_cache) - reset_item(index.primary()); + { + list.clear(); + index.reset(); + list.push_back(std::move(item)); + return; + } } + + index.increment(list.size(), secondary_length(index.primary())); + if (!enable_cache) + reset_item(index.primary()); } // Return details about current connection entry. diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/client/rgopt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/rgopt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/client/rgopt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/client/rgopt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/abort.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/abort.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/abort.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/abort.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/action.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/action.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/action.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/action.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/actionthread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/actionthread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/actionthread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/actionthread.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/appversion.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/appversion.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/appversion.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/appversion.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/arch.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/arch.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/arch.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/arch.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/argv.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/argv.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/argv.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/argv.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/arraysize.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/arraysize.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/arraysize.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/arraysize.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/asyncsleep.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/asyncsleep.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/asyncsleep.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/asyncsleep.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/autoreset.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/autoreset.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/autoreset.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/autoreset.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/base64.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/base64.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/base64.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/base64.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/bigmutex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/bigmutex.hpp new file mode 100644 index 0000000..134f65b --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/bigmutex.hpp @@ -0,0 +1,50 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// Macro to maintain thread-safety. + +// Platforms like UWP and iOS may call core methods +// from another threads. Since core is not thread-safe, +// we provide OPENVPN_ASYNC_HANDLER macro which instantiates +// lock guard. It follows RIAA principle and locks global +// mutex in constructor and unlocks in destructor. This +// guarantees that code in block protected with this macro +// won't be called simultaneously from different threads. + +#ifndef OPENVPN_COMMON_BIGMUTEX_H +#define OPENVPN_COMMON_BIGMUTEX_H + +#include + +namespace openvpn { + namespace bigmutex { + OPENVPN_EXTERN std::recursive_mutex the_recursive_mutex; + } + + #ifdef OPENVPN_ENABLE_BIGMUTEX + #define OPENVPN_ASYNC_HANDLER \ + std::lock_guard lg(bigmutex::the_recursive_mutex); + #else + #define OPENVPN_ASYNC_HANDLER + #endif +} + +#endif diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/binprefix.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/binprefix.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/binprefix.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/binprefix.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/circ_list.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/circ_list.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/circ_list.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/circ_list.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/cleanup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/cleanup.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/cleanup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/cleanup.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/core.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/core.hpp similarity index 90% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/core.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/core.hpp index b60fd5c..28ba2f4 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/core.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/core.hpp @@ -40,8 +40,13 @@ namespace openvpn { inline int n_cores() { + int count = std::thread::hardware_concurrency(); + // C++11 allows thread::hardware_concurrency() to return 0, fall back + // to specific solution if we detect this + if (count > 0) + return count; + #if defined(OPENVPN_PLATFORM_TYPE_APPLE) - int count; size_t count_len = sizeof(count); if (::sysctlbyname("hw.logicalcpu", &count, &count_len, NULL, 0) != 0) count = 1; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/count.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/count.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/count.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/count.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/daemon.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/daemon.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/daemon.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/daemon.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/demangle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/demangle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/demangle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/demangle.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/destruct.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/destruct.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/destruct.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/destruct.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/endian.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/endian.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/endian.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/endian.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/enumdir.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/enumdir.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/enumdir.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/enumdir.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/environ.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/environ.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/environ.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/environ.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/exception.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/exception.hpp similarity index 94% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/exception.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/exception.hpp index 08d67e2..3c1f3fc 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/exception.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/exception.hpp @@ -89,14 +89,14 @@ namespace openvpn { class C : public openvpn::Exception { \ public: \ C() : openvpn::Exception(#C OPENVPN_FILE_LINE) {} \ - C(std::string err) : openvpn::Exception(#C OPENVPN_FILE_LINE ": " + err) {} \ + C(const std::string err) : openvpn::Exception(#C OPENVPN_FILE_LINE ": " + err) {} \ } // define a custom exception class that allows extra info, but does not emit a tag # define OPENVPN_UNTAGGED_EXCEPTION(C) \ class C : public openvpn::Exception { \ public: \ - C(std::string err) : openvpn::Exception(err) {} \ + C(const std::string err) : openvpn::Exception(err) {} \ } // define a custom exception class that allows extra info, and inherits from a custom base @@ -104,7 +104,7 @@ namespace openvpn { class C : public B { \ public: \ C() : B(#C OPENVPN_FILE_LINE) {} \ - C(std::string err) : B(#C OPENVPN_FILE_LINE ": " + err) {} \ + C(const std::string err) : B(#C OPENVPN_FILE_LINE ": " + err) {} \ } // define a custom exception class that allows extra info, and inherits from a custom base, @@ -112,7 +112,7 @@ namespace openvpn { # define OPENVPN_UNTAGGED_EXCEPTION_INHERIT(B, C) \ class C : public B { \ public: \ - C(std::string err) : B(err) {} \ + C(const std::string err) : B(err) {} \ } // throw an Exception with stringstream concatenation allowed diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/extern.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/extern.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/extern.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/extern.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/ffs.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/ffs.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/ffs.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/ffs.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/file.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/file.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/file.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/file.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileatomic.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileatomic.hpp similarity index 89% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileatomic.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileatomic.hpp index 1107a85..2d22ec6 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileatomic.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileatomic.hpp @@ -47,6 +47,7 @@ namespace openvpn { inline void write_binary_atomic(const std::string& fn, const std::string& tmpdir, const mode_t mode, + const std::uint64_t mtime_ns, // set explicit modification-time in nanoseconds since epoch, or 0 to defer to system const ConstBuffer& buf, RandomAPI& rng) { @@ -56,7 +57,7 @@ namespace openvpn { const std::string tfn = path::join(tmpdir, '.' + path::basename(fn) + '.' + render_hex(data, sizeof(data))); // write to temporary file - write_binary_unix(tfn, mode, buf); + write_binary_unix(tfn, mode, mtime_ns, buf); // then move into position if (::rename(tfn.c_str(), fn.c_str()) == -1) @@ -69,10 +70,11 @@ namespace openvpn { inline void write_binary_atomic(const std::string& fn, const std::string& tmpdir, const mode_t mode, + const std::uint64_t mtime_ns, const Buffer& buf, RandomAPI& rng) { - return write_binary_atomic(fn, tmpdir, mode, const_buffer_ref(buf), rng); + return write_binary_atomic(fn, tmpdir, mode, mtime_ns, const_buffer_ref(buf), rng); } } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileunix.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileunix.hpp similarity index 86% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileunix.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileunix.hpp index cc6efa5..4a0584f 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/fileunix.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/fileunix.hpp @@ -35,12 +35,14 @@ #include // for lseek, open #include // for open #include // for open +#include #include #include #include #include #include +#include #include namespace openvpn { @@ -49,6 +51,7 @@ namespace openvpn { // write binary buffer to file inline void write_binary_unix(const std::string& fn, const mode_t mode, + const std::uint64_t mtime_ns, // set explicit modification-time in nanoseconds since epoch, or 0 to defer to system const void *buf, const size_t size) { @@ -61,11 +64,16 @@ namespace openvpn { } // write - { - const ssize_t len = write_retry(fd(), buf, size); - if (len != size) - throw file_unix_error(fn + " : incomplete write"); - } + if (size) + { + const ssize_t len = write_retry(fd(), buf, size); + if (len != size) + throw file_unix_error(fn + " : incomplete write"); + } + + // explicit modification time + if (mtime_ns) + update_file_mod_time_nanoseconds(fd(), mtime_ns); // close { @@ -77,23 +85,26 @@ namespace openvpn { inline void write_binary_unix(const std::string& fn, const mode_t mode, + const std::uint64_t mtime_ns, const Buffer& buf) { - write_binary_unix(fn, mode, buf.c_data(), buf.size()); + write_binary_unix(fn, mode, mtime_ns, buf.c_data(), buf.size()); } inline void write_binary_unix(const std::string& fn, const mode_t mode, + const std::uint64_t mtime_ns, const ConstBuffer& buf) { - write_binary_unix(fn, mode, buf.c_data(), buf.size()); + write_binary_unix(fn, mode, mtime_ns, buf.c_data(), buf.size()); } inline void write_text_unix(const std::string& fn, const mode_t mode, + const std::uint64_t mtime_ns, const std::string& content) { - write_binary_unix(fn, mode, content.c_str(), content.length()); + write_binary_unix(fn, mode, mtime_ns, content.c_str(), content.length()); } enum { // MUST be distinct from BufferAllocated flags diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/format.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/format.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/format.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/format.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/function.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/function.hpp similarity index 76% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/function.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/function.hpp index 6ba6c2a..4b1e91b 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/function.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/function.hpp @@ -26,6 +26,7 @@ #include // for std::size_t #include // for std::move +#include #include namespace openvpn { @@ -35,7 +36,7 @@ namespace openvpn { template class Function; - template + template class Function { public: @@ -92,7 +93,7 @@ namespace openvpn { } } - R operator()(A... args) + R operator()(A... args) const { return methods->invoke(data, std::forward(args)...); } @@ -103,6 +104,7 @@ namespace openvpn { } private: +#ifdef _MSC_VER template void construct(T&& functor) noexcept { @@ -123,10 +125,38 @@ namespace openvpn { new (data) Extern(std::move(functor)); } } +#else + template + static constexpr bool is_intern() + { + return sizeof(Intern) <= sizeof(data); + } + + template (), int>::type = 0> + void construct(T&& functor) noexcept + { + // store functor internally (in data) + setup_methods_intern(); + new (data) Intern(std::move(functor)); + } + + template (), int>::type = 0> + void construct(T&& functor) noexcept + { + static_assert(!INTERN_ONLY, "Function: Intern doesn't fit in data[] and INTERN_ONLY=true"); + static_assert(sizeof(Extern) <= sizeof(data), "Function: Extern doesn't fit in data[]"); + + // store functor externally (using new) + setup_methods_extern(); + new (data) Extern(std::move(functor)); + } +#endif struct Methods { - R (*invoke)(void *, A...); + R (*invoke)(void *, A&&...); void (*move)(void *, void *); void (*destruct)(void *); }; @@ -163,21 +193,21 @@ namespace openvpn { { } - static R invoke(void *ptr, A... args) + static R invoke(void* ptr, A&&... args) { - Intern* self = reinterpret_cast*>(ptr); + Intern* self = reinterpret_cast(ptr); return self->functor_(std::forward(args)...); } static void move(void *dest, void *src) { - Intern* s = reinterpret_cast*>(src); + Intern* s = reinterpret_cast(src); new (dest) Intern(std::move(*s)); } static void destruct(void *ptr) { - Intern* self = reinterpret_cast*>(ptr); + Intern* self = reinterpret_cast(ptr); self->~Intern(); } @@ -195,23 +225,23 @@ namespace openvpn { { } - static R invoke(void *ptr, A... args) + static R invoke(void* ptr, A&&... args) { - Extern* self = reinterpret_cast*>(ptr); + Extern* self = reinterpret_cast(ptr); return (*self->functor_)(std::forward(args)...); } static void move(void *dest, void *src) { - Extern* d = reinterpret_cast*>(dest); - Extern* s = reinterpret_cast*>(src); + Extern* d = reinterpret_cast(dest); + Extern* s = reinterpret_cast(src); d->functor_ = s->functor_; // no need to set s->functor_=nullptr because parent will not destruct src after move } static void destruct(void *ptr) { - Extern* self = reinterpret_cast*>(ptr); + Extern* self = reinterpret_cast(ptr); delete self->functor_; } @@ -220,7 +250,7 @@ namespace openvpn { }; const Methods* methods; - void* data[N]; + mutable void* data[N]; }; } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/getopt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/getopt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/getopt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/getopt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/getpw.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/getpw.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/getpw.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/getpw.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/glob.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/glob.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/glob.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/glob.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hash.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hash.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/hash.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hash.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hexstr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hexstr.hpp new file mode 100644 index 0000000..22fa166 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hexstr.hpp @@ -0,0 +1,472 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// A collection of functions for rendering and parsing hexadecimal strings + +#ifndef OPENVPN_COMMON_HEXSTR_H +#define OPENVPN_COMMON_HEXSTR_H + +#include +#include +#include + +#include +#include + +namespace openvpn { + + /** + * Renders an integer value within the hexadecimal range (0-15) + * to a hexadecimal character. + * + * @param c Integer to render as a hexadecimal character. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a char with the hexadecimal representation of + * the input value. If the value is out-of-range (outside + * of 0-15), it will be replaced with a questionmark (?). + */ + inline char render_hex_char(const int c, const bool caps=false) + { + if (c < 10) + return '0' + c; + else if (c < 16) + return (caps ? 'A' : 'a') - 10 + c; + else + return '?'; + } + + + /** + * Parses a character in the range {0..9,A-F,a-f} to an + * integer value. Used to convert hexadecimal character to integer. + * Only a single character is parsed by this function. + * + * @param c Character to be be parsed. + * + * @return Returns an integer value of the hexadecimal input. If the + * input character is invalid, outside of {0..9,A-F,a-f}, it will + * return -1. + */ + inline int parse_hex_char(const char c) + { + if (c >= '0' && c <= '9') + return c - '0'; + else if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + else + return -1; + } + + + /** + * Class which Renders a single byte as hexadecimal + */ + class RenderHexByte + { + public: + /** + * Initializes a new object + * + * @param byte Unsigned char (one byte) to be processed + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + */ + RenderHexByte(const unsigned char byte, const bool caps=false) + { + c[0] = render_hex_char(byte >> 4, caps); + c[1] = render_hex_char(byte & 0x0F, caps); + } + + char char1() const { return c[0]; } + char char2() const { return c[1]; } + + /** + * Retrieve the hexadecimal representation of the value. + * Warning: The result is a non-NULL terminated string. + * + * @return Returns a non-NULL terminated 2 byte string with the hexadecimal + * representation of the initial value. The return value is guaranteed + * to always be 2 bytes. + */ + const char *str2() const { return c; } // Note: length=2, NOT null terminated + + private: + char c[2]; + }; + + + /** + * Render a byte buffer (unsigned char *) as a hexadecimal string. + * + * @param data Unsigned char pointer to buffer to render. + * @param size size_t of the number of bytes to parse from the buffer. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string of the complete hexadecimal representation + */ + inline std::string render_hex(const unsigned char *data, size_t size, const bool caps=false) + { + if (!data) + return "NULL"; + std::string ret; + ret.reserve(size*2+1); + while (size--) + { + const RenderHexByte b(*data++, caps); + ret += b.char1(); + ret += b.char2(); + } + return ret; + } + + + /** + * Render a byte buffer (void *) as a hexadecimal string. + * + * @param data Void pointer to buffer to render. + * @param size size_t of the number of bytes to parse from the buffer. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string of the complete hexadecimal representation. + */ + inline std::string render_hex(const void *data, const size_t size, const bool caps=false) + { + return render_hex((const unsigned char *)data, size, caps); + } + + + /** + * Variant of @render_hex(const unsiged char *,...) which adds a + * separator between each byte + * + * @param data Unsigned char pointer to buffer to render. + * @param size size_t of the number of bytes to parse from the buffer. + * @param sep A single character to use as the separator. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string of the complete hexadecimal representation + * with each byte separated by a given character. + */ + inline std::string render_hex_sep(const unsigned char *data, size_t size, const char sep, const bool caps=false) + { + if (!data) + return "NULL"; + std::string ret; + ret.reserve(size*3); + bool prsep = false; + while (size--) + { + if (prsep) + ret += sep; + const RenderHexByte b(*data++, caps); + ret += b.char1(); + ret += b.char2(); + prsep = true; + } + return ret; + } + + /** + * Variant of @render_hex(const void *,...) which adds a + * separator between each byte + + * @param data Void pointer to buffer to render. + * @param size size_t of the number of bytes to parse from the buffer. + * @param sep A single character to use as the separator. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string of the complete hexadecimal representation + * with each byte separated by a given character. + */ + inline std::string render_hex_sep(const void *data, const size_t size, const char sep, const bool caps=false) + { + return render_hex_sep((const unsigned char *)data, size, sep, caps); + } + + + /** + * Render a std::vector container as a hexadecimal string. + * T must be a data type compatible with + * RenderHexByte(const unsigned char,...) + * + * @param data std::vector containing the data to render + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string of the complete hexadecimal representation. + */ + template + inline std::string render_hex_generic(const V& data, const bool caps=false) + { + std::string ret; + ret.reserve(data.size()*2+1); + for (size_t i = 0; i < data.size(); ++i) + { + const RenderHexByte b(data[i], caps); + ret += b.char1(); + ret += b.char2(); + } + return ret; + } + + + /** + * Renders a combined hexadecimal and character dump of a buffer, + * with the typical 16 bytes split between hexadecimal and character + * separation per line. + * + * @param data Unsigned char pointer to the buffer to dump. + * @param size Size of the buffer to render. + * + * @return Returns a string containing a preformatted output of the + * hexadecimal dump. + */ + inline std::string dump_hex(const unsigned char *data, size_t size) + { + if (!data) + return "NULL\n"; + const unsigned int mask = 0x0F; // N bytes per line - 1 + std::ostringstream os; + os << std::hex; + std::string chars; + size_t i; + for (i = 0; i < size; ++i) + { + if (!(i & mask)) + { + if (i) + { + os << " " << chars << std::endl; + chars.clear(); + } + os << std::setfill(' ') << std::setw(8) << i << ":"; + } + const unsigned char c = data[i]; + os << ' ' << std::setfill('0') << std::setw(2) << (unsigned int)c; + if (string::is_printable(c)) + chars += c; + else + chars += '.'; + } + if (i) + os << string::spaces(2 + (((i-1) & mask) ^ mask) * 3) << chars << std::endl; + return os.str(); + } + + + /** + * Renders a combined hexadecimal and character dump of a std::string buffer, + * with the typical 16 bytes split between hexadecimal and character + * separation per line. + * + * @param data std::string containing the buffer to render + * + * @return Returns a string containing a preformatted output of the + * hexadecimal dump. + */ + inline std::string dump_hex(const std::string& str) + { + return dump_hex((const unsigned char *)str.c_str(), str.length()); + } + + + /** + * Renders a combined hexadecimal and character dump of a std::vector + * based buffer, with the typical 16 bytes split between hexadecimal and + * character separation per line. + * + * @param data std::vector containing the buffer to render + * + * @return Returns a string containing a preformatted output of the + * hexadecimal dump. + */ + template + inline std::string dump_hex(const V& data) + { + return dump_hex(data.c_data(), data.size()); + } + + /** + * Declaration of a hexadecimal parsing error exception class + */ + OPENVPN_SIMPLE_EXCEPTION(parse_hex_error); + + + /** + * Parses a std::string containing a hexadecimal value into + * a std::vector. + * + * @param dest std::vector destination buffer to use. + * @param str std::string& containing the hexadecimal string to parse. + * + * @return Returns nothing on success. Will throw a parse_hex_error + * exception if the input is invalid/not parseable as a hexadecimal + * number. + */ + template + inline void parse_hex(V& dest, const std::string& str) + { + const int len = int(str.length()); + int i; + for (i = 0; i <= len - 2; i += 2) + { + const int high = parse_hex_char(str[i]); + const int low = parse_hex_char(str[i+1]); + if (high == -1 || low == -1) + throw parse_hex_error(); + dest.push_back((high<<4) + low); + } + if (i != len) + throw parse_hex_error(); // straggler char + } + + + /** + * Parses a char buffer (C string) containing a hexadecimal + * string into a templated (T) variable. The input buffer + * MUST be NULL terminated. + * + * WARNING: There are _NO_ overflow checks. + * + * @param str Char pointer (char *) to the buffer to be parsed. + * @param retval Return buffer where the parsed value is stored. + * + * @return Returns true on successful parsing, otherwise false. + */ + template + inline bool parse_hex_number(const char *str, T& retval) + { + if (!str[0]) + return false; // empty string + size_t i = 0; + T ret = T(0); + while (true) + { + const char c = str[i++]; + const int hd = parse_hex_char(c); + if (hd >= 0) + { + ret *= T(16); + ret += T(hd); + } + else if (!c) + { + retval = ret; + return true; + } + else + return false; // non-hex-digit + } + } + + + /** + * Variant of @parse_hex_number(const char *, ...) which takes a std::string + * as the input. + * + * @param str std::string containing the hexadecimal string to be parsed. + * @param retval Return buffer where the parsed value is stored. + * + * @return Returns true on successful parsing, otherwise false. + */ + template + inline bool parse_hex_number(const std::string& str, T& retval) + { + return parse_hex_number(str.c_str(), retval); + } + + + /** + * Parses a std::string containing a hexadecimal + * string into a templated (T) variable. + * + * NOTE: Currently doesn't detect overflow + * + * @param str std::string containing the hexadecimal + * string to be parsed. + * + * @return Returns a template T variable containing the + * parsed value on success. Will throw the parse_hex_error + * exception on parsing errors. + * + */ + template + inline T parse_hex_number(const std::string& str) + { + T ret; + if (!parse_hex_number(str.c_str(), ret)) + throw parse_hex_error(); + return ret; + } + + /** + * Renders a templated T variable containing a numeric value + * into a std::string containing a hexadecimal representation. + * + * @param value Numeric (T) value to represent as hexadecimal. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Retuns a std::string containing the hexadecimal + * representation on succes. Will throw a parse_hex_error + * exception on parsing errors. + */ + template + inline std::string render_hex_number(T value, const bool caps=false) + { + unsigned char buf[sizeof(T)]; + for (size_t i = sizeof(T); i --> 0 ;) + { + buf[i] = value & 0xFF; + value >>= 8; + } + return render_hex(buf, sizeof(T), caps); + } + + + /** + * Renders a single byte as a hexadecimal string + * + * @param value Unsigned char (byte) to be represented as hexadecimal. + * @param caps Boolean (default false) which sets the outout to + * be either lower case (false) or upper case (true). + * + * @return Returns a std::string with the hexadecimal representation + * of the input value. The result will always contain only + * two characters. + */ + inline std::string render_hex_number(unsigned char uc, const bool caps=false) + { + RenderHexByte b(uc, caps); + return std::string(b.str2(), 2); + } + +} // namespace openvpn + +#endif // OPENVPN_COMMON_HEXSTR_H diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostlist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostlist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostlist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostlist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostname.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostname.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostname.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostname.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostport.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostport.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/hostport.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/hostport.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/jsonlib.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/jsonlib.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/jsonlib.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/jsonlib.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/lex.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/lex.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/lex.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/lex.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/likely.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/likely.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/likely.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/likely.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/link.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/link.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/link.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/link.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/logrotate.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/logrotate.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/logrotate.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/logrotate.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/memneq.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/memneq.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/memneq.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/memneq.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/mode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/mode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/mode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/mode.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/modstat.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/modstat.hpp new file mode 100644 index 0000000..609c449 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/modstat.hpp @@ -0,0 +1,57 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include // Definition of AT_* constants */ +#include +#include // for std::uint64_t +#include + +#include + +namespace openvpn { + + inline int update_file_mod_time_nanoseconds(const std::string& filename, + const std::uint64_t nanoseconds_since_epooch) + { + struct timespec times[2]; + times[0].tv_sec = nanoseconds_since_epooch / std::uint64_t(1000000000); + times[0].tv_nsec = nanoseconds_since_epooch % std::uint64_t(1000000000); + times[1] = times[0]; + if (::utimensat(AT_FDCWD, filename.c_str(), times, 0) == -1) + return errno; + return 0; + } + + inline int update_file_mod_time_nanoseconds(const int fd, + const std::uint64_t nanoseconds_since_epooch) + { + struct timespec times[2]; + times[0].tv_sec = nanoseconds_since_epooch / std::uint64_t(1000000000); + times[0].tv_nsec = nanoseconds_since_epooch % std::uint64_t(1000000000); + times[1] = times[0]; + if (::futimens(fd, times) == -1) + return errno; + return 0; + } + +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/msgwin.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/msgwin.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/msgwin.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/msgwin.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/number.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/number.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/number.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/number.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/olong.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/olong.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/olong.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/olong.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/option_error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/option_error.hpp new file mode 100644 index 0000000..c81518b --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/option_error.hpp @@ -0,0 +1,30 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include + +namespace openvpn { + + OPENVPN_EXCEPTION(option_error); + +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/options.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/options.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/options.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/options.hpp index 82ddfc5..cbb07e2 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/options.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/options.hpp @@ -57,7 +57,6 @@ #include // for std::uint64_t #include -#include #include #include #include @@ -65,11 +64,10 @@ #include #include #include +#include namespace openvpn { - OPENVPN_EXCEPTION(option_error); - class Option { public: @@ -1173,6 +1171,16 @@ namespace openvpn { } } + // Return raw C string to option data or nullptr if option doesn't exist. + const char *get_c_str(const std::string& name, size_t index, const size_t max_len) const + { + const Option* o = get_ptr(name); + if (o) + return o->get(index, max_len).c_str(); + else + return nullptr; + } + // Convenience method that gets a particular argument index within an option, // while returning a default string if option doesn't exist, and raising an // exception if argument index is out-of-bounds. diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/ostream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/ostream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/ostream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/ostream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/path.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/path.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/path.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/path.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/peercred.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/peercred.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/peercred.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/peercred.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/persistfile.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/persistfile.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/persistfile.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/persistfile.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/pipe.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/pipe.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/pipe.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/pipe.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform_name.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform_name.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform_name.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform_name.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform_string.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform_string.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/platform_string.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/platform_string.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/process.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/process.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/process.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/process.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/pthreadcond.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/pthreadcond.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/pthreadcond.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/pthreadcond.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/rc.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/rc.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/rc.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/rc.hpp index ea42208..8627b8f 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/rc.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/rc.hpp @@ -313,6 +313,11 @@ namespace openvpn { return rc; } + static constexpr bool is_thread_safe() + { + return false; + } + #ifdef OPENVPN_RC_NOTIFY void notify_release() noexcept { @@ -394,6 +399,11 @@ namespace openvpn { return rc.load(std::memory_order_relaxed); } + static constexpr bool is_thread_safe() + { + return true; + } + #ifdef OPENVPN_RC_NOTIFY void notify_release() noexcept { @@ -454,6 +464,11 @@ namespace openvpn { return refcount_.use_count(); } + static constexpr bool is_thread_safe() + { + return RCImpl::is_thread_safe(); + } + private: RC(const RC&) = delete; RC& operator=(const RC&) = delete; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/redir.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/redir.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/redir.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/redir.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/runcontext.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/runcontext.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/runcontext.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/runcontext.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/scoped_fd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/scoped_fd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/scoped_fd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/scoped_fd.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/sess_id.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sess_id.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/sess_id.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sess_id.hpp index bf71137..8fe303c 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/sess_id.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sess_id.hpp @@ -54,9 +54,10 @@ namespace openvpn { } // Create a random Session ID. - explicit SessionIDType(RandomAPI& rng) + explicit SessionIDType(RandomAPI& rng, const bool allow_noncrypto_rng=false) { - rng.assert_crypto(); + if (!allow_noncrypto_rng) + rng.assert_crypto(); rng.rand_bytes(u.data, sizeof(u.data)); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/signal.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/signal.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/signal.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/signal.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/size.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/size.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/size.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/size.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/sleep.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sleep.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/sleep.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sleep.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/sockopt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sockopt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/sockopt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/sockopt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/socktypes.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/socktypes.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/socktypes.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/socktypes.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/split.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/split.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/split.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/split.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/splitlines.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/splitlines.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/splitlines.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/splitlines.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/stat.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stat.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/stat.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stat.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/stop.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stop.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/stop.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stop.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/strerror.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/strerror.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/strerror.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/strerror.hpp index a8f2cb9..386aaef 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/strerror.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/strerror.hpp @@ -25,6 +25,8 @@ #include #include +#include + namespace openvpn { inline std::string strerror_str(const int errnum) { diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/string.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/string.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/string.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/string.hpp index bf6e56d..8807693 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/string.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/string.hpp @@ -310,6 +310,19 @@ namespace openvpn { return false; } + // remove all spaces in string + inline std::string remove_spaces(const std::string& str) + { + std::string ret; + for (std::string::const_iterator i = str.begin(); i != str.end(); ++i) + { + char c = *i; + if (!is_space(c)) + ret += c; + } + return ret; + } + // replace all spaces in string with rep inline std::string replace_spaces(const std::string& str, const char rep) { diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/stringize.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stringize.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/stringize.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stringize.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/stringtempl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stringtempl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/stringtempl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/stringtempl.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/tempfile.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/tempfile.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/tempfile.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/tempfile.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/to_string.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/to_string.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/to_string.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/to_string.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/umask.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/umask.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/umask.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/umask.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/unicode-impl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/unicode-impl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/unicode-impl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/unicode-impl.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/unicode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/unicode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/unicode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/unicode.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/uniqueptr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/uniqueptr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/uniqueptr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/uniqueptr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/usecount.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/usecount.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/usecount.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/usecount.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/usergroup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/usergroup.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/usergroup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/usergroup.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/userpass.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/userpass.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/userpass.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/userpass.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/valgrind.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/valgrind.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/valgrind.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/valgrind.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/version.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/version.hpp similarity index 87% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/version.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/version.hpp index 21d4a65..99720f8 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/version.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/version.hpp @@ -4,7 +4,7 @@ // packet encryption, packet authentication, and // packet compression. // -// Copyright (C) 2012-2017 OpenVPN Inc. +// Copyright (C) 2012-2018 OpenVPN Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License Version 3 @@ -21,9 +21,8 @@ // Current version of the OpenVPN core -#ifndef OPENVPN_COMMON_VERSION_H -#define OPENVPN_COMMON_VERSION_H +#pragma once +#ifndef OPENVPN_VERSION #define OPENVPN_VERSION "3.git:master" - -#endif // OPENVPN_COMMON_VERSION_H +#endif diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/waitbarrier.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/waitbarrier.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/waitbarrier.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/waitbarrier.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/write.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/write.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/write.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/write.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/common/wstring.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/wstring.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/common/wstring.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/common/wstring.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compnull.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compnull.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compnull.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compnull.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compress.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compress.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compress.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compress.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compstub.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compstub.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/compstub.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/compstub.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lz4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lz4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lz4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lz4.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzo.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzo.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzo.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzo.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoasym.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoasym.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoasym.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoasym.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoasym_impl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoasym_impl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoasym_impl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoasym_impl.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoselect.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoselect.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/lzoselect.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/lzoselect.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/compress/snappy.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/snappy.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/compress/snappy.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/compress/snappy.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/bs64_data_limit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/bs64_data_limit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/bs64_data_limit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/bs64_data_limit.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cipher.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cipher.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cipher.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cipher.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/crypto_aead.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/crypto_aead.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/crypto_aead.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/crypto_aead.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/crypto_chm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/crypto_chm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/crypto_chm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/crypto_chm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptoalgs.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptoalgs.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptoalgs.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptoalgs.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptodc.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptodc.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptodc.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptodc.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptodcsel.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptodcsel.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/cryptodcsel.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/cryptodcsel.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/decrypt_chm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/decrypt_chm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/decrypt_chm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/decrypt_chm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/digestapi.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/digestapi.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/digestapi.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/digestapi.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/encrypt_chm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/encrypt_chm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/encrypt_chm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/encrypt_chm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/hashstr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/hashstr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/hashstr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/hashstr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/ovpnhmac.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/ovpnhmac.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/ovpnhmac.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/ovpnhmac.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/packet_id.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/packet_id.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/packet_id.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/packet_id.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/selftest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/selftest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/selftest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/selftest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/static_key.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/static_key.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/static_key.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/static_key.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/tls_crypt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/tls_crypt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/crypto/tls_crypt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/crypto/tls_crypt.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/dcocli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/dcocli.hpp new file mode 100644 index 0000000..37843e9 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/dcocli.hpp @@ -0,0 +1,761 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#ifndef OPENVPN_TRANSPORT_DCO_DCOCLI_H +#define OPENVPN_TRANSPORT_DCO_DCOCLI_H + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef ENABLE_PG +#include +#include +#endif + +// client-side DCO (Data Channel Offload) module for Linux/kovpn + +namespace openvpn { + namespace DCOTransport { + + OPENVPN_EXCEPTION(dco_error); + + class ClientConfig : public DCO, + public TransportClientFactory, + public TunClientFactory + { + public: + typedef RCPtr Ptr; + + std::string dev_name; + + DCO::TransportConfig transport; + DCO::TunConfig tun; + + int trunk_unit = -1; + + virtual TunClientFactory::Ptr new_tun_factory(const DCO::TunConfig& conf, const OptionList& opt) override + { + tun = conf; + + // set a default MTU + if (!tun.tun_prop.mtu) + tun.tun_prop.mtu = 1500; + + // parse "dev" option + { + const Option* dev = opt.get_ptr("dev"); + if (dev) + dev_name = dev->get(1, 64); + else + dev_name = "ovpnc"; + } + + // parse trunk-unit + trunk_unit = opt.get_num("trunk-unit", 1, trunk_unit, 0, 511); + + return TunClientFactory::Ptr(this); + } + + virtual TransportClientFactory::Ptr new_transport_factory(const DCO::TransportConfig& conf) override + { + transport = conf; + return TransportClientFactory::Ptr(this); + } + + virtual TunClient::Ptr new_tun_client_obj(openvpn_io::io_context& io_context, + TunClientParent& parent, + TransportClient* transcli) override; + + virtual TransportClient::Ptr new_transport_client_obj(openvpn_io::io_context& io_context, + TransportClientParent* parent) override; + + static DCO::Ptr new_controller() + { + return new ClientConfig(); + } + + private: + ClientConfig() {} + }; + + class Client : public TransportClient, + public TunClient, + public KoRekey::Receiver, + public SessionStats::DCOTransportSource + { + friend class ClientConfig; + + typedef RCPtr Ptr; + + struct ProtoBase + { + ProtoBase() {} + virtual IP::Addr server_endpoint_addr() const = 0; + virtual void close() = 0; + virtual ~ProtoBase() {} + + ProtoBase(const ProtoBase&) = delete; + ProtoBase& operator=(const ProtoBase&) = delete; + }; + + struct UDP : public ProtoBase + { + UDP(openvpn_io::io_context& io_context) + : resolver(io_context), + socket(io_context) + { + } + + virtual IP::Addr server_endpoint_addr() const override + { + return IP::Addr::from_asio(server_endpoint.address()); + } + + virtual void close() override + { + socket.close(); + resolver.cancel(); + } + + openvpn_io::ip::udp::resolver resolver; + openvpn_io::ip::udp::socket socket; + UDPTransport::AsioEndpoint server_endpoint; + }; + +#ifdef ENABLE_PG + typedef KoTun::Tun TunImpl; +#else + typedef KoTun::TunClient TunImpl; +#endif + + // calls tun_read_handler and tun_error_handler + friend TunImpl::Base; + + public: + // transport methods + + virtual void transport_start() override + { + if (halt) + OPENVPN_THROW(dco_error, "transport_start called on halted instance"); + + KoTun::DevConf devconf; + + if (config->transport.protocol.is_udp()) + devconf.dc.tcp = false; + else if (config->transport.protocol.is_tcp()) + devconf.dc.tcp = true; + else + OPENVPN_THROW(dco_error, "protocol " << config->transport.protocol.str() << " not implemented"); + + // config settings + devconf.set_dev_name(config->dev_name); + devconf.dc.max_peers = 1; + devconf.dc.max_dev_queues = 1; + devconf.dc.dev_tx_queue_len = 4096; + devconf.dc.max_tun_queue_len = 4096; + devconf.dc.max_tcp_send_queue_len = 64; + devconf.dc.peer_lookup = OVPN_PEER_LOOKUP_NONE; + devconf.dc.cpu_id = -1; + + // create kovpn tun socket + impl.reset(new TunImpl(io_context, + devconf, + this, + config->transport.frame, + nullptr, + nullptr)); + + // set kovpn stats hook + config->transport.stats->dco_configure(this); + + // if trunking, set RPS/XPS on iface + if (config->trunk_unit >= 0) + KoTun::KovpnBase::set_rps_xps(config->dev_name, devconf.dc.queue_index, config->tun.stop); + + if (devconf.dc.tcp) + transport_start_tcp(); + else + transport_start_udp(); + } + + // VPN IP collision detection for multi-channel trunking + static void set_vpn_ip_collision(IPCollisionDetectBase* vpn_ip_collision_arg) + { + vpn_ip_collision = vpn_ip_collision_arg; + } + + virtual bool transport_send_const(const Buffer& buf) override + { + return send(buf); + } + + virtual bool transport_send(BufferAllocated& buf) override + { + return send(buf); + } + + virtual bool transport_send_queue_empty() override + { + return false; + } + + virtual bool transport_has_send_queue() override + { + return false; + } + + virtual unsigned int transport_send_queue_size() override + { + return 0; + } + + virtual void reset_align_adjust(const size_t align_adjust) override + { + } + + virtual void transport_stop_requeueing() override + { + } + + virtual void server_endpoint_info(std::string& host, std::string& port, std::string& proto, std::string& ip_addr) const override + { + host = server_host; + port = server_port; + const IP::Addr addr = server_endpoint_addr(); + proto = "UDP"; + proto += addr.version_string(); + proto += "-DCO"; + ip_addr = addr.to_string(); + } + + virtual IP::Addr server_endpoint_addr() const override + { + if (proto) + return proto->server_endpoint_addr(); + else + return IP::Addr(); + } + + virtual Protocol transport_protocol() const override + { + switch (server_endpoint_addr().version()) + { + case IP::Addr::V4: + return Protocol(Protocol::UDPv4); + case IP::Addr::V6: + return Protocol(Protocol::UDPv6); + default: + return Protocol(); + } + } + + virtual ~Client() override + { + stop_(); + } + + // tun methods + + virtual void tun_start(const OptionList& opt, + TransportClient& transcli, + CryptoDCSettings& dc_settings) override + { + if (halt || !tun_parent) + OPENVPN_THROW(dco_error, "tun_start called on halted/undefined instance"); + + try { + const IP::Addr server_addr = server_endpoint_addr(); + + // get the iface name + state->iface_name = config->dev_name; + + // notify parent + tun_parent->tun_pre_tun_config(); + + // parse pushed options + TunBuilderCapture::Ptr po(new TunBuilderCapture()); + TunProp::configure_builder(po.get(), + state.get(), + config->transport.stats.get(), + server_addr, + config->tun.tun_prop, + opt, + nullptr, + false); + + OPENVPN_LOG("CAPTURED OPTIONS:" << std::endl << po->to_string()); + + // add/remove command lists + ActionList::Ptr add_cmds = new ActionList(); + remove_cmds.reset(new ActionListReversed()); + + // configure tun properties + std::vector rtvec; + if (config->trunk_unit >= 0) + { + // VPN IP collision detection, will throw on collision + if (vpn_ip_collision) + detect_vpn_ip_collision(*vpn_ip_collision, *po, config->trunk_unit, *remove_cmds); + + // trunk setup + TunLinux::iface_config(state->iface_name, + config->trunk_unit, + *po, + nullptr, + *add_cmds, + *remove_cmds); + + // Note that in trunking mode, kovpn must be + // configured for source routing. + add_vpn_ips_as_source_routes(*po, rtvec, IP::Addr::V4); + add_vpn_ips_as_source_routes(*po, rtvec, IP::Addr::V6); + } + else + { + // non-trunk setup + TunLinux::tun_config(state->iface_name, + *po, + &rtvec, + *add_cmds, + *remove_cmds); + } + + // Add routes to DCO implementation + impl->peer_add_routes(peer_id, rtvec); + + // execute commands to bring up interface + add_cmds->execute_log(); + + // Add a hook so ProtoContext will call back to + // rekey() on rekey ops. + dc_settings.set_factory(CryptoDCFactory::Ptr(new KoRekey::Factory(dc_settings.factory(), this, config->transport.frame))); + + // signal that we are connected + tun_parent->tun_connected(); + } + catch (const IPCollisionDetectBase::ip_collision& e) + { + // on VPN IP address collision, just reconnect to get a new address + stop_(); + tun_parent->tun_error(Error::TUN_ERROR, e.what()); + } + catch (const std::exception& e) + { + stop_(); + tun_parent->tun_error(Error::TUN_SETUP_FAILED, e.what()); + } + } + + virtual void set_disconnect() override + { + } + + virtual bool tun_send(BufferAllocated& buf) override // return true if send succeeded + { + return false; + } + + virtual std::string tun_name() const override + { + if (impl) + return impl->name(); + else + return "UNDEF_DCO"; + } + + virtual std::string vpn_ip4() const override + { + if (state->vpn_ip4_addr.specified()) + return state->vpn_ip4_addr.to_string(); + else + return ""; + } + + virtual std::string vpn_ip6() const override + { + if (state->vpn_ip6_addr.specified()) + return state->vpn_ip6_addr.to_string(); + else + return ""; + } + + virtual std::string vpn_gw4() const override + { + if (state->vpn_ip4_gw.specified()) + return state->vpn_ip4_gw.to_string(); + else + return ""; + } + + virtual std::string vpn_gw6() const override + { + if (state->vpn_ip6_gw.specified()) + return state->vpn_ip6_gw.to_string(); + else + return ""; + } + + // KoRekey::Receiver methods + + virtual void rekey(const CryptoDCInstance::RekeyType rktype, + const KoRekey::Info& rkinfo) override + { + if (halt) + return; + + KoRekey::Key key(rktype, rkinfo, peer_id, false); + impl->peer_keys_reset(key()); + if (transport_parent->is_keepalive_enabled()) + { + struct ovpn_peer_keepalive ka; + + // Disable userspace keepalive, get the userspace + // keepalive parameters, and enable kovpn keepalive. + ka.peer_id = peer_id; + transport_parent->disable_keepalive(ka.keepalive_ping, + ka.keepalive_timeout); + + // Modify the peer + impl->peer_set_keepalive(&ka); + } + } + + virtual void explicit_exit_notify() override + { + impl->peer_xmit_explicit_exit_notify(peer_id); + } + + // shared methods + + virtual void stop() override + { + stop_(); + } + + private: + Client(openvpn_io::io_context& io_context_arg, + ClientConfig* config_arg, + TransportClientParent* parent_arg) + : io_context(io_context_arg), + halt(false), + state(new TunProp::State()), + config(config_arg), + transport_parent(parent_arg), + tun_parent(nullptr), + peer_id(-1) + { + } + + virtual void transport_reparent(TransportClientParent* parent_arg) + { + transport_parent = parent_arg; + } + + void transport_start_udp() + { + proto.reset(new UDP(io_context)); + if (config->transport.remote_list->endpoint_available(&server_host, &server_port, nullptr)) + { + start_connect_udp(); + } + else + { + transport_parent->transport_pre_resolve(); + udp().resolver.async_resolve(server_host, server_port, + [self=Ptr(this)](const openvpn_io::error_code& error, openvpn_io::ip::udp::resolver::results_type results) + { + self->do_resolve_udp(error, results); + }); + } + } + + // called after DNS resolution has succeeded or failed + void do_resolve_udp(const openvpn_io::error_code& error, + openvpn_io::ip::udp::resolver::results_type results) + { + if (!halt) + { + if (!error) + { + // save resolved endpoint list in remote_list + config->transport.remote_list->set_endpoint_range(results); + start_connect_udp(); + } + else + { + std::ostringstream os; + os << "DNS resolve error on '" << server_host << "' for UDP session: " << error.message(); + config->transport.stats->error(Error::RESOLVE_ERROR); + stop_(); + transport_parent->transport_error(Error::UNDEF, os.str()); + } + } + } + + // do UDP connect + void start_connect_udp() + { + config->transport.remote_list->get_endpoint(udp().server_endpoint); + OPENVPN_LOG("Contacting " << udp().server_endpoint << " via UDP"); + transport_parent->transport_wait(); + transport_parent->ip_hole_punch(server_endpoint_addr()); + udp().socket.open(udp().server_endpoint.protocol()); + udp().socket.async_connect(udp().server_endpoint, [self=Ptr(this)](const openvpn_io::error_code& error) + { + self->start_impl_udp(error); + }); + } + + // start I/O on UDP socket + void start_impl_udp(const openvpn_io::error_code& error) + { + if (!halt) + { + if (!error) + { + // attach UDP socket to kovpn + peer_id = impl->peer_new_udp_client(udp().socket.native_handle(), 0, 0); + + // queue reads on tun + impl->start(8); // parallel reads + transport_parent->transport_connecting(); + } + else + { + std::ostringstream os; + os << "UDP connect error on '" << server_host << ':' << server_port << "' (" << udp().server_endpoint << "): " << error.message(); + config->transport.stats->error(Error::UDP_CONNECT_ERROR); + stop_(); + transport_parent->transport_error(Error::UNDEF, os.str()); + } + } + } + + void transport_start_tcp() + { + OPENVPN_THROW(dco_error, "TCP not implemented yet"); // fixme for DCO + } + + void tun_read_handler(KoTun::PacketFrom::SPtr& pfp) // called by TunImpl + { + if (halt) + return; + + try { + const struct ovpn_tun_head *th = (const struct ovpn_tun_head *)pfp->buf.read_alloc(sizeof(struct ovpn_tun_head)); + switch (th->type) + { + case OVPN_TH_TRANS_BY_PEER_ID: + { + if (peer_id < 0 || th->peer_id != peer_id) + { + OPENVPN_LOG("dcocli: OVPN_TH_TRANS_BY_PEER_ID unrecognized peer_id=" << th->peer_id); + return; + } + + transport_parent->transport_recv(pfp->buf); + cc_rx_bytes += pfp->buf.size(); + break; + } + case OVPN_TH_NOTIFY_STATUS: + { + const struct ovpn_tun_head_status *thn = (const struct ovpn_tun_head_status *)th; + + if (peer_id < 0 || thn->head.peer_id != peer_id) + { + OPENVPN_LOG("dcocli: OVPN_TH_NOTIFY_STATUS unrecognized peer_id=" << thn->head.peer_id); + return; + } + + const bool stop = (thn->head.status != OVPN_STATUS_ACTIVE); + OPENVPN_LOG("dcocli: status=" << int(thn->head.status) << " peer_id=" << peer_id << " rx_bytes=" << thn->rx_bytes << " tx_bytes=" << thn->tx_bytes); // fixme + if (stop) + throw Exception("stop status=" + to_string(thn->head.status)); + break; + } + default: + OPENVPN_LOG("dcocli: unknown ovpn_tun_head type=" << (int)th->type); + break; + } + } + catch (const std::exception& e) + { + const std::string msg = std::string("dcocli: tun_read_handler: ") + e.what(); + OPENVPN_LOG(msg); + stop_(); + transport_parent->transport_error(Error::TRANSPORT_ERROR, msg); + } + } + + void tun_error_handler(const Error::Type errtype, // called by TunImpl + const openvpn_io::error_code* error) + { + OPENVPN_LOG("TUN error"); + stop_(); + } + + bool send(const Buffer& buf) + { + struct ovpn_tun_head head; + std::memset(&head, 0, sizeof(head)); + head.type = OVPN_TH_TRANS_BY_PEER_ID; + head.peer_id = peer_id; + return impl->write_seq(AsioConstBufferSeq2(Buffer(reinterpret_cast(&head), sizeof(head), true), + buf)); + } + + void stop_() + { + if (!halt) + { + halt = true; + config->transport.stats->dco_update(); // final update + config->transport.stats->dco_configure(nullptr); + if (remove_cmds) + remove_cmds->execute_log(); + if (impl) + impl->stop(); + if (proto) + proto->close(); + } + } + + UDP& udp() + { + return *static_cast(proto.get()); + } + + static void add_vpn_ips_as_source_routes(const TunBuilderCapture& pull, + std::vector& rtvec, + const IP::Addr::Version ver) + { + const TunBuilderCapture::RouteAddress *ra = pull.vpn_ip(ver); + if (ra) + rtvec.push_back(IP::route_from_string_prefix(ra->address, + IP::Addr::version_size(ver), + "DCOTransport::Client::add_vpn_ips_as_source_routes", + ver)); + } + + // Throw an exception of type IPCollisionDetectBase::ip_collision + // if VPN IP is already in use by another client thread. + // This is intended to force a reconnect and obtain a + // new non-colliding address. + static void detect_vpn_ip_collision(IPCollisionDetectBase& ipcoll, + const TunBuilderCapture& pull, + unsigned int unit, + ActionList& remove) + { + const TunBuilderCapture::RouteAddress* local4 = pull.vpn_ipv4(); + const TunBuilderCapture::RouteAddress* local6 = pull.vpn_ipv6(); + if (local4) + ipcoll.add(local4->address, unit, remove); + if (local6) + ipcoll.add(local6->address, unit, remove); + } + + // override for SessionStats::DCOTransportSource + virtual SessionStats::DCOTransportSource::Data dco_transport_stats_delta() override + { + if (impl) + { + struct ovpn_peer_status ops; + ops.peer_id = peer_id; + if (impl->peer_get_status(&ops)) + { + const SessionStats::DCOTransportSource::Data data(ops.rx_bytes + cc_rx_bytes, ops.tx_bytes); + const SessionStats::DCOTransportSource::Data delta = data - last_stats; + last_stats = data; + return delta; + } + } + return SessionStats::DCOTransportSource::Data(); + } + + openvpn_io::io_context& io_context; + bool halt; + + TunProp::State::Ptr state; + + ClientConfig::Ptr config; + TransportClientParent* transport_parent; + TunClientParent* tun_parent; + + std::unique_ptr proto; + + ActionList::Ptr remove_cmds; + + std::string server_host; + std::string server_port; + + TunImpl::Ptr impl; + int peer_id; + + SessionStats::DCOTransportSource::Data last_stats; + __u64 cc_rx_bytes = 0; + + static IPCollisionDetectBase* vpn_ip_collision; + }; + + inline DCO::Ptr new_controller() + { + return ClientConfig::new_controller(); + } + + inline TransportClient::Ptr ClientConfig::new_transport_client_obj(openvpn_io::io_context& io_context, + TransportClientParent* parent) + { + return TransportClient::Ptr(new Client(io_context, this, parent)); + } + + inline TunClient::Ptr ClientConfig::new_tun_client_obj(openvpn_io::io_context& io_context, + TunClientParent& parent, + TransportClient* transcli) + { + Client* cli = static_cast(transcli); + cli->tun_parent = &parent; + return TunClient::Ptr(cli); + } + + IPCollisionDetectBase* Client::vpn_ip_collision; // GLOBAL + } +}; + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/ipcollbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/ipcollbase.hpp new file mode 100644 index 0000000..9b09e17 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/dco/ipcollbase.hpp @@ -0,0 +1,44 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +namespace openvpn { + class IPCollisionDetectBase + { + public: + OPENVPN_EXCEPTION(ip_collision); + + virtual void add(const std::string& addr_str, + const unsigned int unit, + ActionList& late_remove) { } + }; + +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/error/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/error/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/error/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/error/error.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/error/excode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/error/excode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/error/excode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/error/excode.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/frame/frame.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/frame.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/frame/frame.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/frame.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/frame/frame_init.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/frame_init.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/frame/frame_init.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/frame_init.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/frame/memq_dgram.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/memq_dgram.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/frame/memq_dgram.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/memq_dgram.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/frame/memq_stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/memq_stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/frame/memq_stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/frame/memq_stream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/header.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/header.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/header.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/header.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/htmlskip.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/htmlskip.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/htmlskip.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/htmlskip.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/method.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/method.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/method.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/method.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/parseutil.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/parseutil.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/parseutil.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/parseutil.hpp index 1bd0b74..13dd138 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/parseutil.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/parseutil.hpp @@ -36,13 +36,13 @@ namespace openvpn { // Check if a byte is an HTTP character. inline bool is_char(const unsigned char c) { - return c >= 0 && c <= 127; + return c <= 127; } // Check if a byte is an HTTP control character. inline bool is_ctl(const unsigned char c) { - return (c >= 0 && c <= 31) || (c == 127); + return (c <= 31)|| (c == 127); } // Check if a byte is defined as an HTTP tspecial character. diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/reply.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/reply.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/reply.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/reply.hpp index 9c303af..6f3c058 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/reply.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/reply.hpp @@ -93,6 +93,7 @@ namespace openvpn { public: enum status { + undefined, pending, fail, success, diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/request.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/request.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/request.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/request.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/status.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/status.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/status.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/status.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlencode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlencode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlencode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlencode.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlparm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlparm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlparm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlparm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlparse.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlparse.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/urlparse.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/urlparse.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/validate_uri.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/validate_uri.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/validate_uri.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/validate_uri.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/http/webexcept.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/webexcept.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/http/webexcept.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/http/webexcept.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/init/cryptoinit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/cryptoinit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/init/cryptoinit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/cryptoinit.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/init/engineinit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/engineinit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/init/engineinit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/engineinit.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/init/initprocess.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/initprocess.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/init/initprocess.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/init/initprocess.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/io/io.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/io/io.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/io/io.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/io/io.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/dhcp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/dhcp.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ip/dhcp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/dhcp.hpp index 5bb18f5..293f838 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/dhcp.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/dhcp.hpp @@ -23,7 +23,7 @@ #define OPENVPN_IP_DHCP_H #include -#include +#include #include #pragma pack(push) @@ -78,7 +78,7 @@ namespace openvpn { struct DHCPPacket { EthHeader eth; - IPHeader ip; + IPv4Header ip; UDPHeader udp; DHCP dhcp; std::uint8_t options[]; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/eth.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/eth.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ip/eth.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/eth.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/icmp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp4.hpp similarity index 84% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ip/icmp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp4.hpp index 5813b56..d08c028 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/icmp.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp4.hpp @@ -19,40 +19,42 @@ // along with this program in the COPYING file. // If not, see . -// Define the ICMP header +// Define the ICMPv4 header -#ifndef OPENVPN_IP_ICMP_H -#define OPENVPN_IP_ICMP_H +#pragma once #include // for std::uint32_t, uint16_t, uint8_t -#include +#include #pragma pack(push) #pragma pack(1) namespace openvpn { - struct ICMP { + struct ICMPv4 { enum { - ECHO_REPLY = 0, ECHO_REQUEST = 8, + ECHO_REPLY = 0, }; - struct IPHeader head; + struct IPv4Header head; - std::uint8_t type; - std::uint8_t code; + union { + struct { + std::uint8_t type; + std::uint8_t code; + }; + std::uint16_t type_code; + }; std::uint16_t checksum; union { struct { std::uint16_t id; std::uint16_t seq_num; - } echo; - } hd; + }; + }; }; } #pragma pack(pop) - -#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp6.hpp new file mode 100644 index 0000000..c23e03e --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/icmp6.hpp @@ -0,0 +1,61 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// Define the ICMPv6 header + +#pragma once + +#include // for std::uint32_t, uint16_t, uint8_t + +#include + +#pragma pack(push) +#pragma pack(1) + +namespace openvpn { + + struct ICMPv6 { + enum { + ECHO_REQUEST = 128, + ECHO_REPLY = 129, + }; + + struct IPv6Header head; + + union { + struct { + std::uint8_t type; + std::uint8_t code; + }; + std::uint16_t type_code; + }; + std::uint16_t checksum; + + union { + struct { + std::uint16_t id; + std::uint16_t seq_num; + }; + }; + }; +} + +#pragma pack(pop) diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/ip.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip4.hpp similarity index 69% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ip/ip.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip4.hpp index 437256d..f2a0bef 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/ip.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip4.hpp @@ -19,10 +19,9 @@ // along with this program in the COPYING file. // If not, see . -// Define the IP protocol header +// IPv4 header -#ifndef OPENVPN_IP_IP_H -#define OPENVPN_IP_IP_H +#pragma once #include // for std::uint32_t, uint16_t, uint8_t @@ -30,13 +29,9 @@ #pragma pack(1) namespace openvpn { - struct IPHeader - { - static unsigned int version(const std::uint8_t version_len) - { - return (version_len >> 4) & 0x0F; - } + struct IPv4Header + { static unsigned int length(const std::uint8_t version_len) { return (version_len & 0x0F) << 2; @@ -61,12 +56,6 @@ namespace openvpn { std::uint8_t ttl; - enum { - ICMP = 1, /* ICMP protocol */ - IGMP = 2, /* IGMP protocol */ - TCP = 6, /* TCP protocol */ - UDP = 17, /* UDP protocol */ - }; std::uint8_t protocol; std::uint16_t check; @@ -74,28 +63,6 @@ namespace openvpn { std::uint32_t daddr; /* The options start here. */ }; - - inline std::uint16_t ip_checksum(const void *ip, unsigned int size) - { - std::uint16_t *buffer = (std::uint16_t *)ip; - std::uint32_t cksum = 0; - - while (size > 1) - { - cksum += *buffer++; - size -= sizeof(uint16_t); - } - - if (size) - cksum += *(uint8_t*)buffer; - - cksum = (cksum >> 16) + (cksum & 0xffff); - cksum += (cksum >> 16); - return ~cksum; - } - } #pragma pack(pop) - -#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip6.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip6.hpp new file mode 100644 index 0000000..892ccbf --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ip6.hpp @@ -0,0 +1,50 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// IPv6 header + +#pragma once + +#include // for std::uint32_t, uint16_t, uint8_t + +#include + +#pragma pack(push) +#pragma pack(1) + +namespace openvpn { + + struct IPv6Header + { + std::uint8_t version_prio; + + std::uint8_t flow_lbl[3]; + + std::uint16_t payload_len; + std::uint8_t nexthdr; + std::uint8_t hop_limit; + + struct in6_addr saddr; + struct in6_addr daddr; + }; +} + +#pragma pack(pop) diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ipcommon.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ipcommon.hpp new file mode 100644 index 0000000..34afe6c --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/ipcommon.hpp @@ -0,0 +1,45 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// Common declarations for IPv4 and IPv6 + +#pragma once + +#include // for std::uint32_t, uint16_t, uint8_t + +namespace openvpn { + namespace IPCommon { + + enum { + ICMPv4 = 1, /* ICMPv4 protocol */ + ICMPv6 = 58, /* ICMPv6 protocol */ + IGMP = 2, /* IGMP protocol */ + TCP = 6, /* TCP protocol */ + UDP = 17, /* UDP protocol */ + }; + + inline unsigned int version(const std::uint8_t version_len_prio) + { + return (version_len_prio >> 4) & 0x0F; + } + + } +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/udp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/udp.hpp similarity index 96% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ip/udp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/udp.hpp index 0437be2..5ba6702 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ip/udp.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ip/udp.hpp @@ -24,7 +24,7 @@ #ifndef OPENVPN_IP_UDP_H #define OPENVPN_IP_UDP_H -#include +#include namespace openvpn { @@ -68,7 +68,7 @@ namespace openvpn { } /* the protocol number and the length of the UDP packet */ - sum += (std::uint16_t)IPHeader::UDP + (std::uint16_t)len_udp; + sum += (std::uint16_t)IPCommon::UDP + (std::uint16_t)len_udp; /* keep only the last 16 bits of the 32 bit calculated sum and add the carries */ while (sum >> 16) diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kocrypto.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kocrypto.hpp new file mode 100644 index 0000000..422c63a --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kocrypto.hpp @@ -0,0 +1,389 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// kovpn crypto wrappers + +#ifndef OPENVPN_KOVPN_KOCRYPTO_H +#define OPENVPN_KOVPN_KOCRYPTO_H + +#include // for std::memset, std::memcpy +#include // for std::move + +#include +#include +#include +#include +#include +#include +#include + +namespace openvpn { + namespace KoRekey { + + OPENVPN_EXCEPTION(korekey_error); + + struct Info { + Info() {} + + Info(const CryptoDCContext::Ptr& dc_context_delegate_arg, + const unsigned int key_id_arg, + const Frame::Ptr& frame_arg) + : dc_context_delegate(dc_context_delegate_arg), + key_id(key_id_arg), + frame(frame_arg) + { + } + + CryptoDCContext::Ptr dc_context_delegate; + CompressContext comp_ctx; + unsigned int key_id = 0; + int remote_peer_id = -1; + bool tcp_linear = false; + StaticKey encrypt_cipher; + StaticKey encrypt_hmac; + StaticKey decrypt_cipher; + StaticKey decrypt_hmac; + Frame::Ptr frame; + }; + + class Key + { + // noncopyable because of "opk.primary = &key" below + Key(const Key&) = delete; + Key& operator=(const Key&) = delete; + + public: + static void validate(const CryptoAlgs::Type cipher, + const CryptoAlgs::Type digest) + { + const CryptoAlgs::Alg& calg = CryptoAlgs::get(cipher); + const CryptoAlgs::Alg& halg = CryptoAlgs::get(digest); + + switch (cipher) + { + case CryptoAlgs::AES_128_GCM: + case CryptoAlgs::AES_192_GCM: + case CryptoAlgs::AES_256_GCM: + case CryptoAlgs::AES_128_CBC: + case CryptoAlgs::AES_192_CBC: + case CryptoAlgs::AES_256_CBC: + case CryptoAlgs::BF_CBC: + break; + default: + OPENVPN_THROW(korekey_error, "cipher alg " << calg.name() << " is not currently supported by kovpn"); + } + + if (calg.mode() == CryptoAlgs::CBC_HMAC) + { + switch (digest) + { + case CryptoAlgs::SHA1: + case CryptoAlgs::SHA256: + break; + default: + OPENVPN_THROW(korekey_error, "HMAC alg " << halg.name() << " is not currently supported by kovpn"); + } + } + } + + Key(const CryptoDCInstance::RekeyType rktype, + const Info& rkinfo, // must remain in scope for duration of Key lifetime + const int peer_id, + const bool verbose) + { + std::memset(&opk, 0, sizeof(opk)); + + // set peer ID + opk.peer_id = peer_id; + + // set rekey op + bool new_key = false; + bool secondary_key = false; // only relevant for non-deactivate ops to secondary + switch (rktype) + { + case CryptoDCInstance::ACTIVATE_PRIMARY: + { + new_key = true; + opk.op = OVPN_KEYS_PRIMARY_ONLY; + break; + } + case CryptoDCInstance::ACTIVATE_PRIMARY_MOVE: + { + new_key = true; + opk.op = OVPN_KEYS_PRIMARY_ASSIGN_MOVE; + break; + } + case CryptoDCInstance::NEW_SECONDARY: + { + new_key = true; + secondary_key = true; + opk.op = OVPN_KEYS_SECONDARY_ONLY; + break; + } + case CryptoDCInstance::PRIMARY_SECONDARY_SWAP: + { + opk.op = OVPN_KEYS_PRIMARY_SECONDARY_SWAP; + break; + } + case CryptoDCInstance::DEACTIVATE_SECONDARY: + { + opk.op = OVPN_KEYS_SECONDARY_ONLY; + break; + } + case CryptoDCInstance::DEACTIVATE_ALL: + { + opk.op = OVPN_KEYS_BOTH; + break; + } + default: + OPENVPN_THROW(korekey_error, "unrecognized rekey type=" << (int)rktype); + } + + if (new_key) + { + const CryptoDCContext::Info ci = rkinfo.dc_context_delegate->crypto_info(); + const CryptoAlgs::Alg& calg = CryptoAlgs::get(ci.cipher_alg); + + // set crypto family + switch (calg.mode()) + { + case CryptoAlgs::CBC_HMAC: + opk.crypto_family = OVPN_CRYPTO_FAMILY_CBC_HMAC; + break; + case CryptoAlgs::AEAD: + opk.crypto_family = OVPN_CRYPTO_FAMILY_AEAD; + break; + default: + opk.crypto_family = OVPN_CRYPTO_FAMILY_UNDEF; + break; + } + + std::memset(&key, 0, sizeof(key)); + key.key_id = rkinfo.key_id; + key.remote_peer_id = rkinfo.remote_peer_id; + + switch (ci.cipher_alg) + { + case CryptoAlgs::AES_128_GCM: + key.cipher_alg = OVPN_ALG_AES_GCM; + key.encrypt.cipher_key_size = 128 / 8; + break; + case CryptoAlgs::AES_192_GCM: + key.cipher_alg = OVPN_ALG_AES_GCM; + key.encrypt.cipher_key_size = 192 / 8; + break; + case CryptoAlgs::AES_256_GCM: + key.cipher_alg = OVPN_ALG_AES_GCM; + key.encrypt.cipher_key_size = 256 / 8; + break; + case CryptoAlgs::AES_128_CBC: + key.cipher_alg = OVPN_ALG_AES_CBC; + key.encrypt.cipher_key_size = 128 / 8; + break; + case CryptoAlgs::AES_192_CBC: + key.cipher_alg = OVPN_ALG_AES_CBC; + key.encrypt.cipher_key_size = 192 / 8; + break; + case CryptoAlgs::AES_256_CBC: + key.cipher_alg = OVPN_ALG_AES_CBC; + key.encrypt.cipher_key_size = 256 / 8; + break; + case CryptoAlgs::BF_CBC: + key.cipher_alg = OVPN_ALG_BF_CBC; + key.encrypt.cipher_key_size = 128 / 8; + + // special data limits for 64-bit block-size ciphers (CVE-2016-6329) + key.encrypt.data_limit = key.decrypt.data_limit = OPENVPN_BS64_DATA_LIMIT; + break; + default: + key.cipher_alg = OVPN_ALG_UNDEF; + break; + } + key.decrypt.cipher_key_size = key.encrypt.cipher_key_size; + + // make sure that chosen cipher/family is supported + if (opk.crypto_family == OVPN_CRYPTO_FAMILY_UNDEF + || key.cipher_alg == OVPN_ALG_UNDEF) + OPENVPN_THROW(korekey_error, "cipher alg " << calg.name() << " is not currently supported by kovpn"); + + // set cipher keys + key.encrypt.cipher_key = verify_key("cipher encrypt", + rkinfo.encrypt_cipher, + key.encrypt.cipher_key_size); + key.decrypt.cipher_key = verify_key("cipher decrypt", + rkinfo.decrypt_cipher, + key.decrypt.cipher_key_size); + + switch (calg.mode()) + { + case CryptoAlgs::CBC_HMAC: + { + // if CBC mode, process HMAC digest + const CryptoAlgs::Alg& halg = CryptoAlgs::get(ci.hmac_alg); + switch (ci.hmac_alg) + { + case CryptoAlgs::SHA1: + key.hmac_alg = OVPN_ALG_HMAC_SHA1; + break; + case CryptoAlgs::SHA256: + key.hmac_alg = OVPN_ALG_HMAC_SHA256; + break; + default: + OPENVPN_THROW(korekey_error, "HMAC alg " << halg.name() << " is not currently supported by kovpn"); + } + key.encrypt.hmac_key_size = halg.size(); + key.decrypt.hmac_key_size = key.encrypt.hmac_key_size; + + // set hmac keys + key.encrypt.hmac_key = verify_key("hmac encrypt", + rkinfo.encrypt_hmac, + key.encrypt.hmac_key_size); + key.decrypt.hmac_key = verify_key("hmac decrypt", + rkinfo.decrypt_hmac, + key.decrypt.hmac_key_size); + + // handle compression V1 + switch (rkinfo.comp_ctx.type()) + { + case CompressContext::LZO_STUB: + key.compress.alg = OVPN_COMP_NONE; + key.compress.swap = false; + break; + case CompressContext::COMP_STUB: + key.compress.alg = OVPN_COMP_NONE; + key.compress.swap = true; + break; + case CompressContext::LZ4: + key.compress.alg = OVPN_COMP_LZ4; + key.compress.swap = true; + break; + default: + OPENVPN_THROW(korekey_error, "Compression alg " << rkinfo.comp_ctx.str() << " is not supported by kovpn in CBC/HMAC mode"); + } + break; + } + case CryptoAlgs::AEAD: + { + // if AEAD mode, copy nonce tail from the HMAC key material + set_nonce_tail("AEAD nonce tail encrypt", + key.encrypt.nonce_tail, + sizeof(key.encrypt.nonce_tail), + rkinfo.encrypt_hmac); + set_nonce_tail("AEAD nonce tail decrypt", + key.decrypt.nonce_tail, + sizeof(key.decrypt.nonce_tail), + rkinfo.decrypt_hmac); + + // handle compression V2 + switch (rkinfo.comp_ctx.type()) + { + case CompressContext::COMP_STUBv2: + key.compress.alg = OVPN_COMP_NONE; + break; + case CompressContext::LZ4v2: + key.compress.alg = OVPN_COMP_LZ4; + break; + default: + OPENVPN_THROW(korekey_error, "Compression alg " << rkinfo.comp_ctx.str() << " is not supported by kovpn in AEAD mode"); + } + key.compress.swap = false; + + break; + } + default: + { + // should have been caught above + throw korekey_error("internal error"); + } + } + + // handle compression + key.compress.asym = rkinfo.comp_ctx.asym(); + key.compress.max_decompress_size = (*rkinfo.frame)[Frame::DECOMPRESS_WORK].payload(); + + // handle TCP linear + key.tcp_linear = rkinfo.tcp_linear; + + if (verbose) + OPENVPN_LOG("KOREKEY" + << " op=" << int(rktype) << '/' << opk.op + << " rpid=" << key.remote_peer_id + << " pri=" << key.key_id + << " cipher=" << key.cipher_alg + << "[e=" << render_hex(key.encrypt.cipher_key, 8) + << " d=" << render_hex(key.decrypt.cipher_key, 8) << ']' + << " hmac=" << key.hmac_alg + << "[e=" << render_hex(key.encrypt.hmac_key, 8) + << " d=" << render_hex(key.decrypt.hmac_key, 8) << ']' + << " comp=" << key.compress.alg + << " swap=" << key.compress.swap + << " asym=" << key.compress.asym + << " tcp_linear=" << key.tcp_linear + << " dl=[e=" << key.encrypt.data_limit + << " d=" << key.decrypt.data_limit << ']'); + + // set key + if (secondary_key) + opk.secondary = &key; + else + opk.primary = &key; + } + else if (verbose) + { + OPENVPN_LOG("KOREKEY" << " op=" << int(rktype) << '/' << opk.op); + } + } + + const struct ovpn_peer_keys_reset *operator()() const + { + return &opk; + } + + private: + const unsigned char *verify_key(const char *title, const StaticKey& sk, const size_t size_required) + { + if (sk.size() < size_required) + OPENVPN_THROW(korekey_error, title << ": insufficient key material, provided=" << sk.size() << " required=" << size_required); + return sk.data(); + } + + void set_nonce_tail(const char *title, unsigned char *dest, const size_t dest_size, const StaticKey& src) + { + const int NONCE_TAIL_SIZE = CryptoAlgs::AEAD_NONCE_TAIL_SIZE; + + const unsigned char *k = verify_key(title, src, NONCE_TAIL_SIZE); + if (dest_size < NONCE_TAIL_SIZE) + OPENVPN_THROW(korekey_error, title << ": cannot set"); + std::memcpy(dest, k, NONCE_TAIL_SIZE); + + // if dest is larger than NONCE_TAIL_SIZE, zero remaining bytes + if (dest_size > NONCE_TAIL_SIZE) + std::memset(dest + NONCE_TAIL_SIZE, 0, dest_size - NONCE_TAIL_SIZE); + } + + struct ovpn_peer_keys_reset opk; + struct ovpn_key_config key; + }; + + } +} + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kodev.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kodev.hpp new file mode 100644 index 0000000..41c7d0c --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kodev.hpp @@ -0,0 +1,391 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// OpenVPN 3 kovpn-based tun interface + +#ifndef OPENVPN_KOVPN_KODEV_H +#define OPENVPN_KOVPN_KODEV_H + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace openvpn { + namespace KoTun { + + OPENVPN_EXCEPTION(kotun_error); + + struct DevConf + { + DevConf() + { + std::memset(&dc, 0, sizeof(dc)); + } + + void set_dev_name(const std::string& name) + { + if (name.length() < IFNAMSIZ) + ::strcpy(dc.dev_name, name.c_str()); + else + OPENVPN_THROW(kotun_error, "ovpn dev name too long"); + } + + struct ovpn_dev_init dc; + }; + + // kovpn API methods + namespace API { + + // Attach UDP socket to ovpn instance + inline void socket_attach_udp(const int kovpn_fd, + const int sock_fd) + { + struct ovpn_socket_attach_udp asock; + asock.fd = sock_fd; + if (::ioctl(kovpn_fd, OVPN_SOCKET_ATTACH_UDP, &asock) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_SOCKET_ATTACH_UDP failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // New UDP client + inline int peer_new_udp_client(const int kovpn_fd, + int fd, + const __u64 notify_per, + const unsigned int notify_seconds) + { + int peer_id = -1; + + // attach UDP socket fd + { + struct ovpn_socket_attach_udp asock; + asock.fd = fd; + if (::ioctl(kovpn_fd, OVPN_SOCKET_ATTACH_UDP, &asock) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_SOCKET_ATTACH_UDP failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // get a new Peer ID + { + struct ovpn_peer_new opn; + opn.peer_float = OVPN_PF_DISABLED; + opn.ovpn_file_bind = true; + opn.notify_per = notify_per; + opn.notify_seconds = notify_seconds; + peer_id = ::ioctl(kovpn_fd, OVPN_PEER_NEW, &opn); + if (peer_id < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_PEER_NEW failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // set up endpoints for peer + { + struct ovpn_peer_sockaddr_reset psr; + std::memset(&psr, 0, sizeof(psr)); + psr.peer_id = peer_id; + psr.fd = fd; + if (::ioctl(kovpn_fd, OVPN_PEER_SOCKADDR_RESET, &psr) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_PEER_SOCKADDR_RESET failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + return peer_id; + } + + // Send explicit-exit-notify message to peer + inline void peer_xmit_explicit_exit_notify(const int kovpn_fd, + const int peer_id) + { + if (::ioctl(kovpn_fd, OVPN_PEER_XMIT_EXPLICIT_EXIT_NOTIFY, peer_id) < 0) + { + const int eno = errno; + OPENVPN_LOG("kotun: OVPN_PEER_XMIT_EXPLICIT_EXIT_NOTIFY failed, id=" << peer_id << " errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // Set peer crypto keys + inline void peer_keys_reset(const int kovpn_fd, + const struct ovpn_peer_keys_reset *opk) + { + if (::ioctl(kovpn_fd, OVPN_PEER_KEYS_RESET, opk) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_PEER_KEYS_RESET failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // Set keepalive + inline void peer_set_keepalive(const int kovpn_fd, + const struct ovpn_peer_keepalive *ka) + { + if (::ioctl(kovpn_fd, OVPN_PEER_KEEPALIVE, ka) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_PEER_KEEPALIVE failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // Add routes + inline void peer_add_routes(const int kovpn_fd, + const int peer_id, + const std::vector& rtvec) + { + std::unique_ptr routes(KoRoute::from_routes(rtvec)); + struct ovpn_peer_routes_add r; + r.peer_id = peer_id; + r.usurp = true; + r.n_routes = rtvec.size(); + r.routes = routes.get(); + if (::ioctl(kovpn_fd, OVPN_PEER_ROUTES_ADD, &r) < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_PEER_ROUTES_ADD failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + } + } + + // Get status info + inline bool peer_get_status(const int kovpn_fd, + const struct ovpn_peer_status* ops) + { + if (::ioctl(kovpn_fd, OVPN_PEER_STATUS, ops) >= 0) + { + OPENVPN_MAKE_MEM_DEFINED(ops, sizeof(*ops)); + return true; + } + else + { + const int eno = errno; + OPENVPN_LOG("kotun: OVPN_PEER_STATUS failed, errno=" << eno << ' ' << KovpnStats::errstr(eno)); + return false; + } + } + } + + struct PacketFrom + { + typedef std::unique_ptr SPtr; + BufferAllocated buf; + }; + + class KovpnBase + { + public: + static ScopedFD open_kovpn(DevConf& devconf, + KovpnStats* kovpn_stats, + bool* first) + { + if (first) + *first = false; + + // Open kovpn device + static const char node[] = "/dev/net/ovpn"; + ScopedFD fd(open(node, O_RDWR)); + if (!fd.defined()) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "error opening ovpn tunnel device " << node << ": " << strerror_str(eno)); + } + + // Check kovpn version + const int ver_packed = ::ioctl(fd(), OVPN_GET_VERSION, nullptr); + if (ver_packed < 0) + OPENVPN_THROW(kotun_error, "OVPN_GET_VERSION failed"); + if (ver_major(ver_packed) != OVPN_VER_MAJOR + || ver_minor(ver_packed) != OVPN_VER_MINOR) + OPENVPN_THROW(kotun_error, "version mismatch, pg=" << ver_string() << " installed=" << ver_string(ver_packed)); + + // Configure tun + const int status = ::ioctl(fd(), OVPN_DEV_INIT, &devconf.dc); + if (status < 0) + { + const int eno = errno; + OPENVPN_THROW(kotun_error, "OVPN_DEV_INIT failed: " << KovpnStats::errstr(eno)); + } + + if (devconf.dc.expire) + OPENVPN_LOG("NOTE: this evaluation build expires on " << date_time(devconf.dc.expire)); + + if (status == 1) + { + if (kovpn_stats) + kovpn_stats->set_fd(fd()); + if (first) + *first = true; + OPENVPN_LOG("KVER pg=" << ver_string() << " installed=" << ver_string(ver_packed)); + OPENVPN_LOG("IE_NAT=" << devconf.dc.ie_nat); + } + + return fd; + } + + static void set_rps_xps(const std::string& dev_name, const unsigned int dev_queue_index, Stop* async_stop) + { + // set RPS/XPS on iface + ProcFS::write_sys(fmt_qfn(dev_name, "rx", dev_queue_index, "rps_cpus"), "ffffffff\n", async_stop); + ProcFS::write_sys(fmt_qfn(dev_name, "rx", dev_queue_index, "rps_cpus"), "ffffffff\n", async_stop); + ProcFS::write_sys(fmt_qfn(dev_name, "rx", dev_queue_index, "rps_flow_cnt"), "1024\n", async_stop); + ProcFS::write_sys(fmt_qfn(dev_name, "tx", dev_queue_index, "xps_cpus"), "0\n", async_stop); + } + + static void disable_reverse_path_filter(const std::string& dev_name, Stop* async_stop) + { + // disable reverse path filter on iface + IPv4ReversePathFilter::write(dev_name, 0, async_stop); + } + + protected: + static int ver_major(const int ver_packed) + { + return (ver_packed >> 16) & 0xFF; + } + + static int ver_minor(const int ver_packed) + { + return (ver_packed >> 8) & 0xFF; + } + + static int ver_build(const int ver_packed) + { + return ver_packed & 0xFF; + } + + static std::string ver_string(const int major, const int minor, const int build) + { + return std::to_string(major) + '.' + std::to_string(minor) + '.' + std::to_string(build); + } + + static std::string ver_string(const int ver_packed) + { + return ver_string(ver_major(ver_packed), ver_minor(ver_packed), ver_build(ver_packed)); + } + + static std::string ver_string() + { + return ver_string(OVPN_VER_MAJOR, OVPN_VER_MINOR, OVPN_VER_BUILD); + } + + static std::string fmt_qfn(const std::string& dev, const std::string& type, int qnum, const std::string& bn) + { + std::ostringstream os; + os << "/sys/class/net/" << dev << "/queues/" << type << "-" << qnum << '/' << bn; + return os.str(); + } + }; + + template + struct TunClient : public TunIO, public virtual KovpnBase + { + typedef TunIO Base; + typedef RCPtr Ptr; + + // constructed by start() in in koudp.c/kotcp.c + TunClient(openvpn_io::io_context& io_context, + DevConf& devconf, + ReadHandler read_handler, + const Frame::Ptr& frame, + KovpnStats* kovpn_stats, // not persisted + bool *first) + : Base(read_handler, frame, SessionStats::Ptr()) + { + ScopedFD fd(open_kovpn(devconf, kovpn_stats, first)); + Base::name_ = devconf.dc.dev_name; + Base::stream = new openvpn_io::posix::stream_descriptor(io_context, fd.release()); + } + + // Attach UDP socket to ovpn instance + void socket_attach_udp(const int sock_fd) + { + API::socket_attach_udp(native_handle(), sock_fd); + } + + // New UDP client (used by dcocli) + int peer_new_udp_client(int fd, + const __u64 notify_per, + const unsigned int notify_seconds) + { + return API::peer_new_udp_client(native_handle(), fd, notify_per, notify_seconds); + } + + // Add routes (used by dcocli) + void peer_add_routes(const int peer_id, + const std::vector& rtvec) + { + API::peer_add_routes(native_handle(), peer_id, rtvec); + } + + // Send explicit-exit-notify message to peer + void peer_xmit_explicit_exit_notify(const int peer_id) + { + API::peer_xmit_explicit_exit_notify(native_handle(), peer_id); + } + + // Set peer crypto keys + void peer_keys_reset(const struct ovpn_peer_keys_reset *opk) + { + API::peer_keys_reset(native_handle(), opk); + } + + // Set keepalive + void peer_set_keepalive(const struct ovpn_peer_keepalive *ka) + { + API::peer_set_keepalive(native_handle(), ka); + } + + // Get status info + bool peer_get_status(struct ovpn_peer_status* ops) + { + return API::peer_get_status(native_handle(), ops); + } + + // Return kovpn fd + int native_handle() const + { + return Base::stream->native_handle(); + } + }; + + } +} + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/korekey.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/korekey.hpp new file mode 100644 index 0000000..6e7605b --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/korekey.hpp @@ -0,0 +1,195 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// OpenVPN 3 wrapper for kovpn crypto + +#ifndef OPENVPN_KOVPN_KOREKEY_H +#define OPENVPN_KOVPN_KOREKEY_H + +#include + +namespace openvpn { + namespace KoRekey { + + class Receiver : public virtual RC + { + public: + typedef RCPtr Ptr; + + virtual void rekey(const CryptoDCInstance::RekeyType type, + const Info& info) = 0; + + virtual void explicit_exit_notify() {} + }; + + class Instance : public CryptoDCInstance + { + public: + Instance(const Receiver::Ptr& rcv_arg, + const CryptoDCContext::Ptr& dc_context_delegate, + const unsigned int key_id, + const Frame::Ptr& frame) + : rcv(rcv_arg), + info(dc_context_delegate, key_id, frame) + { + } + + // Initialization + + virtual unsigned int defined() const override + { + return CIPHER_DEFINED|HMAC_DEFINED|EXPLICIT_EXIT_NOTIFY_DEFINED; + } + + virtual void init_cipher(StaticKey&& encrypt_key, + StaticKey&& decrypt_key) override + { + info.encrypt_cipher = std::move(encrypt_key); + info.decrypt_cipher = std::move(decrypt_key); + } + + virtual void init_hmac(StaticKey&& encrypt_key, + StaticKey&& decrypt_key) override + { + info.encrypt_hmac = std::move(encrypt_key); + info.decrypt_hmac = std::move(decrypt_key); + } + + virtual void init_pid(const int send_form, + const int recv_mode, + const int recv_form, + const char *recv_name, + const int recv_unit, + const SessionStats::Ptr& recv_stats_arg) override + { + info.tcp_linear = (recv_mode == PacketIDReceive::TCP_MODE); + } + + virtual void init_remote_peer_id(const int remote_peer_id) override + { + info.remote_peer_id = remote_peer_id; + } + + virtual bool consider_compression(const CompressContext& comp_ctx) override + { + info.comp_ctx = comp_ctx; + return false; + } + + // Rekeying + + virtual void rekey(const RekeyType type) override + { + rcv->rekey(type, info); + } + + virtual void explicit_exit_notify() override + { + rcv->explicit_exit_notify(); + } + + // Encrypt/Decrypt -- data channel handled by kernel, so these methods + // should never be reached. + + // returns true if packet ID is close to wrapping + virtual bool encrypt(BufferAllocated& buf, const PacketID::time_t now, const unsigned char *op32) override + { + throw korekey_error("encrypt"); + } + + virtual Error::Type decrypt(BufferAllocated& buf, const PacketID::time_t now, const unsigned char *op32) override + { + throw korekey_error("decrypt"); + } + + private: + Receiver::Ptr rcv; + Info info; + }; + + class Context : public CryptoDCContext + { + public: + Context(const CryptoAlgs::Type cipher, + const CryptoAlgs::Type digest, + CryptoDCFactory& dc_factory_delegate, + const Receiver::Ptr& rcv_arg, + const Frame::Ptr& frame_arg) + : rcv(rcv_arg), + dc_context_delegate(dc_factory_delegate.new_obj(cipher, digest)), + frame(frame_arg) + { + Key::validate(cipher, digest); + } + + virtual CryptoDCInstance::Ptr new_obj(const unsigned int key_id) override + { + return new Instance(rcv, dc_context_delegate, key_id, frame); + } + + // Info for ProtoContext::options_string + + virtual Info crypto_info() override + { + return dc_context_delegate->crypto_info(); + } + + // Info for ProtoContext::link_mtu_adjust + + virtual size_t encap_overhead() const override + { + return dc_context_delegate->encap_overhead(); + } + + private: + Receiver::Ptr rcv; + CryptoDCContext::Ptr dc_context_delegate; + Frame::Ptr frame; + }; + + class Factory : public CryptoDCFactory + { + public: + Factory(const CryptoDCFactory::Ptr& dc_factory_delegate_arg, + const Receiver::Ptr& rcv_arg, + const Frame::Ptr& frame_arg) + : dc_factory_delegate(dc_factory_delegate_arg), + rcv(rcv_arg), + frame(frame_arg) + { + } + + virtual CryptoDCContext::Ptr new_obj(const CryptoAlgs::Type cipher, + const CryptoAlgs::Type digest) override + { + return new Context(cipher, digest, *dc_factory_delegate, rcv, frame); + } + + private: + CryptoDCFactory::Ptr dc_factory_delegate; + Receiver::Ptr rcv; + Frame::Ptr frame; + }; + + } +} + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/koroute.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/koroute.hpp new file mode 100644 index 0000000..e300a43 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/koroute.hpp @@ -0,0 +1,69 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// OpenVPN 3 wrapper for kovpn + +#ifndef OPENVPN_KOVPN_KOROUTE_H +#define OPENVPN_KOVPN_KOROUTE_H + +#include +#include + +#include +#include + +namespace openvpn { + namespace KoRoute { + inline struct ovpn_route from_route(const IP::Route& r) + { + struct ovpn_route ret; + ret.prefix_len = r.prefix_len; + ret.addr.v6 = (r.addr.version() == IP::Addr::V6); + switch (r.addr.version()) + { + case IP::Addr::V6: + ret.addr.u.a6 = r.addr.to_ipv6_nocheck().to_in6_addr(); + break; + case IP::Addr::V4: + ret.addr.u.a4 = r.addr.to_ipv4_nocheck().to_in_addr(); + break; + default: + throw IP::ip_exception("route address unspecified"); + } + return ret; + } + + inline struct ovpn_route *from_routes(const std::vector& rtvec) + { + if (rtvec.size()) + { + std::unique_ptr routes(new ovpn_route[rtvec.size()]); + for (size_t i = 0; i < rtvec.size(); ++i) + routes[i] = from_route(rtvec[i]); + return routes.release(); + } + else + return nullptr; + } + } +} + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kostats.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kostats.hpp new file mode 100644 index 0000000..5c494e4 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kostats.hpp @@ -0,0 +1,166 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#ifndef OPENVPN_KOVPN_KOSTATS_H +#define OPENVPN_KOVPN_KOSTATS_H + +#include // for std::min, std::max +#include +#include + +#include + +#include +#include +#include +#include + +namespace openvpn { + namespace kostats_private { +# include + } + + class KovpnStats + { + public: + void set_fd(const int fd) + { + kovpn_fd.store(fd, std::memory_order_relaxed); + } + + void output_stats(std::ostream& os) const + { + struct ovpn_stats stats; + if (::ioctl(get_fd(), OVPN_DEV_STATS, &stats) < 0) + return; + os << "STAT.BYTES_IN," << (stats.rx_bytes + cc_rx_bytes.load(std::memory_order_relaxed)) << '\n'; + os << "STAT.BYTES_OUT," << stats.tx_bytes << '\n'; + } + + void output_percpu(std::ostream& os) const + { + std::unique_ptr pcs; + unsigned int stats_cap = std::max(16, n_cores()); + for (int i = 0; i < 2; ++i) + { + const size_t pcs_size = sizeof(struct ovpn_percpu_stats) + + sizeof(struct ovpn_percpu_stat) * stats_cap; + pcs.reset((struct ovpn_percpu_stats *) ::operator new(pcs_size)); + pcs->total_stats = 0; + pcs->n_stats = stats_cap; + if (::ioctl(get_fd(), OVPN_PERCPU_STATS, (void *)pcs.get()) < 0) + return; + stats_cap = std::max(stats_cap, pcs->total_stats); + if (pcs->total_stats <= pcs->n_stats) + break; + } + const size_t n = std::min(pcs->total_stats, pcs->n_stats); + for (size_t i = 0; i < n; ++i) + { + const struct ovpn_percpu_stat *s = &pcs->stats[i]; + if (s->rx_bytes || s->tx_bytes) + { + os << "KOVPN.STAT.CPU-" << i << ".BYTES_IN," << s->rx_bytes << '\n'; + os << "KOVPN.STAT.CPU-" << i << ".BYTES_OUT," << s->tx_bytes << '\n'; + } + } + } + + void output_err_counters(std::ostream& os) const + { + std::unique_ptr esp; + unsigned int stats_cap = 128; + for (int i = 0; i < 2; ++i) + { + const size_t es_size = sizeof(struct ovpn_err_stats) + + sizeof(struct ovpn_err_stat) * stats_cap; + esp.reset((struct ovpn_err_stats *) ::operator new(es_size)); + esp->total_stats = 0; + esp->n_stats = stats_cap; + if (::ioctl(get_fd(), OVPN_ERR_STATS, (void *)esp.get()) < 0) + return; + stats_cap = std::max(stats_cap, esp->total_stats); + if (esp->total_stats <= esp->n_stats) + break; + } + const size_t n = std::min(esp->total_stats, esp->n_stats); + for (size_t i = 0; i < n; ++i) + { + const struct ovpn_err_stat *s = &esp->stats[i]; + os << "KOVPN"; + const char *cat = cat_name(s->category); + if (cat) + { + os << '.'; + os << cat; + } + const char *err = err_name(s->errcode); + if (err) + { + os << '.'; + os << err; + } + os << ',' << s->count << '\n'; + } + } + + void increment_cc_rx_bytes(const std::uint64_t value) + { + cc_rx_bytes.fetch_add(value, std::memory_order_relaxed); + } + + static const char *errstr(const size_t i) + { + const char *ret = err_name(i); + if (ret) + return ret; + else + return ""; + } + + private: + static const char *err_name(const size_t i) + { + if (i < array_size(kostats_private::ovpn_err_names)) + return kostats_private::ovpn_err_names[i]; + else + return nullptr; + } + + static const char *cat_name(const size_t i) + { + if (i < array_size(kostats_private::ovpn_errcat_names)) + return kostats_private::ovpn_errcat_names[i]; + else + return nullptr; + } + + int get_fd() const + { + return kovpn_fd.load(std::memory_order_relaxed); + } + + std::atomic kovpn_fd{-1}; + std::atomic cc_rx_bytes{0}; + }; +} + +#endif diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kovpn.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kovpn.hpp new file mode 100644 index 0000000..4fc8f55 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/kovpn/kovpn.hpp @@ -0,0 +1,38 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// OpenVPN 3 wrapper for kovpn + +#ifndef OPENVPN_KOVPN_KOVPN_HPP +#define OPENVPN_KOVPN_KOVPN_HPP + +// Not including this file causes redefinition errors +// when the sys/ and linux/ headers below are included +// before Asio. +#include + +#include + +extern "C" { +#include +} + +#endif diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/legal/copyright.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/legal/copyright.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/legal/copyright.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/legal/copyright.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/linux/core.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/core.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/linux/core.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/core.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/linux/daemon_alive.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/daemon_alive.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/linux/daemon_alive.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/daemon_alive.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/procfs.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/procfs.hpp new file mode 100644 index 0000000..e20341e --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/linux/procfs.hpp @@ -0,0 +1,108 @@ +// Private Gateway +// Copyright (C) 2012-2017 OpenVPN Technologies, Inc. +// All rights reserved + +#ifndef OPENVPN_LINUX_PROCFS_H +#define OPENVPN_LINUX_PROCFS_H + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace openvpn { + + class ProcFS : public Action + { + public: + OPENVPN_EXCEPTION(procfs_error); + + ProcFS(std::string fn_arg, std::string text_arg) + : fn(std::move(fn_arg)), + text(std::move(text_arg)) + { + } + + virtual void execute(std::ostream& os) override + { + os << to_string() << std::endl; + try { + write_sys(fn, text); + } + catch (const std::exception& e) + { + os << "ProcFS exception: " << e.what() << std::endl; + } + } + + virtual std::string to_string() const override + { + return to_string(fn, text); + } + + static std::string to_string(const std::string& fn, const std::string& text) + { + return "ProcFS: " + fn + " -> " + string::trim_crlf_copy(text); + } + + static void write_sys(const std::string& fn, const std::string& text, Stop* async_stop=nullptr) + { + //OPENVPN_LOG(to_string(fn, text)); + + const unsigned int n_retries = 200; + const unsigned int milliseconds_per_retry = 100; + volatile bool stop = false; + + // allow asynchronous stop + Stop::Scope stop_scope(async_stop, [&stop]() { + stop = true; + }); + + for (unsigned int i = 0; i < n_retries && !stop; ++i) + { + if (file_exists(fn)) + { + write_string(fn, text); + return; + } + sleep_milliseconds(milliseconds_per_retry); + } + if (stop) + OPENVPN_THROW(procfs_error, "file " << fn << " : aborting write attempt due to stop signal"); + else + OPENVPN_THROW(procfs_error, "file " << fn << " failed to exist within " << (n_retries * milliseconds_per_retry / 1000) << " seconds"); + } + + private: + std::string fn; + std::string text; + }; + + class IPv4ReversePathFilter : public ProcFS + { + public: + IPv4ReversePathFilter(const std::string& dev, const unsigned int value) + : ProcFS(key_fn(dev), openvpn::to_string(value)) + { + OPENVPN_LOG("IPv4ReversePathFilter " << dev << " -> " << value); + } + + static void write(const std::string& dev, const unsigned int value, Stop* stop=nullptr) + { + ProcFS::write_sys(key_fn(dev), openvpn::to_string(value), stop); + } + + private: + static std::string key_fn(const std::string& dev) + { + return printfmt("/proc/sys/net/ipv4/conf/%s/rp_filter", dev); + } + }; +} + +#endif diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbasesimple.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbasesimple.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbasesimple.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbasesimple.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbasesimplemac.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbasesimplemac.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logbasesimplemac.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logbasesimplemac.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logdatetime.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logdatetime.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logdatetime.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logdatetime.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/lognull.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/lognull.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/lognull.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/lognull.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logperiod.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logperiod.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logperiod.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logperiod.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logsimple.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logsimple.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logsimple.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logsimple.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/logthread.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logthread.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/logthread.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/logthread.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/log/sessionstats.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/sessionstats.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/log/sessionstats.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/log/sessionstats.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/api.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/api.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/api.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/api.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/cipher.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/cipher.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/cipher.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/cipher.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/ciphergcm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/ciphergcm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/ciphergcm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/ciphergcm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/digest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/digest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/digest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/digest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/hmac.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/hmac.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/crypto/hmac.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/crypto/hmac.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/dh.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/dh.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/dh.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/dh.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp similarity index 96% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp index ce7b674..3f2158f 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/pkctx.hpp @@ -68,17 +68,14 @@ namespace openvpn { switch (mbedtls_pk_get_type(ctx)) { case MBEDTLS_PK_RSA: + case MBEDTLS_PK_RSA_ALT: + case MBEDTLS_PK_RSASSA_PSS: return SSLConfigAPI::PK_RSA; case MBEDTLS_PK_ECKEY: - return SSLConfigAPI::PK_ECKEY; case MBEDTLS_PK_ECKEY_DH: - return SSLConfigAPI::PK_ECKEY_DH; + return SSLConfigAPI::PK_EC; case MBEDTLS_PK_ECDSA: return SSLConfigAPI::PK_ECDSA; - case MBEDTLS_PK_RSA_ALT: - return SSLConfigAPI::PK_RSA_ALT; - case MBEDTLS_PK_RSASSA_PSS: - return SSLConfigAPI::PK_RSASSA_PSS; case MBEDTLS_PK_NONE: return SSLConfigAPI::PK_NONE; default: diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp similarity index 91% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp index 11b8434..81b2632 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/x509cert.hpp @@ -93,14 +93,14 @@ namespace openvpn { size_t olen = 0; int ret; - ret = mbedtls_pem_write_buffer(begin_cert.c_str(), end_cert.c_str(), der, + ret = mbedtls_pem_write_buffer(begin_cert, end_cert, der, der_size, NULL, 0, &olen); if (ret != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) throw MbedTLSException("X509Cert::extract: can't calculate PEM size"); BufferAllocated buff(olen, 0); - ret = mbedtls_pem_write_buffer(begin_cert.c_str(), end_cert.c_str(), der, + ret = mbedtls_pem_write_buffer(begin_cert, end_cert, der, der_size, buff.data(), buff.max_size(), &olen); if (ret) throw MbedTLSException("X509Cert::extract: can't write PEM buffer"); @@ -158,12 +158,9 @@ namespace openvpn { } } - static const std::string begin_cert; - static const std::string end_cert; + constexpr static const char* begin_cert = "-----BEGIN CERTIFICATE-----\n";; + constexpr static const char* end_cert = "-----END CERTIFICATE-----\n";; }; - - const std::string X509Cert::begin_cert = "-----BEGIN CERTIFICATE-----\n"; - const std::string X509Cert::end_cert = "-----END CERTIFICATE-----\n"; } } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/x509crl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/x509crl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/pki/x509crl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/pki/x509crl.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/ssl/sslctx.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/ssl/sslctx.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/ssl/sslctx.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/ssl/sslctx.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/error.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/pkcs1.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/pkcs1.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/pkcs1.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/pkcs1.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/rand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/rand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/rand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/rand.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/selftest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/selftest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/mbedtls/util/selftest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/mbedtls/util/selftest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/enumiface.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/enumiface.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/enumiface.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/enumiface.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/hwaddr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/hwaddr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/hwaddr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/hwaddr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/ios/net-route.h b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/ios/net-route.h similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/ios/net-route.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/ios/net-route.h diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/linux/gw.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/linux/gw.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/linux/gw.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/linux/gw.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/linux/route.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/linux/route.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/netconf/linux/route.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/netconf/linux/route.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/bio/bio_memq_dgram.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/bio/bio_memq_dgram.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/bio/bio_memq_dgram.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/bio/bio_memq_dgram.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/bio/bio_memq_stream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/bio/bio_memq_stream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/bio/bio_memq_stream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/bio/bio_memq_stream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/api.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/api.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/api.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/api.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/cipher.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/cipher.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/cipher.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/cipher.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/ciphergcm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/ciphergcm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/ciphergcm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/ciphergcm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/digest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/digest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/digest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/digest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/hmac.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/hmac.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/crypto/hmac.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/crypto/hmac.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/crl.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/crl.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/crl.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/crl.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/dh.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/dh.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/dh.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/dh.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp similarity index 86% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp index b8ba19d..2f1324a 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/pkey.hpp @@ -62,6 +62,38 @@ namespace openvpn { bool defined() const { return pkey_ != nullptr; } EVP_PKEY* obj() const { return pkey_; } + SSLConfigAPI::PKType key_type() const + { + switch (EVP_PKEY_id(pkey_)) + { + case EVP_PKEY_RSA: + case EVP_PKEY_RSA2: + return SSLConfigAPI::PK_RSA; + case EVP_PKEY_EC: + return SSLConfigAPI::PK_EC; + case EVP_PKEY_DSA: + case EVP_PKEY_DSA1: + case EVP_PKEY_DSA2: + case EVP_PKEY_DSA3: + case EVP_PKEY_DSA4: + return SSLConfigAPI::PK_DSA; + case EVP_PKEY_NONE: + return SSLConfigAPI::PK_NONE; + default: + return SSLConfigAPI::PK_UNKNOWN; + } + } + + size_t key_length() const + { + int ret = i2d_PrivateKey(pkey_, NULL); + if (ret < 0) + return 0; + + /* convert to bits */ + return ret * 8; + } + void set_private_key_password(const std::string& pwd) { priv_key_pwd = pwd; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/x509.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/x509.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/x509.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/x509.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/x509store.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/x509store.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/pki/x509store.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/pki/x509store.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/sign/pkcs7verify.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/sign/pkcs7verify.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/sign/pkcs7verify.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/sign/pkcs7verify.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/sign/verify.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/sign/verify.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/sign/verify.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/sign/verify.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp similarity index 96% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp index ead66ed..540482f 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/ssl/sslctx.hpp @@ -132,7 +132,7 @@ namespace openvpn { virtual void load_crl(const std::string& crl_txt) { - throw ssl_options_error("CRL not implemented yet in OpenSSL driver"); // fixme + ca.parse_pem(crl_txt, "crl"); } virtual void load_cert(const std::string& cert_txt) @@ -159,42 +159,49 @@ namespace openvpn { virtual std::string extract_ca() const { - throw ssl_options_error("extract_ca not implemented yet in OpenSSL driver"); // fixme + return ca.certs.render_pem(); } virtual std::string extract_crl() const { - throw ssl_options_error("CRL not implemented yet in OpenSSL driver"); // fixme + return ca.crls.render_pem(); } virtual std::string extract_cert() const { - throw ssl_options_error("extract_cert not implemented yet in OpenSSL driver"); // fixme + return cert.render_pem(); } virtual std::vector extract_extra_certs() const { - throw ssl_options_error("extract_extra_certs not implemented yet in OpenSSL driver"); // fixme + std::vector ret; + + for (auto const& cert : extra_certs) + ret.push_back(cert->render_pem()); + + return ret; } virtual std::string extract_private_key() const { - throw ssl_options_error("extract_priv_key not implemented yet in OpenSSL driver"); // fixme + return pkey.render_pem(); } virtual std::string extract_dh() const { - throw ssl_options_error("extract_dh not implemented yet in OpenSSL driver"); // fixme + return dh.render_pem(); } virtual PKType private_key_type() const { - throw ssl_options_error("private_key_type not implemented yet in OpenSSL driver"); // fixme + if (!pkey.defined()) + return PK_NONE; + return pkey.key_type(); } virtual size_t private_key_length() const { - throw ssl_options_error("private_key_length not implemented yet in OpenSSL driver"); // fixme + return pkey.key_length(); } virtual void set_frame(const Frame::Ptr& frame_arg) @@ -300,7 +307,8 @@ namespace openvpn { virtual std::string validate_crl(const std::string& crl_txt) const { - throw ssl_options_error("CRL not implemented yet in OpenSSL driver"); // fixme + OpenSSLPKI::CRL crl(crl_txt); + return crl.render_pem(); } virtual void load(const OptionList& opt, const unsigned int lflags) @@ -322,6 +330,13 @@ namespace openvpn { load_ca(ca_txt, true); } + // CRL + { + const std::string crl_txt = opt.cat("crl-verify"); + if (!crl_txt.empty()) + load_crl(crl_txt); + } + // local cert/key if (local_cert_enabled) { @@ -387,7 +402,7 @@ namespace openvpn { private: Mode mode; - CertCRLList ca; // from OpenVPN "ca" option + CertCRLList ca; // from OpenVPN "ca" and "crl-verify" option OpenSSLPKI::X509 cert; // from OpenVPN "cert" option OpenSSLPKI::X509List extra_certs; // from OpenVPN "extra-certs" option OpenSSLPKI::PKey pkey; // private key @@ -926,10 +941,41 @@ namespace openvpn { #endif } - // tls-cert-profile is not implemented yet in OpenSSL (fixme), - // so throw exception if the setting is anything other than LEGACY. + /* HAVE_SSL_CTX_SET_SECURITY_LEVEL exists from OpenSSL-1.1.0 up */ +#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL + switch(TLSCertProfile::default_if_undef(config->tls_cert_profile)) + { + case TLSCertProfile::UNDEF: + OPENVPN_THROW(ssl_context_error, + "OpenSSLContext: undefined tls-cert-profile"); + break; +#ifdef OPENVPN_USE_TLS_MD5 + case TLSCertProfile::INSECURE: + SSL_CTX_set_security_level(ctx, 0); + break; +#endif + case TLSCertProfile::LEGACY: + SSL_CTX_set_security_level(ctx, 1); + break; + case TLSCertProfile::PREFERRED: + SSL_CTX_set_security_level(ctx, 2); + break; + case TLSCertProfile::SUITEB: + SSL_CTX_set_security_level(ctx, 3); + break; + default: + OPENVPN_THROW(ssl_context_error, + "OpenSSLContext: unexpected tls-cert-profile value"); + break; + } +#else + // when OpenSSL does not CertProfile support we force the user to set 'legacy' if (TLSCertProfile::default_if_undef(config->tls_cert_profile) != TLSCertProfile::LEGACY) - OPENVPN_THROW(ssl_context_error, "OpenSSLContext: tls-cert-profile not implemented yet"); + { + OPENVPN_THROW(ssl_context_error, + "OpenSSLContext: tls-cert-profile not supported by this OpenSSL build. Use 'legacy' instead"); + } +#endif if (config->local_cert_enabled) { diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/engine.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/engine.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/engine.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/engine.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/error.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/error.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/error.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/error.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/init.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/init.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/init.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/init.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/rand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/rand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/rand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/rand.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/tokenencrypt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/tokenencrypt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/openssl/util/tokenencrypt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/openssl/util/tokenencrypt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/options/continuation.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/continuation.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/options/continuation.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/continuation.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/options/merge.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/merge.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/options/merge.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/merge.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/options/sanitize.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/sanitize.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/options/sanitize.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/sanitize.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/options/servpush.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/servpush.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/options/servpush.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/options/servpush.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/pki/cclist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/cclist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/pki/cclist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/cclist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/pki/epkibase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/epkibase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/pki/epkibase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/epkibase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/pki/pkcs1.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/pkcs1.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/pki/pkcs1.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/pkcs1.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/pki/x509track.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/x509track.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/pki/x509track.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/pki/x509track.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/httpdigest.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/httpdigest.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/httpdigest.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/httpdigest.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/ntlm.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/ntlm.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/ntlm.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/ntlm.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/proxyauth.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/proxyauth.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/proxy/proxyauth.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/proxy/proxyauth.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/random/devurand.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/devurand.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/random/devurand.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/devurand.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/random/mtrandapi.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/mtrandapi.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/random/mtrandapi.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/mtrandapi.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/random/rand2.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/rand2.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/random/rand2.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/rand2.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/random/randapi.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/randapi.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/random/randapi.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/randapi.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/random/randbytestore.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/randbytestore.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/random/randbytestore.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/random/randbytestore.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relack.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relack.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relack.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relack.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relcommon.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relcommon.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relcommon.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relcommon.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relrecv.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relrecv.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relrecv.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relrecv.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relsend.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relsend.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/reliable/relsend.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/reliable/relsend.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/listenlist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/listenlist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/listenlist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/listenlist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/manage.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/manage.hpp similarity index 95% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/manage.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/manage.hpp index d1ce2a9..e6a0da7 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/manage.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/manage.hpp @@ -55,7 +55,7 @@ namespace openvpn { virtual void auth_request(const AuthCreds::Ptr& auth_creds, const AuthCert::Ptr& auth_cert, const PeerAddr::Ptr& peer_addr) = 0; - virtual void push_request(const ProtoContext::Config::Ptr& pconf) = 0; + virtual void push_request(ProtoContext::Config::Ptr pconf) = 0; // INFO notification virtual void info_request(const std::string& imsg) = 0; @@ -85,8 +85,7 @@ namespace openvpn { // set ACL index for user virtual void set_acl_index(const int acl_index, const std::string* username, - const bool challenge, - const bool throw_on_error) = 0; + const bool challenge) = 0; // notify of local user properties update virtual void userprop_local_update() = 0; @@ -119,6 +118,9 @@ namespace openvpn { // schedule a low-level connection disconnect in seconds virtual void schedule_disconnect(const unsigned int seconds) = 0; + // schedule an auth pending disconnect in seconds + virtual void schedule_auth_pending_timeout(const unsigned int seconds) = 0; + // set up relay to target virtual void relay(const IP::Addr& target, const int port) = 0; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/peeraddr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/peeraddr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/peeraddr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/peeraddr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/peerstats.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/peerstats.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/peerstats.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/peerstats.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/servhalt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/servhalt.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/servhalt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/servhalt.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/servproto.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/servproto.hpp similarity index 91% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/servproto.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/servproto.hpp index 547a866..e638610 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/servproto.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/servproto.hpp @@ -345,16 +345,10 @@ namespace openvpn { Unicode::UTF8_FILTER); if (msg == "PUSH_REQUEST") { - if (!did_push) - { - did_push = true; - if (get_management()) - ManLink::send->push_request(Base::conf_ptr()); - else - { - auth_failed("no management provider", false); - } - } + if (get_management()) + ManLink::send->push_request(Base::conf_ptr()); + else + auth_failed("no management provider", false); } else if (string::starts_with(msg, "INFO,")) { @@ -375,11 +369,14 @@ namespace openvpn { virtual void relay(const IP::Addr& target, const int port) override { + if (halt || disconnect_type == DT_HALT_RESTART) + return; + Base::update_now(); - if (TunLink::send && !relay_transition) + if (TunLink::send && (disconnect_type < DT_RELAY_TRANSITION)) { - relay_transition = true; + disconnect_type = DT_RELAY_TRANSITION; TunLink::send->relay(target, port); disconnect_in(Time::Duration::seconds(10)); // not a real disconnect, just complete transition to relay } @@ -398,9 +395,15 @@ namespace openvpn { virtual void push_reply(std::vector&& push_msgs) override { - if (halt || relay_transition || !Base::primary_defined()) + if (halt || (disconnect_type >= DT_RELAY_TRANSITION) || !Base::primary_defined()) return; + if (disconnect_type == DT_AUTH_PENDING) + { + disconnect_type = DT_NONE; + cancel_disconnect(); + } + Base::update_now(); if (get_tun()) @@ -432,7 +435,7 @@ namespace openvpn { const std::string& reason, const bool tell_client) override { - if (halt || did_client_halt_restart) + if (halt || disconnect_type == DT_HALT_RESTART) return; Base::update_now(); @@ -498,7 +501,7 @@ namespace openvpn { if (type != HaltRestart::RESTART_PASSIVE) { - did_client_halt_restart = true; + disconnect_type = DT_HALT_RESTART; disconnect_in(Time::Duration::seconds(1)); } @@ -514,13 +517,23 @@ namespace openvpn { virtual void schedule_disconnect(const unsigned int seconds) { - if (halt || did_client_halt_restart) + if (halt || disconnect_type == DT_HALT_RESTART) return; Base::update_now(); disconnect_in(Time::Duration::seconds(seconds)); set_housekeeping_timer(); } + virtual void schedule_auth_pending_timeout(const unsigned int seconds) + { + if (halt || (disconnect_type >= DT_RELAY_TRANSITION) || !seconds) + return; + Base::update_now(); + disconnect_type = DT_AUTH_PENDING; + disconnect_in(Time::Duration::seconds(seconds)); + set_housekeeping_timer(); + } + virtual void post_cc_msg(BufferPtr&& msg) override { if (halt || !Base::primary_defined()) @@ -582,6 +595,11 @@ namespace openvpn { disconnect_at = now() + dur; } + void cancel_disconnect() + { + disconnect_at = Time::infinite(); + } + void housekeeping_callback(const openvpn_io::error_code& e) { try { @@ -596,10 +614,21 @@ namespace openvpn { invalidation_error(Base::invalidation_reason()); else if (now() >= disconnect_at) { - if (relay_transition && !did_client_halt_restart) - Base::pre_destroy(); - else - error("disconnect triggered"); + switch (disconnect_type) + { + case DT_HALT_RESTART: + error("disconnect triggered"); + break; + case DT_RELAY_TRANSITION: + Base::pre_destroy(); + break; + case DT_AUTH_PENDING: + auth_failed("Auth Pending Timeout", true); + break; + default: + error("unknown disconnect"); + break; + } } else set_housekeeping_timer(); @@ -676,9 +705,15 @@ namespace openvpn { openvpn_io::io_context& io_context; bool halt = false; - bool did_push = false; - bool did_client_halt_restart = false; - bool relay_transition = false; + + // higher values are higher priority + enum DisconnectType { + DT_NONE=0, + DT_AUTH_PENDING, + DT_RELAY_TRANSITION, + DT_HALT_RESTART, + }; + int disconnect_type = DT_NONE; PeerAddr::Ptr peer_addr; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/vpnservnetblock.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/vpnservnetblock.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/vpnservnetblock.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/vpnservnetblock.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/server/vpnservpool.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/vpnservpool.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/server/vpnservpool.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/server/vpnservpool.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/datalimit.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/datalimit.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/datalimit.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/datalimit.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/is_openvpn_protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/is_openvpn_protocol.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/is_openvpn_protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/is_openvpn_protocol.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/kuparse.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/kuparse.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/kuparse.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/kuparse.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/mssparms.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/mssparms.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/mssparms.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/mssparms.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/nscert.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/nscert.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/nscert.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/nscert.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/peerinfo.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/peerinfo.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/peerinfo.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/peerinfo.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/proto.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/proto.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/proto.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/proto.hpp index 7a7b2c1..e3c1b5e 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/proto.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/proto.hpp @@ -559,7 +559,18 @@ namespace openvpn { new_comp = o->get(1, 128); CompressContext::Type meth = CompressContext::parse_method(new_comp); if (meth != CompressContext::NONE) - comp_ctx = CompressContext(pco.is_comp() ? meth : CompressContext::stub(meth), pco.is_comp_asym()); + { + // if compression is not availabe, CompressContext ctor throws an exception + if (pco.is_comp()) + comp_ctx = CompressContext(meth, pco.is_comp_asym()); + else + { + // server pushes compression but client has compression disabled + // degrade to asymmetric compression (downlink only) + comp_ctx = CompressContext(meth, true); + OPENVPN_LOG("Server has pushed compressor " << comp_ctx.str() << ", but client has disabled compression, switching to asymmetric"); + } + } } else { @@ -3177,7 +3188,7 @@ namespace openvpn { // configuration const Config& conf() const { return *config; } Config& conf() { return *config; } - const Config::Ptr& conf_ptr() const { return config; } + Config::Ptr conf_ptr() const { return config; } // stats SessionStats& stat() const { return *stats; } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/proto_context_options.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/proto_context_options.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/proto_context_options.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/proto_context_options.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/protostack.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/protostack.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/protostack.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/protostack.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/psid.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/psid.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/psid.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/psid.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslapi.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslapi.hpp similarity index 96% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslapi.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslapi.hpp index 378a6e1..d1e0656 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslapi.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslapi.hpp @@ -102,12 +102,10 @@ namespace openvpn { enum PKType { PK_UNKNOWN = 0, PK_NONE, + PK_DSA, PK_RSA, - PK_ECKEY, - PK_ECKEY_DH, + PK_EC, PK_ECDSA, - PK_RSA_ALT, - PK_RSASSA_PSS, }; enum LoadFlags { @@ -125,18 +123,14 @@ namespace openvpn { { case PK_NONE: return "None"; + case PK_DSA: + return "DSA"; case PK_RSA: return "RSA"; - case PK_ECKEY: + case PK_EC: return "EC"; - case PK_ECKEY_DH: - return "EC_DH"; case PK_ECDSA: return "ECDSA"; - case PK_RSA_ALT: - return "RSA_ALT"; - case PK_RSASSA_PSS: - return "RSASSA_PSS"; case PK_UNKNOWN: default: return "Unknown"; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslchoose.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslchoose.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslchoose.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslchoose.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslconsts.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslconsts.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/sslconsts.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/sslconsts.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/ssllog.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/ssllog.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/ssllog.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/ssllog.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tls_cert_profile.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tls_cert_profile.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tls_cert_profile.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tls_cert_profile.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tls_remote.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tls_remote.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tls_remote.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tls_remote.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tlsprf.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tlsprf.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tlsprf.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tlsprf.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tlsver.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tlsver.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/ssl/tlsver.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/ssl/tlsver.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/asiotimer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/asiotimer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/asiotimer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/asiotimer.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/coarsetime.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/coarsetime.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/coarsetime.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/coarsetime.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/durhelper.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/durhelper.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/durhelper.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/durhelper.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/epoch.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/epoch.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/epoch.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/epoch.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/time.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/time.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/time.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/time.hpp index 2400585..604806f 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/time.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/time.hpp @@ -268,6 +268,8 @@ namespace openvpn { { if (!defined()) return "UNDEF-TIME"; + if (is_infinite()) + return "INF"; const double df = delta_float(t); std::string ret; if (df >= 0.0) diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/timestr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/timestr.hpp similarity index 74% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/time/timestr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/timestr.hpp index ec20644..3b41065 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/time/timestr.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/time/timestr.hpp @@ -25,13 +25,15 @@ #define OPENVPN_TIME_TIMESTR_H #include -#include // for std::strlen +#include // for std::strlen and std::memset #include #include #include +#include // for std::uint64_t #include #include +#include #if defined(OPENVPN_PLATFORM_WIN) #include @@ -72,6 +74,7 @@ namespace openvpn { struct tm lt; char buf[64]; + std::memset(<, 0, sizeof(lt)); if (!localtime_r(&t, <)) return "LOCALTIME_ERROR"; if (!asctime_r(<, buf)) @@ -82,6 +85,22 @@ namespace openvpn { return std::string(buf); } + inline std::string date_time_utc(const time_t t) + { + struct tm lt; + char buf[64]; + + std::memset(<, 0, sizeof(lt)); + if (!gmtime_r(&t, <)) + return "GMTIME_ERROR"; + if (!asctime_r(<, buf)) + return "ASCTIME_ERROR"; + const size_t len = std::strlen(buf); + if (len > 0 && buf[len-1] == '\n') + buf[len-1] = '\0'; + return std::string(buf); + } + // msecs == false : Tue Feb 17 01:24:30 2015 // msecs == true : Tue Feb 17 01:24:30.123 2015 inline std::string date_time(const struct timeval *tv, const bool msecs) @@ -93,9 +112,9 @@ namespace openvpn { const size_t pos = dt.find_last_of(':'); if (pos != std::string::npos && pos + 3 < dt.length() - && isdigit(dt[pos+1]) - && isdigit(dt[pos+2]) - && isspace(dt[pos+3])) + && string::is_digit(dt[pos+1]) + && string::is_digit(dt[pos+2]) + && string::is_space(dt[pos+3])) { char ms[5]; ::snprintf(ms, sizeof(ms), ".%03u", static_cast(tv->tv_usec / 1000)); @@ -105,6 +124,28 @@ namespace openvpn { return dt; } + inline std::string nanosec_time_to_string(const std::uint64_t ns_time) + { + const std::uint64_t sec = ns_time / std::uint64_t(1000000000); + const std::uint64_t ns = ns_time % std::uint64_t(1000000000); + + const std::string dt = date_time_utc(sec); + + // find correct position in string to insert nanoseconds + const size_t pos = dt.find_last_of(':'); + if (pos != std::string::npos + && pos + 3 < dt.length() + && string::is_digit(dt[pos+1]) + && string::is_digit(dt[pos+2]) + && string::is_space(dt[pos+3])) + { + char ms[11]; + ::snprintf(ms, sizeof(ms), ".%09u", (unsigned int)ns); + return dt.substr(0, pos+3) + ms + dt.substr(pos+3); + } + return dt; + } + inline std::string date_time() { struct timeval tv; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/altproxy.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/altproxy.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/altproxy.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/altproxy.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/extern/config.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/extern/config.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/extern/config.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/extern/config.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/extern/fw.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/extern/fw.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/extern/fw.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/extern/fw.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/httpcli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/httpcli.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/httpcli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/httpcli.hpp index 83c865f..5b48629 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/httpcli.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/httpcli.hpp @@ -248,6 +248,7 @@ namespace openvpn { resolver.async_resolve(proxy_host, proxy_port, [self=Ptr(this)](const openvpn_io::error_code& error, openvpn_io::ip::tcp::resolver::results_type results) { + OPENVPN_ASYNC_HANDLER; self->do_resolve_(error, results); }); } @@ -927,6 +928,7 @@ namespace openvpn { socket.set_option(openvpn_io::ip::tcp::no_delay(true)); socket.async_connect(server_endpoint, [self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->start_impl_(error); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/relay.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/relay.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/relay.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/relay.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp similarity index 92% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp index ba3c33a..3a273bf 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/tcpcli.hpp @@ -93,7 +93,9 @@ namespace openvpn { { halt = false; stop_requeueing = false; - if (config->remote_list->endpoint_available(&server_host, &server_port, nullptr)) + if (config->remote_list->endpoint_available(&server_host, + &server_port, + &server_protocol)) { start_connect_(); } @@ -103,6 +105,7 @@ namespace openvpn { resolver.async_resolve(server_host, server_port, [self=Ptr(this)](const openvpn_io::error_code& error, openvpn_io::ip::tcp::resolver::results_type results) { + OPENVPN_ASYNC_HANDLER; self->do_resolve_(error, results); }); } @@ -151,8 +154,7 @@ namespace openvpn { host = server_host; port = server_port; const IP::Addr addr = server_endpoint_addr(); - proto = "TCP"; - proto += addr.version_string(); + proto = server_protocol.str(); ip_addr = addr.to_string(); } @@ -163,12 +165,7 @@ namespace openvpn { virtual Protocol transport_protocol() const { - if (server_endpoint.address().is_v4()) - return Protocol(Protocol::TCPv4); - else if (server_endpoint.address().is_v6()) - return Protocol(Protocol::TCPv6); - else - return Protocol(); + return server_protocol; } virtual void stop() { stop_(); } @@ -270,7 +267,7 @@ namespace openvpn { else { std::ostringstream os; - os << "DNS resolve error on '" << server_host << "' for TCP session: " << error.message(); + os << "DNS resolve error on '" << server_host << "' for " << server_protocol.str() << " session: " << error.message(); config->stats->error(Error::RESOLVE_ERROR); stop(); parent->transport_error(Error::UNDEF, os.str()); @@ -282,7 +279,8 @@ namespace openvpn { void start_connect_() { config->remote_list->get_endpoint(server_endpoint); - OPENVPN_LOG("Contacting " << server_endpoint << " via TCP"); + OPENVPN_LOG("Contacting " << server_endpoint << " via " + << server_protocol.str()); parent->transport_wait(); parent->ip_hole_punch(server_endpoint_addr()); socket.open(server_endpoint.protocol()); @@ -293,7 +291,7 @@ namespace openvpn { { config->stats->error(Error::SOCKET_PROTECT_ERROR); stop(); - parent->transport_error(Error::UNDEF, "socket_protect error (TCP)"); + parent->transport_error(Error::UNDEF, "socket_protect error (" + std::string(server_protocol.str()) + ")"); return; } } @@ -301,6 +299,7 @@ namespace openvpn { socket.set_option(openvpn_io::ip::tcp::no_delay(true)); socket.async_connect(server_endpoint, [self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->start_impl_(error); }); } @@ -352,7 +351,7 @@ namespace openvpn { else { std::ostringstream os; - os << "TCP connect error on '" << server_host << ':' << server_port << "' (" << server_endpoint << "): " << error.message(); + os << server_protocol.str() << " connect error on '" << server_host << ':' << server_port << "' (" << server_endpoint << "): " << error.message(); config->stats->error(Error::TCP_CONNECT_ERROR); stop(); parent->transport_error(Error::UNDEF, os.str()); @@ -362,6 +361,7 @@ namespace openvpn { std::string server_host; std::string server_port; + Protocol server_protocol; openvpn_io::io_context& io_context; openvpn_io::ip::tcp::socket socket; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/transbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/transbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/transbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/transbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/udpcli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/udpcli.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/udpcli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/udpcli.hpp index b53af7f..e55e7c6 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/client/udpcli.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/client/udpcli.hpp @@ -28,6 +28,7 @@ #include +#include #include #include #include @@ -107,6 +108,7 @@ namespace openvpn { resolver.async_resolve(server_host, server_port, [self=Ptr(this)](const openvpn_io::error_code& error, openvpn_io::ip::udp::resolver::results_type results) { + OPENVPN_ASYNC_HANDLER; self->do_resolve_(error, results); }); } @@ -283,6 +285,7 @@ namespace openvpn { #endif socket.async_connect(server_endpoint, [self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; self->start_impl_(error); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/dco.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/dco.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/dco.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/dco.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/gremlin.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/gremlin.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/gremlin.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/gremlin.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/mutate.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/mutate.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/mutate.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/mutate.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/pktstream.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/pktstream.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/pktstream.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/pktstream.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/protocol.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/protocol.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/protocol.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/protocol.hpp index 834c100..fcf43ce 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/protocol.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/protocol.hpp @@ -26,7 +26,7 @@ #include // for std::uint32_t, etc. #include -#include +#include #include #include @@ -186,9 +186,9 @@ namespace openvpn { case TCPv6: return "TCPv6"; case TLSv4: - return "TLSv4"; + return "TLS/TCPv4"; case TLSv6: - return "TLSv6"; + return "TLS/TCPv6"; case UnixStream: return "UnixStream"; case UnixDGram: diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/reconnect_notify.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/reconnect_notify.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/reconnect_notify.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/reconnect_notify.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/server/transbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/server/transbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/server/transbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/server/transbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/socket_protect.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/socket_protect.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/socket_protect.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/socket_protect.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplink.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplink.hpp similarity index 93% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplink.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplink.hpp index e48cabc..618de67 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplink.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplink.hpp @@ -30,6 +30,7 @@ #include +#include #include #include #include @@ -73,16 +74,6 @@ namespace openvpn { free_list_max_size_arg, frame_context_arg, stats_arg) { } - // Called by LinkCommon and TCPTransport Client class - unsigned int send_queue_size() const - { - return Base::queue.size() -#ifdef OPENVPN_GREMLIN - + (gremlin ? gremlin->send_size() : 0) -#endif - ; - } - private: // Called by LinkCommon virtual void from_app_send_buffer(BufferPtr& buf) override diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplinkbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplinkbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplinkbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplinkbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp index 8ce808a..3a79b5c 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/tcplinkcommon.hpp @@ -175,6 +175,7 @@ namespace openvpn { socket.async_receive(frame_context.mutable_buffer_clamp(tcpfrom->buf), [self=Ptr(this), tcpfrom=PacketFrom::SPtr(tcpfrom)](const openvpn_io::error_code& error, const size_t bytes_recvd) mutable { + OPENVPN_ASYNC_HANDLER; try { self->handle_recv(std::move(tcpfrom), error, bytes_recvd); @@ -248,6 +249,7 @@ namespace openvpn { socket.async_send(buf.const_buffer_clamp(), [self=Ptr(this)](const openvpn_io::error_code& error, const size_t bytes_sent) { + OPENVPN_ASYNC_HANDLER; self->handle_send(error, bytes_sent); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/udplink.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/udplink.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/transport/udplink.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/udplink.hpp index bb2ee4a..d45a1fd 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/transport/udplink.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/transport/udplink.hpp @@ -143,6 +143,7 @@ namespace openvpn { udpfrom->sender_endpoint, [self=Ptr(this), udpfrom=PacketFrom::SPtr(udpfrom)](const openvpn_io::error_code& error, const size_t bytes_recvd) mutable { + OPENVPN_ASYNC_HANDLER; self->handle_read(std::move(udpfrom), error, bytes_recvd); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/base.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/base.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/base.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/base.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/capture.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/capture.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/capture.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/capture.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/client.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/client.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/client.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/client.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/rgwflags.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/rgwflags.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/rgwflags.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/rgwflags.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/setup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/setup.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/builder/setup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/builder/setup.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp similarity index 95% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp index 547b8a9..17828a3 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/dhcp_capture.hpp @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include @@ -54,7 +54,7 @@ namespace openvpn { return false; DHCPPacket* dhcp = (DHCPPacket*)buf.data(); - if (dhcp->ip.protocol == IPHeader::UDP + if (dhcp->ip.protocol == IPCommon::UDP && dhcp->udp.source == htons(DHCP::BOOTPS_PORT) && dhcp->udp.dest == htons(DHCP::BOOTPC_PORT) && dhcp->dhcp.op == DHCP::BOOTREPLY) diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/emuexr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/emuexr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/emuexr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/emuexr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunnull.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunnull.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunnull.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunnull.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunprop.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunprop.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/client/tunprop.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/client/tunprop.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/extern/config.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/extern/config.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/extern/config.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/extern/config.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/extern/fw.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/extern/fw.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/extern/fw.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/extern/fw.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/ipv6_setting.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/ipv6_setting.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/ipv6_setting.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/ipv6_setting.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/layer.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/layer.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/layer.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/layer.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/linux/client/tuncli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/linux/client/tuncli.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/linux/client/tuncli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/linux/client/tuncli.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/linux/client/tunsetup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/linux/client/tunsetup.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/linux/client/tunsetup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/linux/client/tunsetup.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/client/tuncli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/client/tuncli.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/client/tuncli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/client/tuncli.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp similarity index 98% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp index fb56442..3f56cc0 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/client/tunsetup.hpp @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include #include @@ -317,7 +319,7 @@ namespace openvpn { cmd->argv.push_back("/sbin/ifconfig"); cmd->argv.push_back(iface_name); cmd->argv.push_back(local4->address); - cmd->argv.push_back(local4->address); + cmd->argv.push_back(local4->gateway); cmd->argv.push_back("netmask"); cmd->argv.push_back(netmask.to_string()); cmd->argv.push_back("mtu"); @@ -463,6 +465,9 @@ namespace openvpn { create, destroy); } + + if (pull.proxy_auto_config_url.defined()) + ProxySettings::add_actions(pull, create, destroy); } ActionList::Ptr remove_cmds; diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/dsdict.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/dsdict.hpp new file mode 100644 index 0000000..a763ce6 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/dsdict.hpp @@ -0,0 +1,184 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +namespace openvpn { + class DSDict { + public: + OPENVPN_EXCEPTION(dsdict_error); + + DSDict(CF::DynamicStore& sc_arg, const std::string& sname_arg, const std::string& dskey_arg) + : sc(sc_arg), + sname(sname_arg), + dskey(dskey_arg), + dict(CF::DynamicStoreCopyDict(sc_arg, dskey)) { } + + bool dirty() const + { + return mod.defined() ? !CFEqual(dict(), mod()) : false; + } + + bool push_to_store() + { + if (dirty()) + { + const CF::String keystr = CF::string(dskey); + if (SCDynamicStoreSetValue(sc(), keystr(), mod())) + { + OPENVPN_LOG("DSDict: updated " << dskey); + return true; + } + else + OPENVPN_LOG("DSDict: ERROR updating " << dskey); + } + return false; + } + + bool remove_from_store() + { + if (dirty()) + throw dsdict_error("internal error: remove_from_store called on modified dict"); + const CF::String keystr = CF::string(dskey); + if (SCDynamicStoreRemoveValue(sc(), keystr())) + { + OPENVPN_LOG("DSDict: removed " << dskey); + return true; + } + else + { + OPENVPN_LOG("DSDict: ERROR removing " << dskey); + return false; + } + } + + void will_modify() + { + if (!mod.defined()) + mod = CF::mutable_dict_copy(dict); + } + + void mod_reset() + { + mod = CF::mutable_dict(); + } + + void backup_orig(const std::string& key, const bool wipe_orig=true) + { + const CF::String k = CF::string(key); + const CF::String orig = orig_key(key); + if (!CFDictionaryContainsKey(dict(), orig())) + { + const CF::String delval = delete_value(); + CFTypeRef v = CFDictionaryGetValue(dict(), k()); + if (!v) + v = delval(); + will_modify(); + CFDictionarySetValue(mod(), orig(), v); + } + if (wipe_orig) + { + will_modify(); + CFDictionaryRemoveValue(mod(), k()); + } + } + + void restore_orig() + { + const CFIndex size = CFDictionaryGetCount(dict()); + std::unique_ptr keys(new const void *[size]); + std::unique_ptr values(new const void *[size]); + CFDictionaryGetKeysAndValues(dict(), keys.get(), values.get()); + const CF::String orig_prefix = orig_key(""); + const CFIndex orig_prefix_len = CFStringGetLength(orig_prefix()); + const CF::String delval = delete_value(); + for (CFIndex i = 0; i < size; ++i) + { + const CF::String key = CF::string_cast(keys[i]); + if (CFStringHasPrefix(key(), orig_prefix())) + { + const CFIndex key_len = CFStringGetLength(key()); + if (key_len > orig_prefix_len) + { + const CFRange r = CFRangeMake(orig_prefix_len, key_len - orig_prefix_len); + const CF::String k(CFStringCreateWithSubstring(kCFAllocatorDefault, key(), r)); + const CFTypeRef v = values[i]; + const CF::String vstr = CF::string_cast(v); + will_modify(); + if (vstr.defined() && CFStringCompare(vstr(), delval(), 0) == kCFCompareEqualTo) + CFDictionaryRemoveValue(mod(), k()); + else + CFDictionaryReplaceValue(mod(), k(), v); + CFDictionaryRemoveValue(mod(), key()); + } + } + } + } + + std::string to_string() const + { + std::ostringstream os; + os << "*** DSDict " << dskey << std::endl; + std::string orig = CF::description(dict()); + string::trim_crlf(orig); + os << "ORIG " << orig << std::endl; + if (dirty()) + { + std::string modstr = CF::description(mod()); + string::trim_crlf(modstr); + os << "MODIFIED " << modstr << std::endl; + } + return os.str(); + } + + static CF::DynamicStore ds_create(const std::string& sname) + { + CF::String sn = CF::string(sname); + return CF::DynamicStore(SCDynamicStoreCreate(kCFAllocatorDefault, sn(), nullptr, nullptr)); + } + + static bool signal_network_reconfiguration(const std::string& sname) + { + const char *key = "Setup:/Network/Global/IPv4"; + CF::DynamicStore sc = ds_create(sname); + const CF::String cfkey = CF::string(key); + OPENVPN_LOG("DSDict: SCDynamicStoreNotifyValue " << key); + return bool(SCDynamicStoreNotifyValue(sc(), cfkey())); + } + + CF::DynamicStore sc; + const std::string sname; + const std::string dskey; + const CF::Dict dict; + CF::MutableDict mod; + + private: + CF::String orig_key(const std::string& key) const + { + return CF::string(sname + "Orig" + key); + } + + CF::String delete_value() const + { + return CF::string(sname + "DeleteValue"); + } + }; +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/gwv4.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/gwv4.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/gwv4.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/gwv4.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macdns.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macdns.hpp similarity index 67% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macdns.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macdns.hpp index 4121ca3..f9521a4 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macdns.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macdns.hpp @@ -36,6 +36,7 @@ #include #include #include +#include namespace openvpn { class MacDNS : public RC @@ -58,7 +59,8 @@ namespace openvpn { Config(const TunBuilderCapture& settings) : dns_servers(get_dns_servers(settings)), - search_domains(get_search_domains(settings)) + search_domains(get_search_domains(settings)), + adapter_domain_suffix(settings.adapter_domain_suffix) { // We redirect DNS if either of the following is true: // 1. redirect-gateway (IPv4) is pushed, or @@ -73,6 +75,7 @@ namespace openvpn { os << " SO=" << search_order; os << " DNS=" << CF::array_to_string(dns_servers); os << " DOM=" << CF::array_to_string(search_domains); + os << " ADS=" << adapter_domain_suffix; return os.str(); } @@ -80,6 +83,7 @@ namespace openvpn { int search_order = 5000; CF::Array dns_servers; CF::Array search_domains; + std::string adapter_domain_suffix; private: static CF::Array get_dns_servers(const TunBuilderCapture& settings) @@ -138,11 +142,7 @@ namespace openvpn { bool signal_network_reconfiguration() { - const char *key = "Setup:/Network/Global/IPv4"; - CF::DynamicStore sc = ds_create(); - const CF::String cfkey = CF::string(key); - OPENVPN_LOG("MacDNS: SCDynamicStoreNotifyValue " << key); - return bool(SCDynamicStoreNotifyValue(sc(), cfkey())); + return DSDict::signal_network_reconfiguration(sname); } bool setdns(const Config& config) @@ -170,8 +170,14 @@ namespace openvpn { // set search domains info->dns.backup_orig("SearchDomains"); - if (CF::array_len(config.search_domains)) - CF::dict_set_obj(info->dns.mod, "SearchDomains", config.search_domains()); + CF::MutableArray search_domains(CF::mutable_array()); + + // add adapter_domain_suffix to SearchDomains for domain autocompletion + if (config.adapter_domain_suffix.length() > 0) + CF::array_append_str(search_domains, config.adapter_domain_suffix); + + if (CF::array_len(search_domains)) + CF::dict_set_obj(info->dns.mod, "SearchDomains", search_domains()); // set search order info->dns.backup_orig("SearchOrder"); @@ -182,16 +188,22 @@ namespace openvpn { } else { - // redirect specific domains + // split-DNS - resolve only specific domains info->ovpn.mod_reset(); if (CF::array_len(config.dns_servers) && CF::array_len(config.search_domains)) { // set DNS servers CF::dict_set_obj(info->ovpn.mod, "ServerAddresses", config.dns_servers()); - // set search domains, reverse domains can be added here as well + // DNS will be used only for those domains CF::dict_set_obj(info->ovpn.mod, "SupplementalMatchDomains", config.search_domains()); + + // do not use those domains in autocompletion + CF::dict_set_int(info->ovpn.mod, "SupplementalMatchDomainsNoSearch", 1); } + + // in case of split-DNS macOS uses domain suffix of network adapter, + // not the one provided by VPN (which we put to SearchDomains) // push it mod |= info->ovpn.push_to_store(); @@ -302,152 +314,7 @@ namespace openvpn { } return mod; } - - class DSDict { - public: - DSDict(CF::DynamicStore& sc_arg, const std::string& sname_arg, const std::string& dskey_arg) - : sc(sc_arg), - sname(sname_arg), - dskey(dskey_arg), - dict(CF::DynamicStoreCopyDict(sc_arg, dskey)) - { - } - - bool dirty() const - { - return mod.defined() ? !CFEqual(dict(), mod()) : false; - } - - bool push_to_store() - { - if (dirty()) - { - const CF::String keystr = CF::string(dskey); - if (SCDynamicStoreSetValue(sc(), keystr(), mod())) - { - OPENVPN_LOG("MacDNS: updated " << dskey); - return true; - } - else - OPENVPN_LOG("MacDNS: ERROR updating " << dskey); - } - return false; - } - - bool remove_from_store() - { - if (dirty()) - throw macdns_error("internal error: remove_from_store called on modified dict"); - const CF::String keystr = CF::string(dskey); - if (SCDynamicStoreRemoveValue(sc(), keystr())) - { - OPENVPN_LOG("MacDNS: removed " << dskey); - return true; - } - else - { - OPENVPN_LOG("MacDNS: ERROR removing " << dskey); - return false; - } - } - - void will_modify() - { - if (!mod.defined()) - mod = CF::mutable_dict_copy(dict); - } - - void mod_reset() - { - mod = CF::mutable_dict(); - } - - void backup_orig(const std::string& key, const bool wipe_orig=true) - { - const CF::String k = CF::string(key); - const CF::String orig = orig_key(key); - if (!CFDictionaryContainsKey(dict(), orig())) - { - const CF::String delval = delete_value(); - CFTypeRef v = CFDictionaryGetValue(dict(), k()); - if (!v) - v = delval(); - will_modify(); - CFDictionarySetValue(mod(), orig(), v); - } - if (wipe_orig) - { - will_modify(); - CFDictionaryRemoveValue(mod(), k()); - } - } - - void restore_orig() - { - const CFIndex size = CFDictionaryGetCount(dict()); - std::unique_ptr keys(new const void *[size]); - std::unique_ptr values(new const void *[size]); - CFDictionaryGetKeysAndValues(dict(), keys.get(), values.get()); - const CF::String orig_prefix = orig_key(""); - const CFIndex orig_prefix_len = CFStringGetLength(orig_prefix()); - const CF::String delval = delete_value(); - for (CFIndex i = 0; i < size; ++i) - { - const CF::String key = CF::string_cast(keys[i]); - if (CFStringHasPrefix(key(), orig_prefix())) - { - const CFIndex key_len = CFStringGetLength(key()); - if (key_len > orig_prefix_len) - { - const CFRange r = CFRangeMake(orig_prefix_len, key_len - orig_prefix_len); - const CF::String k(CFStringCreateWithSubstring(kCFAllocatorDefault, key(), r)); - const CFTypeRef v = values[i]; - const CF::String vstr = CF::string_cast(v); - will_modify(); - if (vstr.defined() && CFStringCompare(vstr(), delval(), 0) == kCFCompareEqualTo) - CFDictionaryRemoveValue(mod(), k()); - else - CFDictionaryReplaceValue(mod(), k(), v); - CFDictionaryRemoveValue(mod(), key()); - } - } - } - } - - std::string to_string() const - { - std::ostringstream os; - os << "*** DSDict " << dskey << std::endl; - std::string orig = CF::description(dict()); - string::trim_crlf(orig); - os << "ORIG " << orig << std::endl; - if (dirty()) - { - std::string modstr = CF::description(mod()); - string::trim_crlf(modstr); - os << "MODIFIED " << modstr << std::endl; - } - return os.str(); - } - - CF::DynamicStore sc; - const std::string sname; - const std::string dskey; - const CF::Dict dict; - CF::MutableDict mod; - - private: - CF::String orig_key(const std::string& key) const - { - return CF::string(sname + "Orig" + key); - } - - CF::String delete_value() const - { - return CF::string(sname + "DeleteValue"); - } - }; - + class Info : public RC { public: @@ -495,8 +362,7 @@ namespace openvpn { CF::DynamicStore ds_create() const { - CF::String sn = CF::string(sname); - return CF::DynamicStore(SCDynamicStoreCreate(kCFAllocatorDefault, sn(), nullptr, nullptr)); + return DSDict::ds_create(sname); } const std::string sname; diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macdns_watchdog.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macdns_watchdog.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macdns_watchdog.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macdns_watchdog.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macgw.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macgw.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/macgw.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macgw.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macproxy.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macproxy.hpp new file mode 100644 index 0000000..992275f --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/macproxy.hpp @@ -0,0 +1,99 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include +#include + +namespace openvpn { + class MacProxySettings : public ProxySettings + { + public: + OPENVPN_EXCEPTION(macproxy_error); + + typedef RCPtr Ptr; + + class Info : public RC + { + public: + typedef RCPtr Ptr; + + Info(CF::DynamicStore& sc, const std::string& sname) + : ipv4(sc, sname, "State:/Network/Global/IPv4"), + info(sc, sname, "State:/Network/Service/" + sname + "/Info"), + proxy(sc, sname, proxies(ipv4.dict, info.dict)) { } + + std::string to_string() const + { + std::ostringstream os; + os << ipv4.to_string(); + os << info.to_string(); + os << proxy.to_string(); + return os.str(); + } + + DSDict ipv4; + DSDict info; + DSDict proxy; + + private: + static std::string proxies(const CF::Dict& ipv4, const CF::Dict& info) + { + std::string serv = CF::dict_get_str(ipv4, "PrimaryService"); + if (serv.empty()) + serv = CF::dict_get_str(info, "PrimaryService"); + if (serv.empty()) + throw macproxy_error("no primary service"); + return "Setup:/Network/Service/" + serv + "/Proxies"; + } + }; + + MacProxySettings(const TunBuilderCapture::ProxyAutoConfigURL& config_arg) + : ProxySettings(config_arg) { } + + void set_proxy(bool del) override + { + if (!config.defined()) + return; + + CF::DynamicStore sc = DSDict::ds_create(sname); + Info::Ptr info(new Info(sc, sname)); + + info->proxy.will_modify(); + + if (!del) + { + info->proxy.backup_orig("ProxyAutoConfigEnable"); + CF::dict_set_int(info->proxy.mod, "ProxyAutoConfigEnable", 1); + + info->proxy.backup_orig("ProxyAutoConfigURLString"); + CF::dict_set_str(info->proxy.mod, "ProxyAutoConfigURLString", config.to_string()); + } + else + info->proxy.restore_orig(); + + info->proxy.push_to_store(); + + OPENVPN_LOG("MacProxy: set_proxy " << info->to_string()); + } + }; +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/tunutil.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/tunutil.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/tunutil.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/tunutil.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/utun.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/utun.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/mac/utun.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/mac/utun.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunpersist.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunpersist.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunpersist.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunpersist.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunwrap.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunwrap.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunwrap.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunwrap.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunwrapasio.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunwrapasio.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/persist/tunwrapasio.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/persist/tunwrapasio.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/proxy.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/proxy.hpp new file mode 100644 index 0000000..f5ef4d3 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/proxy.hpp @@ -0,0 +1,84 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include +#include + +namespace openvpn { + class ProxySettings : public RC + { + public: + OPENVPN_EXCEPTION(proxy_error); + + typedef RCPtr Ptr; + + class ProxyAction : public Action + { + public: + typedef RCPtr Ptr; + + ProxyAction(ProxySettings::Ptr parent_arg, bool del_arg) + : parent(parent_arg), del(del_arg) { } + + virtual void execute(std::ostream& os) override + { + os << to_string() << std::endl; + if (parent) + parent->set_proxy(del); + } + + virtual std::string to_string() const override + { + std::ostringstream os; + if (parent && parent->config.defined()) + os << "ProxyAction: auto config: " << parent->config.to_string(); + return os.str(); + } + + private: + const ProxySettings::Ptr parent; + bool del; + }; + + ProxySettings(const TunBuilderCapture::ProxyAutoConfigURL& config_arg) + : config(config_arg) { } + + virtual void set_proxy(bool del) = 0; + + template + static void add_actions(const TunBuilderCapture& settings, + ActionList& create, + ActionList& destroy) + { + ProxySettings::Ptr proxy(new T(settings.proxy_auto_config_url)); + ProxyAction::Ptr create_action(new ProxyAction(proxy, false)); + ProxyAction::Ptr destroy_action(new ProxyAction(proxy, true)); + create.add(create_action); + destroy.add(destroy_action); + } + + const std::string sname = "OpenVPNConnect"; + + TunBuilderCapture::ProxyAutoConfigURL config; + }; +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/server/tunbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/server/tunbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/server/tunbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/server/tunbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunio.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunio.hpp similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunio.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunio.hpp index 0a5098a..51aa900 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunio.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunio.hpp @@ -26,10 +26,11 @@ #include +#include #include #include #include -#include +#include #include #include #include @@ -73,7 +74,7 @@ namespace openvpn { { if (buf.offset() >= 4 && buf.size() >= 1) { - switch (IPHeader::version(buf[0])) + switch (IPCommon::version(buf[0])) { case 4: prepend_pf_inet(buf, PF_INET); @@ -208,6 +209,7 @@ namespace openvpn { stream->async_read_some(frame_context.mutable_buffer(tunfrom->buf), [self=Ptr(this), tunfrom=typename PacketFrom::SPtr(tunfrom)](const openvpn_io::error_code& error, const size_t bytes_recvd) mutable { + OPENVPN_ASYNC_HANDLER; self->handle_read(std::move(tunfrom), error, bytes_recvd); }); } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunlog.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunlog.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunlog.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunlog.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunmtu.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunmtu.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunmtu.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunmtu.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunspec.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunspec.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/tunspec.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/tunspec.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/setupbase.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/setupbase.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/setupbase.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/setupbase.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp similarity index 99% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp index a16d372..ac23be5 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tuncli.hpp @@ -391,6 +391,7 @@ namespace openvpn { l2_timer.expires_after(Time::Duration::seconds(seconds)); l2_timer.async_wait([self=Ptr(this)](const openvpn_io::error_code& error) { + OPENVPN_ASYNC_HANDLER; if (!error && !self->halt) self->layer_2_timer_callback(); }); diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp similarity index 95% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp index 69a0d56..750ea0b 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/client/tunsetup.hpp @@ -4,7 +4,7 @@ // packet encryption, packet authentication, and // packet compression. // -// Copyright (C) 2012-2017 OpenVPN Inc. +// Copyright (C) 2012-2017 OpenVPN Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License Version 3 @@ -37,12 +37,14 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include #include #include -#include -#include #if _WIN32_WINNT >= 0x0600 // Vista+ #include @@ -294,6 +296,9 @@ namespace openvpn { // Process ifconfig and topology if (!l2_post) { + // set lowest interface metric to make Windows use pushed DNS search domain + create.add(new WinCmd("netsh interface ip set interface " + tap_index_name + " metric=1")); + const std::string metric = route_metric_opt(pull, *local4, MT_IFACE); const std::string netmask = IPv4::Addr::netmask_from_prefix_len(local4->prefix_length).to_string(); const IP::Addr localaddr = IP::Addr::from_string(local4->address); @@ -600,6 +605,10 @@ namespace openvpn { } } + OPENVPN_LOG("proxy_auto_config_url " << pull.proxy_auto_config_url.url); + if (pull.proxy_auto_config_url.defined()) + ProxySettings::add_actions(pull, create, destroy); + // flush DNS cache create.add(new WinCmd("ipconfig /flushdns")); destroy.add(new WinCmd("ipconfig /flushdns")); diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/nrpt.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/nrpt.hpp similarity index 81% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/nrpt.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/nrpt.hpp index 516b515..6b2bd67 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/nrpt.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/nrpt.hpp @@ -4,7 +4,7 @@ // packet encryption, packet authentication, and // packet compression. // -// Copyright (C) 2012-2017 OpenVPN Inc. +// Copyright (C) 2012-2018 OpenVPN Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License Version 3 @@ -58,11 +58,7 @@ namespace openvpn { auto key_name = ss.str(); const LONG status = ::RegCreateKeyA(HKEY_LOCAL_MACHINE, key_name.c_str(), key.ref()); - if (status != ERROR_SUCCESS) - { - const Win::Error err(status); - OPENVPN_THROW(nrpt_error, "cannot open/create registry key " << key_name << " : " << err.message()); - } + check_reg_error(status, key_name); } // Name @@ -75,11 +71,7 @@ namespace openvpn { REG_MULTI_SZ, (const BYTE *)name.c_str(), (name.length()+1)*2); - if (status != ERROR_SUCCESS) - { - const Win::Error err(status); - OPENVPN_THROW(nrpt_error, "cannot set registry value for 'Name' : " << err.message()); - } + check_reg_error(status, "Name"); } // GenericDNSServers @@ -91,11 +83,7 @@ namespace openvpn { REG_SZ, (const BYTE *)dns_servers_joined.c_str(), (dns_servers_joined.length()+1)*2); - if (status != ERROR_SUCCESS) - { - const Win::Error err(status); - OPENVPN_THROW(nrpt_error, "cannot set registry value for 'GenericDNSServers' : " << err.message()); - } + check_reg_error(status, "GenericDNSServers"); } // ConfigOptions @@ -107,11 +95,7 @@ namespace openvpn { REG_DWORD, (const BYTE *)&value, sizeof(value)); - if (status != ERROR_SUCCESS) - { - const Win::Error err(status); - OPENVPN_THROW(nrpt_error, "cannot set registry value for 'ConfigOptions' : " << err.message()); - } + check_reg_error(status, "ConfigOptions"); } // Version @@ -123,11 +107,7 @@ namespace openvpn { REG_DWORD, (const BYTE *)&value, sizeof(value)); - if (status != ERROR_SUCCESS) - { - const Win::Error err(status); - OPENVPN_THROW(nrpt_error, "cannot set registry value for 'Version' : " << err.message()); - } + check_reg_error(status, "Version"); } } } diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/tunutil.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/tunutil.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/tunutil.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/tunutil.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/wfp.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/wfp.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/tun/win/wfp.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/wfp.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/winproxy.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/winproxy.hpp new file mode 100644 index 0000000..6a1f78e --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/tun/win/winproxy.hpp @@ -0,0 +1,182 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . +// + +// proxy settings for Windows + +#pragma once + +#include + +#include +#include +#include + +using namespace openvpn::Win; + +namespace openvpn { + namespace TunWin { + class WinProxySettings : public ProxySettings { + public: + typedef RCPtr Ptr; + + WinProxySettings(const TunBuilderCapture::ProxyAutoConfigURL& config_arg) + : ProxySettings(config_arg) { } + + void set_proxy(bool del) override + { + ImpersonateAsUser imp; + + LONG status; + RegKey hkcu; + RegKey key; + + status = ::RegOpenCurrentUser(KEY_QUERY_VALUE | KEY_SET_VALUE, hkcu.ref()); + check_reg_error(status, "RegOpenCurrentUser"); + + status = ::RegCreateKeyExA(hkcu(), key_name, 0, NULL, 0, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, key.ref(), NULL); + check_reg_error(status, key_name); + + if (!del) + { + save_key(key, "AutoConfigURL", config.url, true); + save_key(key, "ProxyEnable", "0", false); + } + else + { + restore_key(key, "AutoConfigURL", true); + restore_key(key, "ProxyEnable", false); + } + + // WinInet API cannot be called from service, even via impersonation + if (!imp.is_local_system()) + { + OPENVPN_LOG("Refresh proxy settings"); + + InternetSetOptionA(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); + InternetSetOptionA(NULL, INTERNET_OPTION_REFRESH, NULL, 0); + } + } + + private: + void restore_key(Win::RegKey& regkey, const std::string& key, bool str) + { + LONG status; + char prev_val_str[1024] = { 0 }; // should be enough to fit proxy URL + DWORD prev_val_dword; + DWORD prev_buf_size = str ? sizeof(prev_val_str) : sizeof(prev_val_dword); + bool del = false; + Win::RegKey hkcu; + + status = ::RegOpenCurrentUser(KEY_QUERY_VALUE | KEY_SET_VALUE, hkcu.ref()); + check_reg_error(status, "RegOpenCurrentUser"); + + // get previous value + std::string prev_key_name = sname + key; + status = ::RegGetValueA(hkcu(), + key_name, + prev_key_name.c_str(), + str ? RRF_RT_REG_SZ : RRF_RT_REG_DWORD, + NULL, + str ? (PVOID)prev_val_str : (PVOID)&prev_val_dword, + &prev_buf_size); + check_reg_error(status, prev_key_name); + + RegDeleteValueA(regkey(), prev_key_name.c_str()); + + // check if previous value needs to be deleted + if (str) + del = strcmp(delete_value_str, prev_val_str) == 0; + else + del = prev_val_dword == delete_value_dword; + + if (del) + ::RegDeleteValueA(regkey(), key.c_str()); + else + ::RegSetValueExA(regkey(), + key.c_str(), + 0, + str ? REG_SZ : REG_DWORD, + str ? (const BYTE *)prev_val_str : (CONST BYTE *)&prev_val_dword, + str ? strlen(prev_val_str) + 1 : sizeof(prev_val_dword)); + } + + void save_key(Win::RegKey& regkey, const std::string& key, const std::string& value, bool str) + { + LONG status; + char prev_val_str[1024] = { 0 }; // should be enought to fit proxy URL + DWORD prev_val_dword; + DWORD prev_buf_size = str ? sizeof(prev_val_str) : sizeof(prev_val_dword); + Win::RegKey hkcu; + + status = ::RegOpenCurrentUser(KEY_QUERY_VALUE | KEY_SET_VALUE, hkcu.ref()); + check_reg_error(status, "RegOpenCurrentUser"); + + // get original value + status = ::RegGetValueA(hkcu(), + key_name, + key.c_str(), + str ? RRF_RT_REG_SZ : RRF_RT_REG_DWORD, + NULL, + str ? (PVOID)prev_val_str : (PVOID)&prev_val_dword, + &prev_buf_size); + switch (status) + { + case ERROR_FILE_NOT_FOUND: + // mark that original value doesn't exist + strcpy(prev_val_str, delete_value_str); + prev_val_dword = delete_value_dword; + case ERROR_SUCCESS: + break; + default: + check_reg_error(status, key); + break; + } + + // save original value + std::string prev_key_name = sname + key; + status = ::RegSetValueExA(regkey(), + prev_key_name.c_str(), + 0, + str ? REG_SZ : REG_DWORD, + str ? (const BYTE *)prev_val_str : (CONST BYTE *)&prev_val_dword, + str ? strlen(prev_val_str) + 1 : sizeof(DWORD)); + check_reg_error(status, prev_key_name); + + // save new value + DWORD val_dword = 0; + if (!str) + val_dword = std::atol(value.c_str()); + status = ::RegSetValueExA(regkey(), + key.c_str(), + 0, + str ? REG_SZ : REG_DWORD, + str ? (const BYTE *)value.c_str() : (CONST BYTE *)&val_dword, + str ? value.length() + 1 : sizeof(val_dword)); + check_reg_error(status, key); + } + + const char* key_name = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; + const char* delete_value_str = "DeleteValue"; + const DWORD delete_value_dword = 0xCAFEBABE; + }; + } +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/call.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/call.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/call.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/call.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/cmd.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/cmd.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/cmd.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/cmd.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/console.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/console.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/console.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/console.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/handle.hpp diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/impersonate.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/impersonate.hpp new file mode 100644 index 0000000..ea7b026 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/impersonate.hpp @@ -0,0 +1,136 @@ +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2018 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +#pragma once + +#include +#include +#include + +#include + +namespace openvpn { + namespace Win { + class ImpersonateAsUser { + public: + ImpersonateAsUser() : local_system(is_local_system_()) + { + if (local_system) + OPENVPN_LOG("ImpersonateAsUser: running under SYSTEM account, need to impersonate"); + else + { + OPENVPN_LOG("ImpersonateAsUser: running under user account, no need to impersonate"); + return; + } + + DWORD sessId = WTSGetActiveConsoleSessionId(); + if (sessId == 0xFFFFFFFF) + { + const Win::LastError err; + OPENVPN_LOG("ImpersonateAsUser: WTSGetActiveConsoleSessionId() failed: " << err.message()); + return; + } + + HANDLE hToken; + if (!WTSQueryUserToken(sessId, &hToken)) + { + const Win::LastError err; + OPENVPN_LOG("ImpersonateAsUser: WTSQueryUserToken() failed: " << err.message()); + return; + } + + if (!ImpersonateLoggedOnUser(hToken)) + { + CloseHandle(hToken); + + const Win::LastError err; + OPENVPN_LOG("ImpersonateAsUser: ImpersonateLoggedOnUser() failed: " << err.message()); + return; + } + + CloseHandle(hToken); + + impersonated = true; + + char uname[UNLEN + 1]; + DWORD len = UNLEN + 1; + GetUserNameA(uname, &len); + OPENVPN_LOG("ImpersonateAsUser: impersonated as " << uname); + } + + ~ImpersonateAsUser() { + if (impersonated) + { + if (!RevertToSelf()) + { + const Win::LastError err; + OPENVPN_LOG("ImpersonateAsUser: RevertToSelf() failed: " << err.message()); + } + } + } + + bool is_local_system() const + { + return local_system; + } + + private: + // https://stackoverflow.com/a/4024388/227024 + BOOL is_local_system_() const + { + HANDLE hToken; + UCHAR bTokenUser[sizeof(TOKEN_USER) + 8 + 4 * SID_MAX_SUB_AUTHORITIES]; + PTOKEN_USER pTokenUser = (PTOKEN_USER)bTokenUser; + ULONG cbTokenUser; + SID_IDENTIFIER_AUTHORITY siaNT = SECURITY_NT_AUTHORITY; + PSID pSystemSid; + BOOL bSystem; + + // open process token + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + return FALSE; + + // retrieve user SID + if (!GetTokenInformation(hToken, TokenUser, pTokenUser, sizeof(bTokenUser), &cbTokenUser)) + { + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + // allocate LocalSystem well-known SID + if (!AllocateAndInitializeSid(&siaNT, 1, SECURITY_LOCAL_SYSTEM_RID, + 0, 0, 0, 0, 0, 0, 0, &pSystemSid)) return FALSE; + + // compare the user SID from the token with the LocalSystem SID + bSystem = EqualSid(pTokenUser->User.Sid, pSystemSid); + + FreeSid(pSystemSid); + + return bSystem; + } + + bool impersonated = false; + bool local_system = false; + }; + } +} diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/modname.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/modname.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/modname.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/modname.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/reg.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/reg.hpp similarity index 86% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/reg.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/reg.hpp index d4f6ecb..0e26b21 100644 --- a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/reg.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/reg.hpp @@ -1,106 +1,117 @@ -// OpenVPN -- An application to securely tunnel IP networks -// over a single port, with support for SSL/TLS-based -// session authentication and key exchange, -// packet encryption, packet authentication, and -// packet compression. -// -// Copyright (C) 2012-2017 OpenVPN Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License Version 3 -// as published by the Free Software Foundation. -// -// 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 Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program in the COPYING file. -// If not, see . - -// registry utilities for Windows - -#ifndef OPENVPN_WIN_REG_H -#define OPENVPN_WIN_REG_H - -#include -#include - -namespace openvpn { - namespace Win { - - // HKEY wrapper - class RegKey - { - RegKey(const RegKey&) = delete; - RegKey& operator=(const RegKey&) = delete; - - public: - RegKey() : key(nullptr) {} - bool defined() const { return key != nullptr; } - HKEY* ref() { return &key; } - HKEY operator()() { return key; } - - ~RegKey() - { - if (defined()) - ::RegCloseKey(key); - } - private: - HKEY key; - }; - - class RegKeyEnumerator : public std::vector - { - public: - RegKeyEnumerator(HKEY hkey, const std::string& path) - { - RegKey regKey; - auto status = ::RegOpenKeyExA(hkey, - path.c_str(), - 0, - KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, - regKey.ref()); - if (status != ERROR_SUCCESS) - return; - - DWORD subkeys_num; - status = ::RegQueryInfoKeyA(regKey(), - nullptr, - nullptr, - NULL, - &subkeys_num, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr); - - if (status != ERROR_SUCCESS) - return; - - const int MAX_KEY_LENGTH = 255; - for (auto i = 0; i < subkeys_num; ++ i) - { - DWORD subkey_size = MAX_KEY_LENGTH; - char subkey[MAX_KEY_LENGTH]; - status = ::RegEnumKeyExA(regKey(), - i, - subkey, - &subkey_size, - nullptr, - nullptr, - nullptr, - nullptr); - if (status == ERROR_SUCCESS) - push_back(subkey); - } - } - }; - } -} - -#endif +// OpenVPN -- An application to securely tunnel IP networks +// over a single port, with support for SSL/TLS-based +// session authentication and key exchange, +// packet encryption, packet authentication, and +// packet compression. +// +// Copyright (C) 2012-2017 OpenVPN Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License Version 3 +// as published by the Free Software Foundation. +// +// 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program in the COPYING file. +// If not, see . + +// registry utilities for Windows + +#ifndef OPENVPN_WIN_REG_H +#define OPENVPN_WIN_REG_H + +#include +#include +#include + +namespace openvpn { + namespace Win { + + template + static void check_reg_error(DWORD status, const std::string& key) + { + if (status != ERROR_SUCCESS) + { + const Win::Error err(status); + OPENVPN_THROW(E, "registry key " << key << " error: " << err.message()); + } + } + + // HKEY wrapper + class RegKey + { + RegKey(const RegKey&) = delete; + RegKey& operator=(const RegKey&) = delete; + + public: + RegKey() : key(nullptr) {} + bool defined() const { return key != nullptr; } + HKEY* ref() { return &key; } + HKEY operator()() { return key; } + + ~RegKey() + { + if (defined()) + ::RegCloseKey(key); + } + private: + HKEY key; + }; + + class RegKeyEnumerator : public std::vector + { + public: + RegKeyEnumerator(HKEY hkey, const std::string& path) + { + RegKey regKey; + auto status = ::RegOpenKeyExA(hkey, + path.c_str(), + 0, + KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, + regKey.ref()); + if (status != ERROR_SUCCESS) + return; + + DWORD subkeys_num; + status = ::RegQueryInfoKeyA(regKey(), + nullptr, + nullptr, + NULL, + &subkeys_num, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr); + + if (status != ERROR_SUCCESS) + return; + + const int MAX_KEY_LENGTH = 255; + for (auto i = 0; i < subkeys_num; ++ i) + { + DWORD subkey_size = MAX_KEY_LENGTH; + char subkey[MAX_KEY_LENGTH]; + status = ::RegEnumKeyExA(regKey(), + i, + subkey, + &subkey_size, + nullptr, + nullptr, + nullptr, + nullptr); + if (status == ERROR_SUCCESS) + push_back(subkey); + } + } + }; + } +} + +#endif diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/scoped_handle.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/scoped_handle.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/scoped_handle.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/scoped_handle.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/sleep.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/sleep.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/sleep.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/sleep.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/unicode.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/unicode.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/unicode.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/unicode.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/openvpn/win/winerr.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/winerr.hpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/openvpn/win/winerr.hpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/openvpn/win/winerr.hpp diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-all b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-all similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-all rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-all diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-boost b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-boost similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-boost rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-boost diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-lz4 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-lz4 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-lz4 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-lz4 diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-lzo b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-lzo similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-lzo rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-lzo diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-mbedtls b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-mbedtls similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-mbedtls rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-mbedtls diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-minicrypto b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-minicrypto similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-minicrypto rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-minicrypto diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-openssl-small b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-openssl-small similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-openssl-small rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-openssl-small diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-polarssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-polarssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-polarssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-polarssl diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-sdk b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-sdk similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-sdk rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-sdk diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-snappy b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-snappy similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-snappy rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-snappy diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/android/build-toolchain b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-toolchain similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/android/build-toolchain rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/android/build-toolchain diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/build b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/build similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/scripts/build rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/build index b482fdc..8f8ee88 100755 --- a/OpenVPN Adapter/Vendors/openvpn/scripts/build +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/build @@ -100,6 +100,11 @@ if [ "$PLATFORM" = "linux" ] && [ "$OSSL" = "1" ] && [ "$NOSSL" != "1" ] && [ -z OPENSSL_SYS=1 fi +# building on Linux, use system LZ4 +if [ "$PLATFORM" = "linux" ] && [ "$LZ4" = "1" ] && [ -z "$LZ4_SYS" ]; then + LZ4_SYS=1 +fi + # default commands [ -z "$STRIP_CMD" ] && STRIP_CMD=strip [ -z "$GPP_CMD" ] && GPP_CMD=g++ @@ -237,6 +242,8 @@ fi # Cityhash if [ "$CITY" = "1" ]; then + LIBDIRS="$LIBDIRS -L$DEP_DIR/cityhash/cityhash-$PLATFORM/lib" + CPPFLAGS="$CPPFLAGS -I$DEP_DIR/cityhash/cityhash-$PLATFORM/include" LIBS="$LIBS -lcityhash" CPPFLAGS="$CPPFLAGS -DHAVE_CITYHASH" fi diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/build-extras/zlib.sh b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/build-extras/zlib.sh similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/build-extras/zlib.sh rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/build-extras/zlib.sh diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-all b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-all similarity index 90% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-all rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-all index c773799..51c79ab 100755 --- a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-all +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-all @@ -12,6 +12,8 @@ echo "******* MBEDTLS" $O3/core/scripts/linux/build-mbedtls echo "******* LZ4" $O3/core/scripts/linux/build-lz4 +echo "******* CITYHASH" +$O3/core/scripts/linux/build-cityhash #$O3/core/scripts/linux/build-openssl x64 #$O3/core/scripts/linux/build-lzo diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-boost b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-boost similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-boost rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-boost diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-cityhash b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-cityhash new file mode 100755 index 0000000..8349a20 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-cityhash @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -e +if [ -z "$O3" ]; then + echo O3 var must point to ovpn3 tree ; exit 1 +fi +if [ -z "$DEP_DIR" ]; then + echo DEP_DIR var must point to ovpn3 dependency tree + exit 1 +fi +cd $DEP_DIR +rm -rf cityhash +mkdir cityhash +TARGET=linux $O3/core/deps/cityhash/build-cityhash +exit 0 diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-lz4 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-lz4 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-lz4 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-lz4 diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-lzo b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-lzo similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-lzo rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-lzo diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-mbedtls b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-mbedtls similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-mbedtls rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-mbedtls diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-openssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-openssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-openssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-openssl diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-polarssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-polarssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-polarssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-polarssl diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-polarssl-ovpn2 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-polarssl-ovpn2 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-polarssl-ovpn2 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-polarssl-ovpn2 diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-snappy b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-snappy similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/build-snappy rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/build-snappy diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/linux/consolidate-so b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/consolidate-so similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/linux/consolidate-so rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/linux/consolidate-so diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-all b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-all similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-all rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-all diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-boost b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-boost similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-boost rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-boost diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-lz4 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-lz4 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-lz4 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-lz4 diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-lzo b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-lzo similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-lzo rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-lzo diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-mbedtls b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-mbedtls similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-mbedtls rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-mbedtls diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-minicrypto b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-minicrypto similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-minicrypto rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-minicrypto diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-openssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-openssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-openssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-openssl diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-polarssl b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-polarssl similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-polarssl rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-polarssl diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-snappy b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-snappy similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/mac/build-snappy rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/mac/build-snappy diff --git a/OpenVPN Adapter/Vendors/openvpn/scripts/snapshot b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/snapshot similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/scripts/snapshot rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/snapshot diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/version b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/version new file mode 100755 index 0000000..97ffd3f --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/scripts/version @@ -0,0 +1,34 @@ +#!/bin/bash + +# OpenVPN -- An application to securely tunnel IP networks +# over a single port, with support for SSL/TLS-based +# session authentication and key exchange, +# packet encryption, packet authentication, and +# packet compression. +# +# Copyright (C) 2018 OpenVPN Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License Version 3 +# as published by the Free Software Foundation. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program in the COPYING file. +# If not, see . + +set -eu + +# ensure this script works even when core is used as submodule, by setting +# O3/core/.git as git folder +export GIT_DIR=$(dirname $0)/../.git + +MAJOR=3 +BRANCH="$(git rev-parse --symbolic-full-name HEAD | cut -d/ -f3- | tr / _)" +COMMIT_ID="$(git rev-list HEAD -1 --abbrev-commit)" + +echo "$MAJOR.git:$BRANCH:$COMMIT_ID" diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ovpncli/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ovpncli/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ovpncli/README.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/README.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ovpncli/README.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/README.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ovpncli/cli.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/cli.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ovpncli/cli.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/cli.cpp diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ovpncli/go b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/go similarity index 53% rename from OpenVPN Adapter/Vendors/openvpn/test/ovpncli/go rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/go index dbad4ad..8f1a1ec 100755 --- a/OpenVPN Adapter/Vendors/openvpn/test/ovpncli/go +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ovpncli/go @@ -1,4 +1,11 @@ #!/bin/bash + +# Options: +# OSSL=1 -- build using OpenSSL +# MTLS=1 -- build using mbedTLS +# PTPROXY=1 -- build using Private Tunnel proxy + +# Other options GCC_EXTRA="$GCC_EXTRA -DOPENVPN_SHOW_SESSION_TOKEN" [ "$EER" = "1" ] && GCC_EXTRA="$GCC_EXTRA -DTEST_EER" [ "$NULL" = "1" ] && GCC_EXTRA="$GCC_EXTRA -DOPENVPN_FORCE_TUN_NULL" @@ -11,25 +18,26 @@ GCC_EXTRA="$GCC_EXTRA -DOPENVPN_SHOW_SESSION_TOKEN" if [ "$AGENT" = "1" ]; then GCC_EXTRA="$GCC_EXTRA -DOPENVPN_COMMAND_AGENT" fi +GCC_EXTRA="$GCC_EXTRA -DOPENVPN_VERSION=\"$($(dirname $0)/../../scripts/version)\"" export GCC_EXTRA + +# determine platform if [ "$(uname)" == "Darwin" ]; then - cd $O3/core - if [ "$DEBUG" = "3" ]; then - . vars/vars-osx64-dbg - else - . vars/vars-osx64 - fi - . vars/setpath - cd test/ovpncli - ASIO=1 MTLS=1 LZ4=1 PTPROXY=1 build cli 2>&1 + export PROF=osx64 +elif [ "$(uname)" == "Linux" ]; then + export PROF=linux else - cd $O3/core - if [ "$DEBUG" = "3" ]; then - . vars/vars-linux-dbg - else - . vars/vars-linux - fi - . vars/setpath - cd test/ovpncli - ASIO=1 MTLS=1 LZ4=1 NOSSL=1 PTPROXY=1 build cli 2>&1 + echo this script only knows how to build on Mac OS or Linux fi + +# use mbedTLS by default +[[ -z "$OSSL" && -z "$MTLS" ]] && export MTLS=1 + +# don't link with OpenSSL if mbedTLS is specified +if [ "$MTLS" = "1" ]; then + export OSSL=0 + export NOSSL=1 +fi + +# build +ASIO=1 LZ4=1 ../../scripts/build cli diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/README.txt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/README.txt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/README.txt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/README.txt diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/ca.crt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/ca.crt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/ca.crt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/ca.crt diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/client.crt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/client.crt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/client.crt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/client.crt diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/client.key b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/client.key similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/client.key rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/client.key diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/dh.pem b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/dh.pem similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/dh.pem rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/dh.pem diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/go b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/go similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/go rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/go diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/proto.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/proto.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/proto.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/proto.cpp diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/protowin.h b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/protowin.h similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/protowin.h rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/protowin.h diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/server.crt b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/server.crt similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/server.crt rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/server.crt diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/server.key b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/server.key similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/server.key rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/server.key diff --git a/OpenVPN Adapter/Vendors/openvpn/test/ssl/tls-auth.key b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/tls-auth.key similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/ssl/tls-auth.key rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/ssl/tls-auth.key diff --git a/OpenVPN Adapter/Vendors/openvpn/test/unittests/test_log.cpp b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/test_log.cpp similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/unittests/test_log.cpp rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/test_log.cpp diff --git a/OpenVPN Adapter/Vendors/openvpn/test/unittests/unittests.vcxproj b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/unittests.vcxproj similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/unittests/unittests.vcxproj rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/unittests.vcxproj diff --git a/OpenVPN Adapter/Vendors/openvpn/test/unittests/unittests.vcxproj.filters b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/unittests.vcxproj.filters similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/unittests/unittests.vcxproj.filters rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unittests/unittests.vcxproj.filters diff --git a/OpenVPN Adapter/Vendors/openvpn/test/unused b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unused similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/test/unused rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/test/unused diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/android-sdk-path b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/android-sdk-path similarity index 90% rename from OpenVPN Adapter/Vendors/openvpn/vars/android-sdk-path rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/android-sdk-path index 753c493..61edf99 100644 --- a/OpenVPN Adapter/Vendors/openvpn/vars/android-sdk-path +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/android-sdk-path @@ -4,3 +4,4 @@ if [ "$NO_MOD_PATH" != "1" ]; then export PATH="$SDK/tools:$SDK/platform-tools:$PATH" fi +export ANDROID_HOME=$SDK \ No newline at end of file diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/o3 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/o3 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/o3 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/o3 diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/setlibpath b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/setlibpath similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/setlibpath rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/setlibpath diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/setpath b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/setpath similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/setpath rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/setpath diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a7a b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a7a similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a7a rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a7a diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a7a-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a7a-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a7a-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a7a-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a8a b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a8a similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a8a rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a8a diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a8a-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a8a-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-a8a-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-a8a-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-dbg diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-srconly b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-srconly new file mode 100644 index 0000000..67bb063 --- /dev/null +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-srconly @@ -0,0 +1 @@ +# Nothing in here diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-android-x86 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-x86 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-android-x86 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-android-x86 diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-arm-cross b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-arm-cross similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-arm-cross rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-arm-cross diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-ios b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-ios similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-ios rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-ios diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-ios-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-ios-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-ios-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-ios-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-iossim b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-iossim similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-iossim rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-iossim diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-iossim-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-iossim-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-iossim-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-iossim-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-linux b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-linux similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-linux rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-linux diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-linux-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-linux-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-linux-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-linux-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-osx b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-osx rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-osx-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-osx-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-osx64 b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx64 similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-osx64 rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx64 diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-osx64-dbg b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx64-dbg similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-osx64-dbg rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-osx64-dbg diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-reset b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-reset similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-reset rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-reset diff --git a/OpenVPN Adapter/Vendors/openvpn/vars/vars-win b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-win similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/vars/vars-win rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/vars/vars-win diff --git a/OpenVPN Adapter/Vendors/openvpn/win/.gitignore b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/.gitignore similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/win/.gitignore rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/.gitignore diff --git a/OpenVPN Adapter/Vendors/openvpn/win/build.py b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/build.py similarity index 95% rename from OpenVPN Adapter/Vendors/openvpn/win/build.py rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/build.py index ff67364..f6c4548 100644 --- a/OpenVPN Adapter/Vendors/openvpn/win/build.py +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/build.py @@ -1,90 +1,90 @@ -#!/c/python27/python - -import os - -from utils import * - -def cli_cpp(parms): - return os.path.join(parms['OVPN3'], "core", "test", "ovpncli", "cli.cpp") - -def src_fn(parms, srcfile): - # Get source file name - if srcfile: - if '.' not in os.path.basename(srcfile): - srcfile += ".cpp" - else: - srcfile = cli_cpp(parms) - return srcfile - -def is_unit_test(argv): - unit_test = False - if len(argv) >= 2: - unit_test = argv[1] == "unittest" - return unit_test - -def src_fn_argv(parms, argv): - srcfile = None - if len(argv) >= 1: - srcfile = argv[0] - return src_fn(parms, srcfile) - -def build(parms, srcfile, unit_test=False): - # Debug? - if parms['DEBUG']: - dbg_rel_flags = "/Zi" - else: - dbg_rel_flags = "/O2" - - # Dictionary we will use to substitute parameters - # onto VC command line. - options = { - "ovpn3" : parms['OVPN3'], - "tap" : os.path.join(build_dir(parms), "tap-windows", "src"), - "tap_component_id" : parms['TAP_WIN_COMPONENT_ID'], - "asio" : os.path.join(build_dir(parms), "asio"), - "mbedtls" : os.path.join(build_dir(parms), "mbedtls"), - "lz4" : os.path.join(build_dir(parms), "lz4", "lib"), - "srcfile" : srcfile, - "extra_defs" : parms['CPP_EXTRA'], - "extra_inc" : "", - "extra_lib_path" : "", - "extra_lib" : "", - } - - vc_parms(parms, options) - - # Do we need to support XP and Win 2003? - arch = os.environ.get("ARCH", parms['ARCH']) - if arch == "x86_xp": - options['extra_defs'] += " /D_WIN32_WINNT=0x0501" # pre-Vista - else: - options['extra_defs'] += " /D_WIN32_WINNT=0x0600" # Vista and later - options['extra_lib'] += " fwpuclnt.lib" - - # Add jsoncpp (optional) - if parms.get('USE_JSONCPP'): - options["jsoncpp"] = os.path.join(build_dir(parms), "jsoncpp") - options['extra_inc'] += " /DHAVE_JSONCPP /I %(jsoncpp)s/dist" % options - options['extra_lib_path'] += " /LIBPATH:%(jsoncpp)s/dist" % options - options['extra_lib'] += " jsoncpp.lib" - - if unit_test: - options['extra_lib'] += " gtest.lib" - options['extra_inc'] += " /I %s" % os.path.join(parms["GTEST_ROOT"], "googletest", "include") - options['extra_lib_path'] += " /LIBPATH:%s" % os.path.join(parms["GTEST_ROOT"], "googlemock", "gtest", "Debug") - - # Build OpenVPN Connect - if parms.get("CONNECT"): - options['extra_inc'] += " /I " + os.path.join(parms['OVPN3'], "common") - - # build it - vc_cmd(parms, r"cl %(extra_defs)s /DNOMINMAX /D_CRT_SECURE_NO_WARNINGS /DUSE_ASIO /DASIO_STANDALONE /DASIO_NO_DEPRECATED /I %(asio)s\asio\include /DUSE_MBEDTLS /I %(mbedtls)s\include /DHAVE_LZ4 /I %(lz4)s%(extra_inc)s -DTAP_WIN_COMPONENT_ID=%(tap_component_id)s /I %(tap)s /I %(ovpn3)s\core /EHsc %(link_static_dynamic_flags)s /W0 %(dbg_rel_flags)s /nologo %(srcfile)s /link /LIBPATH:%(mbedtls)s\library /LIBPATH:%(lz4)s%(extra_lib_path)s mbedtls.lib lz4.lib%(extra_lib)s ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib shell32.lib ole32.lib rpcrt4.lib" % options, arch=os.environ.get("ARCH")) - -if __name__ == "__main__": - import sys - - params = read_params() - - src = src_fn_argv(params, sys.argv[1:]) - unit_test = is_unit_test(sys.argv[1:]) - build(params, src, unit_test) +#!/c/python27/python + +import os + +from utils import * + +def cli_cpp(parms): + return os.path.join(parms['OVPN3'], "core", "test", "ovpncli", "cli.cpp") + +def src_fn(parms, srcfile): + # Get source file name + if srcfile: + if '.' not in os.path.basename(srcfile): + srcfile += ".cpp" + else: + srcfile = cli_cpp(parms) + return srcfile + +def is_unit_test(argv): + unit_test = False + if len(argv) >= 2: + unit_test = argv[1] == "unittest" + return unit_test + +def src_fn_argv(parms, argv): + srcfile = None + if len(argv) >= 1: + srcfile = argv[0] + return src_fn(parms, srcfile) + +def build(parms, srcfile, unit_test=False): + # Debug? + if parms['DEBUG']: + dbg_rel_flags = "/Zi" + else: + dbg_rel_flags = "/O2" + + # Dictionary we will use to substitute parameters + # onto VC command line. + options = { + "ovpn3" : parms['OVPN3'], + "tap" : os.path.join(build_dir(parms), "tap-windows", "src"), + "tap_component_id" : parms['TAP_WIN_COMPONENT_ID'], + "asio" : os.path.join(build_dir(parms), "asio"), + "mbedtls" : os.path.join(build_dir(parms), "mbedtls"), + "lz4" : os.path.join(build_dir(parms), "lz4", "lib"), + "srcfile" : srcfile, + "extra_defs" : parms['CPP_EXTRA'], + "extra_inc" : "", + "extra_lib_path" : "", + "extra_lib" : "", + } + + vc_parms(parms, options) + + # Do we need to support XP and Win 2003? + arch = os.environ.get("ARCH", parms['ARCH']) + if arch == "x86_xp": + options['extra_defs'] += " /D_WIN32_WINNT=0x0501" # pre-Vista + else: + options['extra_defs'] += " /D_WIN32_WINNT=0x0600" # Vista and later + options['extra_lib'] += " fwpuclnt.lib" + + # Add jsoncpp (optional) + if parms.get('USE_JSONCPP'): + options["jsoncpp"] = os.path.join(build_dir(parms), "jsoncpp") + options['extra_inc'] += " /DHAVE_JSONCPP /I %(jsoncpp)s/dist" % options + options['extra_lib_path'] += " /LIBPATH:%(jsoncpp)s/dist" % options + options['extra_lib'] += " jsoncpp.lib" + + if unit_test: + options['extra_lib'] += " gtest.lib" + options['extra_inc'] += " /I %s" % os.path.join(parms["GTEST_ROOT"], "googletest", "include") + options['extra_lib_path'] += " /LIBPATH:%s" % os.path.join(parms["GTEST_ROOT"], "googlemock", "gtest", "Debug") + + # Build OpenVPN Connect + if parms.get("CONNECT"): + options['extra_inc'] += " /I " + os.path.join(parms['OVPN3'], "common") + + # build it + vc_cmd(parms, r"cl %(extra_defs)s /DNOMINMAX /D_CRT_SECURE_NO_WARNINGS /DUSE_ASIO /DASIO_STANDALONE /DASIO_NO_DEPRECATED /I %(asio)s\asio\include /DUSE_MBEDTLS /I %(mbedtls)s\include /DHAVE_LZ4 /I %(lz4)s%(extra_inc)s -DTAP_WIN_COMPONENT_ID=%(tap_component_id)s /I %(tap)s /I %(ovpn3)s\core /EHsc %(link_static_dynamic_flags)s /W0 %(dbg_rel_flags)s /nologo %(srcfile)s /link /LIBPATH:%(mbedtls)s\library /LIBPATH:%(lz4)s%(extra_lib_path)s mbedtls.lib lz4.lib%(extra_lib)s ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib shell32.lib ole32.lib rpcrt4.lib Wtsapi32.lib" % options, arch=os.environ.get("ARCH")) + +if __name__ == "__main__": + import sys + + params = read_params() + + src = src_fn_argv(params, sys.argv[1:]) + unit_test = is_unit_test(sys.argv[1:]) + build(params, src, unit_test) diff --git a/OpenVPN Adapter/Vendors/openvpn/win/buildep.py b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/buildep.py similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/win/buildep.py rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/buildep.py diff --git a/OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.sln b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.sln similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.sln rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.sln diff --git a/OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj index 5d670e8..bd9421d 100644 --- a/OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj @@ -1,516 +1,519 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {1F891260-2039-494F-9777-EC5166AF31BC} - ovpn3core - 8.1 - cli - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - TurnOffAllWarnings - Disabled - false - $(OVPN3_BUILD)\amd64\mbedtls\include;$(OVPN3_TAP_WINDOWS)\src;$(OVPN3_BUILD)\amd64\asio\asio\include;$(OVPN3_BUILD)\amd64\lz4\lib;$(OVPN3_CORE);%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) - %(AdditionalOptions) - - - true - $(OVPN3_BUILD)\amd64\mbedtls\library;$(OVPN3_BUILD)\amd64\lz4\lib;%(AdditionalLibraryDirectories) - lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) - - - - - TurnOffAllWarnings - Disabled - false - _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) - $(OVPN3_ROOT)\deps\amd64\mbedtls\include;$(OVPN3_ROOT)\deps\amd64\tap-windows\src;$(OVPN3_ROOT)\deps\amd64\asio\asio\include;$(OVPN3_ROOT)\deps\amd64\lz4\lib;$(OVPN3_ROOT)\core;%(AdditionalIncludeDirectories) - false - ProgramDatabase - /bigobj %(AdditionalOptions) - MultiThreadedDebug - - - true - $(OVPN3_ROOT)\deps\amd64\mbedtls\library;$(OVPN3_ROOT)\deps\amd64\lz4\lib;%(AdditionalLibraryDirectories) - lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib - NotSet - - - - - TurnOffAllWarnings - MaxSpeed - true - true - false - _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) - $(OVPN3_BUILD)\amd64\mbedtls\include;$(OVPN3_TAP_WINDOWS)\src;$(OVPN3_BUILD)\amd64\asio\asio\include;$(OVPN3_BUILD)\amd64\lz4\lib;$(OVPN3_CORE);%(AdditionalIncludeDirectories) - - - true - true - true - $(OVPN3_BUILD)\amd64\mbedtls\library;$(OVPN3_BUILD)\amd64\lz4\lib;%(AdditionalLibraryDirectories) - lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) - - - - - TurnOffAllWarnings - MaxSpeed - true - true - false - _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) - $(OVPN3_ROOT)\deps\amd64\mbedtls\include;$(OVPN3_ROOT)\deps\amd64\tap-windows\src;$(OVPN3_ROOT)\deps\amd64\asio\asio\include;$(OVPN3_ROOT)\deps\amd64\lz4\lib;$(OVPN3_ROOT)\core;%(AdditionalIncludeDirectories) - MultiThreaded - - - true - true - true - $(OVPN3_ROOT)\deps\amd64\mbedtls\library;$(OVPN3_ROOT)\deps\amd64\lz4\lib;%(AdditionalLibraryDirectories) - lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {1F891260-2039-494F-9777-EC5166AF31BC} + ovpn3core + 8.1 + cli + + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + + + + + + + + + TurnOffAllWarnings + Disabled + false + $(OVPN3_BUILD)\amd64\mbedtls\include;$(OVPN3_TAP_WINDOWS)\src;$(OVPN3_BUILD)\amd64\asio\asio\include;$(OVPN3_BUILD)\amd64\lz4\lib;$(OVPN3_CORE);%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) + %(AdditionalOptions) + + + true + $(OVPN3_BUILD)\amd64\mbedtls\library;$(OVPN3_BUILD)\amd64\lz4\lib;%(AdditionalLibraryDirectories) + lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) + + + + + TurnOffAllWarnings + Disabled + false + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) + $(OVPN3_ROOT)\deps\amd64\mbedtls\include;$(OVPN3_ROOT)\deps\amd64\tap-windows\src;$(OVPN3_ROOT)\deps\amd64\asio\asio\include;$(OVPN3_ROOT)\deps\amd64\lz4\lib;$(OVPN3_ROOT)\core;%(AdditionalIncludeDirectories) + false + ProgramDatabase + /bigobj %(AdditionalOptions) + MultiThreadedDebug + + + true + $(OVPN3_ROOT)\deps\amd64\mbedtls\library;$(OVPN3_ROOT)\deps\amd64\lz4\lib;%(AdditionalLibraryDirectories) + lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;Wtsapi32.lib + NotSet + + + + + TurnOffAllWarnings + MaxSpeed + true + true + false + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) + $(OVPN3_BUILD)\amd64\mbedtls\include;$(OVPN3_TAP_WINDOWS)\src;$(OVPN3_BUILD)\amd64\asio\asio\include;$(OVPN3_BUILD)\amd64\lz4\lib;$(OVPN3_CORE);%(AdditionalIncludeDirectories) + + + true + true + true + $(OVPN3_BUILD)\amd64\mbedtls\library;$(OVPN3_BUILD)\amd64\lz4\lib;%(AdditionalLibraryDirectories) + lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) + + + + + TurnOffAllWarnings + MaxSpeed + true + true + false + _CRT_SECURE_NO_WARNINGS;NOMINMAX;_WIN32_WINNT=0x0600;USE_ASIO;ASIO_STANDALONE;USE_MBEDTLS;HAVE_LZ4;TAP_WIN_COMPONENT_ID=tap0901;%(PreprocessorDefinitions) + $(OVPN3_ROOT)\deps\amd64\mbedtls\include;$(OVPN3_ROOT)\deps\amd64\tap-windows\src;$(OVPN3_ROOT)\deps\amd64\asio\asio\include;$(OVPN3_ROOT)\deps\amd64\lz4\lib;$(OVPN3_ROOT)\core;%(AdditionalIncludeDirectories) + MultiThreaded + + + true + true + true + $(OVPN3_ROOT)\deps\amd64\mbedtls\library;$(OVPN3_ROOT)\deps\amd64\lz4\lib;%(AdditionalLibraryDirectories) + lz4.lib;mbedtls.lib;fwpuclnt.lib;ws2_32.lib;crypt32.lib;iphlpapi.lib;winmm.lib;advapi32.lib;wininet.lib;shell32.lib;ole32.lib;rpcrt4.lib;%(AdditionalDependencies) + + + + + \ No newline at end of file diff --git a/OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj.filters b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj.filters similarity index 97% rename from OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj.filters rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj.filters index 7c6fe2c..dbc6aef 100644 --- a/OpenVPN Adapter/Vendors/openvpn/win/ovpn3-core.vcxproj.filters +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/ovpn3-core.vcxproj.filters @@ -1,384 +1,387 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OpenVPN Adapter/Vendors/openvpn/win/unused/buildep.py b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/unused/buildep.py similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/win/unused/buildep.py rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/unused/buildep.py diff --git a/OpenVPN Adapter/Vendors/openvpn/win/utils.py b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/utils.py similarity index 93% rename from OpenVPN Adapter/Vendors/openvpn/win/utils.py rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/utils.py index 2a2b85b..8b6ad1c 100644 --- a/OpenVPN Adapter/Vendors/openvpn/win/utils.py +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/utils.py @@ -223,8 +223,8 @@ def vc_cmd(parms, cmd, arch=None, succeed=0): arch = parms['ARCH'] if arch == "x64": arch = "amd64" - with ModEnv('PATH', "%s;%s\\VC" % (os.environ['PATH'], parms['MSVC_DIR'])): - status = call('vcvarsall.bat %s && %s' % (arch, cmd), shell=True, succeed=succeed) + with ModEnv('PATH', "%s;%s\\VC;%s\\VC\\Auxiliary\\Build;" % (os.environ['PATH'], parms['MSVC_DIR'], parms['MSVC_DIR'])): + call('vcvarsall.bat %s && %s' % (arch, cmd), shell=True, succeed=succeed) def vc_parms(parms, cmd_dict): cmd_dict["dbg_rel_flags"] = "/Zi" if parms['DEBUG'] else "/O2" @@ -292,7 +292,7 @@ def read_params(): params['ARCH'] = os.environ.get('ARCH', 'amd64').rstrip() params['DEBUG'] = os.environ.get('DEBUG') params['STATIC'] = os.environ.get('STATIC') - params['MSVC_DIR'] = os.environ.get('MSVC_DIR', 'c:\\Program Files (x86)\\Microsoft Visual Studio 14.0').rstrip() + params['MSVC_DIR'] = os.environ.get('MSVC_DIR', 'c:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional').rstrip() # Community: tap0901, Access Server: tapoas params['TAP_WIN_COMPONENT_ID'] = os.environ.get('TAP_WIN_COMPONENT_ID', 'tap0901') params['CPP_EXTRA'] = os.environ.get('CPP_EXTRA', '').rstrip() diff --git a/OpenVPN Adapter/Vendors/openvpn/win/vcvarsall.patch b/Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/vcvarsall.patch similarity index 100% rename from OpenVPN Adapter/Vendors/openvpn/win/vcvarsall.patch rename to Sources/OpenVPNAdapter/Libraries/Vendors/openvpn/win/vcvarsall.patch diff --git a/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h new file mode 100644 index 0000000..71ecf8c --- /dev/null +++ b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h @@ -0,0 +1,18 @@ +// +// NSArray+OpenVPNAdditions.h +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSArray (OpenVPNEmptyArray) + +@property (nonatomic, readonly) BOOL ovpn_isNotEmpty; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m new file mode 100644 index 0000000..1ded853 --- /dev/null +++ b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m @@ -0,0 +1,16 @@ +// +// NSArray+OpenVPNAdditions.m +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import "NSArray+OpenVPNAdditions.h" + +@implementation NSArray (OpenVPNEmptyArray) + +- (BOOL)ovpn_isNotEmpty { + return (self.count > 0) ? YES : NO; +} + +@end diff --git a/OpenVPN Adapter/NSError+OpenVPNError.h b/Sources/OpenVPNAdapter/NSError+OpenVPNError.h similarity index 100% rename from OpenVPN Adapter/NSError+OpenVPNError.h rename to Sources/OpenVPNAdapter/NSError+OpenVPNError.h diff --git a/OpenVPN Adapter/NSError+OpenVPNError.m b/Sources/OpenVPNAdapter/NSError+OpenVPNError.m similarity index 100% rename from OpenVPN Adapter/NSError+OpenVPNError.m rename to Sources/OpenVPNAdapter/NSError+OpenVPNError.m diff --git a/OpenVPN Adapter/OpenVPNAdapter.h b/Sources/OpenVPNAdapter/OpenVPNAdapter.h similarity index 100% rename from OpenVPN Adapter/OpenVPNAdapter.h rename to Sources/OpenVPNAdapter/OpenVPNAdapter.h diff --git a/OpenVPN Adapter/OpenVPNAdapter.mm b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm similarity index 83% rename from OpenVPN Adapter/OpenVPNAdapter.mm rename to Sources/OpenVPNAdapter/OpenVPNAdapter.mm index 58bdd17..8d4795c 100644 --- a/OpenVPN Adapter/OpenVPNAdapter.mm +++ b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm @@ -172,6 +172,7 @@ - (BOOL)addIPV4Address:(NSString *)address subnetMask:(NSString *)subnetMask gateway:(NSString *)gateway { self.networkSettingsBuilder.ipv4DefaultGateway = gateway; + [self.networkSettingsBuilder.ipv4LocalAddresses addObject:address]; [self.networkSettingsBuilder.ipv4SubnetMasks addObject:subnetMask]; @@ -180,6 +181,7 @@ - (BOOL)addIPV6Address:(NSString *)address prefixLength:(NSNumber *)prefixLength gateway:(NSString *)gateway { self.networkSettingsBuilder.ipv6DefaultGateway = gateway; + [self.networkSettingsBuilder.ipv6LocalAddresses addObject:address]; [self.networkSettingsBuilder.ipv6NetworkPrefixLengths addObject:prefixLength]; @@ -188,34 +190,78 @@ - (BOOL)addIPV4Route:(NEIPv4Route *)route { route.gatewayAddress = self.networkSettingsBuilder.ipv4DefaultGateway; - [self.networkSettingsBuilder.ipv4IncludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv4IncludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv4Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + [obj.destinationSubnetMask isEqualToString:route.destinationSubnetMask]; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv4IncludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)addIPV6Route:(NEIPv6Route *)route { route.gatewayAddress = self.networkSettingsBuilder.ipv6DefaultGateway; - [self.networkSettingsBuilder.ipv6IncludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv6IncludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv6Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + obj.destinationNetworkPrefixLength == route.destinationNetworkPrefixLength; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv6IncludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)excludeIPV4Route:(NEIPv4Route *)route { - [self.networkSettingsBuilder.ipv4ExcludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv4ExcludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv4Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + [obj.destinationSubnetMask isEqualToString:route.destinationSubnetMask]; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv4ExcludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)excludeIPV6Route:(NEIPv6Route *)route { - [self.networkSettingsBuilder.ipv6ExcludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv6ExcludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv6Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + obj.destinationNetworkPrefixLength == route.destinationNetworkPrefixLength; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv6ExcludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)addDNS:(NSString *)dns { + if ([self.networkSettingsBuilder.dnsServers containsObject:dns]) { + return NO; + } + [self.networkSettingsBuilder.dnsServers addObject:dns]; return YES; } - (BOOL)addSearchDomain:(NSString *)domain { + if ([self.networkSettingsBuilder.searchDomains containsObject:domain]) { + return NO; + } + [self.networkSettingsBuilder.searchDomains addObject:domain]; return YES; } @@ -231,6 +277,10 @@ } - (BOOL)addProxyBypassHost:(NSString *)bypassHost { + if ([self.networkSettingsBuilder.proxyExceptionList containsObject:bypassHost]) { + return NO; + } + [self.networkSettingsBuilder.proxyExceptionList addObject:bypassHost]; return YES; } @@ -260,7 +310,6 @@ - (BOOL)establishTunnel { NEPacketTunnelNetworkSettings *networkSettings = [self.networkSettingsBuilder networkSettings]; - if (!networkSettings) { return NO; } dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); diff --git a/OpenVPN Adapter/OpenVPNAdapterEvent.h b/Sources/OpenVPNAdapter/OpenVPNAdapterEvent.h similarity index 100% rename from OpenVPN Adapter/OpenVPNAdapterEvent.h rename to Sources/OpenVPNAdapter/OpenVPNAdapterEvent.h diff --git a/OpenVPN Adapter/OpenVPNAdapterPacketFlow.h b/Sources/OpenVPNAdapter/OpenVPNAdapterPacketFlow.h similarity index 100% rename from OpenVPN Adapter/OpenVPNAdapterPacketFlow.h rename to Sources/OpenVPNAdapter/OpenVPNAdapterPacketFlow.h diff --git a/OpenVPN Adapter/OpenVPNCertificate.h b/Sources/OpenVPNAdapter/OpenVPNCertificate.h similarity index 100% rename from OpenVPN Adapter/OpenVPNCertificate.h rename to Sources/OpenVPNAdapter/OpenVPNCertificate.h diff --git a/OpenVPN Adapter/OpenVPNCertificate.m b/Sources/OpenVPNAdapter/OpenVPNCertificate.m similarity index 100% rename from OpenVPN Adapter/OpenVPNCertificate.m rename to Sources/OpenVPNAdapter/OpenVPNCertificate.m diff --git a/OpenVPN Adapter/OpenVPNClient.h b/Sources/OpenVPNAdapter/OpenVPNClient.h similarity index 99% rename from OpenVPN Adapter/OpenVPNClient.h rename to Sources/OpenVPNAdapter/OpenVPNClient.h index 4ffad1e..1996e25 100644 --- a/OpenVPN Adapter/OpenVPNClient.h +++ b/Sources/OpenVPNAdapter/OpenVPNClient.h @@ -7,7 +7,7 @@ #import -#include +#include "ovpncli.hpp" @class NEIPv4Route; @class NEIPv6Route; diff --git a/OpenVPN Adapter/OpenVPNClient.mm b/Sources/OpenVPNAdapter/OpenVPNClient.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNClient.mm rename to Sources/OpenVPNAdapter/OpenVPNClient.mm diff --git a/OpenVPN Adapter/OpenVPNCompressionMode.h b/Sources/OpenVPNAdapter/OpenVPNCompressionMode.h similarity index 100% rename from OpenVPN Adapter/OpenVPNCompressionMode.h rename to Sources/OpenVPNAdapter/OpenVPNCompressionMode.h diff --git a/OpenVPN Adapter/OpenVPNConfiguration+Internal.h b/Sources/OpenVPNAdapter/OpenVPNConfiguration+Internal.h similarity index 97% rename from OpenVPN Adapter/OpenVPNConfiguration+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNConfiguration+Internal.h index 4bd4030..406149c 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNConfiguration.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNConfiguration.h b/Sources/OpenVPNAdapter/OpenVPNConfiguration.h similarity index 100% rename from OpenVPN Adapter/OpenVPNConfiguration.h rename to Sources/OpenVPNAdapter/OpenVPNConfiguration.h diff --git a/OpenVPN Adapter/OpenVPNConfiguration.mm b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm similarity index 99% rename from OpenVPN Adapter/OpenVPNConfiguration.mm rename to Sources/OpenVPNAdapter/OpenVPNConfiguration.mm index 8441471..f4d2fe9 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration.mm +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm @@ -248,7 +248,7 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; [settings enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) { ClientAPI::KeyValue param = ClientAPI::KeyValue(std::string([key UTF8String]), std::string([obj UTF8String])); - _config.contentList.push_back(param); + self->_config.contentList.push_back(param); }]; } @@ -424,7 +424,7 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; [peerInfo enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) { ClientAPI::KeyValue param = ClientAPI::KeyValue(std::string([key UTF8String]), std::string([obj UTF8String])); - _config.peerInfo.push_back(param); + self->_config.peerInfo.push_back(param); }]; } diff --git a/OpenVPN Adapter/OpenVPNConnectionInfo+Internal.h b/Sources/OpenVPNAdapter/OpenVPNConnectionInfo+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNConnectionInfo+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNConnectionInfo+Internal.h index c03fb21..19d255f 100644 --- a/OpenVPN Adapter/OpenVPNConnectionInfo+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNConnectionInfo+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNConnectionInfo.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNConnectionInfo.h b/Sources/OpenVPNAdapter/OpenVPNConnectionInfo.h similarity index 100% rename from OpenVPN Adapter/OpenVPNConnectionInfo.h rename to Sources/OpenVPNAdapter/OpenVPNConnectionInfo.h diff --git a/OpenVPN Adapter/OpenVPNConnectionInfo.mm b/Sources/OpenVPNAdapter/OpenVPNConnectionInfo.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNConnectionInfo.mm rename to Sources/OpenVPNAdapter/OpenVPNConnectionInfo.mm diff --git a/OpenVPN Adapter/OpenVPNCredentials+Internal.h b/Sources/OpenVPNAdapter/OpenVPNCredentials+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNCredentials+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNCredentials+Internal.h index 8cb7831..0b048bf 100644 --- a/OpenVPN Adapter/OpenVPNCredentials+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNCredentials+Internal.h @@ -7,7 +7,7 @@ // #import "OpenVPNCredentials.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNCredentials.h b/Sources/OpenVPNAdapter/OpenVPNCredentials.h similarity index 100% rename from OpenVPN Adapter/OpenVPNCredentials.h rename to Sources/OpenVPNAdapter/OpenVPNCredentials.h diff --git a/OpenVPN Adapter/OpenVPNCredentials.mm b/Sources/OpenVPNAdapter/OpenVPNCredentials.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNCredentials.mm rename to Sources/OpenVPNAdapter/OpenVPNCredentials.mm diff --git a/OpenVPN Adapter/OpenVPNError.h b/Sources/OpenVPNAdapter/OpenVPNError.h similarity index 100% rename from OpenVPN Adapter/OpenVPNError.h rename to Sources/OpenVPNAdapter/OpenVPNError.h diff --git a/OpenVPN Adapter/OpenVPNError.m b/Sources/OpenVPNAdapter/OpenVPNError.m similarity index 100% rename from OpenVPN Adapter/OpenVPNError.m rename to Sources/OpenVPNAdapter/OpenVPNError.m diff --git a/OpenVPN Adapter/OpenVPNIPv6Preference.h b/Sources/OpenVPNAdapter/OpenVPNIPv6Preference.h similarity index 100% rename from OpenVPN Adapter/OpenVPNIPv6Preference.h rename to Sources/OpenVPNAdapter/OpenVPNIPv6Preference.h diff --git a/OpenVPN Adapter/OpenVPNInterfaceStats+Internal.h b/Sources/OpenVPNAdapter/OpenVPNInterfaceStats+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNInterfaceStats+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNInterfaceStats+Internal.h index 735e605..ae8b127 100644 --- a/OpenVPN Adapter/OpenVPNInterfaceStats+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNInterfaceStats+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNInterfaceStats.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNInterfaceStats.h b/Sources/OpenVPNAdapter/OpenVPNInterfaceStats.h similarity index 97% rename from OpenVPN Adapter/OpenVPNInterfaceStats.h rename to Sources/OpenVPNAdapter/OpenVPNInterfaceStats.h index 37ae994..d18671e 100644 --- a/OpenVPN Adapter/OpenVPNInterfaceStats.h +++ b/Sources/OpenVPNAdapter/OpenVPNInterfaceStats.h @@ -29,7 +29,7 @@ @property (readonly, nonatomic) NSInteger packetsIn; /** - Amout of sent packets + Amount of sent packets */ @property (readonly, nonatomic) NSInteger packetsOut; diff --git a/OpenVPN Adapter/OpenVPNInterfaceStats.mm b/Sources/OpenVPNAdapter/OpenVPNInterfaceStats.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNInterfaceStats.mm rename to Sources/OpenVPNAdapter/OpenVPNInterfaceStats.mm diff --git a/OpenVPN Adapter/OpenVPNKeyType.h b/Sources/OpenVPNAdapter/OpenVPNKeyType.h similarity index 100% rename from OpenVPN Adapter/OpenVPNKeyType.h rename to Sources/OpenVPNAdapter/OpenVPNKeyType.h diff --git a/OpenVPN Adapter/OpenVPNMinTLSVersion.h b/Sources/OpenVPNAdapter/OpenVPNMinTLSVersion.h similarity index 100% rename from OpenVPN Adapter/OpenVPNMinTLSVersion.h rename to Sources/OpenVPNAdapter/OpenVPNMinTLSVersion.h diff --git a/OpenVPN Adapter/OpenVPNNetworkSettingsBuilder.h b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h similarity index 100% rename from OpenVPN Adapter/OpenVPNNetworkSettingsBuilder.h rename to Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h diff --git a/OpenVPN Adapter/OpenVPNNetworkSettingsBuilder.m b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m similarity index 89% rename from OpenVPN Adapter/OpenVPNNetworkSettingsBuilder.m rename to Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m index 11a31f1..10d5e5d 100644 --- a/OpenVPN Adapter/OpenVPNNetworkSettingsBuilder.m +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m @@ -9,6 +9,8 @@ #import +#import "NSArray+OpenVPNAdditions.h" + @interface OpenVPNNetworkSettingsBuilder () @property (nonatomic) NSMutableArray *ipv4LocalAddresses; @@ -33,11 +35,13 @@ #pragma mark - NEPacketTunnelNetworkSettings Generation - (NEPacketTunnelNetworkSettings *)networkSettings { - if (!self.remoteAddress.length) { return nil; } + NSAssert(self.remoteAddress != nil && self.remoteAddress.length > 0, @"Remote address is nil or empty."); NEPacketTunnelNetworkSettings *networkSettings = [[NEPacketTunnelNetworkSettings alloc] initWithTunnelRemoteAddress:self.remoteAddress]; - if (self.ipv4LocalAddresses.count && (self.ipv4LocalAddresses.count == self.ipv4SubnetMasks.count)) { + if (self.ipv4LocalAddresses.ovpn_isNotEmpty) { + NSAssert(self.ipv4LocalAddresses.count == self.ipv4SubnetMasks.count, @"Number of IPv4 addresses is not equal to number of IPv4 subnet masks."); + NEIPv4Settings *ipv4Settings = [[NEIPv4Settings alloc] initWithAddresses:self.ipv4LocalAddresses subnetMasks:self.ipv4SubnetMasks]; @@ -47,7 +51,9 @@ networkSettings.IPv4Settings = ipv4Settings; } - if (self.ipv6LocalAddresses.count && (self.ipv6LocalAddresses.count == self.ipv6NetworkPrefixLengths.count)) { + if (self.ipv6LocalAddresses.ovpn_isNotEmpty) { + NSAssert(self.ipv6LocalAddresses.count == self.ipv6NetworkPrefixLengths.count, @"Number of IPv6 addresses is not equal to number of IPv6 prefixes."); + NEIPv6Settings *ipv6Settings = [[NEIPv6Settings alloc] initWithAddresses:self.ipv6LocalAddresses networkPrefixLengths:self.ipv6NetworkPrefixLengths]; @@ -57,7 +63,7 @@ networkSettings.IPv6Settings = ipv6Settings; } - if (self.dnsServers.count) { + if (self.dnsServers.ovpn_isNotEmpty) { NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers]; dnsSettings.searchDomains = self.searchDomains; networkSettings.DNSSettings = dnsSettings; diff --git a/OpenVPN Adapter/OpenVPNPacket.h b/Sources/OpenVPNAdapter/OpenVPNPacket.h similarity index 100% rename from OpenVPN Adapter/OpenVPNPacket.h rename to Sources/OpenVPNAdapter/OpenVPNPacket.h diff --git a/OpenVPN Adapter/OpenVPNPacket.mm b/Sources/OpenVPNAdapter/OpenVPNPacket.mm similarity index 95% rename from OpenVPN Adapter/OpenVPNPacket.mm rename to Sources/OpenVPNAdapter/OpenVPNPacket.mm index 0846016..9acecae 100644 --- a/OpenVPN Adapter/OpenVPNPacket.mm +++ b/Sources/OpenVPNAdapter/OpenVPNPacket.mm @@ -9,7 +9,7 @@ #include -#include +#include @interface OpenVPNPacket () { NSData *_data; @@ -39,7 +39,7 @@ uint32_t protocol = PF_UNSPEC; - uint32_t version = openvpn::IPHeader::version(header); + uint32_t version = openvpn::IPCommon::version(header); switch (version) { case 4: protocol = PF_INET; diff --git a/OpenVPN Adapter/OpenVPNPacketFlowBridge.h b/Sources/OpenVPNAdapter/OpenVPNPacketFlowBridge.h similarity index 100% rename from OpenVPN Adapter/OpenVPNPacketFlowBridge.h rename to Sources/OpenVPNAdapter/OpenVPNPacketFlowBridge.h diff --git a/OpenVPN Adapter/OpenVPNPacketFlowBridge.mm b/Sources/OpenVPNAdapter/OpenVPNPacketFlowBridge.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNPacketFlowBridge.mm rename to Sources/OpenVPNAdapter/OpenVPNPacketFlowBridge.mm diff --git a/OpenVPN Adapter/OpenVPNPrivateKey.h b/Sources/OpenVPNAdapter/OpenVPNPrivateKey.h similarity index 100% rename from OpenVPN Adapter/OpenVPNPrivateKey.h rename to Sources/OpenVPNAdapter/OpenVPNPrivateKey.h diff --git a/OpenVPN Adapter/OpenVPNPrivateKey.m b/Sources/OpenVPNAdapter/OpenVPNPrivateKey.m similarity index 100% rename from OpenVPN Adapter/OpenVPNPrivateKey.m rename to Sources/OpenVPNAdapter/OpenVPNPrivateKey.m diff --git a/OpenVPN Adapter/OpenVPNProperties+Internal.h b/Sources/OpenVPNAdapter/OpenVPNProperties+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNProperties+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNProperties+Internal.h index d6bee9a..a276e2c 100644 --- a/OpenVPN Adapter/OpenVPNProperties+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNProperties+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNProperties.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNProperties.h b/Sources/OpenVPNAdapter/OpenVPNProperties.h similarity index 100% rename from OpenVPN Adapter/OpenVPNProperties.h rename to Sources/OpenVPNAdapter/OpenVPNProperties.h diff --git a/OpenVPN Adapter/OpenVPNProperties.mm b/Sources/OpenVPNAdapter/OpenVPNProperties.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNProperties.mm rename to Sources/OpenVPNAdapter/OpenVPNProperties.mm diff --git a/OpenVPN Adapter/OpenVPNReachability+Internal.h b/Sources/OpenVPNAdapter/OpenVPNReachability+Internal.h similarity index 100% rename from OpenVPN Adapter/OpenVPNReachability+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNReachability+Internal.h diff --git a/OpenVPN Adapter/OpenVPNReachability.h b/Sources/OpenVPNAdapter/OpenVPNReachability.h similarity index 100% rename from OpenVPN Adapter/OpenVPNReachability.h rename to Sources/OpenVPNAdapter/OpenVPNReachability.h diff --git a/OpenVPN Adapter/OpenVPNReachability.mm b/Sources/OpenVPNAdapter/OpenVPNReachability.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNReachability.mm rename to Sources/OpenVPNAdapter/OpenVPNReachability.mm diff --git a/OpenVPN Adapter/OpenVPNReachabilityStatus.h b/Sources/OpenVPNAdapter/OpenVPNReachabilityStatus.h similarity index 100% rename from OpenVPN Adapter/OpenVPNReachabilityStatus.h rename to Sources/OpenVPNAdapter/OpenVPNReachabilityStatus.h diff --git a/OpenVPN Adapter/OpenVPNReachabilityTracker.h b/Sources/OpenVPNAdapter/OpenVPNReachabilityTracker.h similarity index 100% rename from OpenVPN Adapter/OpenVPNReachabilityTracker.h rename to Sources/OpenVPNAdapter/OpenVPNReachabilityTracker.h diff --git a/OpenVPN Adapter/OpenVPNReachabilityTracker.mm b/Sources/OpenVPNAdapter/OpenVPNReachabilityTracker.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNReachabilityTracker.mm rename to Sources/OpenVPNAdapter/OpenVPNReachabilityTracker.mm diff --git a/OpenVPN Adapter/OpenVPNServerEntry+Internal.h b/Sources/OpenVPNAdapter/OpenVPNServerEntry+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNServerEntry+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNServerEntry+Internal.h index b4e44fe..0ef67b3 100644 --- a/OpenVPN Adapter/OpenVPNServerEntry+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNServerEntry+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNServerEntry.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNServerEntry.h b/Sources/OpenVPNAdapter/OpenVPNServerEntry.h similarity index 100% rename from OpenVPN Adapter/OpenVPNServerEntry.h rename to Sources/OpenVPNAdapter/OpenVPNServerEntry.h diff --git a/OpenVPN Adapter/OpenVPNServerEntry.mm b/Sources/OpenVPNAdapter/OpenVPNServerEntry.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNServerEntry.mm rename to Sources/OpenVPNAdapter/OpenVPNServerEntry.mm diff --git a/OpenVPN Adapter/OpenVPNSessionToken+Internal.h b/Sources/OpenVPNAdapter/OpenVPNSessionToken+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNSessionToken+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNSessionToken+Internal.h index b1c9026..1ee326f 100644 --- a/OpenVPN Adapter/OpenVPNSessionToken+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNSessionToken+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNSessionToken.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNSessionToken.h b/Sources/OpenVPNAdapter/OpenVPNSessionToken.h similarity index 100% rename from OpenVPN Adapter/OpenVPNSessionToken.h rename to Sources/OpenVPNAdapter/OpenVPNSessionToken.h diff --git a/OpenVPN Adapter/OpenVPNSessionToken.mm b/Sources/OpenVPNAdapter/OpenVPNSessionToken.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNSessionToken.mm rename to Sources/OpenVPNAdapter/OpenVPNSessionToken.mm diff --git a/OpenVPN Adapter/OpenVPNTLSCertProfile.h b/Sources/OpenVPNAdapter/OpenVPNTLSCertProfile.h similarity index 100% rename from OpenVPN Adapter/OpenVPNTLSCertProfile.h rename to Sources/OpenVPNAdapter/OpenVPNTLSCertProfile.h diff --git a/OpenVPN Adapter/OpenVPNTransportProtocol.h b/Sources/OpenVPNAdapter/OpenVPNTransportProtocol.h similarity index 100% rename from OpenVPN Adapter/OpenVPNTransportProtocol.h rename to Sources/OpenVPNAdapter/OpenVPNTransportProtocol.h diff --git a/OpenVPN Adapter/OpenVPNTransportStats+Internal.h b/Sources/OpenVPNAdapter/OpenVPNTransportStats+Internal.h similarity index 90% rename from OpenVPN Adapter/OpenVPNTransportStats+Internal.h rename to Sources/OpenVPNAdapter/OpenVPNTransportStats+Internal.h index df7e129..bd8eea0 100644 --- a/OpenVPN Adapter/OpenVPNTransportStats+Internal.h +++ b/Sources/OpenVPNAdapter/OpenVPNTransportStats+Internal.h @@ -8,7 +8,7 @@ #import "OpenVPNTransportStats.h" -#include +#include "ovpncli.hpp" using namespace openvpn; diff --git a/OpenVPN Adapter/OpenVPNTransportStats.h b/Sources/OpenVPNAdapter/OpenVPNTransportStats.h similarity index 96% rename from OpenVPN Adapter/OpenVPNTransportStats.h rename to Sources/OpenVPNAdapter/OpenVPNTransportStats.h index c7888e2..ca78bcb 100644 --- a/OpenVPN Adapter/OpenVPNTransportStats.h +++ b/Sources/OpenVPNAdapter/OpenVPNTransportStats.h @@ -29,7 +29,7 @@ @property (readonly, nonatomic) NSInteger packetsIn; /** - Amout of sent packets + Amount of sent packets */ @property (readonly, nonatomic) NSInteger packetsOut; diff --git a/OpenVPN Adapter/OpenVPNTransportStats.mm b/Sources/OpenVPNAdapter/OpenVPNTransportStats.mm similarity index 100% rename from OpenVPN Adapter/OpenVPNTransportStats.mm rename to Sources/OpenVPNAdapter/OpenVPNTransportStats.mm diff --git a/OpenVPN Adapter/Umbrella-Header.h b/Sources/OpenVPNAdapter/Umbrella-Header.h similarity index 100% rename from OpenVPN Adapter/Umbrella-Header.h rename to Sources/OpenVPNAdapter/Umbrella-Header.h diff --git a/OpenVPN Adapter Tests/Bundle.swift b/Tests/Bundle.swift similarity index 100% rename from OpenVPN Adapter Tests/Bundle.swift rename to Tests/Bundle.swift diff --git a/OpenVPN Adapter Tests/CustomFlow.swift b/Tests/CustomFlow.swift similarity index 100% rename from OpenVPN Adapter Tests/CustomFlow.swift rename to Tests/CustomFlow.swift diff --git a/OpenVPN Adapter Tests/OpenVPNAdapterTests.swift b/Tests/OpenVPNAdapterTests.swift similarity index 64% rename from OpenVPN Adapter Tests/OpenVPNAdapterTests.swift rename to Tests/OpenVPNAdapterTests.swift index 40a83f6..eb3a29d 100644 --- a/OpenVPN Adapter Tests/OpenVPNAdapterTests.swift +++ b/Tests/OpenVPNAdapterTests.swift @@ -30,12 +30,14 @@ class OpenVPNAdapterTests: XCTestCase { } func testApplyConfiguration() { + guard let vpnConfiguration = VPNProfile.configuration.data(using: .utf8) else { fatalError() } + let adapter = OpenVPNAdapter() - + let configuration = OpenVPNConfiguration() - configuration.fileContent = ProfileLoader.getVPNProfile(type: .localVPNServer) + configuration.fileContent = vpnConfiguration configuration.settings = ["auth-user-pass": ""] - + let result: OpenVPNProperties do { result = try adapter.apply(configuration: configuration) @@ -43,10 +45,9 @@ class OpenVPNAdapterTests: XCTestCase { XCTFail("Failed to configure OpenVPN adapted due to error: \(error)") return } - - XCTAssert(result.remoteHost == "192.168.1.200") - XCTAssert(result.remotePort == 1194) - XCTAssert(result.remoteProto == .UDP) + + XCTAssert(result.remoteHost == VPNProfile.remoteHost) + XCTAssert(result.remotePort == VPNProfile.remotePort) XCTAssert(result.autologin == false) } @@ -65,13 +66,15 @@ class OpenVPNAdapterTests: XCTestCase { } } - // Test connection with local VPN server - func testLocalConection() { - let adapter = OpenVPNAdapter() + + // Test connection to the VPN server + func testConnection() { + guard let vpnConfiguration = VPNProfile.configuration.data(using: .utf8) else { fatalError() } + let adapter = OpenVPNAdapter() + let configuration = OpenVPNConfiguration() - configuration.fileContent = ProfileLoader.getVPNProfile(type: .localVPNServer) - configuration.settings = ["auth-user-pass": ""] + configuration.fileContent = vpnConfiguration let result: OpenVPNProperties do { @@ -81,51 +84,24 @@ class OpenVPNAdapterTests: XCTestCase { return } - guard !result.autologin else { - XCTFail() - return + if !result.autologin { + let credentials = OpenVPNCredentials() + credentials.username = VPNProfile.username + credentials.password = VPNProfile.password + + do { + try adapter.provide(credentials: credentials) + } catch { + XCTFail("Failed to provide credentials. \(error)") + return + } } - - let credentials = OpenVPNCredentials() - credentials.username = "testuser" - credentials.password = "nonsecure" - - do { - try adapter.provide(credentials: credentials) - } catch { - XCTFail("Failed to provide credentials. \(error)") - return - } - + expectations[.connection] = expectation(description: "me.ss-abramchuk.openvpn-adapter.connection") - + adapter.delegate = self adapter.connect() - - waitForExpectations(timeout: 30.0) { (error) in - adapter.disconnect() - } - } - - // Test connection with remote VPN server - func testRemoteConnection() { - let adapter = OpenVPNAdapter() - - let configuration = OpenVPNConfiguration() - configuration.fileContent = ProfileLoader.getVPNProfile(type: .remoteVPNServer) - - do { - _ = try adapter.apply(configuration: configuration) - } catch { - XCTFail("Failed to configure OpenVPN adapted due to error: \(error)") - return - } - - expectations[.connection] = expectation(description: "me.ss-abramchuk.openvpn-adapter.connection") - - adapter.delegate = self - adapter.connect() - + waitForExpectations(timeout: 30.0) { (error) in adapter.disconnect() } @@ -155,9 +131,11 @@ extension OpenVPNAdapterTests: OpenVPNAdapterDelegate { func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, handleError error: Error) { if let connectionExpectation = expectations[.connection] { - XCTFail("Failed to establish conection. \(error.localizedDescription)") + XCTFail("Failed to establish conection.") connectionExpectation.fulfill() } + + dump(error) } func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, handleLogMessage logMessage: String) { diff --git a/OpenVPN Adapter Tests/OpenVPNCertificateTests.swift b/Tests/OpenVPNCertificateTests.swift similarity index 100% rename from OpenVPN Adapter Tests/OpenVPNCertificateTests.swift rename to Tests/OpenVPNCertificateTests.swift diff --git a/OpenVPN Adapter Tests/OpenVPNConfigurationTests.swift b/Tests/OpenVPNConfigurationTests.swift similarity index 97% rename from OpenVPN Adapter Tests/OpenVPNConfigurationTests.swift rename to Tests/OpenVPNConfigurationTests.swift index dcb2aef..7b5e343 100644 --- a/OpenVPN Adapter Tests/OpenVPNConfigurationTests.swift +++ b/Tests/OpenVPNConfigurationTests.swift @@ -24,7 +24,7 @@ class OpenVPNConfigurationTests: XCTestCase { } func testGetSetProfile() { - let originalProfile = ProfileLoader.getVPNProfile(type: .localVPNServer) + guard let originalProfile = VPNProfile.configuration.data(using: .utf8) else { fatalError() } let configuration = OpenVPNConfiguration() diff --git a/OpenVPN Adapter Tests/OpenVPNPrivateKeyTests.swift b/Tests/OpenVPNPrivateKeyTests.swift similarity index 100% rename from OpenVPN Adapter Tests/OpenVPNPrivateKeyTests.swift rename to Tests/OpenVPNPrivateKeyTests.swift diff --git a/OpenVPN Adapter Tests/OpenVPNReachabilityTests.swift b/Tests/OpenVPNReachabilityTests.swift similarity index 100% rename from OpenVPN Adapter Tests/OpenVPNReachabilityTests.swift rename to Tests/OpenVPNReachabilityTests.swift diff --git a/OpenVPN Adapter Tests/Resources/keyfile-decrypted.3des b/Tests/Resources/keyfile-decrypted.3des similarity index 100% rename from OpenVPN Adapter Tests/Resources/keyfile-decrypted.3des rename to Tests/Resources/keyfile-decrypted.3des diff --git a/OpenVPN Adapter Tests/Resources/keyfile-encrypted.3des b/Tests/Resources/keyfile-encrypted.3des similarity index 100% rename from OpenVPN Adapter Tests/Resources/keyfile-encrypted.3des rename to Tests/Resources/keyfile-encrypted.3des diff --git a/OpenVPN Adapter Tests/Resources/test-ca.crt b/Tests/Resources/test-ca.crt similarity index 100% rename from OpenVPN Adapter Tests/Resources/test-ca.crt rename to Tests/Resources/test-ca.crt diff --git a/Tests/VPNProfile.swift b/Tests/VPNProfile.swift new file mode 100644 index 0000000..1b7d9ba --- /dev/null +++ b/Tests/VPNProfile.swift @@ -0,0 +1,19 @@ +// +// VPNProfile.swift +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 27/09/2018. +// +// Do not commit changes of this file to the repo! + +import Foundation + +struct VPNProfile { + static let username: String = <#OPENVPN_USERNAME#> + static let password: String = <#OPENVPN_PASSWORD#> + + static let configuration: String = <#OPENVPN_CONFIGURATION#> + + static let remoteHost: String = <#OPENVPN_REMOTE_HOST#> + static let remotePort: Int = <#OPENVPN_REMOTE_PORT#> +}