├── .github ├── addfiles.png ├── frameworks.png └── workflows │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── build-ios.sh ├── inject_module_map.sh ├── openssl.asc ├── patches └── README ├── shim.h └── signingkey.pem /.github/addfiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tls-inspector/openssl-ios/5a728aa5787c430dd4c19848272717a9eb611e61/.github/addfiles.png -------------------------------------------------------------------------------- /.github/frameworks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tls-inspector/openssl-ios/5a728aa5787c430dd4c19848272717a9eb611e61/.github/frameworks.png -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: "Build openssl framework" 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | schedule: 7 | - cron: "18 18 * * *" 8 | workflow_dispatch: 9 | 10 | permissions: 11 | packages: read 12 | contents: write 13 | 14 | concurrency: single_compile 15 | 16 | jobs: 17 | query: 18 | name: "Check for updates" 19 | runs-on: macos-14 20 | outputs: 21 | openssl_version: ${{ steps.query.outputs.openssl_version }} 22 | needs_update: ${{ steps.query.outputs.needs_update }} 23 | steps: 24 | - name: "Get latest release" 25 | id: query 26 | env: 27 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | run: | 29 | LATEST_OFFICIAL_OPENSSL_RELEASE=$(gh api /repos/openssl/openssl/tags --jq '.[].name' | egrep '^openssl-[0-9\.]+$' | sort -nr | head -n1 | sed 's/openssl-//') 30 | LATEST_OPENSSL_IOS_RELEASE=$(gh api /repos/tls-inspector/openssl-ios/releases/latest --jq '.name') 31 | echo "::notice ::Latest openssl release: ${LATEST_OFFICIAL_OPENSSL_RELEASE}, last published framework: ${LATEST_OPENSSL_IOS_RELEASE}" 32 | echo "openssl_version=${LATEST_OFFICIAL_OPENSSL_RELEASE}" >> $GITHUB_OUTPUT 33 | if [[ "${LATEST_OPENSSL_IOS_RELEASE}" != "${LATEST_OFFICIAL_OPENSSL_RELEASE}" ]]; then 34 | echo "needs_update=yes" >> $GITHUB_OUTPUT 35 | else 36 | echo "needs_update=no" >> $GITHUB_OUTPUT 37 | fi 38 | cat $GITHUB_OUTPUT 39 | update: 40 | name: "Compile" 41 | needs: query 42 | if: needs.query.outputs.needs_update == 'yes' 43 | runs-on: macos-14 44 | outputs: 45 | framework_checksum: ${{ steps.prepare.outputs.framework_checksum }} 46 | steps: 47 | - name: Checkout Source 48 | id: checkout 49 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #pin v4.2.2 50 | with: 51 | persist-credentials: false 52 | - name: Compile Framework 53 | id: compile 54 | run: | 55 | echo "Importing public keys" 56 | gpg --import ./openssl.asc 57 | echo 'trusted-key 0x216094DFD0CB81EF' >> ~/.gnupg/gpg.conf 58 | echo "Starting build" 59 | ./build-ios.sh -o ${{ needs.query.outputs.openssl_version }} -s -g 60 | zip -r openssl.xcframework.zip openssl.xcframework/ 61 | ./inject_module_map.sh iphoneos 62 | ./inject_module_map.sh iphonesimulator 63 | zip -r openssl_swift.xcframework.zip openssl.xcframework/ 64 | - name: Capture Build Errors 65 | uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 #pin v4.6.2 66 | if: failure() 67 | with: 68 | name: build_output 69 | path: build/*_build.log 70 | - name: Prepare Release 71 | id: prepare_release 72 | run: | 73 | echo "-----BEGIN EC PRIVATE KEY-----" >> private_key.pem 74 | echo '${{ secrets.SIGNING_KEY }}' >> private_key.pem 75 | echo "-----END EC PRIVATE KEY-----" >> private_key.pem 76 | openssl dgst -sign private_key.pem -sha256 -out openssl.xcframework.zip.sig openssl.xcframework.zip 77 | openssl dgst -sign private_key.pem -sha256 -out openssl_swift.xcframework.zip.sig openssl_swift.xcframework.zip 78 | openssl dgst -sign private_key.pem -sha256 -out openssl_swift.xcframework.zip.sig openssl_swift.xcframework.zip 79 | openssl dgst -sign private_key.pem -sha256 -out openssl.tar.xz.sig openssl.tar.xz 80 | rm -f private_key.pem 81 | - name: Make Release 82 | id: make_release 83 | env: 84 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 85 | run: | 86 | gh release create -n "${{ needs.query.outputs.openssl_version }}" -t "${{ needs.query.outputs.openssl_version }}" ${{ needs.query.outputs.openssl_version }} openssl.xcframework.zip openssl.xcframework.zip.sig openssl_swift.xcframework.zip openssl_swift.xcframework.zip.sig openssl.tar.xz openssl.tar.xz.sig 87 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | build/ 3 | *.xcframework/ 4 | *.tar 5 | *.tar.gz 6 | *.tar.gz.asc 7 | *.tar.xz 8 | *.tar.xz.asc 9 | *.zip 10 | *.zip.sig 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Ian Spence 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openssl-ios 2 | 3 | Pre-compiled openssl framework for iOS and iPadOS applications! Automatically updated within 24-hours of a new release of openssl. 4 | 5 | ## Using the pre-compiled framework 6 | 7 | 1. Download and extract the xcframework.zip from the latest release. 8 | 9 | If you are planning on using OpenSSL in Swift, use `openssl_swift.xcframework.zip`, otherwise use `openssl.xcframework.zip`. 10 | 11 | 1. _(Optional but recommended)_ download the [signing key](signingkey.pem) and the .sig file for your downloaded zip from the release and verify the signature using OpenSSL 12 | ```bash 13 | openssl dgst -sha256 -verify signingkey.pem -signature openssl.xcframework.zip.sig openssl.xcframework.zip 14 | ``` 15 | 16 | 1. Select your target in Xcode and click the "+" under Frameworks, Libraries, and Embedded Content 17 | ![Screenshot of the Frameworks, Libraries, and Embedded Content section in Xcode with the plus button circled](.github/frameworks.png) 18 | 1. Click "Add Other" then "Add Files..." 19 | ![Screenshot of a dropdown menu with the add files option highlighted](.github/addfiles.png) 20 | 1. Select the extracted `openssl.xcframework` directory. 21 | 22 | Note that Xcode will reference the directory _in-place_, so make sure you've moved it somewhere suitable (outside your downloads directory!). 23 | 24 | ## Compile it yourself 25 | 26 | Use the included build script to compile a specific version or customize the configuration options. 27 | 28 | ``` 29 | ./build-ios.sh [-o ] [-vsg] [-- build args] 30 | 31 | Options are: 32 | 33 | -o 34 | Specify the version of openssl package to download and use. If not specified, will query 35 | the openssl/openssl repo and use the latest release. If not specified then the 'jq' 36 | utility must be installed. 37 | 38 | -v 39 | Verify signatures of downloaded artifacts 40 | 41 | -s 42 | Include a Swift module map and shim files. Do not use this if you plan to use this framework in 43 | an Objective-C project. 44 | 45 | -g 46 | Use the 'gh' command line tool instead of curl for GitHub API queries. This is useful for when 47 | running this script in a Github action. 48 | 49 | -- build args 50 | Any arguments after -- are passed directly to the ./configure step of compiling curl. Regardless 51 | of this value these parameters are always provided: 52 | -no-shared -no-ui-console -no-tests -no-legacy -no-ssl2 -no-ssl3 -no-asm -no-weak-ssl-ciphers 53 | ``` 54 | 55 | ## Export Compliance 56 | 57 | Please remember that export/import and/or use of strong cryptography software, providing 58 | cryptography hooks, or even just communicating technical details about cryptography 59 | software is illegal in some parts of the world. By using this script, or importing the 60 | resulting compiled framework in your country, re-distribute it from there or even just 61 | email technical suggestions or even source patches to the authors or other people you are 62 | strongly advised to pay close attention to any laws or regulations which apply to you. 63 | The authors of this script and OpenSSL are not liable for any violations you make here. 64 | So be careful, it is your responsibility. 65 | -------------------------------------------------------------------------------- /build-ios.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | ################ 5 | # PROCESS ARGS # 6 | ################ 7 | 8 | VERIFY=0 9 | OPENSSL_VERSION=0 10 | SWIFT=0 11 | USE_GH_CLI=0 12 | 13 | while getopts :o:vsg OPTION; do 14 | case $OPTION in 15 | o) OPENSSL_VERSION=$OPTARG;; 16 | v) VERIFY=1;; 17 | s) SWIFT=1;; 18 | g) USE_GH_CLI=1;; 19 | ?) echo "Error: Invalid option was specified -$OPTARG";exit 1;; 20 | esac 21 | done 22 | if [ "$OPTIND" -ge 2 ]; then 23 | shift "$((OPTIND - 2))" 24 | shift 1 25 | else 26 | shift "$((OPTIND - 1))" 27 | fi 28 | 29 | if ! command -v jq 2>&1 >/dev/null; then 30 | echo "The 'jq' utility must be installed, otherwise you must specify the openssl version to use." 31 | exit 1 32 | fi 33 | 34 | BUILD_ARGS="$*" 35 | USERAGENT="github.com/tls-inspector/openssl-ios" 36 | 37 | function github_api() { 38 | API_PATH=$1 39 | 40 | if [[ $USE_GH_CLI == 1 ]]; then 41 | gh api $API_PATH 42 | else 43 | curl -Ss -A "${USERAGENT}" "https://api.github.com/$API_PATH" 44 | fi 45 | } 46 | 47 | if [[ $OPENSSL_VERSION == 0 ]]; then 48 | OPENSSL_VERSION=$(github_api repos/tls-inspector/openssl-ios/releases/latest | jq -r .name) 49 | fi 50 | echo "Using OpenSSL ${OPENSSL_VERSION}" 51 | 52 | ############################### 53 | # DOWNLOAD & VERIFY ARTIFACTS # 54 | ############################### 55 | 56 | # Download openssl 57 | ARCHIVE=openssl-${OPENSSL_VERSION}.tar.gz 58 | if [ ! -f "${ARCHIVE}" ]; then 59 | echo "Downloading openssl ${OPENSSL_VERSION}..." 60 | curl -A "${USERAGENT}" -L "https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz" > "${ARCHIVE}" 61 | fi 62 | 63 | # Verify openssl 64 | if [[ $VERIFY == 1 ]]; then 65 | echo "Verifying signature for ${ARCHIVE}" 66 | if [ ! -f "${ARCHIVE}.asc" ]; then 67 | curl -A "${USERAGENT}" -L "https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz.asc" > "${ARCHIVE}.asc" 68 | fi 69 | gpg --verify "${ARCHIVE}.asc" "${ARCHIVE}" >/dev/null 70 | echo "Verified signature for ${ARCHIVE} successfully!" 71 | fi 72 | 73 | ########### 74 | # COMPILE # 75 | ########### 76 | 77 | BUILDDIR=build 78 | 79 | function build() { 80 | ARCH=${1} 81 | HOST=${2} 82 | SDK=${3} 83 | echo "Building openssl for ${ARCH}-${SDK}..." 84 | SDKDIR=$(xcrun --sdk ${SDK} --show-sdk-path) 85 | LOG="../${ARCH}-${SDK}_build.log" 86 | 87 | WORKDIR=openssl_${ARCH}-${SDK} 88 | mkdir "${WORKDIR}" 89 | tar -xzf "../${ARCHIVE}" -C "${WORKDIR}" --strip-components 1 90 | cd "${WORKDIR}" 91 | 92 | for FILE in $(find ../../patches -name '*.patch'); do 93 | patch -p1 < ${FILE} 94 | done 95 | 96 | export CC=$(xcrun -find -sdk ${SDK} clang) 97 | export CFLAGS="-arch ${ARCH} -pipe -Os -gdwarf-2 -isysroot ${SDKDIR} -m${SDK}-version-min=12.0" 98 | export LDFLAGS="-arch ${ARCH} -isysroot ${SDKDIR}" 99 | 100 | CONFIGURE_ARGS="${BUILD_ARGS} -no-shared -no-ui-console -no-tests -no-legacy -no-ssl2 -no-ssl3 -no-asm -no-weak-ssl-ciphers" 101 | 102 | echo "build variables: CC=\"${CC}\" CFLAGS=\"${CFLAGS}\" LDFLAGS=\"${LDFLAGS}\"" >> "${LOG}" 103 | echo "configure parameters: ${CONFIGURE_ARGS}" >> "${LOG}" 104 | 105 | ./configure \ 106 | $CONFIGURE_ARGS \ 107 | --prefix=$(pwd)/artifacts \ 108 | ${HOST} >> "${LOG}" 2>&1 109 | perl configdata.pm --dump >> ../${ARCH}-${SDK}_configuration.log 110 | 111 | make -j $(sysctl -n hw.logicalcpu_max) >> "${LOG}" 2>&1 112 | make install >> "${LOG}" 2>&1 113 | 114 | cd ../ 115 | } 116 | 117 | rm -rf ${BUILDDIR} 118 | mkdir ${BUILDDIR} 119 | cd ${BUILDDIR} 120 | 121 | build arm64 ios64-xcrun iphoneos 122 | build arm64 iossimulator-xcrun iphonesimulator 123 | build x86_64 iossimulator-xcrun iphonesimulator 124 | 125 | cd ../ 126 | 127 | ########### 128 | # PACKAGE # 129 | ########### 130 | 131 | # Merge the arm64 and x86_64 binaries for the simulator together 132 | lipo \ 133 | -arch arm64 ${BUILDDIR}/openssl_arm64-iphonesimulator/artifacts/lib/libssl.a \ 134 | -arch x86_64 ${BUILDDIR}/openssl_x86_64-iphonesimulator/artifacts/lib/libssl.a \ 135 | -create -output ${BUILDDIR}/libssl.a 136 | lipo \ 137 | -arch arm64 ${BUILDDIR}/openssl_arm64-iphonesimulator/artifacts/lib/libcrypto.a \ 138 | -arch x86_64 ${BUILDDIR}/openssl_x86_64-iphonesimulator/artifacts/lib/libcrypto.a \ 139 | -create -output ${BUILDDIR}/libcrypto.a 140 | 141 | rm -rf libssl.xcframework 142 | xcodebuild -create-xcframework \ 143 | -library ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/lib/libssl.a -headers ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/include/openssl \ 144 | -library ${BUILDDIR}/libssl.a -headers ${BUILDDIR}/openssl_arm64-iphonesimulator/artifacts/include/openssl \ 145 | -output libssl.xcframework 146 | plutil -insert CFBundleVersion -string ${OPENSSL_VERSION} libssl.xcframework/Info.plist 147 | 148 | rm -rf libcrypto.xcframework 149 | xcodebuild -create-xcframework \ 150 | -library ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/lib/libcrypto.a -headers ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/include/openssl \ 151 | -library ${BUILDDIR}/libcrypto.a -headers ${BUILDDIR}/openssl_arm64-iphonesimulator/artifacts/include/openssl \ 152 | -output libcrypto.xcframework 153 | plutil -insert CFBundleVersion -string ${OPENSSL_VERSION} libcrypto.xcframework/Info.plist 154 | 155 | # Create a traditional .framework that combines libssl and libcrypto for each platform 156 | rm -rf ${BUILDDIR}/iphoneos/openssl.framework ${BUILDDIR}/iphonesimulator/openssl.framework 157 | mkdir -p ${BUILDDIR}/iphoneos/openssl.framework/Headers ${BUILDDIR}/iphonesimulator/openssl.framework/Headers 158 | 159 | libtool -no_warning_for_no_symbols -static -o ${BUILDDIR}/iphoneos/openssl.framework/openssl ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/lib/libssl.a ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/lib/libcrypto.a 160 | cp -r ${BUILDDIR}/openssl_arm64-iphoneos/artifacts/include/openssl/*.h ${BUILDDIR}/iphoneos/openssl.framework/Headers 161 | libtool -no_warning_for_no_symbols -static -o ${BUILDDIR}/iphonesimulator/openssl.framework/openssl ${BUILDDIR}/libssl.a ${BUILDDIR}/libcrypto.a 162 | cp -r ${BUILDDIR}/openssl_arm64-iphonesimulator/artifacts/include/openssl/*.h ${BUILDDIR}/iphonesimulator/openssl.framework/Headers 163 | 164 | if [[ $SWIFT == 1 ]]; then 165 | ./inject_module_map.sh iphoneos 166 | ./inject_module_map.sh iphonesimulator 167 | fi 168 | 169 | rm -rf openssl.xcframework 170 | xcodebuild -create-xcframework \ 171 | -framework ${BUILDDIR}/iphoneos/openssl.framework \ 172 | -framework ${BUILDDIR}/iphonesimulator/openssl.framework \ 173 | -output openssl.xcframework 174 | plutil -insert CFBundleVersion -string ${OPENSSL_VERSION} openssl.xcframework/Info.plist 175 | 176 | rm -f openssl.tar openssl.tar.xz 177 | tar -cf openssl.tar build/openssl_*/artifacts/ 178 | xz openssl.tar 179 | -------------------------------------------------------------------------------- /inject_module_map.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | if [ -z "$1" ]; then 5 | echo "Usage: $0 " 6 | exit 1 7 | fi 8 | 9 | PLATFORM=${1} 10 | mkdir -p build/${PLATFORM}/openssl.framework/Modules 11 | echo "framework module OpenSSL {" > build/${PLATFORM}/openssl.framework/Modules/module.modulemap 12 | echo " header \"shim.h\"" >> build/${PLATFORM}/openssl.framework/Modules/module.modulemap 13 | for HEADER in $(ls build/${PLATFORM}/openssl.framework/Headers); do 14 | echo " header \"${HEADER}\"" >> build/${PLATFORM}/openssl.framework/Modules/module.modulemap 15 | done 16 | echo " export *" >> build/${PLATFORM}/openssl.framework/Modules/module.modulemap 17 | echo "}" >> build/${PLATFORM}/openssl.framework/Modules/module.modulemap 18 | cp shim.h build/${PLATFORM}/openssl.framework/Headers 19 | -------------------------------------------------------------------------------- /openssl.asc: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Comment: BA54 73A2 B058 7B07 FB27 CF2D 2160 94DF D0CB 81EF 3 | Comment: OpenSSL 4 | 5 | xsFNBGYT46cBEADnGgpkGwVTO5hu+sqoC3UWXM1nxr3v+tLveHQQlMA/MLDwK+TS 6 | 1sMFSsOEE1ehAlhaEVCaiHSh+8PSqs8bvxrkbC8FXj6UkHvdZOoBgoDqEVUXawen 7 | UmW/3OEQtC/815ByacwHsbgabTY+bXQBAvKnDsKMIg04YlE1UVLnO6Rf0v/AvnlK 8 | 400c0J/KOPOXP2+e5dYMxRN/8CMFA+Jo8m1N2/gDKb3y1Ga6Ug9Qg/7VmL+zp/9A 9 | +JnVQFhVQgpt2hVGKcKteJvDJODRAmBG371E+KV+lnh0jvALUxGiC+h/XrHmm8Em 10 | 7hQM7LLoVKGDPxYYUQKA6U6+//Q3J7JgrstLTxAZ6Xz3516o8gM4EeNXo/rXNqNw 11 | Ng4zKeYAU0klk0hDIf7JHluT/Xxy9ezgRK6V3RJEvvjA1RjpsTVe7uDw5GPEoRO/ 12 | xXtcLghhPixbL6y1FOspZqx3BzroX6Ic4V03Ub61YL6Zx3Q3tTcaj+4QFGXVA3SN 13 | WL6is2XBdvZAiOgO/7lbRXGq/vFtvynYPLEx6LbZdKtdfADUCgD7If4gvif5yaL2 14 | isSfD3UmoXPdDDLGdga5/dhmg2658AigHw6t0fPWnxPx4EUc1tL2bb+dEG+soRoj 15 | s4QHHoAhEeVEKdeFfu7lE3i0omS/mp63IFUFI7AybnHYiZ2ujyc5sBBsnwARAQAB 16 | zR1PcGVuU1NMIDxvcGVuc3NsQG9wZW5zc2wub3JnPsLBlAQTAQoAPhYhBLpUc6Kw 17 | WHsH+yfPLSFglN/Qy4HvBQJmE+OnAhsDBQkDwmcABQsJCAcCBhUKCQgLAgQWAgMB 18 | Ah4BAheAAAoJECFglN/Qy4HvXIcP/jCgVgZ7wMwMaDqbwBJOVKQ7sVzNvjy1xMr+ 19 | XkXn1FHme1MlRl4Uw9Wzeh8TUckzx59+CAqe/pRRYhR9kL0S8WUhoa4VK61c47WS 20 | 0wFWzOOuQ4JQO9v9zP6hsKubnQdA9ggq3rvkFrRDIV0DPU6iFxXs2/kYmuqHxIkO 21 | GgLx+aCWPx0XNAdJyov46EbQnIjJOdialeC2dIEdIU0Vk5N0jWYv6MKweAmXRVLM 22 | Jusz3yfNZ0FmydSo90aNQcQz4fp3vgF8qP7Z5BmMOSWOnXJawJd8+ic0RXRWdsMS 23 | oxyAEKH/98IUPZII8N8c5u8pAJ52m7LQRm8CKk4GzylStaV+Pe6PuNTVkx1sIE62 24 | Sv0RFbd2yJ5Wou5Z/1lRZvzjF5R3G+dobKZLym2HwNkJtFROODFqiPkcKYCSSd4c 25 | sqlOVh2X6/8VlJZ9Q4r7pAm/ulPnf/PSEo8l7kr/JS7Q09nlwNaa5l9nwvrt2z+u 26 | +5dNZt5syyVgpNd4mPZMFb9TXqoFrhrZfLGZ2I3GQ7tLX2boHhBXNl32a1sb2Qsv 27 | 9fbz++sFbYrfDhsjH5eEwBjW7o4Kkd/cTMJGufLczy3Cb+RyrjyBrSwfMQf0xHkp 28 | QKidfWOKv9j+yeEhGVCHaIPilYNVeZFRHzL1H9oIkda2BZamj7iYveVnnDBjgpN7 29 | k6YNfbUM 30 | =Fi54 31 | -----END PGP PUBLIC KEY BLOCK----- 32 | -------------------------------------------------------------------------------- /patches/README: -------------------------------------------------------------------------------- 1 | Any .patch file placed here will be applied to the openssl source before compiling. 2 | Patches are applied in an alphabetical order, so it's recommended to use a 3 | numerical prefix like 10-fix.patch 4 | -------------------------------------------------------------------------------- /shim.h: -------------------------------------------------------------------------------- 1 | #ifndef OPENSSL_SHIM 2 | #define OPENSSL_SHIM 3 | 4 | #import 5 | 6 | /// A swift-compatible wrapper for BIO_ctrl. The only difference is a type change for the value which allows you to 7 | /// pass a Swift string directly to the function. 8 | static inline int Swift_BIO_ctrl(BIO *bio, int cmd, int larg, const char *value) { 9 | return BIO_ctrl(bio, cmd, larg, (char *)value); 10 | } 11 | 12 | #endif -------------------------------------------------------------------------------- /signingkey.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbJGKehPTyb+n1D9ejHvcupuVOvYY 3 | hkbps3hVsc/w+YDGMompmY5W+VpL5t+ORE079jKlxoB0LSuS6of9LuY6fQ== 4 | -----END PUBLIC KEY----- 5 | --------------------------------------------------------------------------------