34 lines
1.1 KiB
Markdown
34 lines
1.1 KiB
Markdown
This wraps [libsecp256k1](https://github.com/bitcoin-core/secp256k1) with `cgo`.
|
|
|
|
It doesn't embed the library or anything smart like that because I don't know how to do it, so you must have it installed in your system.
|
|
|
|
It is faster than the pure Go version:
|
|
|
|
```
|
|
goos: linux
|
|
goarch: amd64
|
|
pkg: github.com/nbd-wtf/go-nostr/libsecp256k1
|
|
cpu: AMD Ryzen 3 3200G with Radeon Vega Graphics
|
|
BenchmarkSignatureVerification/btcec-4 145 7873130 ns/op 127069 B/op 579 allocs/op
|
|
BenchmarkSignatureVerification/libsecp256k1-4 502 2314573 ns/op 112241 B/op 392 allocs/op
|
|
```
|
|
|
|
To use it manually, just import. To use it inside the automatic verification that happens for subscriptions, set it up with a `SimplePool`:
|
|
|
|
```go
|
|
pool := nostr.NewSimplePool()
|
|
pool.SignatureChecker = func (evt nostr.Event) bool {
|
|
ok, _ := libsecp256k1.CheckSignature(evt)
|
|
return ok
|
|
}
|
|
```
|
|
|
|
Or directly to the `Relay`:
|
|
|
|
```go
|
|
relay := nostr.RelayConnect(context.Background(), "wss://relay.nostr.com", nostr.WithSignatureChecker(func (evt nostr.Event) bool {
|
|
ok, _ := libsecp256k1.CheckSignature(evt)
|
|
return ok
|
|
}))
|
|
```
|