update main readme and instructions regarding the cgo secp256k1 library
also properly add the submodule so it can be pulled without explicit specification (git submodule init/update)
This commit is contained in:
2
.github/workflows/go.yml
vendored
2
.github/workflows/go.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: install secp256k1
|
- name: install secp256k1
|
||||||
run: ./install_libsecp256k1.sh
|
run: ./ubuntu_install_libsecp256k1.sh
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v4
|
uses: actions/setup-go@v4
|
||||||
|
|||||||
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
|||||||
[submodule "secp256k1"]
|
[submodule "secp256k1"]
|
||||||
path = p256k/secp256k1
|
path = secp256k1
|
||||||
url = https://github.com/bitcoin-core/secp256k1.git
|
url = https://github.com/bitcoin-core/secp256k1.git
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# realy.lol
|
# realy.lol
|
||||||
|
|
||||||
[](https://pkg.go.dev/realy.lol)
|
[](https://pkg.go.dev/realy.lol)
|
||||||
|
[](https://geyser.fund/project/realy)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -16,13 +17,14 @@ includes:
|
|||||||
- a cleaned up and unified fork of the btcd/dcred BIP-340 signatures, including the use of
|
- a cleaned up and unified fork of the btcd/dcred BIP-340 signatures, including the use of
|
||||||
bitcoin core's BIP-340 implementation (more than 4x faster than btcd)
|
bitcoin core's BIP-340 implementation (more than 4x faster than btcd)
|
||||||
- AVX/AVX2 optimized SHA256 and SIMD hex encoder
|
- AVX/AVX2 optimized SHA256 and SIMD hex encoder
|
||||||
- a bespoke, mutable byte slice based hash/pubkey/signature encoding in memory and the fastest
|
- [libsecp256k1](https://github.com/bitcoin/secp256k1)-enabled signature and signature verification
|
||||||
nostr binary codec that exists
|
(see [here](p256k/README.md))
|
||||||
|
- a bespoke, mutable byte slice based hash/pubkey/signature encoding in memory
|
||||||
- custom badger based event store with a garbage collector that prunes off data with least recent
|
- custom badger based event store with a garbage collector that prunes off data with least recent
|
||||||
access
|
access
|
||||||
- vanity npub generator that can mine a 5 letter prefix in around 15 minutes on a 6 core Ryzen 5
|
- vanity npub generator that can mine a 5 letter prefix in around 15 minutes on a 6 core Ryzen 5
|
||||||
processor
|
processor
|
||||||
- reverse proxy tool with support for Go vanity imports and nip-05 npub DNS verification and own
|
- reverse proxy tool with support for Go vanity imports and [nip-05](https://github.com/nostr-protocol/nips/blob/master/05.md) npub DNS verification and own
|
||||||
TLS certificates
|
TLS certificates
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
@@ -3,25 +3,37 @@
|
|||||||
This is a library that uses the `bitcoin-core` optimized secp256k1 elliptic
|
This is a library that uses the `bitcoin-core` optimized secp256k1 elliptic
|
||||||
curve signatures library for `nostr` schnorr signatures.
|
curve signatures library for `nostr` schnorr signatures.
|
||||||
|
|
||||||
By default it uses the secp256k1 EC library from
|
If you need to build it without `libsecp256k1` C library, you must disable cgo:
|
||||||
[btcsuite](https://github.com/btcsuite/btcd)/[decred](https://github.com/decred/dcrd/tree/master/dcrec),
|
|
||||||
the decred is actually where the schnorr signatures are (ikr?) - this repo
|
|
||||||
uses my fork of this mess of shitcoinery and bad, slow Go code is cleaned up
|
|
||||||
and unified in [realy.lol/ec](https://realy.lol/ec) and
|
|
||||||
includes the bech32 and base58check libraries. And the messy precomputed
|
|
||||||
values are upgraded to use the modern "embed" enabling a faster app startup
|
|
||||||
for initialising this array (at the cost of a little more binary size).
|
|
||||||
|
|
||||||
For ubuntu, you need these
|
export CGO_ENABLED='0'
|
||||||
|
|
||||||
|
This enables the fallback `btcec` pure Go library to be used in its place. This
|
||||||
|
CGO setting is not default for Go, so it must be set in order to disable this.
|
||||||
|
|
||||||
|
The standard `libsecp256k1-0` and `libsecp256k1-dev` available through the
|
||||||
|
ubuntu dpkg repositories do not include support for the BIP-340 schnorr
|
||||||
|
signatures or the ECDH X-only shared secret generation algorithm, so you must
|
||||||
|
follow the following instructions to get the benefits of using this library. It
|
||||||
|
is 4x faster at signing and generating shared secrets so it is a must if your
|
||||||
|
intention is to use it for high throughput systems like a network transport.
|
||||||
|
|
||||||
|
The easy way to install it, if you have ubuntu/debian, is the script
|
||||||
|
[../ubuntu_install_libsecp256k1.sh](../ubuntu_install_libsecp256k1.sh), it
|
||||||
|
handles the dependencies and runs the build all in one step for you. Note that it
|
||||||
|
|
||||||
|
For ubuntu, you need these:
|
||||||
|
|
||||||
sudo apt -y install build-essential autoconf libtool
|
sudo apt -y install build-essential autoconf libtool
|
||||||
|
|
||||||
The directory `pkg/libsecp256k1/secp256k1` needs to be initialized and built
|
For other linux distributions, the process is the same but the dependencies are
|
||||||
and installed, like so:
|
likely different. The main thing is it requires make, gcc/++, autoconf and
|
||||||
|
libtool to run. The most important thing to point out is that you must enable
|
||||||
|
the schnorr signatures feature, and ECDH.
|
||||||
|
|
||||||
|
The directory `p256k/secp256k1` needs to be initialized, built and installed,
|
||||||
|
like so:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd p256k
|
|
||||||
git clone https://github.com/bitcoin-core/secp256k1.git
|
|
||||||
cd secp256k1
|
cd secp256k1
|
||||||
git submodule init
|
git submodule init
|
||||||
git submodule update
|
git submodule update
|
||||||
@@ -32,9 +44,23 @@ just use the default autotools:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --enable-module-schnorrsig --prefix=/usr
|
./configure --enable-module-schnorrsig --enable-module-ecdh --prefix=/usr
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
On WSL2 you may have to attend to various things to make this work, setting up your basic locale (uncomment one or more in `/etc/locale.gen`, and run `locale-gen`), installing the basic build tools (build-essential or base-devel) and of course git, curl, wget, libtool and autoconf.
|
On WSL2 you may have to attend to various things to make this work, setting up
|
||||||
|
your basic locale (uncomment one or more in `/etc/locale.gen`, and run
|
||||||
|
`locale-gen`), installing the basic build tools (build-essential or base-devel)
|
||||||
|
and of course git, curl, wget, libtool and
|
||||||
|
autoconf.
|
||||||
|
|
||||||
|
## ECDH
|
||||||
|
|
||||||
|
TODO: Currently the use of the libsecp256k1 library for ECDH, used in nip-04 and
|
||||||
|
nip-44 encryption is not enabled, because the default version uses the Y
|
||||||
|
coordinate and this is incorrect for nostr. It will be enabled soon... for now
|
||||||
|
it is done with the `btcec` fallback version. This is slower, however previous
|
||||||
|
tests have shown that this ECDH library is fast enough to enable 8mb/s
|
||||||
|
throughput per CPU thread when used to generate a distinct secret for TCP
|
||||||
|
packets. The C library will likely raise this to 20mb/s or more.
|
||||||
@@ -1 +1 @@
|
|||||||
v1.2.26
|
v1.2.27
|
||||||
@@ -9,6 +9,6 @@ git checkout v0.6.0
|
|||||||
git submodule init
|
git submodule init
|
||||||
git submodule update
|
git submodule update
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --enable-module-schnorrsig --prefix=/usr
|
./configure --enable-module-schnorrsig --enable-module-ecdh --prefix=/usr
|
||||||
make -j1
|
make -j1
|
||||||
sudo make install
|
sudo make install
|
||||||
Reference in New Issue
Block a user