randombit / botan

Cryptography Toolkit
https://botan.randombit.net
BSD 2-Clause "Simplified" License
2.47k stars 553 forks source link

Unable to Build with Emscripten / WASM -- "Duplicate Symbol Botan::OS2ECP" #3612

Closed FranzSw closed 1 year ago

FranzSw commented 1 year ago

Howdy,

I'm trying to use Botan for a web project. Previously (pre 3.0.0 release, commit 8adf2ecf1774d1e9d8bd045e63b684f64ba77b1a), the build worked fine, however after upgrading and following the migration guide, compilation fails with the following error

wasm-ld: error: duplicate symbol: Botan::OS2ECP(unsigned char const*, unsigned long, Botan::BigInt const&, Botan::BigInt const&, Botan::BigInt const&)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_point_gfp.o)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_ec_point.o)

Steps to reproduce I've removed everything from my cpp file to only the following:

#include <string>

#include <botan/x509_key.h>

#include <emscripten/bind.h>

std::string test(std::string anyString)
{
  const auto keyString = std::vector<uint8_t>(anyString.begin(), anyString.end());
  const auto pubKey = Botan::X509::load_key(keyString);

  return "a";
}

// see https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html#embind
EMSCRIPTEN_BINDINGS(my_module)
{
  emscripten::function("egk", &test);
}

Botan is first built with:

./configure.py --cc=emcc --cpu=wasm --os=emscripten \
    --ldflags "-sENVIRONMENT=web -s EXPORT_ES6=1" \
    --enable-modules=rsa,auto_rng,system_rng,kyber,hkdf,base64,rfc3394
make -j8

The file is then built and linked with botan:

emcc \
  -s ENVIRONMENT=web -s EXPORT_ES6=1 \
  -s NO_DISABLE_EXCEPTION_CATCHING -std=c++20 \
  -I botan/build/include api.cpp botan/libbotan-3.a \
  -o botan.js -lembind

I'm honestly not sure if I'm doing something wrong when building, but there's not much going on in my example. So I suspect that there's an issue somewhere in Botan, that "Botan::OS2ECP" is redefined somewhere.

Logs (without all module builds, I can add that too, if necessary)

./build.sh               
   INFO: ./configure.py invoked with options "--cc=emcc --cpu=wasm --os=emscripten --ldflags -sENVIRONMENT=web -s EXPORT_ES6=1 --enable-modules=rsa,auto_rng,system_rng,kyber,hkdf,base64,rfc3394"
   INFO: Configuring to build Botan 3.0.0 (revision git:f2e23e9a46430c39f4a25d4c03e8c4d0006c7ad9)
   INFO: Running under 3.11.4 (main, Jun 20 2023, 17:23:00) [Clang 14.0.3 (clang-1403.0.22.14.1)]
   INFO: Autodetected platform information: OS="Darwin" machine="arm64" proc="arm"
   INFO: Using /etc/ssl/cert.pem as system certificate store
   INFO: Shared libs not supported on emscripten, disabling shared lib support
