@ -0,0 +1,50 @@ |
|||||
|
package blindsecp256k1 |
||||
|
|
||||
|
// WARNING: WIP code
|
||||
|
|
||||
|
import ( |
||||
|
"crypto/rand" |
||||
|
"math/big" |
||||
|
|
||||
|
"github.com/ethereum/go-ethereum/crypto/secp256k1" |
||||
|
) |
||||
|
|
||||
|
type Point struct { |
||||
|
X *big.Int |
||||
|
Y *big.Int |
||||
|
} |
||||
|
|
||||
|
var ( |
||||
|
G *Point = &Point{ |
||||
|
X: secp256k1.S256().Gx, |
||||
|
Y: secp256k1.S256().Gy, |
||||
|
} |
||||
|
|
||||
|
N *big.Int = secp256k1.S256().N |
||||
|
) |
||||
|
|
||||
|
func (p *Point) Add(q *Point) *Point { |
||||
|
x, y := secp256k1.S256().Add(p.X, p.Y, q.X, q.Y) |
||||
|
return &Point{ |
||||
|
X: x, |
||||
|
Y: y, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func (p *Point) Mul(scalar *big.Int) *Point { |
||||
|
x, y := secp256k1.S256().ScalarMult(p.X, p.Y, scalar.Bytes()) |
||||
|
return &Point{ |
||||
|
X: x, |
||||
|
Y: y, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func newRand() *big.Int { |
||||
|
var b [32]byte |
||||
|
_, err := rand.Read(b[:]) |
||||
|
if err != nil { |
||||
|
panic(err) |
||||
|
} |
||||
|
bi := new(big.Int).SetBytes(b[:]) |
||||
|
return new(big.Int).Mod(bi, N) |
||||
|
} |