aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo <thinkabit.ukim@gmail.com>2019-05-26 16:44:15 -0300
committerTBK <tbk@jjtc.eu>2019-05-27 02:43:26 +0200
commitf2cbcbbb65541c77a22864b7828b7c395706a497 (patch)
tree9bd36ba93f55dd0705116864079d4eccdbe1dff8
parent3c6c7fdbd28ea55b0f58f425c434fad7db3f1a41 (diff)
testing/peervpn: modernize, fix license, switch to openssl.
- Add openrc subpkg - Switch to openssl - Clarify license - Modernize Closes: GH-8154
-rw-r--r--testing/peervpn/APKBUILD36
-rw-r--r--testing/peervpn/openssl-1.1.patch280
2 files changed, 292 insertions, 24 deletions
diff --git a/testing/peervpn/APKBUILD b/testing/peervpn/APKBUILD
index 67cc986dc54..98874eaf42a 100644
--- a/testing/peervpn/APKBUILD
+++ b/testing/peervpn/APKBUILD
@@ -2,45 +2,33 @@
# Maintainer: Markus Juenemann <markus@juenemann.net>
pkgname=peervpn
pkgver=0.044
-pkgrel=3
+pkgrel=4
pkgdesc="PeerVPN builds virtual ethernet networks between multiple computers"
+options="!check" # No testsuite
url="https://peervpn.net"
arch="all"
-license="GPL-3.0"
-depends="libressl zlib"
-makedepends="$depends libressl-dev zlib-dev linux-headers"
-install=""
-subpackages=""
+license="GPL-3.0-or-later"
+makedepends="openssl-dev zlib-dev linux-headers"
+subpackages="$pkgname-openrc"
source="
- http://${pkgname}.net/files/${pkgname}-${pkgver//./-}.tar.gz
+ http://${pkgname}.net/files/${pkgname}-${pkgver//./-}.tar.gz
peervpn.initd
+ openssl-1.1.patch
"
# peervpn has a strange versioning scheme.
builddir="$srcdir/$pkgname-${pkgver//./-}"
build() {
-
- cd "$builddir"
make
}
package() {
- cd "$builddir"
-
- install -Dm755 $pkgname "$pkgdir"/usr/sbin/$pkgname \
- || return 1
-
- install -Dm600 $pkgname.conf "$pkgdir"/etc/$pkgname.conf \
- || return 1
-
- install -Dm755 ${srcdir}/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname \
- || return 1
+ install -Dm755 $pkgname "$pkgdir"/usr/sbin/$pkgname
+ install -Dm600 $pkgname.conf "$pkgdir"/etc/$pkgname.conf
+ install -Dm755 ${srcdir}/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
}
-md5sums="3acb4cbf083c0bdacc90ad7d2403b1bc peervpn-0-044.tar.gz
-c6c341d442888bbe583bf09e6fb67521 peervpn.initd"
-sha256sums="4402d5ce956d95ff85b8aeb455d984b9eb9c2e6a058d2580c8e90da12fed8392 peervpn-0-044.tar.gz
-a737637f4ab3767fb81cfef9cf4e0cb6fd57400df1caf028a2356b7ba4484def peervpn.initd"
sha512sums="7c9dcfd1822ef4d9c5954589b041f7165df93bb81a35fc8b741702aad738bd846718822bb47ba8ac0c23ece1c5f9170334a688c3670cc8bd199733e49aaf5067 peervpn-0-044.tar.gz
-50b40a4139499d384d0826a7449b19cd3fbe5869841461cd97e8a125518c3744a1a8c70445656c1a60dae4e2e4e3eb2331bf6b687c8886cb0075ed8ab45310bc peervpn.initd"
+50b40a4139499d384d0826a7449b19cd3fbe5869841461cd97e8a125518c3744a1a8c70445656c1a60dae4e2e4e3eb2331bf6b687c8886cb0075ed8ab45310bc peervpn.initd
+6f0608433bd01fce72ac916f311cafb111b0cef491a8b075ad9b54501957e74aa2746a4b526b358ccfe737b6db259c633e8cc1f10c8310b5bb7923d165db7eca openssl-1.1.patch"
diff --git a/testing/peervpn/openssl-1.1.patch b/testing/peervpn/openssl-1.1.patch
new file mode 100644
index 00000000000..2cf3ae0edf4
--- /dev/null
+++ b/testing/peervpn/openssl-1.1.patch
@@ -0,0 +1,280 @@
+From: Elias Werberich <elias@werberich.de>
+Date: Thu, 16 Mar 2017 11:00:22 +0100
+Subject: [PATCH] src: Add support for OpenSSL 1.1.0 and higher
+
+With OpenSSL 1.1.0 and higher API changes were introduced so some
+structures have become opaque which makes direct access impossible. In
+order to support builds with newer OpenSSL versions, PeerVPN has to be
+patched to access needed data of these structures indirectly.
+
+More information can be found at https://www.openssl.org/news/cl110.txt
+
+Signed-off-by: Elias Werberich <elias@werberich.de>
+---
+ src/libp2psec/crypto.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/libp2psec/dh.c | 16 ++++++++++
+ 2 files changed, 102 insertions(+), 1 deletion(-)
+
+diff --git a/libp2psec/crypto.c b/libp2psec/crypto.c
+index d499963..802f8aa 100644
+--- a/libp2psec/crypto.c
++++ b/libp2psec/crypto.c
+@@ -47,9 +47,15 @@
+
+ // cipher context storage
+ struct s_crypto {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ EVP_CIPHER_CTX enc_ctx;
+ EVP_CIPHER_CTX dec_ctx;
+ HMAC_CTX hmac_ctx;
++#else
++ EVP_CIPHER_CTX *enc_ctx;
++ EVP_CIPHER_CTX *dec_ctx;
++ HMAC_CTX *hmac_ctx;
++#endif
+ };
+
+
+@@ -169,44 +175,77 @@ static int cryptoSetKeys(struct s_crypto *ctxs, const int count, const unsigned
+ const EVP_MD *out_md = EVP_sha256();
+ const EVP_CIPHER *out_cipher = EVP_aes_256_cbc();
+ const int key_size = EVP_CIPHER_key_length(out_cipher);
+- HMAC_CTX hmac_ctx;
+ int16_t i;
+ unsigned char in[2];
+ int j,k;
+
+ // setup hmac as the pseudorandom function
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ HMAC_CTX hmac_ctx;
+ HMAC_CTX_init(&hmac_ctx);
++#else
++ HMAC_CTX *hmac_ctx = HMAC_CTX_new();
++#endif
+
+ // calculate seed key
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_Init_ex(&hmac_ctx, nonce_buf, nonce_len, keygen_md, NULL);
+ HMAC_Update(&hmac_ctx, secret_buf, secret_len);
+ HMAC_Final(&hmac_ctx, seed_key, (unsigned int *)&seed_key_len);
++#else
++ HMAC_Init_ex(hmac_ctx, nonce_buf, nonce_len, keygen_md, NULL);
++ HMAC_Update(hmac_ctx, secret_buf, secret_len);
++ HMAC_Final(hmac_ctx, seed_key, (unsigned int *)&seed_key_len);
++#endif
+
+ // calculate derived keys
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_Init_ex(&hmac_ctx, seed_key, seed_key_len, keygen_md, NULL);
+ HMAC_Update(&hmac_ctx, nonce_buf, nonce_len);
+ HMAC_Final(&hmac_ctx, cur_key, (unsigned int *)&cur_key_len);
++#else
++ HMAC_Init_ex(hmac_ctx, seed_key, seed_key_len, keygen_md, NULL);
++ HMAC_Update(hmac_ctx, nonce_buf, nonce_len);
++ HMAC_Final(hmac_ctx, cur_key, (unsigned int *)&cur_key_len);
++#endif
+ i = 0;
+ j = 0;
+ k = 0;
+ while(k < count) {
+ // calculate next key
+ utilWriteInt16(in, i);
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_Init_ex(&hmac_ctx, NULL, -1, NULL, NULL);
+ HMAC_Update(&hmac_ctx, cur_key, cur_key_len);
+ HMAC_Update(&hmac_ctx, nonce_buf, nonce_len);
+ HMAC_Update(&hmac_ctx, in, 2);
+ HMAC_Final(&hmac_ctx, cur_key, (unsigned int *)&cur_key_len);
++#else
++ HMAC_Init_ex(hmac_ctx, NULL, -1, NULL, NULL);
++ HMAC_Update(hmac_ctx, cur_key, cur_key_len);
++ HMAC_Update(hmac_ctx, nonce_buf, nonce_len);
++ HMAC_Update(hmac_ctx, in, 2);
++ HMAC_Final(hmac_ctx, cur_key, (unsigned int *)&cur_key_len);
++#endif
+ if(cur_key_len < key_size) return 0; // check if key is long enough
+ switch(j) {
+ case 1:
+ // save this key as the decryption and encryption key
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_EncryptInit_ex(&ctxs[k].enc_ctx, out_cipher, NULL, cur_key, NULL)) return 0;
+ if(!EVP_DecryptInit_ex(&ctxs[k].dec_ctx, out_cipher, NULL, cur_key, NULL)) return 0;
++#else
++ if(!EVP_EncryptInit_ex(ctxs[k].enc_ctx, out_cipher, NULL, cur_key, NULL)) return 0;
++ if(!EVP_DecryptInit_ex(ctxs[k].dec_ctx, out_cipher, NULL, cur_key, NULL)) return 0;
++#endif
+ break;
+ case 2:
+ // save this key as the hmac key
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_Init_ex(&ctxs[k].hmac_ctx, cur_key, cur_key_len, out_md, NULL);
++#else
++ HMAC_Init_ex(ctxs[k].hmac_ctx, cur_key, cur_key_len, out_md, NULL);
++#endif
+ break;
+ default:
+ // throw this key away
+@@ -221,7 +260,11 @@ static int cryptoSetKeys(struct s_crypto *ctxs, const int count, const unsigned
+ }
+
+ // clean up
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_CTX_cleanup(&hmac_ctx);
++#else
++ HMAC_CTX_free(hmac_ctx);
++#endif
+ return 1;
+ }
+
+@@ -241,9 +284,15 @@ static void cryptoDestroy(struct s_crypto *ctxs, const int count) {
+ int i;
+ cryptoSetKeysRandom(ctxs, count);
+ for(i=0; i<count; i++) {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_CTX_cleanup(&ctxs[i].hmac_ctx);
+ EVP_CIPHER_CTX_cleanup(&ctxs[i].dec_ctx);
+ EVP_CIPHER_CTX_cleanup(&ctxs[i].enc_ctx);
++#else
++ HMAC_CTX_free(ctxs[i].hmac_ctx);
++ EVP_CIPHER_CTX_free(ctxs[i].dec_ctx);
++ EVP_CIPHER_CTX_free(ctxs[i].enc_ctx);
++#endif
+ }
+ }
+
+@@ -252,9 +301,15 @@ static void cryptoDestroy(struct s_crypto *ctxs, const int count) {
+ static int cryptoCreate(struct s_crypto *ctxs, const int count) {
+ int i;
+ for(i=0; i<count; i++) {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ EVP_CIPHER_CTX_init(&ctxs[i].enc_ctx);
+ EVP_CIPHER_CTX_init(&ctxs[i].dec_ctx);
+ HMAC_CTX_init(&ctxs[i].hmac_ctx);
++#else
++ ctxs[i].enc_ctx = EVP_CIPHER_CTX_new();
++ ctxs[i].dec_ctx = EVP_CIPHER_CTX_new();
++ ctxs[i].hmac_ctx = HMAC_CTX_new();
++#endif
+ }
+ if(cryptoSetKeysRandom(ctxs, count)) {
+ return 1;
+@@ -270,9 +325,15 @@ static int cryptoCreate(struct s_crypto *ctxs, const int count) {
+ static int cryptoHMAC(struct s_crypto *ctx, unsigned char *hmac_buf, const int hmac_len, const unsigned char *in_buf, const int in_len) {
+ unsigned char hmac[EVP_MAX_MD_SIZE];
+ int len;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ HMAC_Init_ex(&ctx->hmac_ctx, NULL, -1, NULL, NULL);
+ HMAC_Update(&ctx->hmac_ctx, in_buf, in_len);
+ HMAC_Final(&ctx->hmac_ctx, hmac, (unsigned int *)&len);
++#else
++ HMAC_Init_ex(ctx->hmac_ctx, NULL, -1, NULL, NULL);
++ HMAC_Update(ctx->hmac_ctx, in_buf, in_len);
++ HMAC_Final(ctx->hmac_ctx, hmac, (unsigned int *)&len);
++#endif
+ if(len < hmac_len) return 0;
+ memcpy(hmac_buf, hmac, hmac_len);
+ return 1;
+@@ -302,9 +363,15 @@ static int cryptoSetSessionKeys(struct s_crypto *session_ctx, struct s_crypto *c
+ if(!cryptoHMAC(md_keygen_ctx, hmac_key, key_size, nonce, nonce_len)) return 0;
+
+ // set the keys
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_EncryptInit_ex(&session_ctx->enc_ctx, st_cipher.cipher, NULL, cipher_key, NULL)) return 0;
+ if(!EVP_DecryptInit_ex(&session_ctx->dec_ctx, st_cipher.cipher, NULL, cipher_key, NULL)) return 0;
+ HMAC_Init_ex(&session_ctx->hmac_ctx, hmac_key, key_size, st_md.md, NULL);
++#else
++ if(!EVP_EncryptInit_ex(session_ctx->enc_ctx, st_cipher.cipher, NULL, cipher_key, NULL)) return 0;
++ if(!EVP_DecryptInit_ex(session_ctx->dec_ctx, st_cipher.cipher, NULL, cipher_key, NULL)) return 0;
++ HMAC_Init_ex(session_ctx->hmac_ctx, hmac_key, key_size, st_md.md, NULL);
++#endif
+
+ return 1;
+ }
+@@ -326,10 +393,19 @@ static int cryptoEnc(struct s_crypto *ctx, unsigned char *enc_buf, const int enc
+ cryptoRand(iv, iv_len);
+ memcpy(&enc_buf[hmac_len], iv, iv_len);
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_EncryptInit_ex(&ctx->enc_ctx, NULL, NULL, NULL, iv)) { return 0; }
+ if(!EVP_EncryptUpdate(&ctx->enc_ctx, &enc_buf[(hdr_len)], &len, dec_buf, dec_len)) { return 0; }
++#else
++ if(!EVP_EncryptInit_ex(ctx->enc_ctx, NULL, NULL, NULL, iv)) { return 0; }
++ if(!EVP_EncryptUpdate(ctx->enc_ctx, &enc_buf[(hdr_len)], &len, dec_buf, dec_len)) { return 0; }
++#endif
+ cr_len = len;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_EncryptFinal(&ctx->enc_ctx, &enc_buf[(hdr_len + cr_len)], &len)) { return 0; }
++#else
++ if(!EVP_EncryptFinal(ctx->enc_ctx, &enc_buf[(hdr_len + cr_len)], &len)) { return 0; }
++#endif
+ cr_len += len;
+
+ if(!cryptoHMAC(ctx, hmac, hmac_len, &enc_buf[hmac_len], (iv_len + cr_len))) { return 0; }
+@@ -357,10 +433,19 @@ static int cryptoDec(struct s_crypto *ctx, unsigned char *dec_buf, const int dec
+ memset(iv, 0, crypto_MAXIVSIZE);
+ memcpy(iv, &enc_buf[hmac_len], iv_len);
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_DecryptInit_ex(&ctx->dec_ctx, NULL, NULL, NULL, iv)) { return 0; }
+ if(!EVP_DecryptUpdate(&ctx->dec_ctx, dec_buf, &len, &enc_buf[hdr_len], (enc_len - hdr_len))) { return 0; }
++#else
++ if(!EVP_DecryptInit_ex(ctx->dec_ctx, NULL, NULL, NULL, iv)) { return 0; }
++ if(!EVP_DecryptUpdate(ctx->dec_ctx, dec_buf, &len, &enc_buf[hdr_len], (enc_len - hdr_len))) { return 0; }
++#endif
+ cr_len = len;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(!EVP_DecryptFinal(&ctx->dec_ctx, &dec_buf[cr_len], &len)) { return 0; }
++#else
++ if(!EVP_DecryptFinal(ctx->dec_ctx, &dec_buf[cr_len], &len)) { return 0; }
++#endif
+ cr_len += len;
+
+ return cr_len;
+diff --git a/libp2psec/dh.c b/libp2psec/dh.c
+index d66f1b9..b77b680 100644
+--- a/libp2psec/dh.c
++++ b/libp2psec/dh.c
+@@ -81,10 +81,18 @@ CXzWzPkElg5L22pMUCPfYxo10HKoUHmSYwIBAg==\n\
+
+ // Generate a key.
+ static int dhGenKey(struct s_dh_state *dhstate) {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ BIGNUM *bn;
++#else
++ const BIGNUM *bn;
++#endif
+ int bn_size;
+ if(DH_generate_key(dhstate->dh)) {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ bn = dhstate->dh->pub_key;
++#else
++ DH_get0_key(dhstate->dh, &bn, NULL);
++#endif
+ bn_size = BN_num_bytes(bn);
+ if((bn_size > dh_MINSIZE) && (bn_size < dh_MAXSIZE)) {
+ BN_bn2bin(bn, dhstate->pubkey);
+@@ -152,13 +160,21 @@ static int dhGetPubkey(unsigned char *buf, const int buf_size, const struct s_dh
+ // Generate symmetric keys. Returns 1 if succesful.
+ static int dhGenCryptoKeys(struct s_crypto *ctx, const int ctx_count, const struct s_dh_state *dhstate, const unsigned char *peerkey, const int peerkey_len, const unsigned char *nonce, const int nonce_len) {
+ BIGNUM *bn = dhstate->bn;
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ const BIGNUM *bndh;
++#endif
+ DH *dh = dhstate->dh;
+ int ret = 0;
+ int maxsize = DH_size(dh);
+ unsigned char secret[maxsize];
+ int size;
+ BN_bin2bn(peerkey, peerkey_len, bn);
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ if(BN_ucmp(bn, dh->pub_key) != 0) {
++#else
++ DH_get0_key(dh, &bndh, NULL);
++ if(BN_ucmp(bn, bndh) != 0) {
++#endif
+ size = DH_compute_key(secret, bn, dh);
+ if(size > 0) {
+ ret = cryptoSetKeys(ctx, ctx_count, secret, size, nonce, nonce_len);
+--
+2.12.2
+