diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9a9eaa82e..c3d9dd8861 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -765,6 +765,18 @@ jobs: g++ -Werror include/*.h clang -Werror -x c++-header include/*.h + headers: + name: "Self-contained headers" + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Test script + run: | + ./tools/check_header.sh src/field.h src/field_5x52.h src/field_10x26.h + sage: name: "SageMath prover" runs-on: ubuntu-latest diff --git a/src/field.h b/src/field.h index ccd228e1ae..bfd1267d08 100644 --- a/src/field.h +++ b/src/field.h @@ -29,13 +29,6 @@ * implementation also provides a secp256k1_fe_verify routine to verify that * these fields match the run-time value and perform internal consistency * checks. */ -#ifdef VERIFY -# define SECP256K1_FE_VERIFY_FIELDS \ - int magnitude; \ - int normalized; -#else -# define SECP256K1_FE_VERIFY_FIELDS -#endif #if defined(SECP256K1_WIDEMUL_INT128) #include "field_5x52.h" diff --git a/src/field_10x26.h b/src/field_10x26.h index 203c10167c..c01d92c10b 100644 --- a/src/field_10x26.h +++ b/src/field_10x26.h @@ -30,7 +30,10 @@ typedef struct { * sum(i=0..9, n[i] << (i*26)) < p * (together these imply n[9] <= 2^22 - 1) */ - SECP256K1_FE_VERIFY_FIELDS +#ifdef VERIFY + int magnitude; + int normalized; +#endif } secp256k1_fe; /* Unpacks a constant into a overlapping multi-limbed FE element. */ diff --git a/src/field_5x52.h b/src/field_5x52.h index f20c246fdd..30cdf3bb10 100644 --- a/src/field_5x52.h +++ b/src/field_5x52.h @@ -30,7 +30,10 @@ typedef struct { * sum(i=0..4, n[i] << (i*52)) < p * (together these imply n[4] <= 2^48 - 1) */ - SECP256K1_FE_VERIFY_FIELDS +#ifdef VERIFY + int magnitude; + int normalized; +#endif } secp256k1_fe; /* Unpacks a constant into a overlapping multi-limbed FE element. */ diff --git a/tools/check_header.sh b/tools/check_header.sh new file mode 100755 index 0000000000..4e724a19d2 --- /dev/null +++ b/tools/check_header.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +set -u + +for header in "$@"; do + source_file=${header%.h}.c + object_file=${header%.h}.o + mv "$header" "$source_file" + gcc -c "$source_file" -o "$object_file" + exit_code=$? + mv "$source_file" "$header" + if [ $exit_code -ne 0 ]; then + exit $exit_code + fi + echo "$header... OK" +done