mirror of
https://github.com/deneraraujo/OpenVPNAdapter.git
synced 2026-01-31 00:00:06 +08:00
Merge commit 'a01ecd6c88c0360f8e19eb6493590d0b5b77350c' into feature/update-dependencies
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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 <antonio@openvpn.net>
|
||||
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 <antonio@openvpn.net>
|
||||
---
|
||||
@@ -9,10 +9,10 @@ Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
|
||||
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
|
||||
|
||||
|
||||
@@ -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 <lev@openvpn.net>
|
||||
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 <lev@openvpn.net>
|
||||
---
|
||||
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
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
From 56df6d5003b20fa673b67fb06c2ec03a8197c4c2 Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Quartulli <antonio@openvpn.net>
|
||||
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 <antonio@openvpn.net>
|
||||
---
|
||||
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
|
||||
|
||||
@@ -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( \
|
||||
@@ -1,128 +0,0 @@
|
||||
From bb029567d8a2b55e500a85c916a8d22ae9434ab3 Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Quartulli <antonio@openvpn.net>
|
||||
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 <antonio@openvpn.net>
|
||||
---
|
||||
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
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
From d09cecb5f7d1e66476c97a35caee7248930ef425 Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Quartulli <a@unstable.cc>
|
||||
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 <antonio@openvpn.net>
|
||||
---
|
||||
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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,604 +0,0 @@
|
||||
From 7ed2575f310fd889fba025aa760f74ec1b41924b Mon Sep 17 00:00:00 2001
|
||||
From: Antonio Quartulli <antonio@openvpn.net>
|
||||
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 <antonio@openvpn.net>
|
||||
---
|
||||
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
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 5d31999442a41c154f6c56e91c8fe7705c74e2be Mon Sep 17 00:00:00 2001
|
||||
From: Arne Schwabe <arne@rfc2549.org>
|
||||
Date: Thu, 28 Dec 2017 00:19:10 +0100
|
||||
Subject: [PATCH] Use current cmake directory instead of source root directory
|
||||
when exuting config.pl
|
||||
|
||||
When mdbedtls is added as a subdirectory to another project this will
|
||||
call config.pl with the right path If mbedtls is build standalone
|
||||
current and root source directory are identical.
|
||||
|
||||
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
|
||||
---
|
||||
CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 3e47224ea1..2883eff270 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -31,7 +31,7 @@ find_package(Perl)
|
||||
if(PERL_FOUND)
|
||||
|
||||
# If NULL Entropy is configured, display an appropriate warning
|
||||
- execute_process(COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/config.pl -f ${CMAKE_SOURCE_DIR}/include/mbedtls/config.h get MBEDTLS_TEST_NULL_ENTROPY
|
||||
+ execute_process(COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/config.pl -f ${CMAKE_CURRENT_SOURCE_DIR}/include/mbedtls/config.h get MBEDTLS_TEST_NULL_ENTROPY
|
||||
RESULT_VARIABLE result)
|
||||
if(${result} EQUAL 0)
|
||||
message(WARNING ${NULL_ENTROPY_WARNING})
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace openvpn {
|
||||
// Add range of addresses to pool (pool will own the addresses).
|
||||
void add_range(const RangeType<ADDR>& range)
|
||||
{
|
||||
typename RangeType<ADDR>::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<ADDR, bool>::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<ADDR, bool>::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<ADDR, bool>::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<ADDR, bool>::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<ADDR> freelist;
|
||||
std::unordered_map<ADDR, bool> map;
|
||||
|
||||
@@ -28,18 +28,26 @@
|
||||
namespace openvpn {
|
||||
namespace IP {
|
||||
|
||||
inline IPv4::Addr random_addr_v4(RandomAPI& prng)
|
||||
{
|
||||
return IPv4::Addr::from_uint32(prng.rand_get<std::uint32_t>());
|
||||
}
|
||||
|
||||
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(IPv4::Addr::from_uint32(prng.rand_get<std::uint32_t>()));
|
||||
return Addr::from_ipv4(random_addr_v4(prng));
|
||||
case Addr::V6:
|
||||
{
|
||||
unsigned char bytes[16];
|
||||
prng.rand_fill(bytes);
|
||||
return Addr::from_ipv6(IPv6::Addr::from_byte_string(bytes));
|
||||
}
|
||||
return Addr::from_ipv6(random_addr_v6(prng));
|
||||
default:
|
||||
throw ip_exception("address unspecified");
|
||||
}
|
||||
|
||||
@@ -40,8 +40,9 @@ namespace openvpn {
|
||||
namespace IP {
|
||||
// Basic route object
|
||||
template <typename ADDR>
|
||||
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<IPv4::Addr> to_ipv4() const
|
||||
{
|
||||
return RouteType<IPv4::Addr>(addr.to_ipv4(), prefix_len);
|
||||
}
|
||||
|
||||
RouteType<IPv6::Addr> to_ipv6() const
|
||||
{
|
||||
return RouteType<IPv6::Addr>(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;
|
||||
@@ -201,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 <typename ADDR>
|
||||
@@ -229,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 <typename R>
|
||||
|
||||
@@ -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 <typename, typename> friend class BufferAllocatedType;
|
||||
|
||||
public:
|
||||
typedef T value_type;
|
||||
typedef T* type;
|
||||
typedef const T* const_type;
|
||||
typedef typename std::remove_const<T>::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_)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
namespace openvpn {
|
||||
namespace bigmutex {
|
||||
std::recursive_mutex the_recursive_mutex;
|
||||
OPENVPN_EXTERN std::recursive_mutex the_recursive_mutex;
|
||||
}
|
||||
|
||||
#ifdef OPENVPN_ENABLE_BIGMUTEX
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,12 +35,14 @@
|
||||
#include <sys/types.h> // for lseek, open
|
||||
#include <sys/stat.h> // for open
|
||||
#include <fcntl.h> // for open
|
||||
#include <cstdint>
|
||||
|
||||
#include <openvpn/common/exception.hpp>
|
||||
#include <openvpn/common/size.hpp>
|
||||
#include <openvpn/common/scoped_fd.hpp>
|
||||
#include <openvpn/common/write.hpp>
|
||||
#include <openvpn/common/strerror.hpp>
|
||||
#include <openvpn/common/modstat.hpp>
|
||||
#include <openvpn/buffer/bufread.hpp>
|
||||
|
||||
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
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include <cstddef> // for std::size_t
|
||||
#include <utility> // for std::move
|
||||
#include <type_traits>
|
||||
#include <new>
|
||||
|
||||
namespace openvpn {
|
||||
@@ -35,7 +36,7 @@ namespace openvpn {
|
||||
template <typename F, std::size_t N=3, bool INTERN_ONLY=false>
|
||||
class Function;
|
||||
|
||||
template <typename R, typename ... A, std::size_t N, bool INTERN_ONLY>
|
||||
template <typename R, typename... A, std::size_t N, bool INTERN_ONLY>
|
||||
class Function<R(A...), N, INTERN_ONLY>
|
||||
{
|
||||
public:
|
||||
@@ -92,7 +93,7 @@ namespace openvpn {
|
||||
}
|
||||
}
|
||||
|
||||
R operator()(A... args)
|
||||
R operator()(A... args) const
|
||||
{
|
||||
return methods->invoke(data, std::forward<A>(args)...);
|
||||
}
|
||||
@@ -103,6 +104,7 @@ namespace openvpn {
|
||||
}
|
||||
|
||||
private:
|
||||
#ifdef _MSC_VER
|
||||
template <typename T>
|
||||
void construct(T&& functor) noexcept
|
||||
{
|
||||
@@ -123,10 +125,38 @@ namespace openvpn {
|
||||
new (data) Extern<T>(std::move(functor));
|
||||
}
|
||||
}
|
||||
#else
|
||||
template <typename T>
|
||||
static constexpr bool is_intern()
|
||||
{
|
||||
return sizeof(Intern<T>) <= sizeof(data);
|
||||
}
|
||||
|
||||
template <typename T,
|
||||
typename std::enable_if<is_intern<T>(), int>::type = 0>
|
||||
void construct(T&& functor) noexcept
|
||||
{
|
||||
// store functor internally (in data)
|
||||
setup_methods_intern<T>();
|
||||
new (data) Intern<T>(std::move(functor));
|
||||
}
|
||||
|
||||
template <typename T,
|
||||
typename std::enable_if<!is_intern<T>(), int>::type = 0>
|
||||
void construct(T&& functor) noexcept
|
||||
{
|
||||
static_assert(!INTERN_ONLY, "Function: Intern<T> doesn't fit in data[] and INTERN_ONLY=true");
|
||||
static_assert(sizeof(Extern<T>) <= sizeof(data), "Function: Extern<T> doesn't fit in data[]");
|
||||
|
||||
// store functor externally (using new)
|
||||
setup_methods_extern<T>();
|
||||
new (data) Extern<T>(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<Intern<T>*>(ptr);
|
||||
Intern* self = reinterpret_cast<Intern*>(ptr);
|
||||
return self->functor_(std::forward<A>(args)...);
|
||||
}
|
||||
|
||||
static void move(void *dest, void *src)
|
||||
{
|
||||
Intern* s = reinterpret_cast<Intern<T>*>(src);
|
||||
Intern* s = reinterpret_cast<Intern*>(src);
|
||||
new (dest) Intern(std::move(*s));
|
||||
}
|
||||
|
||||
static void destruct(void *ptr)
|
||||
{
|
||||
Intern* self = reinterpret_cast<Intern<T>*>(ptr);
|
||||
Intern* self = reinterpret_cast<Intern*>(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<Extern<T>*>(ptr);
|
||||
Extern* self = reinterpret_cast<Extern *>(ptr);
|
||||
return (*self->functor_)(std::forward<A>(args)...);
|
||||
}
|
||||
|
||||
static void move(void *dest, void *src)
|
||||
{
|
||||
Extern* d = reinterpret_cast<Extern<T>*>(dest);
|
||||
Extern* s = reinterpret_cast<Extern<T>*>(src);
|
||||
Extern* d = reinterpret_cast<Extern*>(dest);
|
||||
Extern* s = reinterpret_cast<Extern*>(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<Extern<T>*>(ptr);
|
||||
Extern* self = reinterpret_cast<Extern*>(ptr);
|
||||
delete self->functor_;
|
||||
}
|
||||
|
||||
@@ -220,7 +250,7 @@ namespace openvpn {
|
||||
};
|
||||
|
||||
const Methods* methods;
|
||||
void* data[N];
|
||||
mutable void* data[N];
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fcntl.h> // Definition of AT_* constants */
|
||||
#include <sys/stat.h>
|
||||
#include <cstdint> // for std::uint64_t
|
||||
#include <cerrno>
|
||||
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <openvpn/common/exception.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
|
||||
OPENVPN_EXCEPTION(option_error);
|
||||
|
||||
}
|
||||
@@ -57,7 +57,6 @@
|
||||
#include <cstdint> // for std::uint64_t
|
||||
|
||||
#include <openvpn/common/rc.hpp>
|
||||
#include <openvpn/common/exception.hpp>
|
||||
#include <openvpn/common/size.hpp>
|
||||
#include <openvpn/common/number.hpp>
|
||||
#include <openvpn/common/hexstr.hpp>
|
||||
@@ -65,11 +64,10 @@
|
||||
#include <openvpn/common/split.hpp>
|
||||
#include <openvpn/common/splitlines.hpp>
|
||||
#include <openvpn/common/unicode.hpp>
|
||||
#include <openvpn/common/option_error.hpp>
|
||||
|
||||
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.
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
namespace openvpn {
|
||||
inline std::string strerror_str(const int errnum)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -93,6 +93,7 @@ namespace openvpn {
|
||||
|
||||
public:
|
||||
enum status {
|
||||
undefined,
|
||||
pending,
|
||||
fail,
|
||||
success,
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include <openvpn/common/size.hpp>
|
||||
#include <openvpn/common/arraysize.hpp>
|
||||
#include <openvpn/common/core.hpp>
|
||||
#include <openvpn/kovpn/kovpn.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
@@ -57,7 +58,7 @@ namespace openvpn {
|
||||
void output_percpu(std::ostream& os) const
|
||||
{
|
||||
std::unique_ptr<struct ovpn_percpu_stats> pcs;
|
||||
unsigned int stats_cap = 16;
|
||||
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) +
|
||||
|
||||
@@ -24,10 +24,12 @@
|
||||
#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 <openvpn/io/io.hpp>
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
|
||||
extern "C" {
|
||||
#include <kovpn/kovpn.h>
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -25,13 +25,15 @@
|
||||
#define OPENVPN_TIME_TIMESTR_H
|
||||
|
||||
#include <string>
|
||||
#include <cstring> // for std::strlen
|
||||
#include <cstring> // for std::strlen and std::memset
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <cstdint> // for std::uint64_t
|
||||
|
||||
#include <openvpn/common/platform.hpp>
|
||||
#include <openvpn/common/size.hpp>
|
||||
#include <openvpn/common/string.hpp>
|
||||
|
||||
#if defined(OPENVPN_PLATFORM_WIN)
|
||||
#include <windows.h>
|
||||
@@ -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<unsigned int>(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;
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <cstdint> // for std::uint32_t, etc.
|
||||
|
||||
#include <openvpn/common/exception.hpp>
|
||||
#include <openvpn/common/options.hpp>
|
||||
#include <openvpn/common/option_error.hpp>
|
||||
#include <openvpn/common/string.hpp>
|
||||
#include <openvpn/addr/ip.hpp>
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <openvpn/tun/mac/utun.hpp>
|
||||
#include <openvpn/tun/mac/macgw.hpp>
|
||||
#include <openvpn/tun/mac/macdns_watchdog.hpp>
|
||||
#include <openvpn/tun/proxy.hpp>
|
||||
#include <openvpn/tun/mac/macproxy.hpp>
|
||||
#include <openvpn/tun/builder/rgwflags.hpp>
|
||||
#include <openvpn/tun/builder/setup.hpp>
|
||||
|
||||
@@ -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<MacProxySettings>(pull, create, destroy);
|
||||
}
|
||||
|
||||
ActionList::Ptr remove_cmds;
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#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<const void *[]> keys(new const void *[size]);
|
||||
std::unique_ptr<const void *[]> 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");
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <openvpn/apple/scdynstore.hpp>
|
||||
#include <openvpn/apple/cf/cfhelper.hpp>
|
||||
#include <openvpn/tun/builder/capture.hpp>
|
||||
#include <openvpn/tun/mac/dsdict.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
class MacDNS : public RC<thread_unsafe_refcount>
|
||||
@@ -141,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)
|
||||
@@ -317,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<const void *[]> keys(new const void *[size]);
|
||||
std::unique_ptr<const void *[]> 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<thread_unsafe_refcount>
|
||||
{
|
||||
public:
|
||||
@@ -510,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;
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <openvpn/tun/proxy.hpp>
|
||||
#include <openvpn/tun/mac/dsdict.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
class MacProxySettings : public ProxySettings
|
||||
{
|
||||
public:
|
||||
OPENVPN_EXCEPTION(macproxy_error);
|
||||
|
||||
typedef RCPtr<MacProxySettings> Ptr;
|
||||
|
||||
class Info : public RC<thread_unsafe_refcount>
|
||||
{
|
||||
public:
|
||||
typedef RCPtr<Info> 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());
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <openvpn/common/action.hpp>
|
||||
#include <openvpn/tun/builder/capture.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
class ProxySettings : public RC<thread_unsafe_refcount>
|
||||
{
|
||||
public:
|
||||
OPENVPN_EXCEPTION(proxy_error);
|
||||
|
||||
typedef RCPtr<ProxySettings> Ptr;
|
||||
|
||||
class ProxyAction : public Action
|
||||
{
|
||||
public:
|
||||
typedef RCPtr<ProxyAction> 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<class T>
|
||||
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;
|
||||
};
|
||||
}
|
||||
@@ -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 <openvpn/common/string.hpp>
|
||||
#include <openvpn/common/size.hpp>
|
||||
#include <openvpn/common/arraysize.hpp>
|
||||
#include <openvpn/time/time.hpp>
|
||||
#include <openvpn/error/excode.hpp>
|
||||
#include <openvpn/time/time.hpp>
|
||||
#include <openvpn/tun/proxy.hpp>
|
||||
#include <openvpn/tun/win/tunutil.hpp>
|
||||
#include <openvpn/tun/win/winproxy.hpp>
|
||||
#include <openvpn/tun/win/client/setupbase.hpp>
|
||||
#include <openvpn/win/scoped_handle.hpp>
|
||||
#include <openvpn/win/cmd.hpp>
|
||||
#include <openvpn/tun/win/tunutil.hpp>
|
||||
#include <openvpn/tun/win/client/setupbase.hpp>
|
||||
|
||||
#if _WIN32_WINNT >= 0x0600 // Vista+
|
||||
#include <openvpn/tun/win/nrpt.hpp>
|
||||
@@ -603,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<WinProxySettings>(pull, create, destroy);
|
||||
|
||||
// flush DNS cache
|
||||
create.add(new WinCmd("ipconfig /flushdns"));
|
||||
destroy.add(new WinCmd("ipconfig /flushdns"));
|
||||
|
||||
@@ -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<nrpt_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<nrpt_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<nrpt_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<nrpt_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<nrpt_error>(status, "Version");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
// proxy settings for Windows
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <WinInet.h>
|
||||
|
||||
#include <openvpn\win\impersonate.hpp>
|
||||
#include <openvpn\tun\proxy.hpp>
|
||||
#include <openvpn\win\reg.hpp>
|
||||
|
||||
using namespace openvpn::Win;
|
||||
|
||||
namespace openvpn {
|
||||
namespace TunWin {
|
||||
class WinProxySettings : public ProxySettings {
|
||||
public:
|
||||
typedef RCPtr<WinProxySettings> 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<proxy_error>(status, "RegOpenCurrentUser");
|
||||
|
||||
status = ::RegCreateKeyExA(hkcu(), key_name, 0, NULL, 0, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, key.ref(), NULL);
|
||||
check_reg_error<proxy_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<proxy_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<proxy_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<proxy_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<proxy_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<proxy_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<proxy_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;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Windows.h>
|
||||
#include <Lmcons.h>
|
||||
#include <wtsapi32.h>
|
||||
|
||||
#include <openvpn/win/winerr.hpp>
|
||||
|
||||
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;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
// registry utilities for Windows
|
||||
|
||||
#ifndef OPENVPN_WIN_REG_H
|
||||
#define OPENVPN_WIN_REG_H
|
||||
|
||||
#include <windows.h>
|
||||
#include <openvpn/common/size.hpp>
|
||||
|
||||
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<std::string>
|
||||
{
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
// registry utilities for Windows
|
||||
|
||||
#ifndef OPENVPN_WIN_REG_H
|
||||
#define OPENVPN_WIN_REG_H
|
||||
|
||||
#include <windows.h>
|
||||
#include <openvpn/win/winerr.hpp>
|
||||
#include <openvpn/common/size.hpp>
|
||||
|
||||
namespace openvpn {
|
||||
namespace Win {
|
||||
|
||||
template<typename E>
|
||||
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<std::string>
|
||||
{
|
||||
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
|
||||
|
||||
@@ -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++
|
||||
|
||||
@@ -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)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,384 +1,387 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\test\ovpncli\cli.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\ovpncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\addrlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\addrpair.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ip.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\iperr.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ipv4.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ipv6.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\macaddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\pool.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\range.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\regex.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\route.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\routeinv.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cf.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfhelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfhost.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfrunloop.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfsec.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfsocket.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cftimer.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\iosactiveiface.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\maclife.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\macsleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\macver.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\reach.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\reachable.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\scdynstore.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\ver.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asioboundsock.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiocontext.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asioerr.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiopolysock.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiosignal.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiostop.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiowork.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\scoped_asio_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\authcert.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\authcreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\cr.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\validatecreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\asiobuf.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufclamp.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufcomplete.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufcomposed.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buffer.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufhex.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buflimit.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buflist.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufread.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\memq.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\safestr.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\zlib.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliconnect.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliconstants.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clicreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliemuexr.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clievent.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clihalt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clilife.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliopthelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliproto.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\ipverflags.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\optfilt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\remotelist.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\rgopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\abort.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\action.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\actionthread.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\arch.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\argv.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\arraysize.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\asyncsleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\autoreset.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\base64.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\binprefix.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\circ_list.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\cleanup.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\core.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\count.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\daemon.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\demangle.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\destruct.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\endian.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\enumdir.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\environ.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\exception.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\extern.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\ffs.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\file.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\fileatomic.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\fileunix.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\format.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\function.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\getopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\getpw.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\glob.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hash.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hexstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostname.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostport.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\inotify.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\lex.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\likely.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\link.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\logrotate.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\memneq.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\mode.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\msgwin.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\number.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\olong.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\options.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\ostream.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\path.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\peercred.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\persistfile.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\pipe.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform_name.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform_string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\process.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\pthreadcond.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\rc.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\redir.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\runcontext.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\scoped_fd.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sess_id.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\signal.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\size.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sockopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\socktypes.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\split.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\splitlines.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stat.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stop.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\strerror.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stringize.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stringtempl.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\tempfile.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\to_string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\umask.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\unicode-impl.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\unicode.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\uniqueptr.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\usecount.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\usergroup.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\userpass.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\version.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\waitbarrier.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\write.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\wstring.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compnull.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compress.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compstub.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lz4.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzo.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoasym.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoasym_impl.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoselect.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\snappy.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\bs64_data_limit.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptoalgs.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptodc.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptodcsel.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\crypto_aead.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\crypto_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\decrypt_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\digestapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\encrypt_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\hashstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\ovpnhmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\packet_id.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\selftest.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\static_key.hpp" />
|
||||
<ClInclude Include="..\openvpn\error\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\error\excode.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\frame.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\frame_init.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\memq_dgram.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\memq_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\header.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\htmlskip.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\method.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\parseutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\reply.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\request.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\status.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlencode.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlparm.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlparse.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\webexcept.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\cryptoinit.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\engineinit.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\initprocess.hpp" />
|
||||
<ClInclude Include="..\openvpn\io\io.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\dhcp.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\eth.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\icmp.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\ip.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\udp.hpp" />
|
||||
<ClInclude Include="..\openvpn\legal\copyright.hpp" />
|
||||
<ClInclude Include="..\openvpn\linux\core.hpp" />
|
||||
<ClInclude Include="..\openvpn\linux\daemon_alive.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logbasesimple.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\lognull.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logperiod.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logsimple.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logthread.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\sessionstats.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\ciphergcm.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\dh.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\pkctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\x509cert.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\x509crl.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\pkcs1.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\selftest.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\enumiface.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\hwaddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\ios\net-route.h" />
|
||||
<ClInclude Include="..\openvpn\netconf\linux\gw.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\linux\route.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\bio\bio_memq_dgram.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\bio\bio_memq_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\ciphergcm.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\crl.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\dh.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\pkey.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\x509.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\x509store.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\sign\pkcs7verify.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\sign\verify.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\engine.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\init.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\tokenencrypt.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\continuation.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\merge.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\sanitize.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\servpush.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\cclist.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\epkibase.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\pkcs1.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\x509track.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\httpdigest.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\ntlm.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\proxyauth.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\devurand.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\mtrandapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\randapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\randbytestore.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relack.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relcommon.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relrecv.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relsend.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\listenlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\manage.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\peeraddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\peerstats.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\servhalt.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\servproto.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\vpnservnetblock.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\vpnservpool.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\datalimit.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\is_openvpn_protocol.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\kuparse.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\mssparms.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\nscert.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\peerinfo.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\proto.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\protostack.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\proto_context_options.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\psid.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslchoose.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslconsts.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tlsprf.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tlsver.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tls_cert_profile.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tls_remote.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\asiotimer.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\coarsetime.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\durhelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\time.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\timestr.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\altproxy.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\httpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\relay.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\tcpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\transbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\udpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\dco.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\gremlin.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\mutate.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\pktstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\protocol.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\reconnect_notify.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\server\transbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\socket_protect.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\tcplink.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\udplink.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\base.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\capture.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\client.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\rgwflags.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\setup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\dhcp_capture.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\emuexr.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunnull.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunprop.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\extern\config.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\extern\fw.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\ipv6_setting.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\layer.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\linux\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\linux\tun.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\client\tunsetup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\gwv4.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macdns.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macdns_watchdog.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macgw.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\tunutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\utun.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunpersist.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunwrap.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunwrapasio.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\server\tunbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunio.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunlog.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunmtu.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunspec.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\setupbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\tunsetup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\nrpt.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\tunutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\wfp.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\call.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\cmd.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\console.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\handle.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\modname.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\reg.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\scoped_handle.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\sleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\unicode.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\winerr.hpp" />
|
||||
</ItemGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\test\ovpncli\cli.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\ovpncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\addrlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\addrpair.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ip.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\iperr.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ipv4.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\ipv6.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\macaddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\pool.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\range.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\regex.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\route.hpp" />
|
||||
<ClInclude Include="..\openvpn\addr\routeinv.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cf.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfhelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfhost.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfrunloop.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfsec.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfsocket.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cfstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\cftimer.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\cf\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\iosactiveiface.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\maclife.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\macsleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\macver.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\reach.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\reachable.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\scdynstore.hpp" />
|
||||
<ClInclude Include="..\openvpn\apple\ver.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\applecrypto\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asioboundsock.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiocontext.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asioerr.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiopolysock.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiosignal.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiostop.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\asiowork.hpp" />
|
||||
<ClInclude Include="..\openvpn\asio\scoped_asio_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\authcert.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\authcreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\cr.hpp" />
|
||||
<ClInclude Include="..\openvpn\auth\validatecreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\asiobuf.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufclamp.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufcomplete.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufcomposed.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buffer.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufhex.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buflimit.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\buflist.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufread.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\bufstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\memq.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\safestr.hpp" />
|
||||
<ClInclude Include="..\openvpn\buffer\zlib.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliconnect.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliconstants.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clicreds.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliemuexr.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clievent.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clihalt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\clilife.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliopthelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\cliproto.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\ipverflags.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\optfilt.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\remotelist.hpp" />
|
||||
<ClInclude Include="..\openvpn\client\rgopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\abort.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\action.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\actionthread.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\arch.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\argv.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\arraysize.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\asyncsleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\autoreset.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\base64.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\binprefix.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\circ_list.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\cleanup.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\core.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\count.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\daemon.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\demangle.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\destruct.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\endian.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\enumdir.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\environ.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\exception.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\extern.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\ffs.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\file.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\fileatomic.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\fileunix.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\format.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\function.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\getopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\getpw.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\glob.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hash.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hexstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostname.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\hostport.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\inotify.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\lex.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\likely.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\link.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\logrotate.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\memneq.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\mode.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\msgwin.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\number.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\olong.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\options.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\ostream.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\path.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\peercred.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\persistfile.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\pipe.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform_name.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\platform_string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\process.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\pthreadcond.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\rc.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\redir.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\runcontext.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\scoped_fd.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sess_id.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\signal.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\size.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\sockopt.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\socktypes.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\split.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\splitlines.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stat.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stop.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\strerror.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stringize.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\stringtempl.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\tempfile.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\to_string.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\umask.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\unicode-impl.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\unicode.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\uniqueptr.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\usecount.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\usergroup.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\userpass.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\version.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\waitbarrier.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\write.hpp" />
|
||||
<ClInclude Include="..\openvpn\common\wstring.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compnull.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compress.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\compstub.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lz4.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzo.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoasym.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoasym_impl.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\lzoselect.hpp" />
|
||||
<ClInclude Include="..\openvpn\compress\snappy.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\bs64_data_limit.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptoalgs.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptodc.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\cryptodcsel.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\crypto_aead.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\crypto_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\decrypt_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\digestapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\encrypt_chm.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\hashstr.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\ovpnhmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\packet_id.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\selftest.hpp" />
|
||||
<ClInclude Include="..\openvpn\crypto\static_key.hpp" />
|
||||
<ClInclude Include="..\openvpn\error\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\error\excode.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\frame.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\frame_init.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\memq_dgram.hpp" />
|
||||
<ClInclude Include="..\openvpn\frame\memq_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\header.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\htmlskip.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\method.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\parseutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\reply.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\request.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\status.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlencode.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlparm.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\urlparse.hpp" />
|
||||
<ClInclude Include="..\openvpn\http\webexcept.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\cryptoinit.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\engineinit.hpp" />
|
||||
<ClInclude Include="..\openvpn\init\initprocess.hpp" />
|
||||
<ClInclude Include="..\openvpn\io\io.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\dhcp.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\eth.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\icmp.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\ip.hpp" />
|
||||
<ClInclude Include="..\openvpn\ip\udp.hpp" />
|
||||
<ClInclude Include="..\openvpn\legal\copyright.hpp" />
|
||||
<ClInclude Include="..\openvpn\linux\core.hpp" />
|
||||
<ClInclude Include="..\openvpn\linux\daemon_alive.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logbasesimple.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\lognull.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logperiod.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logsimple.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\logthread.hpp" />
|
||||
<ClInclude Include="..\openvpn\log\sessionstats.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\ciphergcm.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\dh.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\pkctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\x509cert.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\pki\x509crl.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\pkcs1.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\mbedtls\util\selftest.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\enumiface.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\hwaddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\ios\net-route.h" />
|
||||
<ClInclude Include="..\openvpn\netconf\linux\gw.hpp" />
|
||||
<ClInclude Include="..\openvpn\netconf\linux\route.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\bio\bio_memq_dgram.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\bio\bio_memq_stream.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\api.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\cipher.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\ciphergcm.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\digest.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\crypto\hmac.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\crl.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\dh.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\pkey.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\x509.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\pki\x509store.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\sign\pkcs7verify.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\sign\verify.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\ssl\sslctx.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\engine.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\error.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\init.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\rand.hpp" />
|
||||
<ClInclude Include="..\openvpn\openssl\util\tokenencrypt.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\continuation.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\merge.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\sanitize.hpp" />
|
||||
<ClInclude Include="..\openvpn\options\servpush.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\cclist.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\epkibase.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\pkcs1.hpp" />
|
||||
<ClInclude Include="..\openvpn\pki\x509track.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\httpdigest.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\ntlm.hpp" />
|
||||
<ClInclude Include="..\openvpn\proxy\proxyauth.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\devurand.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\mtrandapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\randapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\random\randbytestore.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relack.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relcommon.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relrecv.hpp" />
|
||||
<ClInclude Include="..\openvpn\reliable\relsend.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\listenlist.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\manage.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\peeraddr.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\peerstats.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\servhalt.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\servproto.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\vpnservnetblock.hpp" />
|
||||
<ClInclude Include="..\openvpn\server\vpnservpool.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\datalimit.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\is_openvpn_protocol.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\kuparse.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\mssparms.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\nscert.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\peerinfo.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\proto.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\protostack.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\proto_context_options.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\psid.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslapi.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslchoose.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\sslconsts.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tlsprf.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tlsver.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tls_cert_profile.hpp" />
|
||||
<ClInclude Include="..\openvpn\ssl\tls_remote.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\asiotimer.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\coarsetime.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\durhelper.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\time.hpp" />
|
||||
<ClInclude Include="..\openvpn\time\timestr.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\altproxy.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\httpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\relay.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\tcpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\transbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\client\udpcli.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\dco.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\gremlin.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\mutate.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\pktstream.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\protocol.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\reconnect_notify.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\server\transbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\socket_protect.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\tcplink.hpp" />
|
||||
<ClInclude Include="..\openvpn\transport\udplink.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\base.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\capture.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\client.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\rgwflags.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\builder\setup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\dhcp_capture.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\emuexr.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunnull.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\client\tunprop.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\extern\config.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\extern\fw.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\ipv6_setting.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\layer.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\linux\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\linux\tun.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\client\tunsetup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\gwv4.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macdns.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macdns_watchdog.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\macgw.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\tunutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\mac\utun.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunpersist.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunwrap.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\persist\tunwrapasio.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\server\tunbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunio.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunlog.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunmtu.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\tunspec.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\setupbase.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\tuncli.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\client\tunsetup.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\nrpt.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\tunutil.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\wfp.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\call.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\cmd.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\console.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\handle.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\modname.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\reg.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\scoped_handle.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\sleep.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\unicode.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\winerr.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\win\winproxy.hpp" />
|
||||
<ClInclude Include="..\openvpn\tun\proxy.hpp" />
|
||||
<ClInclude Include="..\openvpn\win\impersonate.hpp" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user