This is a new patch version with the unnecessary changes removed.
From: Bastian Germann <[email protected]>
Subject: Revert "use wolfssl instead of openssl"

This reverts commit 0fb0df7be2a95904d5558544828516a33bff0813.
---
 CMakeLists.txt    |  6 ++--
 libvdeplug_agno.c | 71 ++++++++++-------------------------------------
 2 files changed, 18 insertions(+), 59 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 318750d..1361f57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,8 +10,8 @@ include(CheckIncludeFile)
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2 -O2 -pedantic -Wall -Wextra")
 
 set(CMAKE_REQUIRED_QUIET TRUE)
-set(LIBS_REQUIRED vdeplug_mod wolfssl)
-set(HEADERS_REQUIRED strcase.h libvdeplug.h strcase.h wolfssl/options.h wolfssl/wolfcrypt/aes.h wolfssl/wolfcrypt/random.h)
+set(LIBS_REQUIRED vdeplug_mod crypto)
+set(HEADERS_REQUIRED strcase.h libvdeplug.h openssl/aes.h openssl/rand.h)
 
 foreach(THISLIB IN LISTS LIBS_REQUIRED)
   find_library(LIB${THISLIB}_OK ${THISLIB})
@@ -31,7 +31,7 @@ add_definitions(-D_GNU_SOURCE)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 add_library(vdeplug_agno SHARED libvdeplug_agno.c)
-target_link_libraries(vdeplug_agno vdeplug_mod wolfssl)
+target_link_libraries(vdeplug_agno vdeplug_mod crypto)
 
 install(TARGETS vdeplug_agno DESTINATION ${CMAKE_INSTALL_LIBDIR}/vdeplug)
 
diff --git a/libvdeplug_agno.c b/libvdeplug_agno.c
index 28c0e3e..c2ab56e 100644
--- a/libvdeplug_agno.c
+++ b/libvdeplug_agno.c
@@ -35,9 +35,8 @@
 #include <net/ethernet.h>
 #include <arpa/inet.h>
 #ifndef DEBUG_DISABLE_ENCRYPTION
-#include <wolfssl/options.h>
-#include <wolfssl/wolfcrypt/aes.h>
-#include <wolfssl/wolfcrypt/random.h>
+#include <openssl/aes.h>
+#include <openssl/rand.h>
 #endif
 #include <libvdeplug.h>
 #include <libvdeplug_mod.h>
@@ -81,9 +80,8 @@ struct vde_agno_conn {
 	struct vdeplug_module *module;
 	VDECONN *conn;
 	uint16_t ether_type;
-	Aes ekey;			/* Encryption key */
-	Aes dkey;			/* Decryption key */
-	WC_RNG rng;
+	AES_KEY ekey;			/* Encryption key */
+	AES_KEY dkey;			/* Decryption key */
 };
 
 /* Declaration of the module sructure */
@@ -240,9 +238,8 @@ static VDECONN *vde_agno_open(char *vde_url, char *descr, int interface_version,
 	}
 	/* Set key as encryption and decryption key */
 #ifndef DEBUG_DISABLE_ENCRYPTION
-	wc_AesSetKey(&newconn->ekey, cryptkey, sizeof(cryptkey), NULL, AES_ENCRYPTION);
-	wc_AesSetKey(&newconn->dkey, cryptkey, sizeof(cryptkey), NULL, AES_DECRYPTION);
-	wc_InitRng(&newconn->rng);
+	AES_set_encrypt_key(cryptkey, sizeof(cryptkey) * 8, &newconn->ekey);
+	AES_set_decrypt_key(cryptkey, sizeof(cryptkey) * 8, &newconn->dkey);
 #endif
 	return (VDECONN *) newconn;
 
@@ -251,40 +248,6 @@ error:
 	return NULL;
 }
 
