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}