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)
|
|
}
|