OSDN Git Service

fix commands
[bytom/shuttle.git] / vendor / github.com / bytom / vendor / golang.org / x / crypto / bn256 / example_test.go
diff --git a/vendor/github.com/bytom/vendor/golang.org/x/crypto/bn256/example_test.go b/vendor/github.com/bytom/vendor/golang.org/x/crypto/bn256/example_test.go
new file mode 100644 (file)
index 0000000..b2d1980
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bn256
+
+import (
+       "crypto/rand"
+)
+
+func ExamplePair() {
+       // This implements the tripartite Diffie-Hellman algorithm from "A One
+       // Round Protocol for Tripartite Diffie-Hellman", A. Joux.
+       // http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf
+
+       // Each of three parties, a, b and c, generate a private value.
+       a, _ := rand.Int(rand.Reader, Order)
+       b, _ := rand.Int(rand.Reader, Order)
+       c, _ := rand.Int(rand.Reader, Order)
+
+       // Then each party calculates g₁ and g₂ times their private value.
+       pa := new(G1).ScalarBaseMult(a)
+       qa := new(G2).ScalarBaseMult(a)
+
+       pb := new(G1).ScalarBaseMult(b)
+       qb := new(G2).ScalarBaseMult(b)
+
+       pc := new(G1).ScalarBaseMult(c)
+       qc := new(G2).ScalarBaseMult(c)
+
+       // Now each party exchanges its public values with the other two and
+       // all parties can calculate the shared key.
+       k1 := Pair(pb, qc)
+       k1.ScalarMult(k1, a)
+
+       k2 := Pair(pc, qa)
+       k2.ScalarMult(k2, b)
+
+       k3 := Pair(pa, qb)
+       k3.ScalarMult(k3, c)
+
+       // k1, k2 and k3 will all be equal.
+}