WARNING: Tried to get emcc version, but output 'EMCC __EMSCRIPTEN_major__ __EMSCRIPTEN_minor__' is unexpected
   INFO: Auto-detected compiler arch wasm
   INFO: Target is emcc:0.0-emscripten-wasm
   INFO: Assuming target wasm is little endian
   INFO: Skipping (dependency failure): asio certstor_sqlite3 chacha_simd32 noekeon_simd serpent_simd sessions_sqlite3 shacal2_simd
   INFO: Skipping (incompatible CPU): aes_armv8 aes_ni aes_power8 aes_vperm argon2_avx2 argon2_ssse3 chacha_avx2 ghash_cpu ghash_vperm idea_sse2 processor_rng rdseed serpent_avx2 sha1_armv8 sha1_sse2 sha1_x86 sha2_32_armv8 sha2_32_bmi2 sha2_32_x86 sha2_64_bmi2 sha3_bmi2 shacal2_armv8 shacal2_avx2 shacal2_x86 simd simd_avx2 sm4_armv8 zfec_sse2 zfec_vperm
   INFO: Skipping (incompatible OS): certstor_system_macos certstor_system_windows commoncrypto getentropy thread_utils win32_stats
   INFO: Skipping (no enabled compression schemes): compression
   INFO: Skipping (requires external dependency): boost bzip2 lzma sqlite3 tpm zlib
   INFO: Loading modules: adler32 aead aes argon2 argon2fmt aria asn1 auto_rng base base32 base58 base64 bcrypt bcrypt_pbkdf bigint blake2 blake2mac block blowfish camellia cascade cast128 cbc ccm certstor_flatfile certstor_sql certstor_system cfb chacha chacha20poly1305 chacha_rng checksum cmac comb4p cpuid crc24 crc32 cryptobox ctr curve25519 des dh dilithium dilithium_aes dilithium_common dl_algo dl_group dlies dsa dyn_load eax ec_group ec_h2c ecc_key ecdh ecdsa ecgdsa ecies eckcdsa ed25519 elgamal eme_oaep eme_pkcs1 eme_raw emsa_pkcs1 emsa_pssr emsa_raw emsa_x931 entropy fd_unix ffi filters fpe_fe1 gcm ghash gmac gost_28147 gost_3410 gost_3411 hash hash_id hex hkdf hmac hmac_drbg hotp http_util idea iso9796 kdf kdf1 kdf1_iso18033 kdf2 keccak keypair kyber kyber_90s kyber_common lion locking_allocator mac mce md4 md5 mdx_hash mem_pool mgf1 mode_pad modes mp nist_keywrap noekeon numbertheory ocb ofb par_hash passhash9 pbes2 pbkdf pbkdf2 pem pgp_s2k pk_pad pkcs11 poly1305 poly_dbl prf_tls prf_x942 psk_db pubkey raw_hash rc4 rfc3394 rfc6979 rmd160 rng roughtime rsa salsa20 scrypt seed serpent sessions_sql sha1 sha2_32 sha2_64 sha3 shacal2 shake shake_cipher siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng threefish_512 tls tls12 tls13 tls_cbc trunc_hash tss twofish utils uuid whirlpool x509 x919_mac xmss xts zfec
   INFO: Using symlink to link files into build dir (use --link-method to change)
   INFO: Botan 3.0.0 (revision git:f2e23e9a46430c39f4a25d4c03e8c4d0006c7ad9) (unreleased undated) build setup is complete
em++   -s DISABLE_EXCEPTION_CATCHING=0 -std=c++20 -D_REENTRANT  -O3 -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual -Wshorten-64-to-32  -I build/include -I build/include/external -c src/lib/asn1/alg_id.cpp -o build/obj/lib/asn1_alg_id.o
em++   -s DISABLE_EXCEPTION_CATCHING=0 -std=c++20 -D_REENTRANT  -O3 -DBOTAN_IS_BEING_BUILT -Wall -Wextra -Wpedantic -Wshadow -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual -Wshorten-64-to-32  -I build/include -I build/include/external -c src/lib/asn1/asn1_obj.cpp -o build/obj/lib/asn1_obj.o

[...]

