react-native-quick-crypto
Version:
A fast implementation of Node's `crypto` module written in C/C++ JSI
118 lines (106 loc) • 3.34 kB
Plain Text
cmake_minimum_required(VERSION 3.10.0)
project(QuickCrypto)
set(PACKAGE_NAME QuickCrypto)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_STANDARD 20)
# BLAKE3 sources - architecture-specific SIMD support
set(BLAKE3_SOURCES
../deps/blake3/c/blake3.c
../deps/blake3/c/blake3_dispatch.c
../deps/blake3/c/blake3_portable.c
)
if(CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
# ARM64 uses NEON intrinsics (auto-detected via IS_AARCH64 in blake3_impl.h)
list(APPEND BLAKE3_SOURCES ../deps/blake3/c/blake3_neon.c)
elseif(CMAKE_ANDROID_ARCH_ABI STREQUAL "x86" OR CMAKE_ANDROID_ARCH_ABI STREQUAL "x86_64")
# Disable x86 SIMD - would require assembly files we don't compile
# Falls back to portable C implementation
add_definitions(-DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512)
endif()
# Define C++ library and add all sources
add_library(
${PACKAGE_NAME} SHARED
src/main/cpp/cpp-adapter.cpp
../cpp/blake3/HybridBlake3.cpp
../cpp/cipher/CCMCipher.cpp
../cpp/cipher/GCMCipher.cpp
../cpp/cipher/HybridCipher.cpp
../cpp/cipher/HybridRsaCipher.cpp
../cpp/cipher/OCBCipher.cpp
../cpp/cipher/XSalsa20Cipher.cpp
../cpp/cipher/ChaCha20Cipher.cpp
../cpp/cipher/ChaCha20Poly1305Cipher.cpp
../cpp/ec/HybridEcKeyPair.cpp
../cpp/ed25519/HybridEdKeyPair.cpp
../cpp/hash/HybridHash.cpp
../cpp/hmac/HybridHmac.cpp
../cpp/hkdf/HybridHkdf.cpp
../cpp/keys/HybridKeyObjectHandle.cpp
../cpp/keys/KeyObjectData.cpp
../cpp/mldsa/HybridMlDsaKeyPair.cpp
../cpp/pbkdf2/HybridPbkdf2.cpp
../cpp/random/HybridRandom.cpp
../cpp/rsa/HybridRsaKeyPair.cpp
../cpp/scrypt/HybridScrypt.cpp
../cpp/sign/HybridSignHandle.cpp
../cpp/sign/HybridVerifyHandle.cpp
../cpp/utils/HybridUtils.cpp
${BLAKE3_SOURCES}
../deps/fastpbkdf2/fastpbkdf2.c
../deps/ncrypto/src/ncrypto.cpp
)
# add Nitrogen specs
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/QuickCrypto+autolinking.cmake)
# local includes
include_directories(
"src/main/cpp"
"../cpp/blake3"
"../cpp/cipher"
"../cpp/ec"
"../cpp/ed25519"
"../cpp/hash"
"../cpp/hkdf"
"../cpp/hmac"
"../cpp/keys"
"../cpp/mldsa"
"../cpp/pbkdf2"
"../cpp/random"
"../cpp/rsa"
"../cpp/sign"
"../cpp/scrypt"
"../cpp/utils"
"../deps/blake3/c"
"../deps/fastpbkdf2"
"../deps/ncrypto/include"
)
# Third party libraries (Prefabs)
find_library(LOG_LIB log)
find_package(openssl REQUIRED CONFIG)
# Link all libraries together
target_link_libraries(
${PACKAGE_NAME}
${LOG_LIB} # <-- Logcat logger
android # <-- Android core
openssl::crypto # <-- OpenSSL (Crypto)
openssl::ssl # <-- OpenSSL (SSL)
)
if(SODIUM_ENABLED)
add_definitions(-DBLSALLOC_SODIUM)
find_package(sodium REQUIRED CONFIG)
target_link_libraries(
${PACKAGE_NAME}
sodium::sodium
)
endif()
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
target_link_libraries(
${PACKAGE_NAME}
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
)
else()
target_link_libraries(
${PACKAGE_NAME}
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
ReactAndroid::turbomodulejsijni # <-- RN: TurboModules utils (e.g. CallInvokerHolder)
)
endif()