Page MenuHomePhabricator

[secp256k1] Native jacobi symbol algorithm
ClosedPublic

Authored by PiRK on Apr 10 2026, 12:26.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABCdd450a387f32: [secp256k1] Native jacobi symbol algorithm
Summary

Make secp256k1_i128_check_pow2 support -(2^n)

Make secp256k1_modinv64_det_check_pow2 support abs val

Native jacobi symbol algorithm

This introduces variants of the divsteps-based GCD algorithm used for
modular inverses to compute Jacobi symbols. Changes compared to
the normal vartime divsteps:

  • Only positive matrices are used, guaranteeing that f and g remain positive.
  • An additional jac variable is updated to track sign changes during matrix computation.
  • There is (so far) no proof that this algorithm terminates within reasonable amount of time for every input, but experimentally it appears to almost always need less than 900 iterations. To account for that, only a bounded number of iterations is performed (1500), after which failure is returned. In VERIFY mode a lower iteration count is used to make sure that callers exercise their fallback.
  • The algorithm converges to f=g=gcd(f0,g0) rather than g=0. To keep this test simple, the end condition is f=1, which won't be reached if started with non-coprime or g=0 inputs. Because of that we only support coprime non-zero inputs.

Add secp256k1_fe_is_square_var function

The implementation calls the secp256k1_modinvNN_jacobi_var code, falling back
to computing a square root in the (extremely rare) case it failed converge.

Describe Jacobi calculation in safegcd_implementation.md

This is a backport of secp256k1#979

Test Plan

ninja check-secp256k1

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

PiRK requested review of this revision.Apr 10 2026, 12:26

Tail of the build log:

  CFLAGS_x86_64-unknown-linux-gnu = None
  OUT_DIR = Some(/work/target/debug/build/ecash-secp256k1-sys-81e5283bca7fe3e9/out)
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  TARGET = Some(x86_64-unknown-linux-gnu)
  CARGO_CFG_TARGET_FEATURE = Some(fxsr,sse,sse2)
  HOST = Some(x86_64-unknown-linux-gnu)
  cargo:rerun-if-env-changed=CFLAGS
  CFLAGS = None
  cargo:rerun-if-env-changed=HOST_CFLAGS
  HOST_CFLAGS = None
  cargo:rerun-if-env-changed=CFLAGS_x86_64_unknown_linux_gnu
  CFLAGS_x86_64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=CFLAGS_x86_64-unknown-linux-gnu
  CFLAGS_x86_64-unknown-linux-gnu = None
  cargo:warning=In file included from ../../../src/secp256k1/contrib/lax_der_parsing.h:59,
  cargo:warning=                 from ../../../src/secp256k1/contrib/lax_der_parsing.c:9:
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:18: error: expected ';' before 'const'
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:18: error: expected ';' before 'const'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:18: error: expected ';' before 'const'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:18: error: expected ';' before 'const'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=In file included from ../../../src/secp256k1/contrib/lax_der_parsing.h:59,
  cargo:warning=                 from ../../../src/secp256k1/contrib/lax_der_parsing.c:9:
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:18: error: expected ';' before 'const'
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:18: error: expected ';' before 'const'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:18: error: expected ';' before 'const'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:18: error: expected ';' before 'const'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                  ^~~~~~
  cargo:warning=      |                  ;

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-gdwarf-4" "-fno-omit-frame-pointer" "-m64" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-Wall" "-Wextra" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-o" "/work/target/debug/build/ecash-secp256k1-sys-81e5283bca7fe3e9/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


Build build-ecash-secp256k1 failed with exit code 101

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build cashtab-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-agora-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-lib-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-agora-integration-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-lib-integration-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-wallet-tests failed with exit code 2

Tail of the build log:

  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:241:42: error: expected ';' after top level declarator
  cargo:warning=  241 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_static;
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:244:42: error: expected ';' after top level declarator
  cargo:warning=  244 | SECP256K1_API_VAR const secp256k1_context *secp256k1_context_no_precomp
  cargo:warning=      |                                          ^
  cargo:warning=      |                                          ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:641:49: error: expected ';' after top level declarator
  cargo:warning=  641 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:1: error: unknown type name 'SECP256K1_API_VAR'
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      | ^
  cargo:warning=../../../src/secp256k1/include/secp256k1.h:644:49: error: expected ';' after top level declarator
  cargo:warning=  644 | SECP256K1_API_VAR const secp256k1_nonce_function secp256k1_nonce_function_default;
  cargo:warning=      |                                                 ^
  cargo:warning=      |                                                 ;
  cargo:warning=8 errors generated.

  --- stderr


  error occurred in cc-rs: command did not execute successfully (status code exit status: 1): LC_ALL="C" "clang" "-Oz" "-ffunction-sections" "-fdata-sections" "-fno-exceptions" "--target=wasm32-unknown-unknown" "-I" "../../../src/secp256k1/" "-I" "../../../src/secp256k1/include" "-I" "../../../src/secp256k1/src" "-I" "wasm/wasm-sysroot" "-I" "wasm/wasm-sysroot" "-Wno-unused-function" "-Wno-unused-parameter" "-DSECP256K1_API=" "-DENABLE_MODULE_ECDH=1" "-DENABLE_MODULE_SCHNORRSIG=1" "-DENABLE_MODULE_SCHNORR=1" "-DENABLE_MODULE_EXTRAKEYS=1" "-Dprintf(...)=" "-DECMULT_GEN_PREC_BITS=4" "-DECMULT_WINDOW_SIZE=15" "-DUSE_EXTERNAL_DEFAULT_CALLBACKS=1" "-DENABLE_MODULE_RECOVERY=1" "-Wno-pointer-sign" "-Wno-implicit-function-declaration" "-o" "/work/modules/ecash-lib-wasm/./target/wasm32-unknown-unknown/release-wasm/build/ecash-secp256k1-sys-553871913c9fedce/out/6ea78a1c812bdfd1-lax_der_parsing.o" "-c" "../../../src/secp256k1/contrib/lax_der_parsing.c"


warning: build failed, waiting for other jobs to finish...
Failed opening './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_browser.js: No such file or directory
./build-wasm.sh: line 39: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 40: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.wasm: No such file or directory
./build-wasm.sh: line 41: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.js: No such file or directory
./build-wasm.sh: line 43: ../ecash-lib/src/ffi/ecash_lib_wasm_bg_browser.d.ts: No such file or directory
error: failed reading './target/wasm32-unknown-unknown/release-wasm/ecash_lib_wasm.wasm'

Caused by:
    No such file or directory (os error 2)
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm_bg.wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.d.ts': No such file or directory
mv: cannot stat '../ecash-lib/src/ffi/ecash_lib_wasm.js': No such file or directory
sed: can't read ../ecash-lib/src/ffi/ecash_lib_wasm_nodejs.js: No such file or directory
Build ecash-wallet-integration-tests failed with exit code 2
This revision is now accepted and ready to land.Apr 10 2026, 19:39