emar cr libbotan-3.a build/obj/lib/asn1_alg_id.o build/obj/lib/asn1_obj.o build/obj/lib/asn1_oid.o build/obj/lib/asn1_print.o build/obj/lib/asn1_str.o build/obj/lib/asn1_time.o build/obj/lib/asn1_ber_dec.o build/obj/lib/asn1_der_enc.o build/obj/lib/asn1_oid_map.o build/obj/lib/asn1_oid_maps.o build/obj/lib/asn1_oids.o build/obj/lib/asn1_pss_params.o build/obj/lib/base_buf_comp.o build/obj/lib/base_sym_algo.o build/obj/lib/base_symkey.o build/obj/lib/block_aes.o build/obj/lib/block_aria.o build/obj/lib/block_cipher.o build/obj/lib/block_blowfish.o build/obj/lib/block_camellia.o build/obj/lib/block_cascade.o build/obj/lib/block_cast128.o build/obj/lib/block_des.o build/obj/lib/block_gost_28147.o build/obj/lib/block_idea.o build/obj/lib/block_lion.o build/obj/lib/block_noekeon.o build/obj/lib/block_seed.o build/obj/lib/block_serpent.o build/obj/lib/block_shacal2.o build/obj/lib/block_sm4.o build/obj/lib/block_threefish_512.o build/obj/lib/block_twofish.o build/obj/lib/block_twofish_tab.o build/obj/lib/codec_base32.o build/obj/lib/codec_base58.o build/obj/lib/codec_base64.o build/obj/lib/codec_hex.o build/obj/lib/compat_sodium_25519.o build/obj/lib/compat_sodium_aead.o build/obj/lib/compat_sodium_auth.o build/obj/lib/compat_sodium_box.o build/obj/lib/compat_sodium_chacha.o build/obj/lib/compat_sodium_salsa.o build/obj/lib/compat_sodium_secretbox.o build/obj/lib/compat_sodium_utils.o build/obj/lib/entropy_srcs.o build/obj/lib/ffi.o build/obj/lib/ffi_block.o build/obj/lib/ffi_cert.o build/obj/lib/ffi_cipher.o build/obj/lib/ffi_fpe.o build/obj/lib/ffi_hash.o build/obj/lib/ffi_hotp.o build/obj/lib/ffi_kdf.o build/obj/lib/ffi_keywrap.o build/obj/lib/ffi_mac.o build/obj/lib/ffi_mp.o build/obj/lib/ffi_pk_op.o build/obj/lib/ffi_pkey.o build/obj/lib/ffi_pkey_algs.o build/obj/lib/ffi_rng.o build/obj/lib/ffi_srp6.o build/obj/lib/ffi_totp.o build/obj/lib/ffi_zfec.o build/obj/lib/filters_algo_filt.o build/obj/lib/filters_b64_filt.o build/obj/lib/filters_basefilt.o build/obj/lib/filters_buf_filt.o build/obj/lib/filters_cipher_filter.o build/obj/lib/filters_comp_filter.o build/obj/lib/filters_data_snk.o build/obj/lib/filters_fd_unix.o build/obj/lib/filters_filter.o build/obj/lib/filters_hex_filt.o build/obj/lib/filters_out_buf.o build/obj/lib/filters_pipe.o build/obj/lib/filters_pipe_io.o build/obj/lib/filters_pipe_rw.o build/obj/lib/filters_secqueue.o build/obj/lib/filters_threaded_fork.o build/obj/lib/hash_blake2_blake2b.o build/obj/lib/hash_checksum_adler32.o build/obj/lib/hash_checksum_crc24.o build/obj/lib/hash_checksum_crc32.o build/obj/lib/hash_comb4p.o build/obj/lib/hash_gost_3411.o build/obj/lib/hash.o build/obj/lib/hash_keccak.o build/obj/lib/hash_md4.o build/obj/lib/hash_md5.o build/obj/lib/hash_mdx_hash.o build/obj/lib/hash_par_hash.o build/obj/lib/hash_rmd160.o build/obj/lib/hash_sha1.o build/obj/lib/hash_sha2_32.o build/obj/lib/hash_sha2_64.o build/obj/lib/hash_sha3.o build/obj/lib/hash_shake.o build/obj/lib/hash_skein_512.o build/obj/lib/hash_sm3.o build/obj/lib/hash_streebog.o build/obj/lib/hash_streebog_precalc.o build/obj/lib/hash_trunc_hash.o build/obj/lib/hash_whirlpool.o build/obj/lib/kdf_hkdf.o build/obj/lib/kdf.o build/obj/lib/kdf_kdf1.o build/obj/lib/kdf_kdf1_iso18033.o build/obj/lib/kdf_kdf2.o build/obj/lib/kdf_prf_tls.o build/obj/lib/kdf_prf_x942.o build/obj/lib/kdf_sp800_108.o build/obj/lib/kdf_sp800_56a.o build/obj/lib/kdf_sp800_56c.o build/obj/lib/mac_blake2mac_blake2bmac.o build/obj/lib/mac_cmac.o build/obj/lib/mac_gmac.o build/obj/lib/mac_hmac.o build/obj/lib/mac.o build/obj/lib/mac_poly1305.o build/obj/lib/mac_siphash.o build/obj/lib/mac_x919_mac.o build/obj/lib/math_bigint_big_code.o build/obj/lib/math_bigint_big_io.o build/obj/lib/math_bigint_big_ops2.o build/obj/lib/math_bigint_big_ops3.o build/obj/lib/math_bigint_big_rand.o build/obj/lib/math_bigint.o build/obj/lib/math_bigint_divide.o build/obj/lib/math_mp_comba.o build/obj/lib/math_mp_karat.o build/obj/lib/math_mp_monty.o build/obj/lib/math_mp_monty_n.o build/obj/lib/math_numbertheory_dsa_gen.o build/obj/lib/math_numbertheory_make_prm.o build/obj/lib/math_numbertheory_mod_inv.o build/obj/lib/math_numbertheory_monty.o build/obj/lib/math_numbertheory_monty_exp.o build/obj/lib/math_numbertheory_nistp_redc.o build/obj/lib/math_numbertheory_numthry.o build/obj/lib/math_numbertheory_primality.o build/obj/lib/math_numbertheory_primes.o build/obj/lib/math_numbertheory_reducer.o build/obj/lib/misc_cryptobox.o build/obj/lib/misc_fpe_fe1.o build/obj/lib/misc_hotp.o build/obj/lib/misc_hotp_totp.o build/obj/lib/misc_nist_keywrap.o build/obj/lib/misc_rfc3394.o build/obj/lib/misc_roughtime.o build/obj/lib/misc_srp6.o build/obj/lib/misc_tss.o build/obj/lib/misc_zfec.o build/obj/lib/modes_aead.o build/obj/lib/modes_aead_ccm.o build/obj/lib/modes_aead_chacha20poly1305.o build/obj/lib/modes_aead_eax.o build/obj/lib/modes_aead_gcm.o build/obj/lib/modes_aead_ocb.o build/obj/lib/modes_aead_siv.o build/obj/lib/modes_cbc.o build/obj/lib/modes_cfb.o build/obj/lib/modes_cipher_mode.o build/obj/lib/modes_mode_pad.o build/obj/lib/modes_xts.o build/obj/lib/passhash_argon2fmt.o build/obj/lib/passhash_bcrypt.o build/obj/lib/passhash_passhash9.o build/obj/lib/pbkdf_argon2.o build/obj/lib/pbkdf_argon2_argon2pwhash.o build/obj/lib/pbkdf_bcrypt_pbkdf.o build/obj/lib/pbkdf.o build/obj/lib/pbkdf_pbkdf2.o build/obj/lib/pbkdf_pgp_s2k.o build/obj/lib/pbkdf_pgp_s2k_rfc4880.o build/obj/lib/pbkdf_pwdhash.o build/obj/lib/pbkdf_scrypt.o build/obj/lib/pk_pad_eme.o build/obj/lib/pk_pad_eme_oaep_oaep.o build/obj/lib/pk_pad_eme_pkcs1_eme_pkcs.o build/obj/lib/pk_pad_eme_raw.o build/obj/lib/pk_pad_emsa.o build/obj/lib/pk_pad_emsa_pkcs1.o build/obj/lib/pk_pad_emsa_pssr_pssr.o build/obj/lib/pk_pad_emsa_raw.o build/obj/lib/pk_pad_emsa_x931.o build/obj/lib/pk_pad_hash_id.o build/obj/lib/pk_pad_iso9796.o build/obj/lib/pk_pad_mgf1.o build/obj/lib/pk_pad_raw_hash.o build/obj/lib/prov_pkcs11_p11.o build/obj/lib/prov_pkcs11_p11_ecc_key.o build/obj/lib/prov_pkcs11_p11_ecdh.o build/obj/lib/prov_pkcs11_p11_ecdsa.o build/obj/lib/prov_pkcs11_p11_mechanism.o build/obj/lib/prov_pkcs11_p11_module.o build/obj/lib/prov_pkcs11_p11_object.o build/obj/lib/prov_pkcs11_p11_randomgenerator.o build/obj/lib/prov_pkcs11_p11_rsa.o build/obj/lib/prov_pkcs11_p11_session.o build/obj/lib/prov_pkcs11_p11_slot.o build/obj/lib/prov_pkcs11_p11_x509.o build/obj/lib/psk_db.o build/obj/lib/psk_db_psk_db_sql.o build/obj/lib/pubkey_blinding.o build/obj/lib/pubkey_curve25519.o build/obj/lib/pubkey_curve25519_donna.o build/obj/lib/pubkey_dh.o build/obj/lib/pubkey_dilithium_common_dilithium.o build/obj/lib/pubkey_dilithium_common_dilithium_symmetric_primitives.o build/obj/lib/pubkey_dl_algo_dl_scheme.o build/obj/lib/pubkey_dl_group.o build/obj/lib/pubkey_dl_group_dl_named.o build/obj/lib/pubkey_dlies.o build/obj/lib/pubkey_dsa.o build/obj/lib/pubkey_ec_group_curve_gfp.o build/obj/lib/pubkey_ec_group.o build/obj/lib/pubkey_ec_group_ec_named.o build/obj/lib/pubkey_ec_group_ec_point.o build/obj/lib/pubkey_ec_group_point_mul.o build/obj/lib/pubkey_ec_h2c.o build/obj/lib/pubkey_ecc_key.o build/obj/lib/pubkey_ecdh.o build/obj/lib/pubkey_ecdsa.o build/obj/lib/pubkey_ecgdsa.o build/obj/lib/pubkey_ecies.o build/obj/lib/pubkey_eckcdsa.o build/obj/lib/pubkey_ed25519.o build/obj/lib/pubkey_ed25519_fe.o build/obj/lib/pubkey_ed25519_key.o build/obj/lib/pubkey_ed25519_ge.o build/obj/lib/pubkey_ed25519_sc_muladd.o build/obj/lib/pubkey_ed25519_sc_reduce.o build/obj/lib/pubkey_elgamal.o build/obj/lib/pubkey_gost_3410.o build/obj/lib/pubkey_keypair.o build/obj/lib/pubkey_kyber_common_kyber.o build/obj/lib/pubkey_mce_code_based_key_gen.o build/obj/lib/pubkey_mce_gf2m_rootfind_dcmp.o build/obj/lib/pubkey_mce_gf2m_small_m.o build/obj/lib/pubkey_mce_goppa_code.o build/obj/lib/pubkey_mce_workfactor.o build/obj/lib/pubkey_mce_mceliece.o build/obj/lib/pubkey_mce_mceliece_key.o build/obj/lib/pubkey_mce_polyn_gf2m.o build/obj/lib/pubkey_pbes2.o build/obj/lib/pubkey_pem.o build/obj/lib/pubkey_pk_algs.o build/obj/lib/pubkey_pk_keys.o build/obj/lib/pubkey_pk_ops.o build/obj/lib/pubkey_pkcs8.o build/obj/lib/pubkey.o build/obj/lib/pubkey_rfc6979.o build/obj/lib/pubkey_rsa.o build/obj/lib/pubkey_sm2.o build/obj/lib/pubkey_sm2_enc.o build/obj/lib/pubkey_workfactor.o build/obj/lib/pubkey_x509_key.o build/obj/lib/pubkey_xmss_common_ops.o build/obj/lib/pubkey_xmss_hash.o build/obj/lib/pubkey_xmss_index_registry.o build/obj/lib/pubkey_xmss_parameters.o build/obj/lib/pubkey_xmss_privatekey.o build/obj/lib/pubkey_xmss_publickey.o build/obj/lib/pubkey_xmss_signature.o build/obj/lib/pubkey_xmss_signature_operation.o build/obj/lib/pubkey_xmss_verification_operation.o build/obj/lib/pubkey_xmss_wots.o build/obj/lib/pubkey_xmss_wots_parameters.o build/obj/lib/rng_auto_rng.o build/obj/lib/rng_chacha_rng.o build/obj/lib/rng_hmac_drbg.o build/obj/lib/rng.o build/obj/lib/rng_stateful_rng.o build/obj/lib/rng_system_rng.o build/obj/lib/stream_chacha.o build/obj/lib/stream_ctr.o build/obj/lib/stream_ofb.o build/obj/lib/stream_rc4.o build/obj/lib/stream_salsa20.o build/obj/lib/stream_shake_cipher.o build/obj/lib/stream_cipher.o build/obj/lib/tls_credentials_manager.o build/obj/lib/tls_msg_cert_req.o build/obj/lib/tls_msg_cert_verify.o build/obj/lib/tls_msg_client_hello.o build/obj/lib/tls_msg_finished.o build/obj/lib/tls_msg_server_hello.o build/obj/lib/tls_msg_session_ticket.o build/obj/lib/tls_sessions_sql_tls_session_manager_sql.o build/obj/lib/tls_tls12_msg_cert_status.o build/obj/lib/tls_tls12_msg_certificate_12.o build/obj/lib/tls_tls12_msg_client_kex.o build/obj/lib/tls_tls12_msg_hello_verify.o build/obj/lib/tls_tls12_msg_server_kex.o build/obj/lib/tls_tls12_tls_cbc.o build/obj/lib/tls_tls12_tls_channel_impl_12.o build/obj/lib/tls_tls12_tls_client_impl_12.o build/obj/lib/tls_tls12_tls_handshake_hash.o build/obj/lib/tls_tls12_tls_handshake_io.o build/obj/lib/tls_tls12_tls_handshake_state.o build/obj/lib/tls_tls12_tls_record.o build/obj/lib/tls_tls12_tls_server_impl_12.o build/obj/lib/tls_tls12_tls_session_key.o build/obj/lib/tls_tls13_msg_certificate_13.o build/obj/lib/tls_tls13_msg_certificate_req_13.o build/obj/lib/tls_tls13_msg_encrypted_extensions.o build/obj/lib/tls_tls13_msg_key_update.o build/obj/lib/tls_tls13_tls_channel_impl_13.o build/obj/lib/tls_tls13_tls_cipher_state.o build/obj/lib/tls_tls13_tls_client_impl_13.o build/obj/lib/tls_tls13_tls_extensions_key_share.o build/obj/lib/tls_tls13_tls_extensions_psk.o build/obj/lib/tls_tls13_tls_handshake_layer_13.o build/obj/lib/tls_tls13_tls_handshake_state_13.o build/obj/lib/tls_tls13_tls_record_layer_13.o build/obj/lib/tls_tls13_tls_server_impl_13.o build/obj/lib/tls_tls13_tls_ticket_13.o build/obj/lib/tls_tls13_tls_transcript_hash_13.o build/obj/lib/tls_alert.o build/obj/lib/tls_algos.o build/obj/lib/tls_callbacks.o build/obj/lib/tls_ciphersuite.o build/obj/lib/tls_client.o build/obj/lib/tls_extensions.o build/obj/lib/tls_extensions_cert_status_req.o build/obj/lib/tls_handshake_transitions.o build/obj/lib/tls_policy.o build/obj/lib/tls_server.o build/obj/lib/tls_session.o build/obj/lib/tls_session_manager.o build/obj/lib/tls_session_manager_hybrid.o build/obj/lib/tls_session_manager_memory.o build/obj/lib/tls_session_manager_noop.o build/obj/lib/tls_session_manager_stateless.o build/obj/lib/tls_signature_scheme.o build/obj/lib/tls_suite_info.o build/obj/lib/tls_text_policy.o build/obj/lib/tls_version.o build/obj/lib/utils_assert.o build/obj/lib/utils_calendar.o build/obj/lib/utils_charset.o build/obj/lib/utils_cpuid.o build/obj/lib/utils_cpuid_aarch64.o build/obj/lib/utils_cpuid_arm32.o build/obj/lib/utils_cpuid_ppc.o build/obj/lib/utils_cpuid_x86.o build/obj/lib/utils_ct_utils.o build/obj/lib/utils_data_src.o build/obj/lib/utils_dyn_load.o build/obj/lib/utils_exceptn.o build/obj/lib/utils_filesystem.o build/obj/lib/utils_ghash.o build/obj/lib/utils_http_util.o build/obj/lib/utils_locking_allocator.o build/obj/lib/utils_mem_ops.o build/obj/lib/utils_mem_pool.o build/obj/lib/utils_os_utils.o build/obj/lib/utils_parsing.o build/obj/lib/utils_poly_dbl.o build/obj/lib/utils_prefetch.o build/obj/lib/utils_read_cfg.o build/obj/lib/utils_read_kv.o build/obj/lib/utils_scan_name.o build/obj/lib/utils_socket.o build/obj/lib/utils_socket_udp.o build/obj/lib/utils_socket_uri.o build/obj/lib/utils_timer.o build/obj/lib/utils_uuid.o build/obj/lib/utils_version.o build/obj/lib/x509_asn1_alt_name.o build/obj/lib/x509_cert_status.o build/obj/lib/x509_certstor.o build/obj/lib/x509_certstor_flatfile.o build/obj/lib/x509_certstor_sql.o build/obj/lib/x509_certstor_system.o build/obj/lib/x509_crl_ent.o build/obj/lib/x509_key_constraint.o build/obj/lib/x509_name_constraint.o build/obj/lib/x509_ocsp.o build/obj/lib/x509_ocsp_types.o build/obj/lib/x509_pkcs10.o build/obj/lib/x509_attribute.o build/obj/lib/x509_ca.o build/obj/lib/x509_crl.o build/obj/lib/x509_dn.o build/obj/lib/x509_dn_ub.o build/obj/lib/x509_ext.o build/obj/lib/x509_obj.o build/obj/lib/x509_x509cert.o build/obj/lib/x509_x509opt.o build/obj/lib/x509_x509path.o build/obj/lib/x509_x509self.o
em++  build/obj/cli/argon2.o build/obj/cli/asn1.o build/obj/cli/bcrypt.o build/obj/cli/cc_enc.o build/obj/cli/cipher.o build/obj/cli/cli.o build/obj/cli/cli_rng.o build/obj/cli/codec.o build/obj/cli/compress.o build/obj/cli/entropy.o build/obj/cli/hash.o build/obj/cli/hmac.o build/obj/cli/main.o build/obj/cli/math.o build/obj/cli/pbkdf.o build/obj/cli/pk_crypt.o build/obj/cli/psk.o build/obj/cli/pubkey.o build/obj/cli/roughtime.o build/obj/cli/sandbox.o build/obj/cli/speed.o build/obj/cli/timing_tests.o build/obj/cli/tls_client.o build/obj/cli/tls_http_server.o build/obj/cli/tls_proxy.o build/obj/cli/tls_server.o build/obj/cli/tls_utils.o build/obj/cli/tss.o build/obj/cli/utils.o build/obj/cli/x509.o build/obj/cli/zfec.o -L. -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s NO_DISABLE_EXCEPTION_CATCHING -sENVIRONMENT=web -s EXPORT_ES6=1 -lbotan-3   -o botan.html
cache:INFO: generating system asset: symbol_lists/97969906f6bea92f40038c11f8c66f7b246a5e7c.json... (this will be cached in "/Users/franz/projects/emsdk/upstream/emscripten/cache/symbol_lists/97969906f6bea92f40038c11f8c66f7b246a5e7c.json" for subsequent builds)
cache:INFO:  - ok
wasm-ld: error: duplicate symbol: Botan::OS2ECP(unsigned char const*, unsigned long, Botan::CurveGFp const&)
>>> defined in ./libbotan-3.a(pubkey_ec_group_point_gfp.o)
>>> defined in ./libbotan-3.a(pubkey_ec_group_ec_point.o)

