arnaucube
arnaucube/go-blindsecp256k1Public Self-hosted repository
go-blindsecp256k1/blindsecp256k1.go
blindsecp256k1.goRaw
 1package blindsecp256k1
 2
 3// WARNING: WIP code
 4
 5import (
 6	"crypto/rand"
 7	"math/big"
 8
 9	"github.com/ethereum/go-ethereum/crypto/secp256k1"
10)
11
12type Point struct {
13	X *big.Int
14	Y *big.Int
15}
16
17var (
18	G *Point = &Point{
19		X: secp256k1.S256().Gx,
20		Y: secp256k1.S256().Gy,
21	}
22
23	N *big.Int = secp256k1.S256().N
24)
25
26func (p *Point) Add(q *Point) *Point {
27	x, y := secp256k1.S256().Add(p.X, p.Y, q.X, q.Y)
28	return &Point{
29		X: x,
30		Y: y,
31	}
32}
33
34func (p *Point) Mul(scalar *big.Int) *Point {
35	x, y := secp256k1.S256().ScalarMult(p.X, p.Y, scalar.Bytes())
36	return &Point{
37		X: x,
38		Y: y,
39	}
40}
41
42func newRand() *big.Int {
43	var b [32]byte
44	_, err := rand.Read(b[:])
45	if err != nil {
46		panic(err)
47	}
48	bi := new(big.Int).SetBytes(b[:])
49	return new(big.Int).Mod(bi, N)
50}