aboutsummaryrefslogtreecommitdiff
path: root/avnet/avnet.go
diff options
context:
space:
mode:
Diffstat (limited to 'avnet/avnet.go')
-rw-r--r--avnet/avnet.go123
1 files changed, 0 insertions, 123 deletions
diff --git a/avnet/avnet.go b/avnet/avnet.go
deleted file mode 100644
index e40759f..0000000
--- a/avnet/avnet.go
+++ /dev/null
@@ -1,123 +0,0 @@
-package avnet
-
-import (
- "crypto/rand"
- "crypto/sha256"
- "encoding/base32"
- "encoding/binary"
- "fmt"
- "io"
-
- curve "filippo.io/edwards25519"
-)
-
-var b32 = base32.StdEncoding.WithPadding(base32.NoPadding)
-
-// A Schnorr signature to prove knowledge of x for given g^x and i.
-
-type Proof struct {
- PointV curve.Point
- ScalarR curve.Scalar
- I uint64
-}
-
-type Commitment struct {
- PubX curve.Point
- PubR curve.Point
- ProofX Proof
- ProofR Proof
-}
-
-type Vote struct {
- bit bool
-
- privX curve.Scalar
- privR curve.Scalar
-
- Commitment
-}
-
-func newPriv(s *curve.Scalar, random io.Reader) error {
- var buf [64]byte
- if random == nil {
- random = rand.Reader
- }
- random.Read(buf[:])
- _, e := s.SetUniformBytes(buf[:])
- return e
-}
-
-func setPub(p *curve.Scalar, P *curve.Point) *curve.Point {
- return P.ScalarBaseMult(p)
-}
-
-// Generates the proof, aka Schnorr signature, for given priv and i.
-// Choosing a scalar v randomly, the signature consists of (V, r) with
-//
-// V := g^v, with randomly chosen v
-// r := (v - x*h), with h := H(g, g^v, g^x, i), where i is given by the context.
-//
-// Verification of the signature is by comparing V =?= g^r * g^(x*h)
-func proof(pr *Proof, x *curve.Scalar, i uint64) error {
- pr.I = i
- var v curve.Scalar
- e := newPriv(&v, nil)
- if e != nil {
- return e
- }
- setPub(&v, &pr.PointV)
- gx := curve.Point{}
- setPub(x, &gx)
-
- // Calculate h := H(g, g^v, g^x, i)
- h256 := sha256.New()
- h256.Write(curve.NewGeneratorPoint().Bytes())
- h256.Write(pr.PointV.Bytes())
- h256.Write(gx.Bytes())
- e = binary.Write(h256, binary.BigEndian, i)
- if e != nil {
- return e
- }
- // h := h256.Bytes()
-
- // TODO: calculate r
- return fmt.Errorf("proof not implemented")
-
-}
-
-func newVoteWithRand(bit bool, rand io.Reader) (vote *Vote, e error) {
- vote = &Vote{
- bit: bit,
- }
-
- e = newPriv(&vote.privX, rand)
- if e != nil {
- return nil, e
- }
- e = newPriv(&vote.privR, rand)
- if e != nil {
- return nil, e
- }
-
- setPub(&vote.privX, &vote.Commitment.PubX)
- setPub(&vote.privR, &vote.Commitment.PubR)
-
- return vote, nil
-}
-
-func NewVote(bit bool) (vote *Vote, e error) {
- return newVoteWithRand(bit, nil)
-}
-
-func pubStr(p *curve.Point) string {
- return b32.EncodeToString(p.Bytes())
-}
-
-func (c *Commitment) String() string {
- return fmt.Sprintf(`{"PubX": "%s", "PubR": "%s"}`, pubStr(&c.PubX), pubStr(&c.PubR))
-}
-
-func (c *Commitment) MarshalJSON() ([]byte, error) {
- s := c.String()
- return []byte(s), nil
-} \ No newline at end of file