Index: head/archivers/libunrar5/Makefile =================================================================== --- head/archivers/libunrar5/Makefile (revision 481880) +++ head/archivers/libunrar5/Makefile (revision 481881) @@ -1,53 +1,52 @@ # $FreeBSD$ PORTNAME= libunrar5 PORTVERSION= 5.6.8 CATEGORIES= archivers MASTER_SITES= http://www.rarlab.com/rar/ DISTNAME= unrarsrc-${PORTVERSION} MAINTAINER= jhale@FreeBSD.org COMMENT= RAR archive extraction library LICENSE= UNRAR LICENSE_NAME= UnRAR License LICENSE_FILE= ${WRKSRC}/license.txt LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept USES= gmake USE_LDCONFIG= yes ALL_TARGET= lib MAKEFILE= makefile MAKE_ARGS= AR="${AR}" \ CXX="${CXX}" \ CXXFLAGS="${CXXFLAGS} -fPIC" \ LDFLAGS="-Wl,-soname,${SONAME} -pthread ${LDFLAGS}" \ STRIP="${STRIP_CMD}" SONAME= libunrar.so.5 WRKSRC= ${WRKDIR}/unrar CONFLICTS_INSTALL= libunrar-3* libunrar4-4* OPTIONS_DEFINE= OPENSSL_AES OPTIONS_DEFAULT= OPENSSL_AES OPENSSL_AES_DESC= Use OpenSSL implementation of AES OPENSSL_AES_CPPFLAGS= -DOPENSSL_AES -I${OPENSSLINC} OPENSSL_AES_LDFLAGS= -L${OPENSSLLIB} -lcrypto OPENSSL_AES_USES= ssl -OPENSSL_AES_VARS= BROKEN_SSL=openssl-devel PLIST_FILES= lib/libunrar.a \ lib/libunrar.so \ lib/${SONAME} \ include/libunrar5/dll.hpp do-install: ${INSTALL_DATA} ${WRKSRC}/libunrar.a ${STAGEDIR}${PREFIX}/lib/libunrar.a ${INSTALL_LIB} ${WRKSRC}/libunrar.so ${STAGEDIR}${PREFIX}/lib/${SONAME} (cd ${STAGEDIR}${PREFIX}/lib; ${LN} -sf ${SONAME} libunrar.so) @${MKDIR} ${STAGEDIR}${PREFIX}/include/libunrar5 ${INSTALL_DATA} ${WRKSRC}/dll.hpp ${STAGEDIR}${PREFIX}/include/libunrar5/dll.hpp .include Index: head/archivers/libunrar5/files/patch-rijndael.cpp =================================================================== --- head/archivers/libunrar5/files/patch-rijndael.cpp (revision 481880) +++ head/archivers/libunrar5/files/patch-rijndael.cpp (revision 481881) @@ -1,122 +1,136 @@ ---- rijndael.cpp.orig 2017-04-28 17:28:47 UTC +--- rijndael.cpp.orig 2018-06-24 15:10:31 UTC +++ rijndael.cpp @@ -7,6 +7,8 @@ ***************************************************************************/ #include "rar.hpp" +#ifndef OPENSSL_AES + #ifdef USE_SSE #include #endif @@ -56,6 +58,7 @@ inline void Copy128(byte *dest,const byt #endif } +#endif // OPENSSL_AES ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // API -@@ -63,14 +66,35 @@ inline void Copy128(byte *dest,const byt +@@ -63,14 +66,41 @@ inline void Copy128(byte *dest,const byt Rijndael::Rijndael() { +#ifndef OPENSSL_AES if (S[0]==0) GenerateTables(); +#endif // OPENSSL_AES CBCMode = true; // Always true for RAR. } void Rijndael::Init(bool Encrypt,const byte *key,uint keyLen,const byte * initVector) { +#ifdef OPENSSL_AES + const EVP_CIPHER *cipher; + switch(keyLen) + { + case 128: + cipher = EVP_aes_128_cbc(); + break; + case 192: + cipher = EVP_aes_192_cbc(); + break; + case 256: + cipher = EVP_aes_256_cbc(); + break; + } + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_init(&ctx); + EVP_CipherInit_ex(&ctx, cipher, NULL, key, initVector, Encrypt); + EVP_CIPHER_CTX_set_padding(&ctx, 0); ++#else ++ EVP_CIPHER_CTX_init(ctx); ++ EVP_CipherInit_ex(ctx, cipher, NULL, key, initVector, Encrypt); ++ EVP_CIPHER_CTX_set_padding(ctx, 0); ++#endif +#else // OPENSSL_AES #ifdef USE_SSE // Check SSE here instead of constructor, so if object is a part of some // structure memset'ed before use, this variable is not lost. -@@ -111,6 +135,7 @@ void Rijndael::Init(bool Encrypt,const b +@@ -111,6 +141,7 @@ void Rijndael::Init(bool Encrypt,const b if(!Encrypt) keyEncToDec(); +#endif // OPENSSL_AES } void Rijndael::blockEncrypt(const byte *input,size_t inputLen,byte *outBuffer) -@@ -118,6 +143,11 @@ void Rijndael::blockEncrypt(const byte * +@@ -118,6 +149,15 @@ void Rijndael::blockEncrypt(const byte * if (inputLen <= 0) return; +#ifdef OPENSSL_AES + int outLen; ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CipherUpdate(&ctx, outBuffer, &outLen, input, inputLen); ++#else ++ EVP_CipherUpdate(ctx, outBuffer, &outLen, input, inputLen); ++#endif + return; +#else // OPENSSL_AES size_t numBlocks = inputLen/16; #ifdef USE_SSE if (AES_NI) -@@ -176,6 +206,7 @@ void Rijndael::blockEncrypt(const byte * +@@ -176,6 +216,7 @@ void Rijndael::blockEncrypt(const byte * input += 16; } Copy128(m_initVector,prevBlock); +#endif // OPENSSL_AES } -@@ -217,6 +248,11 @@ void Rijndael::blockDecrypt(const byte * +@@ -217,6 +258,15 @@ void Rijndael::blockDecrypt(const byte * if (inputLen <= 0) return; +#ifdef OPENSSL_AES + int outLen; ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CipherUpdate(&ctx, outBuffer, &outLen, input, inputLen); ++#else ++ EVP_CipherUpdate(ctx, outBuffer, &outLen, input, inputLen); ++#endif + return; +#else // OPENSSL_AES size_t numBlocks=inputLen/16; #ifdef USE_SSE if (AES_NI) -@@ -279,6 +315,8 @@ void Rijndael::blockDecrypt(const byte * +@@ -279,6 +329,8 @@ void Rijndael::blockDecrypt(const byte * } memcpy(m_initVector,iv,16); + +#endif // OPENSSL_AES } -@@ -314,7 +352,7 @@ void Rijndael::blockDecryptSSE(const byt +@@ -314,7 +366,7 @@ void Rijndael::blockDecryptSSE(const byt } #endif - +#ifndef OPENSSL_AES ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ALGORITHM ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -@@ -454,7 +492,7 @@ void Rijndael::GenerateTables() +@@ -454,7 +506,7 @@ void Rijndael::GenerateTables() U1[b][0]=U2[b][1]=U3[b][2]=U4[b][3]=T5[i][0]=T6[i][1]=T7[i][2]=T8[i][3]=FFmul0e(b); } } - +#endif // OPENSSL_AES #if 0 static void TestRijndael(); Index: head/archivers/libunrar5/files/patch-rijndael.hpp =================================================================== --- head/archivers/libunrar5/files/patch-rijndael.hpp (revision 481880) +++ head/archivers/libunrar5/files/patch-rijndael.hpp (revision 481881) @@ -1,20 +1,24 @@ ---- rijndael.hpp.orig 2017-04-28 17:28:47 UTC +--- rijndael.hpp.orig 2018-06-24 15:10:31 UTC +++ rijndael.hpp -@@ -16,6 +16,9 @@ +@@ -16,6 +16,13 @@ class Rijndael { private: +#ifdef OPENSSL_AES ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX ctx; ++#else ++ EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); ++#endif +#else // OPENSSL_AES #ifdef USE_SSE void blockEncryptSSE(const byte *input,size_t numBlocks,byte *outBuffer); void blockDecryptSSE(const byte *input, size_t numBlocks, byte *outBuffer); -@@ -25,6 +28,7 @@ class Rijndael +@@ -25,6 +32,7 @@ class Rijndael void keySched(byte key[_MAX_KEY_COLUMNS][4]); void keyEncToDec(); void GenerateTables(); +#endif // OPENSSL_AES // RAR always uses CBC, but we may need to turn it off when calling // this code from other archive formats with CTR and other modes.