cb486778db
Replace U256.fromBytes (allocates LongArray(4)) with U256.fromBytesInto (writes to pre-allocated scratch) across all key operations: - pubkeyCreate: scalar → sc.scalarTmp1 (safe: mulG doesn't use it) - signSchnorrWithPubKey: d0 → sc.zInv (safe: signSchnorrInternal doesn't use it; d0 is read at lines 322-324 and 391 before zInv is needed) - signSchnorrWithXOnlyPubKey: same pattern with sc.zInv - pubKeyTweakMul: scalar → sc.scalarTmp1 (safe: ECPoint.mul doesn't use scalarTmp fields) - ecdhXOnly: k → sc.scalarTmp1 (same) - privKeyTweakAdd: already fixed in previous commit signSchnorr keeps its allocation because d0 must survive through mulG (which destroys splitK*) AND signSchnorrInternal (which uses scalarTmp*). The single LongArray(4) alloc is negligible vs mulG cost (~100μs). Each eliminated allocation saves ~10-20ns of GC pressure on ART and ~5ns on K/Native. For signSchnorrWithPubKey (the cached-pk fast path), this removes the only unnecessary allocation. https://claude.ai/code/session_015CtM5k88rF7WFgX8o2AGNR