mirror of
https://github.com/block/buzz.git
synced 2026-10-27 20:41:57 +00:00
Replace the Swift secp256k1 wrapper with a small native adapter over Bitcoin Core libsecp256k1. This is an alternative to the wrapper upgrade in [#8381](https://github.com/block/buzz/pull/8381), not an additional change to merge alongside it. The adapter covers the three Nostr operations Buzz needs: x-only public-key derivation, BIP-340 signing, and signature verification. It compiles pinned, unmodified upstream C source through SwiftPM. There is no build plugin, plugin approval script, or underscored Swift import. The app and notification extension use an explicit C module map and header search path. This trades the third-party Swift wrapper for a Buzz-owned adapter and responsibility for updating the vendored C source. Upstream v0.8.0 source, its license, and update provenance are included. The release Xcode pin remains separate in [buzz-releases#110](https://github.com/squareup/buzz-releases/pull/110). ### Validation - Native package tests passed on Xcode 27.0 and 26.5: 96 XCTest tests and 65 Swift Testing tests per toolchain. - Added tests cover the official BIP-340 vectors for 32-byte Nostr messages, invalid secret keys, and malformed input lengths. - Full unsigned Release app and notification extension build passed on exact Xcode 27.0. - Vendored files were compared byte-for-byte with upstream v0.8.0. - Full local `just ci` passed. - [Hosted full unsigned iOS Release build](https://github.com/block/buzz/actions/runs/38924020583/job/117051237094) passed. [Hosted Native Swift validation](https://github.com/block/buzz/actions/runs/38924020583/job/117051237153) passed, including the complete simulator build and native controls/push navigation tests. - Codex code review and security review completed with no findings. ### Before merge - [x] Tom selected the direct-C approach with vendored upstream source; [the wrapper alternative](https://github.com/block/buzz/pull/8381) is closed. Signed-off-by: Tom Brow <tomb@block.xyz>
34 lines
1.1 KiB
Swift
34 lines
1.1 KiB
Swift
// swift-tools-version:5.9
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "BuzzPushKit",
|
|
platforms: [.iOS(.v15), .macOS(.v12)],
|
|
products: [
|
|
.library(name: "BuzzPushKit", targets: ["BuzzPushKit"])
|
|
],
|
|
dependencies: [
|
|
.package(url: "https://github.com/swhitty/SwiftDraw.git", exact: "0.29.0")
|
|
],
|
|
targets: [
|
|
.target(
|
|
name: "CSecp256k1",
|
|
sources: ["vendor/src/secp256k1.c", "vendor/src/precomputed_ecmult.c", "vendor/src/precomputed_ecmult_gen.c"],
|
|
publicHeadersPath: "include",
|
|
cSettings: [.define("ENABLE_MODULE_EXTRAKEYS"), .define("ENABLE_MODULE_SCHNORRSIG")]
|
|
),
|
|
.target(
|
|
name: "BuzzPushKit",
|
|
dependencies: ["CSecp256k1", .product(name: "SwiftDraw", package: "SwiftDraw")]
|
|
),
|
|
.testTarget(
|
|
name: "BuzzPushKitTests",
|
|
dependencies: [
|
|
"BuzzPushKit",
|
|
"CSecp256k1",
|
|
],
|
|
resources: [.copy("Fixtures/app_attest_transcripts.json"), .copy("CryptoFixtures/bip340.csv")]
|
|
),
|
|
]
|
|
)
|