[boringssl] provide blowfish as it is important for quicly doing 64-bit CID, by requiring libdecrepit.a alongside other libraries
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c2db83..5ad42d8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,7 @@
FIND_PACKAGE(PkgConfig REQUIRED)
INCLUDE(cmake/dtrace-utils.cmake)
+INCLUDE(cmake/boringssl-adjust.cmake)
CHECK_DTRACE(${PROJECT_SOURCE_DIR}/picotls-probes.d)
IF ((CMAKE_SIZEOF_VOID_P EQUAL 8) AND
@@ -120,12 +121,7 @@
picotls-minicrypto picotls-core)
FIND_PACKAGE(OpenSSL)
-
-# boringssl is essentially openssl with no version number but with base.h; if found, assume 1.1.1 API
-IF (OPENSSL_FOUND AND OPENSSL_VERSION STREQUAL "" AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/base.h")
- MESSAGE(STATUS " BoringSSL found; assuming OpenSSL 1.1.1 compatibility")
- SET(OPENSSL_VERSION "1.1.1")
-ENDIF ()
+BORINGSSL_ADJUST()
IF (OPENSSL_FOUND AND NOT (OPENSSL_VERSION VERSION_LESS "1.0.1"))
MESSAGE(STATUS " Enabling OpenSSL support")
diff --git a/cmake/boringssl-adjust.cmake b/cmake/boringssl-adjust.cmake
new file mode 100644
index 0000000..0bc5dcc
--- /dev/null
+++ b/cmake/boringssl-adjust.cmake
@@ -0,0 +1,14 @@
+FUNCTION (BORINGSSL_ADJUST)
+ IF (OPENSSL_FOUND AND OPENSSL_VERSION STREQUAL "" AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/base.h")
+ MESSAGE(STATUS " BoringSSL found; assuming OpenSSL 1.1.1 compatibility")
+ SET(OPENSSL_VERSION "1.1.1" PARENT_SCOPE)
+ LIST(GET OPENSSL_CRYPTO_LIBRARIES 0 OPENSSL_ONE_LIB_PATH)
+ GET_FILENAME_COMPONENT(OPENSSL_LIBDIR "${OPENSSL_ONE_LIB_PATH}" DIRECTORY)
+ SET(LIBDECREPIT_PATH "${OPENSSL_LIBDIR}/libdecrepit.a")
+ IF (NOT EXISTS "${LIBDECREPIT_PATH}")
+ MESSAGE(FATAL_ERROR "libdecrepit.a was not found under ${OPENSSL_LIBDIR}; maybe you need to manually copy the file there")
+ ENDIF ()
+ LIST(APPEND OPENSSL_CRYPTO_LIBRARIES "${LIBDECREPIT_PATH}")
+ SET(OPENSSL_CRYPTO_LIBRARIES "${OPENSSL_CRYPTO_LIBRARIES}" PARENT_SCOPE)
+ ENDIF ()
+ENDFUNCTION ()
diff --git a/include/picotls/openssl.h b/include/picotls/openssl.h
index a892f9b..e0761ed 100644
--- a/include/picotls/openssl.h
+++ b/include/picotls/openssl.h
@@ -65,7 +65,9 @@
#define PTLS_OPENSSL_HAS_X25519 1 /* deprecated; use HAVE_ */
extern ptls_key_exchange_algorithm_t ptls_openssl_x25519;
#endif
-#ifndef OPENSSL_NO_BF
+
+/* when boringssl is used, existence of libdecrepit is assumed */
+#if !defined(OPENSSL_NO_BF) || defined(OPENSSL_IS_BORINGSSL)
#define PTLS_OPENSSL_HAVE_BF 1
#endif
diff --git a/picotls.xcodeproj/project.pbxproj b/picotls.xcodeproj/project.pbxproj
index 17b2483..6882e19 100644
--- a/picotls.xcodeproj/project.pbxproj
+++ b/picotls.xcodeproj/project.pbxproj
@@ -206,6 +206,7 @@
081F00CD291A358800534A86 /* pembase64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pembase64.h; sourceTree = "<group>"; };
081F00CE291A358800534A86 /* ptlsbcrypt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ptlsbcrypt.h; sourceTree = "<group>"; };
08A835E12995E04100D872CE /* chacha20poly1305.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chacha20poly1305.h; sourceTree = "<group>"; };
+ 08A835EB2996971300D872CE /* boringssl-adjust.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = "boringssl-adjust.cmake"; sourceTree = "<group>"; };
08B3298229419DFC009D6766 /* ech-live.t */ = {isa = PBXFileReference; lastKnownFileType = text; path = "ech-live.t"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.perl; };
08F0FDF52910F67A00EE657D /* hpke.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hpke.c; sourceTree = "<group>"; };
105900241DC8D37500FB4085 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aes.c; path = src/aes.c; sourceTree = "<group>"; };
@@ -524,6 +525,7 @@
E95EBCC9227E9FF30022C32D /* cmake */ = {
isa = PBXGroup;
children = (
+ 08A835EB2996971300D872CE /* boringssl-adjust.cmake */,
E95EBCCA227EA0180022C32D /* dtrace-utils.cmake */,
);
path = cmake;