wasm-ld: error: duplicate symbol: Botan::OS2ECP(unsigned char const*, unsigned long, Botan::BigInt const&, Botan::BigInt const&, Botan::BigInt const&)
>>> defined in ./libbotan-3.a(pubkey_ec_group_point_gfp.o)
>>> defined in ./libbotan-3.a(pubkey_ec_group_ec_point.o)
em++: error: '/Users/franz/projects/emsdk/upstream/bin/wasm-ld -o botan.wasm build/obj/cli/argon2.o build/obj/cli/asn1.o build/obj/cli/bcrypt.o build/obj/cli/cc_enc.o build/obj/cli/cipher.o build/obj/cli/cli.o build/obj/cli/cli_rng.o build/obj/cli/codec.o build/obj/cli/compress.o build/obj/cli/entropy.o build/obj/cli/hash.o build/obj/cli/hmac.o build/obj/cli/main.o build/obj/cli/math.o build/obj/cli/pbkdf.o build/obj/cli/pk_crypt.o build/obj/cli/psk.o build/obj/cli/pubkey.o build/obj/cli/roughtime.o build/obj/cli/sandbox.o build/obj/cli/speed.o build/obj/cli/timing_tests.o build/obj/cli/tls_client.o build/obj/cli/tls_http_server.o build/obj/cli/tls_proxy.o build/obj/cli/tls_server.o build/obj/cli/tls_utils.o build/obj/cli/tss.o build/obj/cli/utils.o build/obj/cli/x509.o build/obj/cli/zfec.o -L. ./libbotan-3.a -L/Users/franz/projects/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten -lGL -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc -lcompiler_rt -lc++ -lc++abi-debug -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/p2/0_19bd9j21x8wkbjzkxjpgxw0000gp/T/tmpaejrcd0zlibemscripten_js_symbols.so --strip-debug --export-if-defined=main --export-if-defined=__get_exception_message --export-if-defined=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=__main_argc_argv --export-if-defined=fflush --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=stackSave --export=stackRestore --export=stackAlloc --export=__errno_location --export=__get_temp_ret --export=__set_temp_ret --export=__cxa_is_pointer_type --export=__cxa_can_catch --export=__cxa_increment_exception_refcount --export=__cxa_decrement_exception_refcount --export=setThrew --export=__cxa_free_exception --export=__wasm_call_ctors --export-table -z stack-size=65536 --initial-memory=16777216 --no-entry --max-memory=2147483648 --stack-first' failed (returned 1)
make: *** [botan.html] Error 1
make: *** Waiting for unfinished jobs....
nproc not available: built with 8 threads
wasm-ld: error: duplicate symbol: Botan::OS2ECP(unsigned char const*, unsigned long, Botan::CurveGFp const&)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_point_gfp.o)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_ec_point.o)

