mirror of
https://github.com/AthanorLabs/atomic-swap.git
synced 2026-01-09 14:18:03 -05:00
cleanup: remove farcaster-dleq (#140)
This commit is contained in:
112
dleq/dleq.go
112
dleq/dleq.go
@@ -1,16 +1,6 @@
|
||||
package dleq
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/noot/atomic-swap/crypto/secp256k1"
|
||||
)
|
||||
|
||||
@@ -61,105 +51,3 @@ type VerifyResult struct {
|
||||
func (r *VerifyResult) Secp256k1PublicKey() *secp256k1.PublicKey {
|
||||
return r.secp256k1Pub
|
||||
}
|
||||
|
||||
var (
|
||||
dleqGenBinPath = getFarcasterDLEqBinaryPath() + "dleq-gen"
|
||||
dleqVerifyBinPath = getFarcasterDLEqBinaryPath() + "dleq-verify"
|
||||
defaultProofPath = "/tmp/dleq_proof"
|
||||
)
|
||||
|
||||
// TODO: this is kinda sus, make it actually find the bin better. maybe env vars?
|
||||
func getFarcasterDLEqBinaryPath() string {
|
||||
bin := "./farcaster-dleq/target/release/dleq-gen"
|
||||
_, err := os.Stat(bin)
|
||||
if !errors.Is(err, os.ErrNotExist) {
|
||||
return "./farcaster-dleq/target/release/"
|
||||
}
|
||||
|
||||
bin = "../farcaster-dleq/target/release/dleq-gen"
|
||||
_, err = os.Stat(bin)
|
||||
if !errors.Is(err, os.ErrNotExist) {
|
||||
return "../farcaster-dleq/target/release/"
|
||||
}
|
||||
|
||||
return "../../farcaster-dleq/target/release/"
|
||||
}
|
||||
|
||||
// FarcasterDLEq is a wrapper around the binaries in farcaster-dleq
|
||||
type FarcasterDLEq struct{}
|
||||
|
||||
// Prove generates a new DLEq proof
|
||||
func (d *FarcasterDLEq) Prove() (*Proof, error) {
|
||||
t := time.Now().Format("2006-01-02-15:04:05.999999999")
|
||||
path := fmt.Sprintf("%s-%s", defaultProofPath, t)
|
||||
|
||||
cmd := exec.Command(dleqGenBinPath, path)
|
||||
if err := cmd.Run(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
secret, err := ioutil.ReadFile(filepath.Clean(path + ".key"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var sc [32]byte
|
||||
copy(sc[:], secret)
|
||||
|
||||
proof, err := ioutil.ReadFile(filepath.Clean(path))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Proof{
|
||||
secret: sc,
|
||||
proof: proof,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Verify verifies a DLEq proof
|
||||
func (d *FarcasterDLEq) Verify(p *Proof) (*VerifyResult, error) {
|
||||
t := time.Now().Format("2006-01-02-15:04:05.999999999")
|
||||
path := fmt.Sprintf("%s-verify-%s", defaultProofPath, t)
|
||||
|
||||
if err := ioutil.WriteFile(path, p.proof, os.ModePerm); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cmd := exec.Command(dleqVerifyBinPath, path)
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// slice off \n at the end of string
|
||||
out := strings.Split(string(output[:len(output)-1]), " ")
|
||||
if len(out) != 3 {
|
||||
return nil, errors.New("invalid output from dleq-verify")
|
||||
}
|
||||
|
||||
ed25519Pub, err := hex.DecodeString(out[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
secp256k1X, err := hex.DecodeString(out[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
secp256k1Y, err := hex.DecodeString(out[2])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res := &VerifyResult{}
|
||||
copy(res.ed25519Pub[:], ed25519Pub)
|
||||
|
||||
var x, y [32]byte
|
||||
copy(x[:], secp256k1X)
|
||||
copy(y[:], secp256k1Y)
|
||||
res.secp256k1Pub = secp256k1.NewPublicKey(x, y)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
package dleq
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/crypto/secp256k1"
|
||||
mcrypto "github.com/noot/atomic-swap/crypto/monero"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestFarcasterDLEqProof(t *testing.T) {
|
||||
f := &FarcasterDLEq{}
|
||||
proof, err := f.Prove()
|
||||
require.NoError(t, err)
|
||||
res, err := f.Verify(proof)
|
||||
require.NoError(t, err)
|
||||
require.NotEqual(t, [32]byte{}, res.ed25519Pub)
|
||||
require.NotEqual(t, [32]byte{}, res.secp256k1Pub.X())
|
||||
require.NotEqual(t, [32]byte{}, res.secp256k1Pub.Y())
|
||||
}
|
||||
|
||||
func TestFarcasterDLEqProof_invalid(t *testing.T) {
|
||||
f := &FarcasterDLEq{}
|
||||
proof, err := f.Prove()
|
||||
require.NoError(t, err)
|
||||
proof.proof[0] = 0xff
|
||||
_, err = f.Verify(proof)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestFarcasterDLEqProof_createKeys(t *testing.T) {
|
||||
f := &FarcasterDLEq{}
|
||||
proof, err := f.Prove()
|
||||
require.NoError(t, err)
|
||||
|
||||
sk, err := mcrypto.NewPrivateSpendKey(proof.secret[:])
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := f.Verify(proof)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, res.ed25519Pub[:], sk.Public().Bytes())
|
||||
|
||||
curve := secp256k1.S256()
|
||||
|
||||
xb := res.secp256k1Pub.X()
|
||||
yb := res.secp256k1Pub.Y()
|
||||
x := big.NewInt(0).SetBytes(xb[:])
|
||||
y := big.NewInt(0).SetBytes(yb[:])
|
||||
ok := curve.IsOnCurve(x, y)
|
||||
require.True(t, ok)
|
||||
}
|
||||
Reference in New Issue
Block a user