# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. SharedLibrary("rnp_experimental") include("../rnpdefs.mozbuild") include("experimental-features.mozbuild") @template def IQuote(*paths): """Add a set of paths to the include path via -iquote""" if CONFIG["CC_TYPE"] == "clang-cl": flags = ["-Xclang", "-iquote", "-Xclang"] else: flags = ["-iquote"] for p in paths: CXXFLAGS += flags + [p] def get_defines(defines): """For DEFINES that are False, do not include them in the preprocesser commandline. Such preprocessor macros will be #undef'd in the output file while allowing the build code to be explicit (and hopefully more readable).""" for define, value in defines.items(): if value is True: yield ("-D%s" % define) elif value is not False: yield ("-D%s=%s" % (define, value)) COMPILE_FLAGS["WARNINGS_CFLAGS"] += [ "-Wall", "-Wextra", "-Wunreachable-code", "-Wpointer-arith", "-Wmissing-declarations", "-Wno-pedantic", "-Wno-ignored-qualifiers", "-Wno-unused-parameter", "-Wno-missing-field-initializers", ] LOCAL_INCLUDES += [ "include", "src", "src/common", "src/lib", "src/libsexpp/include" ] IQuote( "{}/src/lib".format(OBJDIR), ) # Set up defines for src/lib/config.h rnp_defines = { "RNP_USE_STD_REGEX": True, "HAVE_BZLIB_H": True, "HAVE_ZLIB_H": True, "ENABLE_SM2": False, "ENABLE_IDEA": True, "ENABLE_AEAD": True, "ENABLE_BLOWFISH": True, "ENABLE_CAST5": True, "ENABLE_RIPEMD160": True, "ENABLE_PQC": True, "ENABLE_CRYPTO_REFRESH": False, "PACKAGE_BUGREPORT": '"https://bugzilla.mozilla.org/enter_bug.cgi?product=Thunderbird"', } crypto_backend = CONFIG["MZLA_LIBRNP_BACKEND"] if crypto_backend == "botan": crypto_backend_version = CONFIG["BOTAN_VERSION"] LOCAL_INCLUDES += ["!../botan/build/include/public"] if CONFIG["MZLA_SYSTEM_BOTAN"]: CXXFLAGS += CONFIG["MZLA_BOTAN_CFLAGS"] if CONFIG["OS_TARGET"] == "WINNT": CXXFLAGS += ["/std:c++20"] if CONFIG["OS_TARGET"] != "WINNT": LDFLAGS += ["-pthread"] CXXFLAGS += ["-std=c++20"] rnp_defines.update({ "CRYPTO_BACKEND_BOTAN": True, "CRYPTO_BACKEND_BOTAN3": True, "ENABLE_TWOFISH": True, "ENABLE_BRAINPOOL": True, }) elif crypto_backend == "openssl": crypto_backend = "openssl" crypto_backend_version = CONFIG["MZLA_LIBRNP_OPENSSL_VERSION"] CXXFLAGS += CONFIG["MZLA_LIBRNP_OPENSSL_CFLAGS"] OS_LIBS += CONFIG["MZLA_LIBRNP_OPENSSL_LIBS"] rnp_defines.update({ "CRYPTO_BACKEND_OPENSSL": True, # _LEGACY needed due to enabling IDEA, CAST5, and BLOWFISH # See rnp/src/lib/crypto/backend_version.cpp "CRYPTO_BACKEND_OPENSSL3_LEGACY": True, # Not supported by OpenSSL https://github.com/openssl/openssl/issues/2046 "ENABLE_TWOFISH": False, # Supported, but not with RHEL's OpenSSL, disabled for now; "ENABLE_BRAINPOOL": False, }) if CONFIG["MZLA_LIBRNP_OPENSSL_VERSION"][0] == "3": rnp_defines["CRYPTO_BACKEND_OPENSSL3"] = True gen_files_flags = [d for d in get_defines(rnp_defines)] GeneratedFile( "src/lib/version.h", "src/lib/config.h", script="/comm/python/thirdroc/rnp_generated.py", inputs=["src/lib/version.h.in", "src/lib/config.h.in"], flags=["-V", f"{SRCDIR}/version.txt", "-m", CONFIG["MOZ_APP_VERSION_DISPLAY"], "-s", "experimental", "-c", crypto_backend, "-b", crypto_backend_version] + gen_files_flags ) if CONFIG["MOZ_SYSTEM_ZLIB"]: CXXFLAGS += CONFIG["MOZ_ZLIB_CFLAGS"] else: LOCAL_INCLUDES += ["../zlib"] # Upstream replaced json-c with the bundled header-only nlohmann/json. LOCAL_INCLUDES += ["src/lib/nlohmann"] if CONFIG["MZLA_SYSTEM_BZIP2"]: CXXFLAGS += CONFIG["MZLA_BZIP2_CFLAGS"] else: LOCAL_INCLUDES += ["../bzip2"] SYMBOLS_FILE = "rnp_experimental.symbols" SOURCES += [ "src/common/file-utils.cpp", "src/common/str-utils.cpp", "src/common/time-utils.cpp", "src/lib/crypto/backend_version.cpp", "src/lib/crypto/hash_sha1cd.cpp", "src/lib/crypto/sha1cd/sha1.c", "src/lib/crypto/sha1cd/ubc_check.c", "src/lib/enc_material.cpp", "src/lib/fingerprint.cpp", "src/lib/json-utils.cpp", "src/lib/key-provider.cpp", "src/lib/key.cpp", "src/lib/key_material.cpp", "src/lib/keygen.cpp", "src/lib/logging.cpp", "src/lib/pass-provider.cpp", "src/lib/rawpacket.cpp", "src/lib/rnp.cpp", "src/lib/sec_profile.cpp", "src/lib/sig_material.cpp", "src/lib/sig_subpacket.cpp", "src/lib/signature.cpp", "src/lib/userid.cpp", "src/lib/utils.cpp", # librekey "src/librekey/key_store_g10.cpp", "src/librekey/key_store_kbx.cpp", "src/librekey/key_store_pgp.cpp", "src/librekey/rnp_key_store.cpp", # librepgp "src/librepgp/stream-armor.cpp", "src/librepgp/stream-common.cpp", "src/librepgp/stream-ctx.cpp", "src/librepgp/stream-dump.cpp", "src/librepgp/stream-key.cpp", "src/librepgp/stream-packet.cpp", "src/librepgp/stream-parse.cpp", "src/librepgp/stream-sig.cpp", "src/librepgp/stream-write.cpp", # libsexpp "src/libsexpp/src/ext-key-format.cpp", "src/libsexpp/src/sexp-char-defs.cpp", "src/libsexpp/src/sexp-depth-manager.cpp", "src/libsexpp/src/sexp-error.cpp", "src/libsexpp/src/sexp-input.cpp", "src/libsexpp/src/sexp-object.cpp", "src/libsexpp/src/sexp-output.cpp", "src/libsexpp/src/sexp-simple-string.cpp", ] SOURCES["src/lib/crypto/sha1cd/sha1.c"].flags += ["-Wno-unsafe-buffer-usage", "-Wno-extra-semi-stmt"] SOURCES["src/lib/crypto/sha1cd/ubc_check.c"].flags += ["-Wno-unsafe-buffer-usage"] if CONFIG["MZLA_LIBRNP_BACKEND"] == "botan": SOURCES += [ "src/lib/crypto/cipher.cpp", "src/lib/crypto/cipher_botan.cpp", "src/lib/crypto/dsa.cpp", "src/lib/crypto/dsa_common.cpp", "src/lib/crypto/ec.cpp", "src/lib/crypto/ec_curves.cpp", "src/lib/crypto/ecdh.cpp", "src/lib/crypto/ecdh_utils.cpp", "src/lib/crypto/ecdsa.cpp", "src/lib/crypto/ed25519_ed448.cpp", "src/lib/crypto/eddsa.cpp", "src/lib/crypto/elgamal.cpp", "src/lib/crypto/exdsa_ecdhkem.cpp", "src/lib/crypto/hash.cpp", "src/lib/crypto/hash_common.cpp", "src/lib/crypto/hkdf.cpp", "src/lib/crypto/hkdf_botan.cpp", "src/lib/crypto/kem_combiner.cpp", "src/lib/crypto/kyber.cpp", "src/lib/crypto/kyber_common.cpp", "src/lib/crypto/kyber_ecdh_composite.cpp", "src/lib/crypto/mem.cpp", "src/lib/crypto/mpi.cpp", "src/lib/crypto/rng.cpp", "src/lib/crypto/rsa.cpp", "src/lib/crypto/s2k.cpp", "src/lib/crypto/secure_bytes.cpp", "src/lib/crypto/signatures.cpp", "src/lib/crypto/symmetric.cpp", "src/lib/crypto/symmetric_common.cpp", "src/lib/crypto/x25519_x448.cpp", ] if CONFIG["MZLA_LIBRNP_BACKEND"] == "openssl": SOURCES += [ "src/lib/crypto/dsa_common.cpp", "src/lib/crypto/cipher.cpp", "src/lib/crypto/cipher_ossl.cpp", "src/lib/crypto/dl_ossl.cpp", "src/lib/crypto/dsa_ossl.cpp", "src/lib/crypto/ec_curves.cpp", "src/lib/crypto/ec_ossl.cpp", "src/lib/crypto/ecdh_ossl.cpp", "src/lib/crypto/ecdh_utils.cpp", "src/lib/crypto/ecdsa_ossl.cpp", "src/lib/crypto/eddsa_ossl.cpp", "src/lib/crypto/elgamal_ossl.cpp", "src/lib/crypto/hash_common.cpp", "src/lib/crypto/hash_crc24.cpp", "src/lib/crypto/hash_ossl.cpp", "src/lib/crypto/mem_ossl.cpp", "src/lib/crypto/mpi.cpp", "src/lib/crypto/rng_ossl.cpp", "src/lib/crypto/rsa_ossl.cpp", "src/lib/crypto/s2k.cpp", "src/lib/crypto/s2k_ossl.cpp", "src/lib/crypto/signatures.cpp", "src/lib/crypto/symmetric_common.cpp", "src/lib/crypto/symmetric_ossl.cpp", ] if CONFIG["MOZ_STDCXX_COMPAT"] and (CONFIG["MOZ_ASAN"] or CONFIG["MOZ_TSAN"]): SOURCES += [ "/comm/build/unix/stdc++compat-tb.cpp" ] DIRS += ["src/rnp", "src/rnpkeys"] if CONFIG["CC_TYPE"] == "clang-cl": # SHGetFolderPathW OS_LIBS += ["shell32"] USE_LIBS += ["botan", "bz2", "rnpzlib"] LICENSES += ["rnpexperimental"] LICENSES["rnpexperimental"].title = "RNP (Experimental version) Licenses" LICENSES["rnpexperimental"].notice = """
These licenses apply to files in third_party/rnp_experimental.