-/* wc_AesCbcEncrypt + padding */
-static inline int pad_AesCbcEncrypt(Aes* aes, byte* out,
-                                  const byte* in, word32 sz) {
-	int rv;
-	word32 szcomplete = sz & ~(AES_BLOCK_SIZE - 1);
-	rv = wc_AesCbcEncrypt(aes, out, in, szcomplete);
-	if (szcomplete != sz && rv == 0) {
-		word32 i;
-		byte buf[AES_BLOCK_SIZE];
-		for (i = 0; szcomplete + i < sz; i++)
-			buf[i] = in[szcomplete + i];
-		for( ; i < AES_BLOCK_SIZE; i++)
-			buf[i] = 0;
-		rv = wc_AesCbcEncrypt(aes, out + szcomplete, buf, AES_BLOCK_SIZE);
-	}
-	return rv;
-}
-
-/* pad_AesCbcDecrypt + padding */
-static inline int pad_AesCbcDecrypt(Aes* aes, byte* out,
-                                 const byte* in, word32 sz) {
-	int rv;
-	word32 szcomplete = sz & ~(AES_BLOCK_SIZE - 1);
-	rv = wc_AesCbcDecrypt(aes, out, in, szcomplete);
-	if (szcomplete != sz && rv == 0) {
-		word32 i;
-		byte buf[AES_BLOCK_SIZE];
-		rv = pad_AesCbcDecrypt(aes, buf, in + szcomplete, AES_BLOCK_SIZE);
-		for (i = 0; szcomplete + i < sz; i++)
-			out[szcomplete + i] = buf[i];
-	}
-	return rv;
-}
-
 static ssize_t vde_agno_recv(VDECONN *conn, void *buf, size_t len, int flags) {
 	struct vde_agno_conn *vde_conn = (struct vde_agno_conn *)conn;
 	/*  */
@@ -306,7 +269,7 @@ static ssize_t vde_agno_recv(VDECONN *conn, void *buf, size_t len, int flags) {
 #ifdef DEBUG_DISABLE_ENCRYPTION
 	memcpy(&ahdr, encbuf + sizeof(*ehdr), sizeof(ahdr));
 #else
-	wc_AesEcbDecrypt(&vde_conn->dkey, (unsigned char *)&ahdr, encbuf + sizeof(*ehdr), AES_BLOCK_SIZE);
+	AES_ecb_encrypt(encbuf + sizeof(*ehdr), (unsigned char *)&ahdr, &vde_conn->dkey, AES_DECRYPT);
 #endif
 	/* Tag check */
 	if (ahdr.tag != AGNO_TAG)
@@ -320,10 +283,10 @@ static ssize_t vde_agno_recv(VDECONN *conn, void *buf, size_t len, int flags) {
 #ifdef DEBUG_DISABLE_ENCRYPTION
 	memcpy(((unsigned char *) buf) + ETH_HEADER_SIZE, encbuf + sizeof(*ehdr) + sizeof(ahdr), retval - ETH_HEADER_SIZE); //Decrypt 2
 #else
-	wc_AesSetIV(&vde_conn->dkey, iv_dec);
-	pad_AesCbcDecrypt(&vde_conn->dkey, ((unsigned char *) buf) + ETH_HEADER_SIZE,
+	AES_cbc_encrypt(
 			encbuf + sizeof(*ehdr) + sizeof(ahdr),
-			retval - ETH_HEADER_SIZE);
+			((unsigned char *) buf) + ETH_HEADER_SIZE,
+			retval - ETH_HEADER_SIZE, &vde_conn->dkey, iv_dec, AES_DECRYPT);
 #endif
 	return retval;
 error:
@@ -368,24 +331,23 @@ static ssize_t vde_agno_send(VDECONN *conn, const void *buf, size_t len, int fla
 	}
 	/* Complete initialization of agno header */
 #ifndef DEBUG_DISABLE_ENCRYPTION
-	wc_RNG_GenerateBlock(&vde_conn->rng, ahdr.rand, 4);
+	RAND_bytes(ahdr.rand, 4);
 #endif
 	/* Encrypt agno header */
 #ifdef DEBUG_DISABLE_ENCRYPTION
 	memcpy(encbuf + sizeof(*ehdr), &ahdr, sizeof(ahdr));
 #else
-	wc_AesEcbEncrypt(&vde_conn->ekey, encbuf + sizeof(*ehdr), (unsigned char *)&ahdr, AES_BLOCK_SIZE);
+	AES_ecb_encrypt((unsigned char *)&ahdr, encbuf + sizeof(*ehdr), &vde_conn->ekey, AES_ENCRYPT);
 #endif
 	memcpy(iv_enc, &ahdr, sizeof(iv_enc));
 	/* Encrypt payload */
 #ifdef DEBUG_DISABLE_ENCRYPTION
 	memcpy(encbuf + sizeof(*ehdr) + sizeof(ahdr), ((const unsigned char *) buf) + ETH_HEADER_SIZE, len - ETH_HEADER_SIZE);
 #else
-	wc_AesSetIV(&vde_conn->ekey, iv_enc);
-	pad_AesCbcEncrypt(&vde_conn->ekey,
+	AES_cbc_encrypt(
+			((const unsigned char *) buf) + ETH_HEADER_SIZE,
 			encbuf + sizeof(*ehdr) + sizeof(ahdr),
-			((unsigned char *) buf) + ETH_HEADER_SIZE,
-			len - ETH_HEADER_SIZE);
+			len - ETH_HEADER_SIZE, &vde_conn->ekey, iv_enc, AES_ENCRYPT);
 #endif
 	retval = vde_send(vde_conn->conn, encbuf, enclen, flags);
 	if (retval == enclen)
@@ -407,9 +369,6 @@ static int vde_agno_ctlfd(VDECONN *conn) {
 static int vde_agno_close(VDECONN *conn) {
 	struct vde_agno_conn *vde_conn = (struct vde_agno_conn *)conn;
 	int rv;
-#ifndef DEBUG_DISABLE_ENCRYPTION
-	wc_FreeRng(&vde_conn->rng);
-#endif
 	rv = vde_close(vde_conn->conn);
 	free(vde_conn);
 	return rv;

Reply via email to