29b678ab14
Add a complete C implementation of secp256k1 elliptic curve operations alongside the existing Kotlin implementation, enabling direct comparison and extraction of maximum performance from each platform (ARM64, x86_64). C Implementation (quartz/src/main/c/secp256k1/): - field.h/c: 5x52-bit limb field arithmetic with __int128 support and lazy reduction (12-bit headroom per limb vs Kotlin's fully-packed 4x64) - scalar.h/c: Scalar mod n arithmetic, GLV decomposition, wNAF encoding - point.h/c: Jacobian point operations (3M+4S double, 8M+3S mixed add), GLV+wNAF scalar multiplication, Strauss/Shamir dual scalar multiply, Montgomery batch-to-affine, precomputed G tables (wNAF-12) - schnorr.c: BIP-340 Schnorr sign/verify/verifyFast/verifyBatch with pubkey decompression cache and precomputed tag hash prefixes - sha256.c: Self-contained SHA-256 for BIP-340 tagged hashes - secp256k1_c.h: Public API matching the Kotlin Secp256k1 object - jni_bridge.c: JNI bridge for JVM/Android integration - benchmark.c: Standalone C benchmark (cmake build) - CMakeLists.txt: Build system with ARM64/x86_64 optimization flags Kotlin Integration: - Secp256k1InstanceC: expect/actual wrapper (commonMain/jvmMain/androidMain/nativeMain) - Secp256k1C: JVM JNI binding class - Secp256k1TripleBenchmark: Three-way JVM benchmark (ACINQ vs Kotlin vs Custom C) - Secp256k1CBenchmark: Android benchmark for the C implementation Current status: sign works correctly (verified against BIP-340 test vectors), verify path needs ecmult_double_g debugging (GLV wNAF-12 table issue). The comb table for ecmult_gen also needs fixing (currently falls back to GLV+wNAF). Field arithmetic is fully verified: 5x52 limbs with R=0x1000003D10 fold. https://claude.ai/code/session_011KVZhDcV2G7idNWEBz12GY