wasm-ld: error: duplicate symbol: Botan::OS2ECP(unsigned char const*, unsigned long, Botan::BigInt const&, Botan::BigInt const&, Botan::BigInt const&)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_point_gfp.o)
>>> defined in botan/libbotan-3.a(pubkey_ec_group_ec_point.o)
emcc: error: '/Users/franz/projects/emsdk/upstream/bin/wasm-ld -o test2.wasm /var/folders/p2/0_19bd9j21x8wkbjzkxjpgxw0000gp/T/emscripten_temp_8xzlzi5_/test_0.o botan/libbotan-3.a -L/Users/franz/projects/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten --whole-archive -lembind-rtti --no-whole-archive -lGL -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc -lcompiler_rt -lc++ -lc++abi-debug -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/p2/0_19bd9j21x8wkbjzkxjpgxw0000gp/T/tmp_2xsbrxxlibemscripten_js_symbols.so --strip-debug --export-if-defined=main --export-if-defined=__get_exception_message --export-if-defined=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=__main_argc_argv --export-if-defined=fflush --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=stackSave --export=stackRestore --export=stackAlloc --export=__errno_location --export=__get_temp_ret --export=__set_temp_ret --export=__cxa_is_pointer_type --export=__cxa_can_catch --export=__cxa_increment_exception_refcount --export=__cxa_decrement_exception_refcount --export=setThrew --export=__cxa_free_exception --export=__wasm_call_ctors --export-table -z stack-size=65536 --initial-memory=16777216 --no-entry --max-memory=16777216 --stack-first' failed (returned 1)
FranzSw commented 1 year ago

Might sound like a joke, but now it works. I guess somewhere, something was still cached from the old botan build, which seems to have caused the issue.